基于springboot和mysql实现的人事管理系统

到山东找蓝翔

发布日期: 2021-10-03 13:34:24 浏览量: 170
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、系统介绍

1.1项目简介

本系统为人事管理系统,系统分为七大模块:绩效考核,招聘管理,档案管理,工资管理,考勤管理,培训管理,系统管理。

可满足小企业日常办公。本系统最大特色是有强大和灵活的权限控制功能,所有菜单,按钮功能均可由管理通过配置来控制。

系统默认有四个角色:管理员,财务专员,人事专员,普通用户

  • 管理员(admin/admin):可以操作所有功能

  • 财务专员(cw/cw):可查看工资管理,考勤管理,培训管理等内容

  • 人事专员(rs/rs):可查看和管理招聘管理,档案管理,培训管理等内容

  • 普通用户(wdc/wdc):只可查看工资,打卡考勤,参加培训等

1.2 背景分析

今年以来,因为疫情导致很多企业发展遇到了不少难题,尤其是中小企业,常常会出现流程不完善,管理方式单一,缺少有效的人才培养方式,工作效率难以提高的问题,本来今年生意就不好做了,如果再遇到这些问题,很有可能就造成企业入不敷出,难以经营延续。那么怎么才能解决上述问题呢?

其实,你离解决问题可能就差一款合适你企业的人事管理系统。

人事管理系统是什么?

人事管理系统,简单的讲就是结合企业先进的人力资源实践或理念、人力资源资源信息化建设的建设,通过信息技术手段为企业提供人力资源解决方案。能直接把HR从繁琐的基础工作中解放出来,还可以提高人事管理的精准率,使HR更加轻松快捷地完成工资管理的任务。

人事管理系统有什么优势?

  • 人事管理系统最明显的优势就是提升工作效率。系统可以根据企业的需求自动生成管理方案,做到人力资源自动化管理,大大提高工作效率

  • 企业可以根据系统随时掌握企业人员信息,及时合理的分配人才

  • 系统可以提供实时监控,明确收入产出情况,提高市场适应能力

  • 系统的执行可以支撑企业的战略决策,为企业发展提供数据支撑

  • 借助系统可以明确企业结构,更好的掌控成本

1.3 软件架构

  • 基础环境

    • JDK:1.8
    • MySQL:5.7
    • Maven3.0
  • 使用框架

    • 核心框架:Spring Boot 2.1.8.RELEASE
    • 视图框架:Spring MVC 5.0
    • ORM框架:MyBatisPlus 3.1.2
    • 数据库连接池:Druid 1.1
    • 安全框架:Apache Shiro 1.4
    • 日志:SLF4J 1.7、Log4j
    • 前端框架:Layui,ztree,jquery,bootstrap

1.4 功能模块

总体结构设计

用例图

系统管理员实现的功能

人事管理员

系统功能介绍

  • 用户管理的功能:添加用户,用户可以为管理员或者普通用户;查询用户,可以查询所有用户或根据用户名和用户状态进行模糊查询,删除用户,修改用户

  • 部门管理的功能:添加部门,查询部门,可以查询所有部门或根据部门名称进行模糊查询,删除部门,修改部门 职位管理的功能包括:添加职位,查询职位,可以查询所有职位或根据职位名称进行模糊查询,删除职位,修改职位

  • 员工管理的功能:添加员工,查询员工,可以查询所有员工或根据员工姓名,身份证号,手机号,性别,职位,部门进行模查询,删除员工,修改员工

  • 公告管理的功能:添加公告,查询公告,可以查询所有公告或根据公告名称,公告内容进行模糊查询,删除公告,修改公告

1.5 开发思路

在开发的过程中最主要的部分就是对ssm的整体实现,主要分为以下四个模块:

  • dao层,实现数据库的访问

    • mapper.xml文件,在其中写sql语句,对应数据库中的操作,定义需要实现的功能,如insert、select、update
    • mapper.java接口,将mapper.xml中的操作按照id映射成java函数
  • service层,业务层

    • 写service.java接口,为控制层提供服务,并写serviceImpl.java在其中自动装配mapper,完成相应功能并返回给控制层
  • controller,实现具体的事务控制

    • 写controller.java,连接页面请求和服务层,获取页面请求的参数,通过service的自动装配,映射不同的URL到相应到不同的地方处理函数,并获取参数,对参数处理返回给服务层

二.数据库设计

2.1 系统数据流图

2.2 E-R图

三、项目开发

  1. /**
  2. * 所有申请列表
  3. */
  4. @RequestMapping("/list")
  5. @RequiresPermissions("person:apply:list")
  6. public R list(@RequestParam Map<String, Object> params) {
  7. if(getRoleId() == 5){
  8. //不是管理员只能查看自己工资记录
  9. params.put("applyUserId", getUserId());
  10. }
  11. PageUtils page = convertApplyService.queryPage(params);
  12. return R.ok().put("page", page);
  13. }
  14. /**
  15. * 申请信息
  16. */
  17. @RequestMapping("/info/{id}")
  18. @RequiresPermissions("person:apply:info")
  19. @ResponseBody
  20. public R info(@PathVariable("id") Long id) {
  21. ConvertApplyEntity apply = convertApplyService.getById(id);
  22. return R.ok().put("apply", apply);
  23. }
  24. /**
  25. * 保存申请
  26. */
  27. @SysLog("保存申请")
  28. @RequestMapping("/save")
  29. @RequiresPermissions("person:apply:save")
  30. public R save(@RequestBody ConvertApplyEntity apply) {
  31. ValidatorUtils.validateEntity(apply);
  32. apply.setApplyUserId(getUserId());
  33. apply.setCreateTime(DateUtils.currentTimeFormat());
  34. convertApplyService.save(apply);
  35. return R.ok();
  36. }
  37. /**
  38. * 修改申请
  39. */
  40. @SysLog("修改申请")
  41. @RequestMapping("/update")
  42. @RequiresPermissions("person:apply:update")
  43. public R update(@RequestBody ConvertApplyEntity apply) {
  44. ValidatorUtils.validateEntity(apply);
  45. if (!apply.getStatus() .equals(ApplyStatusEnum.WAIT.getCode())) {
  46. return R.error("已审批不可修改");
  47. }
  48. apply.setUpdateTime(DateUtils.currentTimeFormat());
  49. convertApplyService.update(apply);
  50. return R.ok();
  51. }
  52. /**
  53. * 审核
  54. */
  55. @SysLog("审核")
  56. @RequestMapping("/approval")
  57. @RequiresPermissions("person:apply:approval")
  58. public R approval(@RequestBody ConvertApplyEntity apply) {
  59. ValidatorUtils.validateEntity(apply);
  60. if(apply.getApprovalUserId()==getUserId()){
  61. return R.error("自己不能审批自己的申请");
  62. }
  63. if(ApprovalStatusEnum.ADOPT.getCode()== apply.getApprovalResult()){
  64. apply.setStatus(ApplyStatusEnum.ADOPT.getCode());
  65. }else{
  66. apply.setStatus(ApplyStatusEnum.FAIL.getCode());
  67. }
  68. apply.setApprovalUserId(getUserId());
  69. apply.setUpdateTime(DateUtils.currentTimeFormat());
  70. convertApplyService.update(apply);
  71. return R.ok();
  72. }
  73. /**
  74. * 删除申请
  75. */
  76. @SysLog("删除申请")
  77. @RequestMapping("/delete")
  78. @RequiresPermissions("person:apply:delete")
  79. public R delete(@RequestBody Long[] ids) {
  80. convertApplyService.deleteBatch(ids);
  81. return R.ok();
  82. }
  1. /**
  2. * 招聘要求
  3. *
  4. * @author
  5. */
  6. @RestController
  7. @RequestMapping("/person/need")
  8. public class RecruitNeedController extends AbstractController {
  9. @Autowired
  10. private RecruitNeedService recruitNeedService;
  11. /**
  12. * 所有招聘要求列表
  13. */
  14. @RequestMapping("/list")
  15. @RequiresPermissions("person:need:list")
  16. public R list(@RequestParam Map<String, Object> params){
  17. PageUtils page = recruitNeedService.queryPage(params);
  18. return R.ok().put("page", page);
  19. }
  20. /**
  21. * 招聘要求信息
  22. */
  23. @RequestMapping("/info/{id}")
  24. @RequiresPermissions("person:need:info")
  25. @ResponseBody
  26. public R info(@PathVariable("id") Long id){
  27. RecruitNeedEntity need = recruitNeedService.getById(id);
  28. return R.ok().put("need", need);
  29. }
  30. /**
  31. * 保存招聘要求
  32. */
  33. @SysLog("保存招聘要求")
  34. @RequestMapping("/save")
  35. @RequiresPermissions("person:need:save")
  36. public R save(@RequestBody RecruitNeedEntity need){
  37. ValidatorUtils.validateEntity(need);
  38. need.setCreateTime(DateUtils.currentTimeFormat() );
  39. recruitNeedService.save(need);
  40. return R.ok();
  41. }
  42. /**
  43. * 修改招聘要求
  44. */
  45. @SysLog("修改招聘要求")
  46. @RequestMapping("/update")
  47. @RequiresPermissions("person:need:update")
  48. public R update(@RequestBody RecruitNeedEntity need){
  49. ValidatorUtils.validateEntity(need);
  50. recruitNeedService.update(need);
  51. return R.ok();
  52. }
  53. /**
  54. * 删除招聘要求
  55. */
  56. @SysLog("删除招聘要求")
  57. @RequestMapping("/delete")
  58. @RequiresPermissions("person:need:delete")
  59. public R delete(@RequestBody Long[] ids){
  60. recruitNeedService.deleteBatch(ids);
  61. return R.ok();
  62. }

四、项目部署

  • 导入mysql脚本,数据库名称:person_system

  • 修改数据库配置:

  • 启动java工程(执行person-admin工程com.person.AdminApplication.class中main方法)

五、项目实现

管理员

财务专员

人事专员

普通用户

5.1 登录

登录

首页

修改密码

5.2 绩效考核

绩效考核目前只做了简单的考核设置,后期可扩展更多功能与工资和培训挂钩。后期会从以下几个方面扩展:

  • 季度考核不达标需要参加培训

  • 考核不达标影响绩效

  • 在公司做培训增加绩效

考核设置-列表

考核设置-增加

5.3 招聘管理

招聘管理子模块:招聘需求和面试计划。招聘需求是为各个部门需要人才时到招聘需求申请,申请成功后,由人事部门和招聘部门协商面试时间添加面试计划,并跟踪面试结果。

5.3.1 招聘需求

可由人事部门或有招聘需求部门填写招聘需求。

招聘需求-列表

招聘需求-增加

5.3.2 面试计划

人事专员看到各个部门的招聘需求后,联系候选人并和用人部门协商面试时间,并将面试计划提交,等面试结束再将面试结果同步到系统。招聘结束后结束流程。

面试计划-列表

面试计划-增加

5.4 档案管理

档案管理子模块:员工档案和合同管理。

5.4.1 员工档案

员工档案是“系统管理-账号管理”的延伸,即“系统管理-账号管理”是系统的登录账号信息,而员工档案是对账号信息的补充。必须由管理员先创建好账户,才能添加员工档案。

员工档案-列表

员工档案-增加

5.4.2 合同档案

公司商业合同管理。

合同管理-列表

合同管理-增加

5.5 工资管理

工资管理目前有工资查询子模块。普通用户可查看自己工资记录,财务专员可增加员工工资记录。

工资查询-列表

工资查询-增加

5.6 考勤管理

考勤管理目前有出勤记录子模块。普通用户可每日打卡,查看出勤记录,后期可扩展与工资计算挂钩。

出勤记录-列表

出勤记录-增加

5.7 培训管理

培训管理子模块:个人计划,工作日报,转正申请和工作日报。

5.7.1 个人计划

员工可写当日工作计划。

个人计划-列表

个人计划-增加

5.7.2 工作日报

员工可写当日工作日报。

工作日报-列表

工作日报-增加

5.7.3 转正申请

员工到了转正日期可申请转正由其领导进行审批。后期可与工资和绩效挂钩进行扩展,扩展内容如下:

  • 转正前工资按合同80%计算,转正后100%

  • 转正后绩效不达标则绩效奖金按百分比算

转正申请-列表

转正申请-增加

5.7.4 培训计划

可添加新员工培训计划,新技能培训计划,新业务培训计划,后期可扩展会议室管理功能

培训计划-列表

培训计划-增加

5.8 系统管理

系统管理子模块:员工管理,部门管理,角色管理,菜单管理和字典管理。

5.8.1 账号管理

可为新员工增加系统登录账号,为离职员工删除账号。后期可扩展员工忘记密码后,重置密码功能,通常只有人事专员和管理员可用。

员工管理-列表

员工管理-增加

5.8.2 部门管理

可增加新部门或新成立子公司,通常只有管理员和高级管理领导可用。

部门管理-列表

部门管理-增加

5.8.3 角色管理

可新增角色,并为角色赋予相应权限,如招聘专员只能操作系统管理模块以外的其他模块功能,从财务专员只能进行工资记录添加等,通常只有管理员和高级管理领导可用。

角色管理-列表

角色管理-增加

5.8.4 菜单管理

管理系统左侧的菜单树,只有管理员可用。

菜单管理-列表

菜单管理-增加

5.8.5 字典管理

管理系统常用字典值,只有管理员可用。

字典管理-列表

字典管理-增加

六、总结

6.1 报错整理

  • tomcat端口号占用,一般是eclipse非正常关闭,或者电脑强制性关机等导致的,需要避免;如果产生,在终端查询被占用的端口号,并终止其进程即可

  • 学会利用eclipse的快捷键来生成无参、有参函数和set、get方法;同时学会配置个人偏好设置,便于eclipse预测要输入的内容。

  • 需要补充多表链接查询的知识,便于项目的后续维护和更新。

  • 要学习html5和css样式的知识,对网页页面的样式进行优化。

  • 在遇到错误无法解决的时候,一定要有耐心,即使可能一个小小的错误要花3-4小时来解决,也不要随随便便放弃,要一点点从根源查起,尽可能自己去解决问题。

  • 团队成员之间要互相协作、互相帮助,团队中的每个成员应该考虑团队的整体进度,积极去完成自己的部分;当然在完成自己的模块之后也应该给遇到困难的成员提供一定的帮助,加快整体的完成进度。

  • 页面报错

    • 404 — 一般都是路径错误,或者配置文件错误等等
    • 500 — 可能是多种错误导致的,可能是拼写错误,数据库sql语句错误等

6.2 项目总结

在此次项目开发过程中我们学到了很多,一个项目的完成并不是那么的容易。要制度遇到问题时该如何去分析问题、解决问题。团队的分工与合作是提高效率的关键。

其次是对设计的先后顺序有了一定的认识,对于做软件设计来说,首要的就是要搞清用户需求,也就是别人要干什么,然后再决定怎么干!一般情况下这时候要知道,谁来用这个系统,什么时候用这个系统,什么地方用这个系统,为什么用这个系统,用这个系统干什么,最后再搞清楚怎么做这个系统.在做需求分析的时候首先得跟客户沟通得出大致的需求,形成一个资料,然后再与客户探讨看看自己理解的业务有没有问题.我认为在与客户沟通之前最好对这个系统的概况有个大体的了解,这样也有利于交流,但不管怎么做与客户交流都是最重要的,如果一开始与客户的交流出了问题,以后作的过程中业务就会出问题,轻则反反复复的改,重则系统失败.需求设计以后就是概要设计,也就是考虑具体怎么做的时候.这时候做的方法有可能不同,但有一点应该是一样的,就是系统细化成各个小的功能块,同时决定数据库,之后就可以对每个功能块做详细设计了.概要设计时也要紧紧围绕业务来做,也要多交流,多与客户交流,同时项目组里也要多讨论!在这个时候要考虑共通化的问题,比如说画面的样式,数据库字段的命名什么的.还有就是操作是否方便,这个必须得好好考虑.一个系统用人工方式一般也能做,用信息管理系统就是为了方便,结果你设计的东西还没人家手工方式方便呢,那还有谁回用啊!另外,安全性什么的也要考虑一下尤其是个人的信息!

上传的附件 cloud_download 设计文档.docx ( 1.27mb, 3次下载 ) cloud_download person_system-master.zip ( 143.65kb, 5次下载 )

发送私信

会冒泡的可乐

153
文章数
12
评论数
最近文章
eject