From ba100c651a81162a9a9a4533ff4d072f2889171a Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期五, 06 十一月 2026 09:38:46 +0800
Subject: [PATCH] fix(hrm): 考勤统计支持员工姓名搜索;缺卡统计补全(与考勤记录联动)

---
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceSummaryServiceImpl.java |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceSummaryServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceSummaryServiceImpl.java
index ab7ec40..f51d71b 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceSummaryServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceSummaryServiceImpl.java
@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.hrm.service.attendance;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceSummaryPageReqVO;
@@ -206,12 +207,35 @@
         if (pageReqVO.getStartDate() != null) {
             return getAttendanceSummaryByDateRange(pageReqVO);
         }
+        // 鍛樺伐濮撳悕妯$硦鎼滅储锛氬厛鎸夊鍚嶆煡鍑哄憳宸D锛屽啀鎸� ID 闆嗗悎杩囨护锛堟眹鎬昏〃鐨� user_id 瀛樼殑鏄憳宸D锛�
+        Set<Long> nameMatchedIds = resolveEmployeeIdsByName(pageReqVO.getUserName());
+        if (nameMatchedIds != null && nameMatchedIds.isEmpty()) {
+            // 濮撳悕鎼滀笉鍒颁换浣曞憳宸ユ椂鐩存帴杩斿洖绌猴紝閬垮厤閫�鍖栨垚鏌ュ叏閮�
+            return PageResult.empty();
+        }
         return attendanceSummaryMapper.selectPage(pageReqVO, new LambdaQueryWrapperX<HrmAttendanceSummaryDO>()
                 .eqIfPresent(HrmAttendanceSummaryDO::getUserId, pageReqVO.getUserId())
+                .inIfPresent(HrmAttendanceSummaryDO::getUserId, nameMatchedIds)
                 .eqIfPresent(HrmAttendanceSummaryDO::getDeptId, pageReqVO.getDeptId())
                 .eqIfPresent(HrmAttendanceSummaryDO::getYearMonth, pageReqVO.getYearMonth())
                 .orderByDesc(HrmAttendanceSummaryDO::getYearMonth)
                 .orderByAsc(HrmAttendanceSummaryDO::getDeptId));
+    }
+
+    /**
+     * 鎸夊憳宸ュ鍚嶆ā绯婂尮閰嶏紝杩斿洖鍛樺伐ID闆嗗悎
+     *
+     * @return null 琛ㄧず鏈紶濮撳悕锛堜笉鍙備笌杩囨护锛夛紱绌洪泦鍚堣〃绀轰紶浜嗗鍚嶄絾娌℃湁浠讳綍鍛樺伐鍖归厤
+     */
+    private Set<Long> resolveEmployeeIdsByName(String userName) {
+        if (StrUtil.isBlank(userName)) {
+            return null;
+        }
+        List<HrmEmployeeDO> matched = employeeService.getEmployeeListByNameLike(userName.trim());
+        if (CollUtil.isEmpty(matched)) {
+            return Collections.emptySet();
+        }
+        return matched.stream().map(HrmEmployeeDO::getId).collect(Collectors.toSet());
     }
 
     /**
@@ -243,6 +267,13 @@
                     .filter(e -> reqVO.getUserId().equals(e.getId()))
                     .toList();
         }
+        // 鍛樺伐濮撳悕妯$硦杩囨护
+        if (StrUtil.isNotBlank(reqVO.getUserName())) {
+            String keyword = reqVO.getUserName().trim();
+            employees = employees.stream()
+                    .filter(e -> e.getName() != null && e.getName().contains(keyword))
+                    .toList();
+        }
         if (CollUtil.isEmpty(employees)) {
             return PageResult.empty();
         }

--
Gitblit v1.9.3