源码获取:博客首页 "资源" 里下载!
项目介绍
该项目是一个大学生校园兼职讨论平台,分为前台和后台功能,主要用户有三种角色:分别是商家、学生、管理员。商家可以发布兼职信息,发布后,管理员进入后台确认信息是否有效,并且审核该兼职信息。学生登录平台后,可以查看兼职信息,并且,可以在线和商家聊天,聊天的内容持久化到mysql数据库中。 该网站还有论坛交流的功能,用户可以在论坛发表贴子,并且,可以在帖子下面回复。论坛版块设置有3块广告区,管理员可以在后台对广告进行增删改查。
整体功能包括:论坛交流,帖子发布,个人中心,用户管理,聊天管理,帖子管理。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
6.数据库:MySql 5.7版本;
技术栈
1. 后端:Spring SpringMVC MyBatis
2. 前端:JSP+jQuery+Layui
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 将项目中yml配置文件中的数据库配置改为自己的配置
3. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat,然后运行;
前台系统:http://localhost:8080/moonlighting/
后台系统:http://localhost:8080/moonlighting/manager/login/goServerLogin.action
管理员控制器:
/**
* 管理员控制器
*
*/
@Controller
@RequestMapping("admin")
public class AdminController {
/**
* Spring 容器自动注入 AdminService
*/
@Resource
private AdminService adminService;
@Resource
private EmployerService employerService;
@Resource
private EmployeeService employeeService;
@Resource
private TaskService taskService;
/**
* 跳转到登录页面
*
* @return
*/
@GetMapping("login")
public String login() {
return "admin/login";
}
/**
* 管理员登录
*
* @param admin 管理员,在参数上使用实体类接收,可以自动接受 username,password 属性
* @return
*/
@PostMapping("login")
public String login(Admin admin, RedirectAttributes redirectAttributes, HttpSession session) {
// 调用 AdminService 处理登录的业务逻辑,返回一个 Admin 对象,如果为空登录失败,如果不为空登录成功
Admin currAdmin = adminService.login(admin);
// 如果为空,登录失败,返回一个消息给登录页面提示, RedirectAttributes 是重定向用于把消息存放在域对象中,供页面获取
if (currAdmin == null) {
// 将消息放入重定向的与对象中
redirectAttributes.addFlashAttribute("msg", "用户名或密码错误");
// 重定向到登录页
return "redirect:/admin/login";
}
// 如果 Admin 不为空,登录成功
else {
// 把管理员信息放入 session 中,保持管理员登录状态
session.setAttribute("admin", admin);
// 重定向到管理员首页
return "redirect:/admin/index";
}
}
/**
* 跳转到管理员首页
*
* @param model 用户将数据存放在域对象中的对象
* @return
*/
@GetMapping("index")
public String index(Model model) {
// 总雇主数量
Integer employerCount = employerService.getAllCount();
// 总雇员数量
Integer employeeCount = employeeService.getAllCount();
// 总任务成交数量
Integer allTaskCompleteCount = taskService.getAllCompleteCount();
// 总任务成交金额
Double allTaskCompletePrice = taskService.getAllCompletePrice();
// 最近 10 个注册雇员
List<Employee> employees = employeeService.getRecently();
// 获取最近成交的 10 个任务
List<TaskVo> taskVos = taskService.getRecentlyComplete();
// 将查询出来的数据,放置域对象中,供页面展示
model.addAttribute("employerCount", employerCount);
model.addAttribute("employeeCount", employeeCount);
model.addAttribute("allTaskCompleteCount", allTaskCompleteCount);
model.addAttribute("allTaskCompletePrice", allTaskCompletePrice);
model.addAttribute("employees", employees);
model.addAttribute("taskVos", taskVos);
// 跳转到管理员首页
return "admin/index";
}
/**
* 退出登录
*
* @return
*/
@GetMapping("logout")
public String logout(HttpSession session) {
// 退出登录,只需要删除存放在 session 中的 admin 信息即可
session.removeAttribute("admin");
// 重定向到登录页
return "redirect:/admin/login";
}
}
雇主控制器:
/**
* 雇主控制器
*
*/
@Controller
@RequestMapping("employer")
public class EmployerController {
@Resource
private TaskService taskService;
@Resource
private TaskCategoryService taskCategoryService;
@Resource
private BidService bidService;
@Resource
private EmployerService employerService;
/**
* 雇主退出登录
*
* @param session
* @return
*/
@GetMapping("logout")
public String logout(HttpSession session) {
session.removeAttribute("employer");
return "redirect:/index";
}
/**
* 跳转到个人中心
*/
@GetMapping("dashboard")
public String dashboard(HttpSession session, Model model) {
// 获取雇主登录情况
Employer employer = (Employer) session.getAttribute("employer");
// 查询总发布任务数量
List<TaskVo> tasks = taskService.getByEmployerId(employer.getId());
Integer taskCount = tasks != null ? tasks.size() : 0;
// 查询任务总投标人数
Integer bidCount = taskService.getBidCount(employer.getId());
// 任务提交完成
List<TaskVo> taskVos = taskService.getRecentlySubmit(employer.getId());
// 放置域对象中
model.addAttribute("taskCount", taskCount);
model.addAttribute("bidCount", bidCount);
model.addAttribute("tasks", taskVos);
return "employer/dashboard";
}
/**
* 跳转到任务发布页面
*
* @return
*/
@GetMapping("task/post")
public String postTask(Model model) {
// 查询出所有任务分类信息
List<TaskCategoryVo> taskCategoryVos = taskCategoryService.getAll();
model.addAttribute("taskCategories", taskCategoryVos);
return "employer/post_task";
}
/**
* 雇主发布一个任务
*
* @param session
* @return
*/
@PostMapping("task/post")
public String postTask(HttpSession session, Task task, String skills, String upload, RedirectAttributes redirectAttributes) {
// 获取雇主信息
Employer employer = (Employer) session.getAttribute("employer");
// 添加任务
task.setEmployerId(employer.getId());
taskService.postTask(task, skills, upload);
// 提示消息
redirectAttributes.addFlashAttribute("msg", "发布任务成功,等待管理员审核!");
return "redirect:/employer/task/post";
}
/**
* 跳转到我的任务页面
*
* @param session
* @return
*/
@GetMapping("myTasks")
public String myTask(HttpSession session, Model model) {
// 查询雇主信息
Employer employer = (Employer) session.getAttribute("employer");
// 查询雇主的所有任务
List<TaskVo> taskVos = taskService.getByEmployerId(employer.getId());
model.addAttribute("tasks", taskVos);
return "employer/my_task";
}
/**
* 跳转到雇主修改任务页面
*
* @param taskId 任务 ID
* @return
*/
@GetMapping("task/update")
public String updateTask(Long taskId, Model model) {
// 查询所有任务
List<TaskCategoryVo> categorys = taskCategoryService.getAll();
TaskVo taskVo = taskService.getById(taskId);
model.addAttribute("task", taskVo);
model.addAttribute("taskCategories", categorys);
return "employer/update_task";
}
/**
* 添加技能
*
* @param skillName 技能名称
* @return
*/
@PostMapping("skill/add")
@ResponseBody
public String addSkill(String skillName, Long taskId, HttpSession session) {
if (!"".equals(skillName)) {
employerService.addSkill(taskId, skillName);
}
return "添加技能";
}
/**
* 删除技能
*
* @param skillId
* @return
*/
@PostMapping("skill/delete")
@ResponseBody
public String deleteSkill(Long skillId) {
employerService.deleteSkill(skillId);
return "删除技能";
}
/**
* 更新任务
*
* @param task 任务
* @return
*/
@PostMapping("task/update")
public String updateTask(Task task, String upload, RedirectAttributes redirectAttributes) {
// 修改任务
if (!"".equals(upload)) {
task.setFilename(upload);
}
taskService.updateTask(task);
// 提示消息
redirectAttributes.addFlashAttribute("msg", "发布任务成功,等待管理员审核!");
return "redirect:/employer/myTasks";
}
/**
* 删除任务
*
* @param taskId 任务 ID
* @return
*/
@GetMapping("task/delete")
public String deleteTask(Long taskId) {
taskService.deleteById(taskId);
return "redirect:/employer/myTasks";
}
/**
* 跳转到任务竞标者管理页面
*
* @return
*/
@GetMapping("taskBidders")
public String manageBidders(Long taskId, Model model) {
// 查询任务信息
TaskVo taskVo = taskService.getById(taskId);
// 放置域对象中
model.addAttribute("task", taskVo);
return "employer/manage_bidders";
}
/**
* 中标:接受投标
*
* @param taskId
* @return
*/
@GetMapping("acceptBid")
public String acceptBid(Long taskId, Long employeeId) {
bidService.acceptBid(taskId, employeeId);
return "redirect:/employer/myTasks";
}
/**
* 确定完成任务
*
* @param taskId
* @return
*/
@GetMapping("task/success")
public String successTask(Long taskId) {
taskService.successTask(taskId);
return "redirect:/employer/myTasks";
}
/**
* 跳转到个人信息设置页面
*
* @return
*/
@GetMapping("settings/base")
public String settings(HttpSession session, Model model) {
// 获取 session 中的雇员信息
Employer employer = (Employer) session.getAttribute("employer");
model.addAttribute("employer", employer);
return "employer/settings_base";
}
/**
* 保存个人基本信息
*
* @param employer
* @return
*/
@PostMapping("settings/base/save")
public String saveBase(Employer employer, HttpSession session) {
// 更新个人信息到数据库
Employer currEmployer = employerService.save(employer);
// 更新 session 中的个人信息
session.setAttribute("employer", currEmployer);
return "redirect:/employer/settings/base";
}
/**
* 跳转到修改密码页
*
* @return
*/
@GetMapping("settings/password")
public String updatePass() {
return "employer/settings_pass";
}
/**
* 修改密码
*
* @param password 原来的密码
* @param newPassword 新密码
* @return
*/
@PostMapping("settings/password")
public String updatePass(String password, String newPassword, HttpSession session, RedirectAttributes redirectAttributes) {
// 查询雇员登录信息
Employer employer = (Employer) session.getAttribute("employer");
String msg = employerService.updatePass(employer.getId(), password, newPassword);
redirectAttributes.addFlashAttribute("msg", msg);
return "redirect:/employer/settings/password";
}
}
雇员控制器:
/**
* 雇员控制器
*
*/
@Controller
@RequestMapping("employee")
public class EmployeeController {
@Resource
private EmployeeService employeeService;
@Resource
private TaskService taskService;
@Resource
private HomeBowerService homeBowerService;
@Resource
private EmployeeBookmarkedService employeeBookmarkedService;
@Resource
private BidService bidService;
/**
* 雇员退出登录
*
* @param session
* @return
*/
@GetMapping("logout")
public String logout(HttpSession session) {
session.removeAttribute("employee");
return "redirect:/index";
}
/**
* 跳转到个人中心
*
* @return
*/
@GetMapping("dashboard")
public String dashboard(HttpSession session, Model model) {
// 获取雇员登录信息
Employee employee = (Employee) session.getAttribute("employee");
// 查询雇员任务投标总中标数
Integer bidCount = taskService.getByBidEmployeeId(employee.getId());
// 主页总浏览次数
Integer bowerCount = employeeService.getBowerCount(employee.getId());
// 最新主页浏览情况
List<HomeBowerVo> homeBowerVos = homeBowerService.getByRecentlyEmployeeId(employee.getId());
// 放置域对象中,供页面展示
model.addAttribute("bidCount", bidCount);
model.addAttribute("bowerCount", bowerCount);
model.addAttribute("homeBowers", homeBowerVos);
return "employee/dashboard";
}
/**
* 收藏或取消收藏任务
*
* @param taskId
* @return
*/
@PostMapping("bookmarked")
@ResponseBody
public EmployeeBookmarked bookmarked(Long taskId, HttpSession session) {
// 获取雇员的登录信息
Employee employee = (Employee) session.getAttribute("employee");
// 收藏或取消收藏任务
EmployeeBookmarked employeeBookmarked = employeeBookmarkedService.bookmarked(employee.getId(), taskId);
return employeeBookmarked;
}
/**
* 跳转到我的收藏页面
*
* @return
*/
@GetMapping("bookmarks")
public String bookmarks(HttpSession session, Model model) {
// 获取雇员登录信息
Employee employee = (Employee) session.getAttribute("employee");
// 获取收藏的任务集合
List<EmployeeBookmarkedVo> bookMarks = employeeBookmarkedService.getByEmployeeId(employee.getId());
// 放置到域对象中,方便页面展示
model.addAttribute("bookMarks", bookMarks);
return "employee/bookmarks";
}
/**
* 删除收藏任务
*
* @param taskId 任务 ID
* @return
*/
@PostMapping("bookmarks/remove")
@ResponseBody
public String bookmarks(Long taskId, HttpSession session) {
// 获取雇员登录信息
Employee employee = (Employee) session.getAttribute("employee");
// 删除收藏信息
employeeBookmarkedService.remove(employee.getId(), taskId);
return "删除收藏信息";
}
/**
* 查询已完成任务
*
* @param session
* @return
*/
@GetMapping("/task/completed")
public String completedTask(HttpSession session, Model model) {
// 获取雇员登录信息
Employee employee = (Employee) session.getAttribute("employee");
// 查询出已完成的订单
List<TaskVo> taskVos = taskService.getCompletedByEmployeeId(employee.getId());
// 放置到域对象中
model.addAttribute("tasks", taskVos);
return "employee/completed_task";
}
/**
* 跳转到待完成任务
*
* @param session
* @param model
* @return
*/
@GetMapping("/task/uncompleted")
public String unCompletedTask(HttpSession session, Model model) {
// 获取雇员登录信息
Employee employee = (Employee) session.getAttribute("employee");
// 查询出未完成的订单
List<TaskVo> taskVos = taskService.getUnCompletedByEmployeeId(employee.getId());
// 放置到与对象中
model.addAttribute("tasks", taskVos);
// 跳转到待完成任务列表页
return "employee/uncompleted_task";
}
/**
* 雇员提交任务
*
* @param session
* @return
*/
@PostMapping("/task/submit")
@ResponseBody
public String submitTask(Long taskId, HttpSession session) {
// 获取雇员登录信息
Employee employee = (Employee) session.getAttribute("employee");
// 雇员提交信息
taskService.submitTask(employee.getId(), taskId);
return "任务提交成功 ,等待雇主确认!";
}
/**
* 跳转到我的竞标页面
*
* @param session
* @return
*/
@GetMapping("mybids")
public String myBid(HttpSession session, Model model) {
// 获取雇员登录信息
Employee employee = (Employee) session.getAttribute("employee");
// 查询所有未中标的信息
List<BidVo> bidVos = bidService.getNoBitByEmployeeId(employee.getId());
// 放置域对象中,供页面展示
model.addAttribute("bids", bidVos);
return "employee/my_bids";
}
/**
* 删除竞标信息
*
* @param bid
* @return
*/
@GetMapping("bid/delete")
public String deleteBid(Long bid) {
bidService.deleteById(bid);
return "redirect:/employee/mybids";
}
/**
* 跳转到个人信息设置页面
*
* @return
*/
@GetMapping("settings/base")
public String settings(HttpSession session, Model model) {
// 获取 session 中的雇员信息
Employee employee = (Employee) session.getAttribute("employee");
// 获取视图展示对象,主要是为了展示技能信息,因为 Employee 中只有 技能 ID 没有技能名称
EmployeeVo employeeVo = employeeService.getById(employee.getId());
model.addAttribute("employee", employeeVo);
return "employee/settings_base";
}
/**
* 保存个人基本信息
*
* @param employee
* @return
*/
@PostMapping("settings/base/save")
public String saveBase(Employee employee, HttpSession session) {
// 更新个人信息到数据库
Employee currEmployee = employeeService.save(employee);
// 更新 session 中的个人信息
session.setAttribute("employee", currEmployee);
return "redirect:/employee/settings/base";
}
/**
* 跳转到修改密码页
*
* @return
*/
@GetMapping("settings/password")
public String updatePass() {
return "employee/settings_pass";
}
/**
* 修改密码
*
* @param password 原来的密码
* @param newPassword 新密码
* @return
*/
@PostMapping("settings/password")
public String updatePass(String password, String newPassword, HttpSession session, RedirectAttributes redirectAttributes) {
// 查询雇员登录信息
Employee employee = (Employee) session.getAttribute("employee");
String msg = employeeService.updatePass(employee.getId(), password, newPassword);
redirectAttributes.addFlashAttribute("msg", msg);
return "redirect:/employee/settings/password";
}
/**
* 跳转到雇员简介页面
*
* @return
*/
@GetMapping("profile")
public String profile(Long employeeId, Model model, HttpSession session) {
// 查询雇员信息
EmployeeVo employee = employeeService.getById(employeeId);
// 查询历史完成任务
List<TaskVo> taskVos = taskService.getByEmployeeId(employeeId);
// 查询雇员总完成任务数
Integer completeCount = taskService.getCompletedByEmployeeId(employeeId).size();
// 如果雇主登录了,主页访问次数加 1
Employer employer = (Employer) session.getAttribute("employer");
if (employer != null) {
employeeService.bower(employeeId, employer.getId());
}
// 主页总浏览次数
Integer bowerCount = employeeService.getBowerCount(employee.getId());
model.addAttribute("employee", employee);
model.addAttribute("tasks", taskVos);
model.addAttribute("completeCount", completeCount);
model.addAttribute("bowerCount", bowerCount);
return "employee_profile";
}
/**
* 添加技能
*
* @param skillName 技能名称
* @return
*/
@PostMapping("skill/add")
@ResponseBody
public String addSkill(String skillName, HttpSession session) {
Employee employee = (Employee) session.getAttribute("employee");
if (!"".equals(skillName)) {
employeeService.addSkill(employee.getId(), skillName);
}
return "添加技能";
}
/**
* 删除技能
*
* @param skillId
* @return
*/
@PostMapping("skill/delete")
@ResponseBody
public String deleteSkill(Long skillId) {
employeeService.deleteSkill(skillId);
return "删除技能";
}
}
源码获取:博客首页 "资源" 里下载!