基于javaweb+mysql的springboot兼职平台系统(java+springboot+ssm+html+maven+ajax+mysql)

基于javaweb+mysql的springboot兼职平台系统(java+springboot+ssm+html+maven+ajax+mysql)

私信源码获取及调试交流

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明


管理员:后台管理

雇主:发布兼职任务、指派兼职人

兼职者:竞标接单

基于javaweb的SpringBoot兼职平台系统(java+springboot+ssm+html+maven+ajax+mysql)

一、项目运行 环境配置:

Jdk1.8 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)

项目技术:

HTML +Springboot+ SpringMVC + MyBatis + ThymeLeaf + JavaScript + JQuery + Ajax + maven等等.

        // 退出登录,只需要删除存放在 session 中的 admin 信息即可
        session.removeAttribute("admin");
        // 重定向到登录页
        return "redirect:/admin/login";
    }
}

/**
 * 文件上传控制器
 *
 * @Classname UploadController
 * @see com.yuu.recruit.controller
 */
@Controller
public class UploadController {

    private static final String ENDPOINT = "oss-cn-beijing.aliyuncs.com";
    private static final String ACCESS_KEY_ID = "LTAI4Fzn8nSjZm7R1dA4G6kp";
    private static final String ACCESS_KEY_SECRET = "5LfEnU4JlGHqViyhgZkzwYcyythV0F";
    private static final String BUCKET_NAME = "ce11211";

    /**
     * 图片上传
     *
     * @param dropzFile
     * @param request
     * @return
     */
    @PostMapping("upload")
    @ResponseBody
    public Map<String, Object> upload(MultipartFile dropzFile, HttpServletRequest request, HttpServletResponse response) {

        Map<String, Object> result = new HashMap<>();
     * @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";
    }
 * @see com.yuu.recruit.controller
 */
@Controller
@RequestMapping("admin/employer")
public class AdminEmployerController {

    @Resource
    private EmployerService employerService;

    /**
     * 跳转到雇主列表页
     *
     * @return
     */
    @GetMapping("")
    public String taskCategory(Model model) {
        // 查询所有雇主
        List<Employer> employers = employerService.getAll();

        // 设置到域对象中,提供给页面展示
        model.addAttribute("employers", employers);
        return "admin/employer";
    }
}

/**
 * 管理员登录拦截器,需要登录了才登录访问首页、列表页....
 *
 * @Classname AdminLoginInceptor
 * @see com.yuu.recruit.interceptor
 */
public class AdminLoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        // 从 session 中获取管理员登录信息
        Admin admin = (Admin) session.getAttribute("admin");
        // 未登录
    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")

        // 查询出未完成的订单
        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
        // 如果雇员登录了,查询出雇员收藏信息
        Employee employee = (Employee) session.getAttribute("employee");
        List<Long> bookMarkedIds = new ArrayList<>();
        if (employee != null) {
            // 查询雇员收藏信息
            Long employeeId = employee.getId();
            // 查询雇员收藏任务ID集合
            bookMarkedIds = employeeBookmarkedService.getIdsByEmployeeId(employeeId);
        }

        // 查询出所有分类信息,因为选择分类的时候,需要分类信息
        List<TaskCategoryVo> taskCategories = taskCategoryService.getAll();

        // 调用 TaskService 进行分页查询,得到分页结果
        PageResult<TaskVo> tasksPage = taskService.page(categoryId, key, page);

        // 将查询结果放置到域对象中,供页面查询
        model.addAttribute("taskCategories", taskCategories);
        model.addAttribute("tasksPage", tasksPage);
        // 将查询条件页放置到域对象中,方便页面读取
        model.addAttribute("categoryId", categoryId);
        model.addAttribute("key", key);
        model.addAttribute("bookMarkedIds", bookMarkedIds);

        return "task_list";
    }

    /**
     * 跳转到任务详情页
     *
     * @param taskId 任务 ID
     * @return
     */
    @GetMapping("page")
    public String page(@RequestParam(required = true) Long taskId, Model model) {
        // 根据任务 ID 查询出任务详情
        TaskVo taskVo = taskService.getById(taskId);
        // 放入域对象中,提供给页面查询
        model.addAttribute("task", taskVo);
        return "task_page";
/**
 * 雇主登录蓝机器
 *
 * @Classname EmployerLoginInterceptor
 * @see com.yuu.recruit.interceptor
 */
public class EmployerLoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        // 从 session 中获取雇员登录信息
        Employer employer = (Employer) session.getAttribute("employer");
        // 未登录
        if (employer == null) {
            // ajax 请求返回 401
            if ("XMLHttpRequest".equalsIgnoreCase(request.getHeader("X-Requested-With"))) {
                response.sendError(401);
            }

            // 普通请求
            else {
                // 跳转到登录页面
                response.sendRedirect("/login");
            }
            return false;
        }
        return true;
    }
}


/**
 * 管理员雇员管理控制器
 *
 * @Classname AdminEmployeeController
 * @see com.yuu.recruit.controller
 */
@Controller
@RequestMapping("admin/employee")
public class AdminEmployeeController {

    @Resource
    private EmployeeService employeeService;

    /**
     * 跳转到雇主列表页
     *
     * @return
     */
    @GetMapping("")
    public String taskCategory(Model model) {
        // 查询所有分类
        List<Employee> employees = employeeService.getAll();

        // 设置到域对象中,提供给页面展示
        model.addAttribute("employees", employees);
        return "admin/employee";
    }
}

/**
 * 管理员雇主管理控制器
 *
     * 修改密码
     *
     * @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";
    }
}

/**
 * 系统首页控制器
 *
 * @Classname IndexController
 * @see com.yuu.recruit.controller
 */
@Controller
public class IndexController {

    @Resource
        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 "删除收藏信息";
    }


        // 如果 accountType != 0 则为雇主注册
        else {
            // 先判断用户名是否注册过
            Employer employer = employerService.getByUsername(username);
            // 如果 employer 不为 null,说明该用户名已经被注册过了,不能注册
            if (employer != null) {
                // 设置到重定向的域对象中,供页面提示
                redirectAttributes.addFlashAttribute("msg", "用户名已被注册");
                // 重定向到注册页
                return "redirect:/register";
            }

            // 用户名不存在,注册
            employerService.register(username, password);

            // 注册成功,重定向到注册页
            return "redirect:/login";
        }
    }

    /**
     * 跳转到登录页
     *
     * @return
     */
    @GetMapping("login")
    public String login() {
        return "login";
    }

    public IndexController() {
    }

    /**
     * 用户登录,包括雇员和雇主,通过传过来的 accountType 判断
     *
     * @return
     */
    @PostMapping("login")
    public String login(Integer accountType, String username, String password, RedirectAttributes redirectAttributes, HttpSession session) {
        // 如果传过来的 accountType 为 0 则为雇员登录
        if (accountType == 0) {
            // 雇员登录
            Employee employee = employeeService.login(username, password);
            // 如果雇员不为 null 登录成功
            if (employee != null) {
                // 将登录信息放入 session 中
                session.setAttribute("employee", employee);
                // 注销雇主登录信息
                session.removeAttribute("employer");
                // 重定向到首页
                return "redirect:/index";
    private static final String ACCESS_KEY_SECRET = "5LfEnU4JlGHqViyhgZkzwYcyythV0F";
    private static final String BUCKET_NAME = "ce11211";

    /**
     * 图片上传
     *
     * @param dropzFile
     * @param request
     * @return
     */
    @PostMapping("upload")
    @ResponseBody
    public Map<String, Object> upload(MultipartFile dropzFile, HttpServletRequest request, HttpServletResponse response) {

        Map<String, Object> result = new HashMap<>();
        String fileName = dropzFile.getOriginalFilename();
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        String newName = UUID.randomUUID() + "." + suffix;
        OSS client = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        try {
            client.putObject(new PutObjectRequest(BUCKET_NAME, newName, new ByteArrayInputStream(dropzFile.getBytes())));
            // 上传文件路径 = http://BUCKET_NAME.ENDPOINT/自定义路径/fileName
            String filePath = "http://" + BUCKET_NAME + "." + ENDPOINT + "/" + newName;
            result.put("filePath", filePath);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            client.shutdown();
        }
        return result;
    }

    /**
     * 文件上传
     *
     * @param uploadFile
     * @param request
     * @return
     */
    @PostMapping("uploadFile")
    @ResponseBody
    public Map<String, Object> uploadFile(MultipartFile upload, HttpServletRequest request, HttpServletResponse response) {


        // 查询出已完成的订单
        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 "任务提交成功 ,等待雇主确认!";
    }

    /**
     * 跳转到我的竞标页面
     *
        if (employer == null) {
            // ajax 请求返回 401
            if ("XMLHttpRequest".equalsIgnoreCase(request.getHeader("X-Requested-With"))) {
                response.sendError(401);
            }

            // 普通请求
            else {
                // 跳转到登录页面
                response.sendRedirect("/login");
            }
            return false;
        }
        return true;
    }
}

/**
 * 系统登录拦截器
 *
 * @Classname LoginInceptor
 * @see com.yuu.recruit.interceptor
 */
public class EmployeeLoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        // 从 session 中获取雇员登录信息
        Employee employee = (Employee) session.getAttribute("employee");
        // 未登录
        if (employee == null) {
            // ajax 请求返回 401
            if ("XMLHttpRequest".equalsIgnoreCase(request.getHeader("X-Requested-With"))) {
                response.sendError(401);
            }

    @GetMapping("delete/{id}")
    public String delete(@PathVariable Long id) {
        taskCategoryService.delete(id);
        return "redirect:/admin/task/category";
    }

}

/**
 * 雇员投标控制器
 *
 * @Classname EmployeeBidController
 * @see com.yuu.recruit.controller
 */
@Controller
public class EmployeeBidController {

    @Resource
    private BidService bidService;

    @Resource
    private TaskService taskService;


/**
 * 管理员管理任务分类控制器
 *
 * @Classname AdminTaskCategoryController
 * @see com.yuu.recruit.controller
 */
@Controller
@RequestMapping("admin/task/category")
public class AdminTaskCategoryController {

    @Resource
    private TaskCategoryService taskCategoryService;

    /**
     * 跳转到任务分类列表页
     *
     * @return
     */
    @GetMapping("")
    public String taskCategory(Model model) {
        // 查询所有分类
        List<TaskCategoryVo> taskCategories = taskCategoryService.getAll();

        // 设置到域对象中,提供给页面展示
        model.addAttribute("taskCategories", taskCategories);
        return "admin/task_category";
    @GetMapping("delete/{id}")
    public String delete(@PathVariable Long id) {
        taskCategoryService.delete(id);
        return "redirect:/admin/task/category";
    }

}

/**
 * 雇员投标控制器
 *
 * @Classname EmployeeBidController
 * @see com.yuu.recruit.controller
 */
@Controller
public class EmployeeBidController {

    @Resource
    private BidService bidService;

    @Resource
    private TaskService taskService;

    /**
     * 雇员投标任务
     *
     * @param taskId 任务 ID
     * @param bidPrice 投标价格

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值