tuqin
5 天以前 286cc58be63c13a90f59eaf02879f6954ff9b142
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)此前已修过,本次补齐列表分页遗漏。
已修改4个文件
33 ■■■■■ 文件已修改
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceExceptionController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceRecordController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceSummaryController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/salary/HrmEmployeeSocialSecurityController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceExceptionController.java
@@ -111,16 +111,16 @@
     * 填充员工和部门信息(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);
            }
        }
        // 批量获取部门信息
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceRecordController.java
@@ -119,16 +119,16 @@
     * 注意:考勤记录的 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);
            }
        }
        // 批量获取部门信息
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/HrmAttendanceSummaryController.java
@@ -62,16 +62,16 @@
     * 填充员工和部门信息
     */
    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);
            }
        }
        // 批量获取部门信息
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/salary/HrmEmployeeSocialSecurityController.java
@@ -96,17 +96,18 @@
        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());
                }