fix(hrm): 考勤统计支持员工姓名搜索;缺卡统计补全(与考勤记录联动)
一、员工姓名搜索不生效
现象:列表上方搜索「任伟」,仍返回全部员工。
根因:前端搜索表单有 userName 字段,但后端 HrmAttendanceSummaryPageReqVO 没有该参数,
传了也被忽略,等同查全部。
修复:
- HrmAttendanceSummaryPageReqVO 增加 userName;
- HrmEmployeeMapper 新增 selectListByNameLike(原 selectListByName 是精确匹配),
Service 暴露 getEmployeeListByNameLike;
- 月度汇总查询:按姓名查出员工ID集合后用 in 过滤,查不到时直接返回空(避免退化成查全部);
- 按日区间实时统计:员工列表按姓名 contains 过滤。
二、导出「数据重复」
核查结论:不是重复。hrm_attendance_summary 里 (user_id, year_month) 唯一,无重复记录;
客户看到的是 8/9/10 三个月各 132 条共 396 条,同一员工出现 3 次(不同月份)。
导出本身跟随筛选条件:
yearMonth=2026-10 -> 133 行(132 数据 + 表头)
不带筛选 -> 397 行(396 数据 + 表头)
顺带把导出文件名带上筛选条件(年月或日期区间),减少误解。
注:实测响应头无 Content-Disposition,对照考勤记录导出同样如此,
文件名由前端 downloadFileFromBlobPart 指定,属框架统一行为。
三、缺卡统计恒为 0(与考勤记录模块对不上)
根因:HrmAttendanceRecordServiceImpl#fillClockTypes 只在「该侧有打卡时间」时才设置类型,
「只打上班卡、没打下班卡」的记录 clockOutType 一直为 NULL;
而统计只认 MISSING(4),所以缺卡次数永远统计不到。
修复:fillClockTypes 优先按「有无打卡时间」判定缺卡(MISSING),不依赖部门与考勤规则;
有打卡时间再按规则判定迟到/早退。打卡与 Excel 导入两处调用均生效。
数据:新增 sql/mysql/hrm_attendance_record_fill_missing_clock_type.sql 修复历史记录,
已在 mom-zyjc 执行(7 条 clock_out_type 由 NULL 补为 4),并重新生成 2026-10 统计。
实测(mom-zyjc):
- 姓名搜索:不传 total=396;userName=任伟 total=3(8/9/10 各一条);不存在的人 total=0
- 缺卡:员工72 有 4 条缺下班卡 -> 汇总 absent_count=4;
员工202(超级管理员离职档案)的 1 条已按在职人员范围排除,合计正确
- 迟到 4 / 早退 1 与打卡记录一致