中小企业人事管理系统是当前数字化转型浪潮中的刚需产品。传统Excel表格管理员工信息的方式已经无法满足现代企业对于考勤统计、薪资计算、绩效评估等复杂场景的需求。我们团队基于SpringBoot+Vue技术栈实现的这套系统,完整覆盖了从员工入职到离职的全生命周期管理,特别针对50-300人规模的中小企业优化了操作流程。
这个项目的独特之处在于:前端采用Vue3+Element Plus实现响应式布局,后端基于SpringBoot 2.7.x构建微服务架构,权限控制使用改良版的RBAC模型。系统上线后实测将人事部门的日常事务处理效率提升了60%以上,特别是批量导入导出和智能排班功能获得客户高度评价。
后端技术栈:
前端技术栈:
数据库:
技术选型心得:MyBatis-Plus相比原生MyBatis可以减少30%以上的样板代码,其Lambda表达式写法特别适合动态条件查询。前端放弃Vue2选择Vue3主要是看中Composition API对复杂业务逻辑的更好封装能力。
基础档案模块
考勤管理模块
薪资福利模块
系统管理模块
采用改良版RBAC模型,在传统角色-权限关系基础上增加了:
java复制// 权限注解示例
@PreAuthorize("@ss.hasPermi('hr:employee:edit')")
@PostMapping("/update")
public AjaxResult update(@Validated @RequestBody Employee employee) {
// 业务逻辑
}
权限表设计关键字段:
基于规则引擎实现的排班系统:
sql复制-- 排班冲突检测SQL示例
SELECT COUNT(*) FROM att_schedule
WHERE staff_id = #{staffId}
AND schedule_date = #{date}
AND del_flag = '0'
核心计算流程:
java复制// 个税计算示例
public BigDecimal calculateTax(BigDecimal cumulativeIncome,
BigDecimal cumulativeDeduction) {
BigDecimal taxable = cumulativeIncome.subtract(cumulativeDeduction);
TaxLevel level = taxConfigService.matchLevel(taxable);
return taxable.multiply(level.getRate())
.subtract(level.getQuickDeduction());
}
痛点:导出全公司年假记录时出现OOM
解决方案:
java复制// 分页导出示例
PageHelper.startPage(pageNum, pageSize, false);
List<Record> records = mapper.selectByExample(example);
try (SXSSFWorkbook workbook = new SXSSFWorkbook(100)) {
// 写入逻辑
}
采用以下策略:
json复制{
"code": 200,
"msg": "success",
"data": {}
}
对于3年以上的冷数据:
推荐配置:
ini复制innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
优化措施与效果对比:
| 优化项 | 请求量(QPS) | 平均响应时间(ms) |
|---|---|---|
| 未加缓存 | 120 | 450 |
| 添加Redis缓存 | 310 | 180 |
| SQL优化后 | 420 | 120 |
| Nginx动静分离后 | 580 | 80 |
这套系统在实际交付过程中,我们发现中小企业最在意的三个点是:操作简单、报表直观、计算准确。特别是在薪资计算环节,财务人员会反复核对每个数字,因此我们在该模块增加了计算过程追溯功能,可以展示每项金额的具体计算依据。