企业员工管理系统(Springboot+Redis+Vue+uniapp)

一、前言

  这个是实训时的一个企业员工管理系统,整体效果看起来还不错,文档和源代码及数据库有需要的可以在文末添加我的联系方式或者直接私信我哈(有偿),可直接跳转到运行效果那先看看。

二、需求规格说明书

2.1产品前景

  企业员工管理系统旨在帮助企业实现员工信息的高效管理。通过本系统,管理员可以快速完成员工档案录入、查询、更新、导出等操作;同时提供权限管理功能,以满足不同部门和角色的安全访问需求。该系统未来还可扩展为支持员工培训记录、绩效评估、考勤管理等功能模块。

2.2产品功能

  • 1、员工管理:支持员工档案的新增、查询、修改、删除。
  • 2、权限管理:基于角色的权限控制,管理员可以分配权限。
  • 3、考勤管理:员工工作日需打卡签到、签退。
  • 4、请假管理:管理员可审批员工请假申请。
  • 5、登录认证:基于账号密码的登录认证,支持验证码校验。
  • 6、数据统计:生成企业员工统计报表,如部门员工人数分布。
  • 7、日志记录:记录所有用户的操作行为,支持管理员查询。

2.3功能需求

①系统管理员:负责系统管理(用户新增、查询、删除、修改、密码重置、禁用、启用,分配角色和权限)等。
②员工:负责考勤打卡和请假申请(信息查询、修改,请假申请、查看、取消,打卡签到/签退)
③部门管理员:负责本部门员工的管理(查看本部门员工出勤记录和请假记录,审批本部门请假申请,查询本部门出勤统计、导出部门考勤数据)
④HR(人力资源管理员):负责公司层面的员工管理(全体员工信息查看、添加、删除、修改,查询员工出勤和请假记录,审批高级别请假申请(如特殊情况需 HR 批准的申请),生成公司整体出勤和请假报表,统计员工出勤率、请假率,导出员工考勤和请假统计数据)

在这里插入图片描述

注:这个用例图可能画的有点问题,后面也不想改了就这样了,然后需求规格说明书上的需求可能和实际需求也不完全一样,以实际效果为主。

三、系统设计报告

3.1系统功能层次图

在这里插入图片描述

3.2用户管理

3.2.1 用户登录

主执行者:系统所有用户
功能描述:登录后台管理
基本功能:在用户登录页面输入用户名和密码单击登录按钮进行登录,如果用户名和密码错误,系统会进行提示,登录成功后可跳转到系统前台。

3.3员工管理

3.3.1 员工信息显示

主执行者:系统所有用户
功能描述:查看并管理员工的基本信息。
基本功能:在员工信息页面,系统展示员工的基本资料,包括姓名、工号、部门、职位、入职时间等。管理员可以通过筛选条件(如姓名、部门、职位等)快速查找特定员工的信息。

3.3.2 员工入职处理

主执行者:HR
功能描述:处理新员工入职信息,完成员工档案的建立。
基本功能:HR登录系统后,进入员工入职管理页面,填写新员工的基本信息(如姓名、性别、工号、部门、职位、联系方式、入职日期等),并提交保存。系统会自动生成员工档案,并分配对应的权限和岗位信息。若填写的信息不完整或格式错误,系统将提示用户进行修改。

3.3.3 员工离职处理

主执行者:HR
功能描述:处理员工离职信息,完成员工档案的更新与归档。
基本功能:HR登录系统后,进入员工离职管理页面,选择需离职的员工,填写相关离职信息(如离职日期、离职原因等),并提交保存。系统会自动更新员工状态为“离职”,移除相关权限,并将员工档案归档。若操作中信息填写不完整或格式错误,系统将提示用户进行修改。

3.4部门管理

3.4.1 部门信息显示

主执行者:系统管理员、部门管理员、HR
功能描述:查看并管理部门的基本信息。
基本功能:在部门信息页面,系统展示部门的基本资料,包括部门名称、部门编号、部门负责人等信息。管理员可以通过筛选条件(如部门名称、部门编号等)快速查找特定部门的信息,并对部门信息进行查看或更新。

3.4.2 部门新增

主执行者:系统管理员
功能描述:创建新的部门信息,完善组织架构。
基本功能:系统管理员登录系统后,进入部门管理页面,选择新增部门功能,填写新部门的基本信息(如部门名称、部门编号、部门负责人),并提交保存。系统会自动创建新的部门记录,更新组织架构。如果填写的信息不完整或格式错误,系统将提示用户修改后再提交。

3.4.3 部门删除

主执行者:系统管理员
功能描述:删除部门信息,维护组织架构的合理性。
基本功能:系统管理员登录系统后,进入部门管理页面,选择需删除的部门,确认操作后提交。系统会验证该部门是否有未处理的关联信息(如在职员工或未完成的任务等)。如果有未处理的关联信息,系统将提示管理员完成相关处理后再删除;若无关联信息,系统会成功删除该部门并更新组织架构。

3.5岗位管理

3.5.1 岗位信息显示

主执行者:系统管理员
功能描述:查看并管理岗位的基本信息。
基本功能:在岗位信息页面,系统展示岗位的基本资料,包括岗位名称、岗位编号、岗位职责描述等信息。管理员可以通过筛选条件(如岗位名称、岗位编号等)快速查找特定岗位的信息,并对岗位信息进行查看或更新。

3.5.2 岗位新增

主执行者:系统管理员
功能描述:创建新的岗位信息,完善岗位体系。
基本功能:系统管理员登录系统后,进入岗位管理页面,选择新增岗位功能,填写新岗位的基本信息(如岗位名称、岗位编号、岗位职责、岗位等级等),并提交保存。系统会自动创建新的岗位记录并更新岗位体系。如果填写的信息不完整或格式错误,系统将提示用户修改后再提交。

3.5.3 岗位删除

主执行者:系统管理员
功能描述:删除部门信息,维护组织架构的合理性。
基本功能:系统管理员登录系统后,进入部门管理页面,选择需删除的部门,确认操作后提交。系统会验证该部门是否有未处理的关联信息(如在职员工或未完成的任务等)。如果有未处理的关联信息,系统将提示管理员完成相关处理后再删除;若无关联信息,系统会成功删除该部门并更新组织架构。

3.6请假管理

3.6.1 请假信息显示

主执行者:部门负责人、HR
功能描述:查看并管理员工的请假信息。
基本功能:在请假信息页面,系统展示员工的请假记录,包括员工姓名、请假日期、请假类型、请假时长、请假原因等信息。管理员可以通过筛选条件(如员工姓名、请假类型、请假日期等)快速查找特定员工的请假记录,并对记录进行查看或更新。

3.6.2 请假审批

主执行者:部门负责人、HR
功能描述:对员工提交的请假申请进行审核和处理。
基本功能:审批人员登录系统后,进入请假审批页面,查看员工提交的请假申请,包括员工姓名、请假类型、请假时长、请假原因等详细信息。审批人员可选择批准或驳回操作,并填写审批意见。系统会根据审批结果更新请假记录状态为“已批准”或“已驳回”,并通知相关员工。如果未填写审批意见或操作错误,系统将提示用户进行修改后再提交。

3.6.3 销假

主执行者:员工本人、HR、部门负责人
功能描述:处理员工请假结束后的销假操作,更新考勤记录
基本功能:员工、部门负责人、HR登录系统后,进入销假管理页面,选择需销假的请假记录,填写实际返回工作时间等相关信息,并提交保存。系统会验证销假信息的完整性并更新请假记录状态为“已销假”,同时同步更新考勤记录。若填写的信息不完整或操作错误,系统将提示用户修改后再提交。

注:系统设计报告和实际系统可能也有偏差,总之,还是以实际系统为准。

四、功能模块大全

4.1控制层代码

4.1.1考勤管理

package com.bo.controller;

import com.bo.domain.pojo.AttendanceRecords;
import com.bo.service.AttendanceRecordsService;
import com.bo.utils.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.log4j.Log4j2;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author ctx
 * @version 1.0
 * @description: TODO
 * @date 2024/12/31 8:36
 */
@RestController
@RequestMapping("/records")
@Tag(name = "考勤记录相关 API", description = "考勤记录相关 API")
@Log4j2
@CrossOrigin
public class AttendanceRecordsController {
   
    @Autowired
    private AttendanceRecordsService attendanceRecordsService;
    @GetMapping("/getAll")
    @Operation(summary = "1.获取所有考勤记录")
    public Result getAll() {
   
        log.info("getAllcontroller");
        return Result.success(attendanceRecordsService.list1());
    }
    @GetMapping("/getOne")
    @Operation(summary = "2.获取一条考勤记录")
    public Result getOne(Integer id) {
   
        log.info("getOnecontroller");
        if(attendanceRecordsService.getOne(id)==null)
            return Result.error("没有该条考勤记录");
        return Result.success(attendanceRecordsService.getOne(id));
    }
    @PostMapping("/add")
    @Operation(summary = "3.上班打卡")
    public Result add(@RequestBody AttendanceRecords attendanceRecords) {
   
        log.info("addcontroller");
        if(attendanceRecordsService.save(attendanceRecords))
            return Result.success("添加成功");
        return Result.error("今日已打卡!");
    }

    @PostMapping("/update")
    @Operation(summary = "4.下班打卡")
    public Result update(@RequestBody AttendanceRecords attendanceRecords) {
   
        log.info("updatecontroller");
        if(attendanceRecordsService.updateById(attendanceRecords))
            return Result.success("修改成功");
        return Result.error("修改失败");
    }
    @DeleteMapping("/delete")
    @Operation(summary = "5.删除一条考勤记录")
    public Result delete(Integer id) {
   
        log.info("deletecontroller");
        if(attendanceRecordsService.removeById(id))
            return Result.success("删除成功");
        return Result.error("删除失败");
    }
    @GetMapping("/listmy")
        @Operation(summary = "6.获取本人考勤记录")
        public Result listmy() {
   
            log.info("listmycontroller");

            return Result.success(attendanceRecordsService.listmy());
        }
}

4.1.2部门管理

package com.bo.controller;

import com.bo.domain.pojo.Departments;
import com.bo.service.DepartmentsService;
import com.bo.utils.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.models.security.SecurityScheme;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author ctx
 * @version 1.0
 * @description: TODO
 * @date 2024/12/31 9:37
 */
@RestController
@RequestMapping("/depar")
@Tag(name = "部门相关 API", description = "部门相关 API")
@Log4j2
@CrossOrigin
public class DepartmentsController {
   
    @Autowired
    private DepartmentsService departmentsService;
    @GetMapping("/getAll")
    @Operation(summary = "1.获取所有部门信息")
    public Result getAll(){
   
        return Result.success(departmentsService.list());
    }
    @GetMapping("/getOne")
    @Operation(summary = "2.获取一条部门信息")
    public Result getOne(Long id){
   
        log.info("getOnecontroller");
        if(departmentsService.getById(id)==null)
            return Result.error("没有该条部门信息");
        return Result.success(departmentsService.getById(id));
    }
    @DeleteMapping("/delete")
    @Operation(summary = "3.删除一条部门信息")
    public Result delete(Long id){
   
        if(departmentsService.removeById(id))
            return Result.success("删除成功");
        return Result.error("删除失败,该部门下有员工");
    }
    @PostMapping("/update")
    @Operation(summary = "4.修改一条部门信息")
    public Result update(@RequestBody Departments departments){
   
        log.info("updatecontroller");
        if(departmentsService.updateById(departments))
            return Result.success("修改成功");
        return Result.error("修改失败");
    }
    @PostMapping("/add")
    @Operation(summary = "5.添加一条部门信息")
    public Result add(@RequestBody Departments departments){
   
        log.info("addcontroller");
        if(departmentsService.save(departments))
            return Result.success("添加成功");
        return Result.error("添加失败");
    }

}

4.1.3员工管理

package com.bo.controller;

import com.bo.domain.dto.EmployeeDto;
import com.bo.domain.pojo.Employees;
import com.bo.domain.pojo.Users;
import com.bo.service.EmployeesService;
import com.bo.utils.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.log4j.Log4j2;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author ctx
 * @version 1.0
 * @description: TODO
 * @date 2024/12/31 10:02
 */
@RestController
@RequestMapping("/emplyee")
@Tag(name = "员工相关 API", description = "员工相关 API")
@Log4j2
@CrossOrigin
public class EmployeesController {
   
    @Autowired
    private EmployeesService employeesService;
    @GetMapping("/list")
    @Operation(summary = "1.获取员工列表")
    public Result list(){
   
        return Result.success(employeesService.list1());
    }
    @GetMapping("/getOne")
    @Operation(summary = "2.获取一条员工信息")
    public Result getOne(Long id){
   
        log.info("getOnecontroller");
        if(employeesService.getById(id)==null)
            return Result.error("没有该条员工信息");
        
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈童学哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值