• 【开源】SpringBoot框架开发人事管理系统


    在这里插入图片描述



    一、摘要

    1.1 项目介绍

    基于JAVA+Vue+SpringBoot+MySQL的人事管理系统,包含了职位模块、职称模块、员工请假模块、员工留言模块、员工薪资模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,人事管理系统基于角色的访问控制,给公司管理员、员工使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

    1.2 项目录屏


    二、功能模块

    2.1 管理员功能模块

    1、公告管理:管理员发布公告需要普通员工能够查看到,如果有确认收到更好,没有也没事。
    2、请假审核:管理员需要能看到员工的请假理由,然后进行审核,
    3、打卡管理:管理员可以设置上班打卡的时间,并且界面有普通员工的打卡汇总情况(除管理员的,打卡人数和缺勤人数,迟到人数,请假人数进行页面显示汇总,按天来),最好能导出excel,
    4、反馈管理:管理员可进行查看反馈,反馈内容由员工提交

    2.2 普通员工功能模块

    1、薪资管理:包括工资提现(将个人信息里那个提现搬到这来),薪资数额
    2、公告:查看管理员发布的公告
    3、上班打卡:超过时间就不能打卡(迟到)
    4、请假:需要描述能描述请假理由,然后提交请假,由管理员审核,
    系统反馈:能提交系统问题,由员工自行描述,管理员接收

    2.3 答辩文案

    基于 SpringBoot 的人事管理系统使用对象有两个,分别是公司管理员和员工。

    公司管理员负责职位的维护、职称的维护、部门组织架构的维护、管理员的维护、员工的维护、工资的维护发放审核、薪资标准的维护、员工请假审核、公告的维护、留言板的维护。

    员工可以进行薪资查询和申请提现、查询公司公告、员工请假、留言板留言。

    1. 承载中小型公司的薪资维护、审核、发放功能。也就是公司管理员可以对所辖范围内的薪资进行增删改查操作。
      薪资是中小型企业必备的元素,所以需要这个模块。

    2. 承载中小型公司的请假、请假审核功能。也就是公司管理员可以对员工提交的请假进行审批,员工可以发起审批。
      请假也是中小型企业必备的元素,所以需要这个模块。

    3. 承载中小型公司的新闻时政公告功能。
      一家公司要能够得到员工的信赖,新闻时政肯定是必不可少的
      所以需要这个模块,由公司管理员维护,开放给员工查询。

    4. 承载中小型公司的留言板功能。
      公司OA系统的标准化流程,肯定会有需要改进的点,或者现有功能不能被员工理解学会
      所以需要设计留言板功能,实现员工和公司的信息交互功能。

    5. 承载中小型公司的职位、职称、部门组织架构维护功能。
      职位和职称也是中小型企业必备的元素,所以需要这个模块。

    6. 承载可能需要的其他功能。
      在设计这个系统的时候,可能会用到其他功能,比如日志、文件管理
      我会把这些功能封装成独立的模块,利用Vue的组件化优势提供给别的模块调用

    这个系统前端采用了国内流行的Vue技术,采用View UI作为组件库;后端采用SpringBoot整合MybatisPlus;
    采用maven构建项目,采用Mysql数据库,使用Redis缓存加密的用户临时数据。


    三、系统展示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    四、核心代码

    4.1 查询职称

    @RequestMapping(value = "/getByPage", method = RequestMethod.GET)
    @ApiOperation(value = "查询职称")
    public Result<IPage<JobTitle>> getByPage(@ModelAttribute JobTitle jobTitle,@ModelAttribute PageVo page) {
        QueryWrapper<JobTitle> qw = new QueryWrapper<>();
        if(jobTitle.getTitle() != null && !MyNullUtils.isNull(jobTitle.getTitle())) {
            qw.like("title",jobTitle.getTitle());
        }
        if(jobTitle.getCode() != null && !MyNullUtils.isNull(jobTitle.getCode())) {
            qw.like("code",jobTitle.getCode());
        }
        IPage<JobTitle> data = iJobTitleService.page(PageUtil.initMpPage(page),qw);
        return new ResultUtil<IPage<JobTitle>>().setData(data);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    4.2 新增留言回复

    @RequestMapping(value = "/insertReply", method = RequestMethod.POST)
    @ApiOperation(value = "新增留言回复")
    public Result<MessageBoard> insertReply(@RequestParam String content, @RequestParam String replyId){
        User currUser = securityUtil.getCurrUser();
        MessageBoard mb = iMessageBoardService.getById(replyId);
        if(mb == null) {
            return new ResultUtil<MessageBoard>().setErrorMsg("回复留言已被删除");
        }
        MessageBoard messageBoard = new MessageBoard();
        messageBoard.setUserId(currUser.getId());
        messageBoard.setUserName(currUser.getNickname());
        messageBoard.setDate(getZwzNowTime());
        messageBoard.setReplyId(replyId);
        messageBoard.setContent(content);
        if(iMessageBoardService.saveOrUpdate(messageBoard)){
            return new ResultUtil<MessageBoard>().setData(messageBoard);
        }
        return new ResultUtil<MessageBoard>().setErrorMsg("操作失败");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.3 工资申请

    @RequestMapping(value = "/apply", method = RequestMethod.POST)
    @ApiOperation(value = "申请")
    public Result<Object> apply(){
        Date date = new Date();
        int year = date.getYear() + 1900;
        int month = date.getMonth() + 1;
        String nowMouth = year + "-" + (month < 10 ? "0" + month : month) + "-";
        User currUser = securityUtil.getCurrUser();
        QueryWrapper<SalaryWithdrawal> qw = new QueryWrapper<>();
        qw.eq("user_id",currUser.getId());
        qw.eq("mouth",nowMouth);
        List<SalaryWithdrawal> salaryWithdrawalList = iSalaryWithdrawalService.list(qw);
        if(salaryWithdrawalList.size() > 0) {
            return ResultUtil.error("您已申请,无需重复申请");
        }
        SalaryWithdrawal salaryWithdrawal = new SalaryWithdrawal();
        salaryWithdrawal.setSalaryTime(getZwzNowTime());
        salaryWithdrawal.setMouth(nowMouth);
        salaryWithdrawal.setAuditName("");
        salaryWithdrawal.setUserName(currUser.getNickname());
        salaryWithdrawal.setUserId(currUser.getId());
        salaryWithdrawal.setStatus(0);
        salaryWithdrawal.setAuditTime("-");
        salaryWithdrawal.setMoneyData(currUser.getMoneyData());
        iSalaryWithdrawalService.saveOrUpdate(salaryWithdrawal);
        return ResultUtil.success("OK");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    4.4 工资审核

    @RequestMapping(value = "/audit", method = RequestMethod.POST)
    @ApiOperation(value = "审核")
    public Result<Object> audit(@RequestParam String id){
        User currUser = securityUtil.getCurrUser();
        SalaryWithdrawal sw = iSalaryWithdrawalService.getById(id);
        if(sw == null) {
            return ResultUtil.error("审核申请不存在");
        }
        if(sw.getStatus() > 0) {
            return ResultUtil.error("审核单已被审核,无需重复审核");
        }
        sw.setStatus(1);
        sw.setAuditTime(getZwzNowTime());
        sw.setAuditName(currUser.getNickname());
        iSalaryWithdrawalService.saveOrUpdate(sw);
        return ResultUtil.success("OK");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4.5 员工请假

    @RequestMapping(value = "/insert", method = RequestMethod.POST)
    @ApiOperation(value = "编辑或更新数据")
    public Result<UserLeave> insert(@RequestParam String date,@RequestParam String reason){
        User currUser = securityUtil.getCurrUser();
        UserLeave userLeave = new UserLeave();
        userLeave.setUserId(currUser.getId());
        userLeave.setUserName(currUser.getNickname());
        userLeave.setDateTime(getZwzNowTime());
        userLeave.setStatus("未审核");
        userLeave.setLeaveDate(date);
        userLeave.setLeaveReason(reason);
        userLeave.setAuditUser("");
        if(iUserLeaveService.saveOrUpdate(userLeave)){
            return new ResultUtil<UserLeave>().setData(userLeave);
        }
        return new ResultUtil<UserLeave>().setErrorMsg("操作失败");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    五、免责说明

    • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
    • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
    • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

    下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

    1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
    2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
    3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
    4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

    在这里插入图片描述

  • 相关阅读:
    MasaFramework -- 更优雅的获取配置信息
    GIC/ITS代码分析(11)LPI中断虚拟化之概述
    Jenkins+Gitlab自动部署Vue项目到远程服务器
    IP地址查询在社交行业中的崭新应用
    C语言趣味代码(三)
    【Vim】单行与多行缩进
    机器学习实战读书笔记——机器学习概览
    leetcode 692. Top K Frequent Words(频率最高的K个单词)
    SpringBoot+TKmybatis+mysql实现简单后台管理demo
    电脑怎么录音,亲身测评,让你事半功倍!
  • 原文地址:https://blog.csdn.net/askf01/article/details/136687188