基于SpringBoot的蜗牛兼职网平台
1. 项目概述
根据文件内容分析,本项目是一个名为"蜗牛兼职网"的兼职信息平台,主要功能包括兼职信息发布、职位申请、企业管理和用户管理等模块。
2. 技术栈分析
2.1 后端技术
- 核心框架: Spring Boot 2.2.2.RELEASE
- ORM框架: MyBatis + MyBatis-Plus 2.3
- 数据库: MySQL 5.7.32
- 安全框架: Apache Shiro 1.3.2
- API文档: 未明确提及
- 其他依赖 :
- FastJson 1.2.8
- Hutool-all 4.0.12
- Commons-lang3 3.0
2.2 前端技术
- 前端框架: Vue.js
- UI组件库: Element UI
- 路由管理: Vue Router
- HTTP客户端: Axios
- 其他库 :
- ECharts (数据可视化)
- Vue-json-excel (Excel导出)
- Print-js (打印功能)
开发工具与环境
- 构建工具: Maven
- JDK版本: 1.8
- Web服务器: Tomcat (内嵌)
- 开发工具: 未明确提及
3. 数据库设计
3.1 主要数据表
- 兼职信息表(jianzhixinxi)
- 存储兼职职位信息,包括职位名称、招聘人数、薪资待遇等字段
- 企业表(qiye)
- 存储企业信息,包括企业号、名称、联系方式等字段
- 用户表(yonghu)
- 存储用户信息,包括用户名、密码、联系方式等字段
- 职位申请表(zhiweishenqing)
- 存储职位申请记录,包括职位名称、申请日期、简历等字段
- 留言板表(messages)
- 存储用户留言信息,包括留言内容、回复内容等字段
- 配置表(config)
- 存储系统配置信息,包括轮播图等配置
- Token表(token)
- 存储用户认证信息
3.2 数据库关系
- 企业与兼职信息是一对多关系
- 用户与职位申请是一对多关系
- 兼职信息与职位申请是一对多关系
4. 核心功能模块
4.1. 用户管理模块
- 用户注册与登录
- 个人信息管理
- 职位申请记录查询
4.2. 企业管理模块
- 企业信息管理
- 兼职信息发布与管理
- 职位申请审核
4.3. 兼职信息模块
- 兼职信息列表展示
- 兼职信息详情查看
- 职位搜索与筛选
4.4. 职位申请模块
- 在线职位申请
- 申请状态查询
- 面试通知查看
4.5. 系统管理模块
- 轮播图配置
- 菜单权限管理
- 数据统计分析
5. 部分核心代码展示
5.1. 百度API工具 (BaiduUtil.java)
java
package com.utils;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.json.JSONObject;/**
* 类说明 :
*/public class BaiduUtil {/*** 根据经纬度获得省市区信息* @param lon 纬度* @param lat 经度* @param coordtype 经纬度坐标系* @return*/public static Map<String, String> getCityByLonLat(String key, String lng, String lat) {String location = lat + "," + lng;try {//拼装urlString url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak="+key+"&output=json&coordtype=wgs84ll&location="+location;String result = HttpClientUtils.doGet(url);JSONObject o = new JSONObject(result);Map<String, String> area = new HashMap<>();area.put("province", o.getJSONObject("result").getJSONObject("addressComponent").getString("province"));area.put("city", o.getJSONObject("result").getJSONObject("addressComponent").getString("city"));area.put("district", o.getJSONObject("result").getJSONObject("addressComponent").getString("district"));area.put("street", o.getJSONObject("result").getJSONObject("addressComponent").getString("street"));return area;}catch (Exception e) {e.printStackTrace();}return null;}/*** 获取API访问token* 该token有一定的有效期,需要自行管理,当失效时需重新获取.* @param ak - 百度云官网获取的 API Key* @param sk - 百度云官网获取的 Securet Key* @return assess_token*/public static String getAuth(String ak, String sk) {// 获取token地址String authHost = "https://aip.baidubce.com/oauth/2.0/token?";String getAccessTokenUrl = authHost// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + ak// 3. 官网获取的 Secret Key+ "&client_secret=" + sk;try {URL realUrl = new URL(getAccessTokenUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.err.println(key + "--->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回结果示例*/System.err.println("result:" + result);org.json.JSONObject jsonObject = new org.json.JSONObject(result);String access_token = jsonObject.getString("access_token");return access_token;} catch (Exception e) {System.err.printf("获取token失败!");e.printStackTrace(System.err);}return null;}}
5.2. 兼职信息数据访问层 (JianzhixinxiDao.xml)
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.dao.JianzhixinxiDao"><!-- 可根据自己的需求,是否要使用 --><resultMap type="com.entity.JianzhixinxiEntity" id="jianzhixinxiMap"><result property="zhiweimingcheng" column="zhiweimingcheng"/><result property="tupian" column="tupian"/><result property="zhaopinrenshu" column="zhaopinrenshu"/><result property="xinzidaiyu" column="xinzidaiyu"/><result property="zhiweijianjie" column="zhiweijianjie"/><result property="gongzuoneirong" column="gongzuoneirong"/><result property="faburiqi" column="faburiqi"/><result property="qiyehao" column="qiyehao"/><result property="qiyemingcheng" column="qiyemingcheng"/><result property="lianxiren" column="lianxiren"/><result property="lianxifangshi" column="lianxifangshi"/><result property="dizhi" column="dizhi"/></resultMap><select id="selectListVO"resultType="com.entity.vo.JianzhixinxiVO" >SELECT * FROM jianzhixinxi jianzhixinxi <where> 1=1 ${ew.sqlSegment}</where></select><select id="selectVO"resultType="com.entity.vo.JianzhixinxiVO" >SELECT jianzhixinxi.* FROM jianzhixinxi jianzhixinxi <where> 1=1 ${ew.sqlSegment}</where></select><select id="selectListView"resultType="com.entity.view.JianzhixinxiView" >SELECT jianzhixinxi.* FROM jianzhixinxi jianzhixinxi <where> 1=1 ${ew.sqlSegment}</where></select><select id="selectView"resultType="com.entity.view.JianzhixinxiView" >SELECT * FROM jianzhixinxi jianzhixinxi <where> 1=1 ${ew.sqlSegment}</where></select></mapper>
5.3. 前端路由配置 (router-static.js)
javascript
import Vue from 'vue';
//配置路由
import VueRouter from 'vue-router'
Vue.use(VueRouter);
//1.创建组件
import Index from '@/views/index'
import Home from '@/views/home'
import Login from '@/views/login'
import NotFound from '@/views/404'
import UpdatePassword from '@/views/update-password'
import pay from '@/views/pay'
import register from '@/views/register'
import center from '@/views/center'import qiye from '@/views/modules/qiye/list'import zhiweishenqing from '@/views/modules/zhiweishenqing/list'import yonghu from '@/views/modules/yonghu/list'import jianzhixinxi from '@/views/modules/jianzhixinxi/list'import messages from '@/views/modules/messages/list'import config from '@/views/modules/config/list'//2.配置路由 注意:名字
const routes = [{path: '/index',name: '首页',component: Index,children: [{// 这里不设置值,是把main作为默认页面path: '/',name: '首页',component: Home,meta: {icon:'', title:'center'}}, {path: '/updatePassword',name: '修改密码',component: UpdatePassword,meta: {icon:'', title:'updatePassword'}}, {path: '/pay',name: '支付',component: pay,meta: {icon:'', title:'pay'}}, {path: '/center',name: '个人信息',component: center,meta: {icon:'', title:'center'}},{path: '/qiye',name: '企业',component: qiye},{path: '/zhiweishenqing',name: '职位申请',component: zhiweishenqing},{path: '/yonghu',name: '用户',component: yonghu},{path: '/jianzhixinxi',name: '兼职信息',component: jianzhixinxi},{path: '/messages',name: '留言板管理',component: messages},{path: '/config',name: '轮播图管理',component: config}]},{path: '/login',name: 'login',component: Login,meta: {icon:'', title:'login'}},{path: '/register',name: 'register',component: register,meta: {icon:'', title:'register'}},{path: '/',name: '首页',redirect: '/index'}, /*默认跳转路由*/{path: '*',component: NotFound}
]
//3.实例化VueRouter 注意:名字
const router = new VueRouter({mode: 'hash',/*hash模式改为history*/routes // (缩写)相当于 routes: routes
})export default router;
6. 部分截图
7. 项目总结
7.1 项目主要成果
- 功能实现
- 成功实现了兼职信息发布与管理功能
- 完成了企业与用户的角色分离和权限控制
- 开发了职位申请与审核流程
- 构建了留言反馈机制
- 技术架构
- 采用Spring Boot + Vue前后端分离架构,提高了系统可维护性和扩展性
- 使用MyBatis-Plus简化数据库操作,提高开发效率
- 引入Shiro框架实现权限管理,保障系统安全
- 采用RESTful API设计风格,规范接口开发
- 性能优化
- 数据库索引优化,提高查询效率
- 前端资源压缩与缓存策略,提升页面加载速度
- 分页查询实现,减少数据传输量
7.2 项目亮点与创新点
- 用户体验优化
- 轮播图展示热门兼职信息,提高信息曝光率
- 简洁直观的操作界面,降低用户学习成本
- 安全性保障
- 密码加密存储,保护用户隐私
- Token认证机制,防止未授权访问
- 数据校验与过滤,防止恶意输入
- 可扩展性设计
- 模块化开发,便于功能扩展
- 配置文件与代码分离,便于部署与维护
- 接口标准化,便于第三方系统集成
7.3. 总结
本项目作为一个兼职信息平台,成功实现了企业与求职者之间的信息对接功能,为双方提供了便捷的服务。系统采用现代化的技术架构,保证了系统的稳定性和可扩展性。
在线演示:
后台:http://springbootc8v27.xiaobias.com/springbootc8v27/admin/dist/index.html
前台:http://springbootc8v27.xiaobias.com/springbootc8v27/front/index.html
管理员:abo/abo
用户:用户1/123456,用户2/123456
企业:企业1/123456,企业2/123456
资源:https://fifteen.xiaobias.com/