fix(hrm): 修复社保/考勤列表员工姓名、部门全空(ID 口径混用)
现象:员工社保公积金档案、考勤异常、考勤记录、考勤汇总这几个
模块的列表,员工姓名、部门全部为空。
根因与之前薪酬核算同源:列表批量填充时用
employeeService.getEmployee(userId)
按「员工档案主键」查,但传入的其实是「系统账号 ID」(system_users.id),
两者不是一套 ID,永远查不到员工,导致姓名/部门为空。
数据库佐证:hrm_employee_social_security / hrm_attendance_record /
hrm_attendance_exception / hrm_attendance_summary 的 user_id
100% 匹配 system_users.id。
修复(4 处列表填充统一改用 getEmployeeByUserId):
- HrmEmployeeSocialSecurityController.getEmployeeSocialSecurityPage
- HrmAttendanceExceptionController(列表填充)
- HrmAttendanceRecordController(列表填充)
- HrmAttendanceSummaryController(列表填充)
说明:详情填充(fillEmployeeInfo)此前已修过,本次补齐列表分页遗漏。
| | |
| | | * 填充员工和部门信息(userId 是员工ID) |
| | | */ |
| | | private void fillUserInfo(List<HrmAttendanceExceptionRespVO> respList, List<HrmAttendanceExceptionDO> exceptionList) { |
| | | // 批量获取员工信息 |
| | | // 批量获取员工信息(userId 是系统账号 ID,需按 getEmployeeByUserId 查) |
| | | Set<Long> employeeIds = exceptionList.stream() |
| | | .map(HrmAttendanceExceptionDO::getUserId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, HrmEmployeeDO> employeeMap = new HashMap<>(); |
| | | for (Long employeeId : employeeIds) { |
| | | HrmEmployeeDO employee = employeeService.getEmployee(employeeId); |
| | | for (Long userId : employeeIds) { |
| | | HrmEmployeeDO employee = employeeService.getEmployeeByUserId(userId); |
| | | if (employee != null) { |
| | | employeeMap.put(employeeId, employee); |
| | | employeeMap.put(userId, employee); |
| | | } |
| | | } |
| | | // 批量获取部门信息 |
| | |
| | | * 注意:考勤记录的 userId 是员工ID,不是系统用户ID |
| | | */ |
| | | private void fillUserInfo(List<HrmAttendanceRecordRespVO> respList, List<HrmAttendanceRecordDO> recordList) { |
| | | // 批量获取员工信息(userId 是员工ID) |
| | | // 批量获取员工信息(userId 是系统账号 ID,需按 getEmployeeByUserId 查) |
| | | Set<Long> employeeIds = recordList.stream() |
| | | .map(HrmAttendanceRecordDO::getUserId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, HrmEmployeeDO> employeeMap = new HashMap<>(); |
| | | for (Long employeeId : employeeIds) { |
| | | HrmEmployeeDO employee = employeeService.getEmployee(employeeId); |
| | | for (Long userId : employeeIds) { |
| | | HrmEmployeeDO employee = employeeService.getEmployeeByUserId(userId); |
| | | if (employee != null) { |
| | | employeeMap.put(employeeId, employee); |
| | | employeeMap.put(userId, employee); |
| | | } |
| | | } |
| | | // 批量获取部门信息 |
| | |
| | | * 填充员工和部门信息 |
| | | */ |
| | | private void fillUserInfo(List<HrmAttendanceSummaryRespVO> respList, List<HrmAttendanceSummaryDO> summaryList) { |
| | | // 批量获取员工信息 |
| | | // 批量获取员工信息(userId 是系统账号 ID,需按 getEmployeeByUserId 查) |
| | | Set<Long> employeeIds = summaryList.stream() |
| | | .map(HrmAttendanceSummaryDO::getUserId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, HrmEmployeeDO> employeeMap = new HashMap<>(); |
| | | for (Long employeeId : employeeIds) { |
| | | HrmEmployeeDO employee = employeeService.getEmployee(employeeId); |
| | | for (Long userId : employeeIds) { |
| | | HrmEmployeeDO employee = employeeService.getEmployeeByUserId(userId); |
| | | if (employee != null) { |
| | | employeeMap.put(employeeId, employee); |
| | | employeeMap.put(userId, employee); |
| | | } |
| | | } |
| | | // 批量获取部门信息 |
| | |
| | | if (CollUtil.isEmpty(recordList)) { |
| | | return success(new PageResult<>(Collections.emptyList(), pageResult.getTotal())); |
| | | } |
| | | // userId 是员工ID,批量获取员工信息 |
| | | // userId 是系统账号 ID(system_users.id),不是员工档案主键(hrm_employee.id), |
| | | // 必须用 getEmployeeByUserId 按 system_users.id 查员工 |
| | | Set<Long> employeeIds = recordList.stream() |
| | | .map(HrmEmployeeSocialSecurityDO::getUserId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, HrmEmployeeDO> employeeMap = new HashMap<>(); |
| | | Set<Long> deptIds = new HashSet<>(); |
| | | for (Long employeeId : employeeIds) { |
| | | HrmEmployeeDO employee = employeeService.getEmployee(employeeId); |
| | | for (Long userId : employeeIds) { |
| | | HrmEmployeeDO employee = employeeService.getEmployeeByUserId(userId); |
| | | if (employee != null) { |
| | | employeeMap.put(employeeId, employee); |
| | | employeeMap.put(userId, employee); |
| | | if (employee.getDeptId() != null) { |
| | | deptIds.add(employee.getDeptId()); |
| | | } |