Java项目:大学生兼职论坛(java+SSM+JSP+jQuery+Layui+mysql)

源码获取:博客首页 "资源" 里下载!

项目介绍

该项目是一个大学生校园兼职讨论平台,分为前台和后台功能,主要用户有三种角色:分别是商家、学生、管理员。商家可以发布兼职信息,发布后,管理员进入后台确认信息是否有效,并且审核该兼职信息。学生登录平台后,可以查看兼职信息,并且,可以在线和商家聊天,聊天的内容持久化到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 "删除技能";
    }

}

源码获取:博客首页 "资源" 里下载! 

猜你喜欢

转载自blog.csdn.net/m0_66863468/article/details/124691201