温馨提示本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片1. 引言随着企业规模的不断扩大员工数量持续增长传统的人工工资核算方式已经难以满足现代企业高效、准确、规范的管理需求。工资管理涉及基本工资、绩效奖金、社保公积金、个税计算、考勤扣款等多个环节数据量大、计算规则复杂人工处理不仅效率低下还容易出现差错。本文基于 Java Spring Boot 框架设计并实现一套员工工资管理系统。系统采用前后端分离架构后端基于 Spring Boot MyBatis-Plus前端采用 Vue Element UI数据库使用 MySQL实现了员工信息管理、工资项目配置、工资核算、工资发放记录、统计报表等核心功能为企业提供了一套完整、可扩展的工资管理解决方案。2. 系统需求分析2.1 功能需求本系统面向企业人事部门和财务部门主要功能需求如下员工信息管理支持员工基本信息的增删改查包括姓名、工号、部门、岗位、入职日期、银行卡号等。工资项目配置支持自定义工资组成项目如基本工资、岗位津贴、绩效奖金、加班费、社保、公积金、个税等并可设置计算规则。工资核算根据员工考勤、绩效等数据自动计算月度工资支持批量核算和单人工核算。工资发放管理记录工资发放状态支持发放确认、发放记录查询和工资条生成。统计报表按部门、月份等维度统计工资总额、平均工资、人力成本等支持图表展示。系统管理用户登录、角色权限管理、操作日志记录等。2.2 非功能需求安全性用户密码加密存储接口权限校验防止越权访问。可靠性工资数据涉及员工切身利益系统需保证数据的一致性和准确性。易用性界面简洁清晰操作流程符合人事、财务人员的使用习惯。可扩展性系统架构分层设计便于后续功能扩展和维护。3. 系统总体设计3.1 系统架构设计系统采用经典的三层架构即表现层、业务逻辑层和数据访问层前后端通过 RESTful API 进行交互。flowchart TD A[前端 Vue Element UI] --|HTTP/JSON| B[Controller 层] B -- C[Service 层] C -- D[Mapper 层 MyBatis-Plus] D -- E[(MySQL 数据库)] C -- F[Redis 缓存] B -- G[Spring Security 权限认证]3.2 技术选型层次技术说明后端框架Spring Boot 2.7快速构建独立运行的 Spring 应用持久层MyBatis-Plus简化 CRUD 操作内置分页插件安全框架Spring Security JWT实现用户认证与接口授权数据库MySQL 8.0存储业务数据缓存Redis缓存热点数据提升查询性能前端Vue 3 Element Plus构建管理后台界面构建工具Maven项目依赖管理与构建3.3 数据库设计系统核心数据表包括员工表、部门表、工资项目表、工资核算表、工资发放记录表等。以下为主要的表结构设计。员工表employee字段名类型说明idbigint主键自增emp_novarchar(20)员工工号唯一emp_namevarchar(50)员工姓名dept_idbigint所属部门 IDpositionvarchar(50)岗位entry_datedate入职日期bank_cardvarchar(30)银行卡号statustinyint在职状态1 在职0 离职工资项目表salary_item字段名类型说明idbigint主键自增item_namevarchar(50)项目名称如基本工资item_typetinyint类型1 收入项2 扣款项calc_typetinyint计算方式1 固定金额2 按比例3 公式计算calc_valuedecimal(10,2)固定金额或比例值sort_orderint排序号工资核算表salary_record字段名类型说明idbigint主键自增emp_idbigint员工 IDsalary_monthvarchar(7)工资月份如 2026-09base_salarydecimal(10,2)基本工资bonusdecimal(10,2)绩效奖金overtime_paydecimal(10,2)加班费social_securitydecimal(10,2)社保扣款housing_funddecimal(10,2)公积金扣款taxdecimal(10,2)个人所得税net_salarydecimal(10,2)实发工资statustinyint状态0 未发放1 已发放4. 系统核心功能实现4.1 项目结构后端项目采用标准的 Maven 多模块或单模块分层结构包结构如下com.example.salary ├── controller // 控制层接收前端请求 ├── service // 业务逻辑层 │ └── impl ├── mapper // 数据访问层 ├── entity // 实体类 ├── dto // 数据传输对象 ├── config // 配置类安全、跨域等 ├── common // 通用工具、统一返回结果 └── SalaryApplication.java // 启动类4.2 员工信息管理模块员工信息管理是系统的基础模块提供员工信息的增删改查功能。以下为员工实体类的核心代码。Data TableName(employee) public class Employee { TableId(type IdType.AUTO) private Long id; private String empNo; private String empName; private Long deptId; private String position; private LocalDate entryDate; private String bankCard; private Integer status; }员工查询接口采用 MyBatis-Plus 的分页插件支持按姓名、工号、部门等条件进行组合查询。Service public class EmployeeServiceImpl implements EmployeeService { Autowired private EmployeeMapper employeeMapper; Override public PageResultEmployee pageQuery(EmployeeQueryDTO queryDTO) { LambdaQueryWrapperEmployee wrapper new LambdaQueryWrapper(); wrapper.like(StringUtils.isNotBlank(queryDTO.getEmpName()), Employee::getEmpName, queryDTO.getEmpName()) .like(StringUtils.isNotBlank(queryDTO.getEmpNo()), Employee::getEmpNo, queryDTO.getEmpNo()) .eq(queryDTO.getDeptId() ! null, Employee::getDeptId, queryDTO.getDeptId()) .orderByDesc(Employee::getEntryDate); PageEmployee page new Page(queryDTO.getPageNum(), queryDTO.getPageSize()); employeeMapper.selectPage(page, wrapper); return new PageResult(page.getTotal(), page.getRecords()); } }4.3 工资核算模块工资核算模块是系统的核心。系统根据工资项目配置和员工考勤、绩效数据自动计算每位员工的应发工资、扣款项和实发工资。核算流程如下flowchart LR A[选择核算月份] -- B[获取在职员工列表] B -- C[读取工资项目配置] C -- D[计算应发工资] D -- E[计算社保公积金] E -- F[计算个人所得税] F -- G[计算实发工资] G -- H[保存工资核算记录]工资核算的核心代码如下Service public class SalaryCalculateServiceImpl implements SalaryCalculateService { Autowired private EmployeeMapper employeeMapper; Autowired private SalaryItemMapper salaryItemMapper; Autowired private SalaryRecordMapper salaryRecordMapper; Override Transactional(rollbackFor Exception.class) public void calculateMonthlySalary(String salaryMonth) { // 1. 查询所有在职员工 ListEmployee employees employeeMapper.selectList( new LambdaQueryWrapperEmployee().eq(Employee::getStatus, 1)); // 2. 查询工资项目配置 ListSalaryItem items salaryItemMapper.selectList( new LambdaQueryWrapperSalaryItem().orderByAsc(SalaryItem::getSortOrder)); for (Employee emp : employees) { // 3. 计算各项工资 BigDecimal baseSalary getItemValue(items, 基本工资, emp); BigDecimal bonus getItemValue(items, 绩效奖金, emp); BigDecimal overtimePay getItemValue(items, 加班费, emp); BigDecimal grossSalary baseSalary.add(bonus).add(overtimePay); // 4. 计算社保、公积金 BigDecimal socialSecurity grossSalary.multiply(new BigDecimal(0.08)); BigDecimal housingFund grossSalary.multiply(new BigDecimal(0.12)); // 5. 计算个税简化示例 BigDecimal taxableIncome grossSalary.subtract(socialSecurity) .subtract(housingFund).subtract(new BigDecimal(5000)); BigDecimal tax taxableIncome.compareTo(BigDecimal.ZERO) 0 ? BigDecimal.ZERO : taxableIncome.multiply(new BigDecimal(0.03)); // 6. 计算实发工资 BigDecimal netSalary grossSalary.subtract(socialSecurity) .subtract(housingFund).subtract(tax); // 7. 保存核算记录 SalaryRecord record new SalaryRecord(); record.setEmpId(emp.getId()); record.setSalaryMonth(salaryMonth); record.setBaseSalary(baseSalary); record.setBonus(bonus); record.setOvertimePay(overtimePay); record.setSocialSecurity(socialSecurity); record.setHousingFund(housingFund); record.setTax(tax); record.setNetSalary(netSalary); record.setStatus(0); salaryRecordMapper.insert(record); } } }4.4 工资发放管理模块工资核算完成后财务人员对核算结果进行审核确认确认无误后执行发放操作。发放后系统记录发放时间、操作人等信息并支持生成工资条供员工查看。Service public class SalaryPayServiceImpl implements SalaryPayService { Autowired private SalaryRecordMapper salaryRecordMapper; Override Transactional(rollbackFor Exception.class) public void confirmPay(Long recordId, Long operatorId) { SalaryRecord record salaryRecordMapper.selectById(recordId); if (record null) { throw new BusinessException(工资记录不存在); } if (record.getStatus() 1) { throw new BusinessException(该工资记录已发放请勿重复操作); } record.setStatus(1); record.setPayTime(LocalDateTime.now()); record.setOperatorId(operatorId); salaryRecordMapper.updateById(record); } }4.5 统计报表模块统计报表模块按部门、月份等维度对工资数据进行汇总分析帮助管理层掌握人力成本情况。以下为按部门统计工资总额的 SQL 示例。SELECT d.dept_name, COUNT(DISTINCT e.id) AS emp_count, SUM(sr.net_salary) AS total_salary, ROUND(AVG(sr.net_salary), 2) AS avg_salary FROM salary_record sr JOIN employee e ON sr.emp_id e.id JOIN department d ON e.dept_id d.id WHERE sr.salary_month #{salaryMonth} GROUP BY d.dept_name ORDER BY total_salary DESC;5. 系统安全设计工资数据属于企业敏感信息系统在安全方面做了以下设计用户认证采用 Spring Security JWT 实现无状态认证登录后签发 Token后续请求携带 Token 访问受保护接口。权限控制基于角色的访问控制RBAC区分管理员、财务人员、普通员工等角色不同角色拥有不同的操作权限。密码安全用户密码使用 BCrypt 算法加密存储防止明文泄露。操作日志记录关键操作的日志信息包括操作人、操作时间、操作内容便于审计追溯。数据脱敏员工银行卡号、身份证号等敏感字段在展示时进行脱敏处理。6. 系统测试系统开发完成后对核心功能进行了功能测试和性能测试。功能测试覆盖员工管理、工资核算、工资发放、统计报表等主要业务流程验证了各模块功能的正确性。性能测试方面对工资批量核算接口进行了压测在 1000 名员工规模下单月工资核算耗时约 2 秒满足日常使用需求。7. 总结与展望本文基于 Spring Boot 框架设计并实现了一套员工工资管理系统系统涵盖了员工信息管理、工资项目配置、工资核算、工资发放、统计报表等核心功能具有界面友好、操作简便、安全可靠、易于扩展等特点能够有效提升企业工资管理的效率和准确性。在后续的优化中可以从以下几个方面进行改进一是引入消息队列实现工资核算的异步处理进一步提升大批量核算的性能二是对接银行接口实现工资的自动代发三是增加移动端支持方便员工随时查看工资条四是引入更
