这套基于SpringBoot+Vue3+MyBatis的全栈人事管理系统,专为中小企业日常人力资源管理需求设计。我在为多家50-200人规模企业实施信息化系统时发现,传统Excel管理方式在员工超过30人后就会暴露出数据分散、流程混乱等问题。本系统采用前后端分离架构,前端使用Vue3组合式API开发,后端基于SpringBoot 2.7.x构建,数据库选用MySQL 8.0,实现了从组织架构、考勤管理到薪资核算的全流程数字化。
采用前端Vue3+后端SpringBoot的分离架构,实测接口响应速度比传统JSP方案提升40%以上。前端通过axios与后端RESTful API通信,使用JWT进行身份验证。特别设计的API版本控制机制(如/v1/hr/employee)方便后续迭代升级。
选择MySQL而非NoSQL的三大原因:
表结构设计示例:
sql复制CREATE TABLE `employee` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '雪花算法ID',
`dept_id` INT NOT NULL COMMENT '部门ID',
`name` VARCHAR(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`id_card` VARCHAR(18) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '加密存储',
`entry_date` DATE NOT NULL,
`position` VARCHAR(30) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_id_card` (`id_card`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
采用树形结构存储部门关系,使用MP的@TableField(typeHandler = JacksonTypeHandler.class)处理JSON格式的树结构。前端通过vue-tree-chart组件实现可视化拖拽调整。
关键代码片段:
java复制// 部门树形结构返回
@GetMapping("/dept/tree")
public R<List<DeptTreeNode>> getDeptTree() {
List<Dept> depts = deptService.list();
return R.success(deptService.buildTree(depts));
}
考勤规则配置采用策略模式设计,支持:
每日考勤数据通过定时任务自动计算,异常情况(如缺卡)触发企业微信通知。
薪资项配置采用模板方法模式,核心计算逻辑:
code复制实发工资 = 基本工资 + 绩效工资 - 社保公积金 - 个税 - 其他扣款
其中个税计算使用最新累进税率表,通过存储过程实现批量计算。
采用RBAC模型,前端基于v-auth指令实现按钮级权限控制,后端通过Spring Security + 自定义注解实现接口鉴权。
权限表结构设计:
| 表名 | 说明 |
|---|---|
| sys_user | 用户基础表 |
| sys_role | 角色表 |
| sys_menu | 菜单权限表 |
| sys_user_role | 用户角色关联 |
| sys_role_menu | 角色菜单关联 |
最低生产环境配置:
实测数据:200人规模企业典型并发下,API平均响应时间<300ms。
采用多级缓存架构:
缓存更新策略采用Cache Aside Pattern,关键代码:
java复制@CacheEvict(value = "employee", key = "#id")
public boolean updateEmployee(EmployeeDTO dto) {
return updateById(convertToEntity(dto));
}
典型问题排查流程:
建立四层校验机制:
通过动态字段表实现自定义字段扩展:
sql复制CREATE TABLE `hr_extend_field` (
`id` BIGINT NOT NULL,
`entity_type` VARCHAR(20) NOT NULL COMMENT '关联实体类型',
`field_name` VARCHAR(50) NOT NULL,
`field_type` VARCHAR(20) NOT NULL COMMENT 'STRING/NUMBER/DATE',
`is_required` TINYINT DEFAULT 0,
PRIMARY KEY (`id`)
);
提供标准集成方案:
集成示例代码:
java复制@Slf4j
@Service
public class DingTalkService {
public void syncDepartment(List<Dept> depts) {
// 调用钉钉部门同步接口
DingTalkClient client = new DefaultDingTalkClient(
"https://oapi.dingtalk.com/topapi/v2/department/listsub");
// ... 具体实现代码
}
}
这套系统在我实施的客户案例中,平均减少HR部门30%的事务性工作时间,特别适合正处于快速发展期的中小企业。建议初次部署时优先实施员工档案和考勤模块,运行稳定后再逐步上线薪资计算等复杂功能。