分支
用户 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 13:48 +0800
提交者 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 13:48 +0800
提交52e4ba6897d5d808c4ed08720bbebad9cb006103
目录 4e30c1f1c66e2fe17b798c19dc2354627aaec02b 目录 | zip | gz
上一版本 0d30e44d3cf4118222f6de88424a39a04d1642e9 查看 | 对比
fix(hrm): 修复生成考勤统计报错、实出天数翻倍;调岗/离职审批通过同步人员信息

一、生成考勤统计报「系统异常」(客户需求 4)
根因:generateAllMonthlySummary / generateDeptMonthlySummary 调用
employeeService.getEmployeeList(null),而其内部是 employeeMapper.selectByIds(null),
MyBatis-Plus 对 null 集合直接抛
BuilderException: The expression 'coll' evaluated to a null value。
影响:「全公司」「指定部门」生成必报错,只有「指定员工」能用。
修复:
- HrmEmployeeServiceImpl.getEmployeeList 对空集合返回空列表,避免 selectByIds(null);
- 新增 getEmployeeListByStatus(Integer) 返回 DO;
- 生成统计改为查在册员工(排除已离职),不再传 null。

二、实际出勤天数翻倍(会导致薪酬缺勤扣款算错)
原逻辑每条打卡记录 +1,一天打两次卡就算 2 天。
改为按打卡日期去重(LinkedHashSet),并封顶不超过应出勤天数。

三、调岗/离职审批通过立即同步人员信息(客户需求 1,确认「审批通过立即生效」)
原来审批通过只更新申请单自己的 status,hrm_employee 完全不动,
导致办了离职的人在人员信息里仍是在职、调岗后部门岗位不变。
新增 HrmEmployeeService:
- syncEmployeeTransfer(employeeId, targetDeptId, targetPostId):
回写 dept_id 与 post_ids(JSON 数组格式);
- syncEmployeeResignation(systemUserId, leaveDate):
回写 employee_status=3(离职)与 leave_date。
在 updateTransferApplicationAuditStatus / updateResignationApplicationAuditStatus
中,status==APPROVE(20) 时调用。
注意两个申请单的 userId 口径不同:调岗存 hrm_employee.id,离职存 system_users.id。

四、考勤统计支持按日筛选(客户需求 3,确认「按日」)
- HrmAttendanceSummaryPageReqVO 增加 startDate/endDate;
- 传了 startDate 则实时聚合打卡记录(不落库):应出勤=区间工作日数、
实出勤按日期去重、迟到/早退/缺卡计数、加班累加、请假按天x8折算为小时;
- 不传日期仍走 hrm_attendance_summary 月度汇总表,行为不变;
- 新增 HrmAttendanceRecordMapper.selectListByUserIdsAndDateBetween 与
HrmLeaveApplicationMapper.selectApprovedListByUserIdsAndTimeRange 支持批量查询。

实测(mom-zyjc):
- 全公司生成 2026-10 → code:0,生成 133 条汇总;
- 指定部门 132 生成 → code:0;
- 调岗审批通过:郭丽华 dept 132 -> 136,日志 syncEmployeeTransfer 生效;
- 离职审批通过:李军明 employee_status 1 -> 3,leave_date=2026-11-05;
- 按日区间 10-01~10-15 → workDays=11;整月 → 22;请假 1 天 → leaveHours=8.00。
(自测数据已全部清理,汇总表恢复为空)
已修改8个文件
342 ■■■■■ 文件已修改
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceSummaryPageReqVO.java 13 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/approval/HrmLeaveApplicationMapper.java 23 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/attendance/HrmAttendanceRecordMapper.java 18 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmResignationApplicationServiceImpl.java 8 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java 6 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceSummaryServiceImpl.java 185 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeService.java 28 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java 61 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史