From 05ab6e3f69a5e73624b2573db043f5923e8f7d8b Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 05 十一月 2026 14:17:19 +0800
Subject: [PATCH] fix 修复bug

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyCertificateService.java |   26 +++++++++++++++++++++++---
 1 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyCertificateService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyCertificateService.java
index 575cddb..4c4ca18 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyCertificateService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyCertificateService.java
@@ -19,6 +19,7 @@
 
 import java.time.LocalDate;
 import java.time.temporal.ChronoUnit;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -50,6 +51,8 @@
     private SafetyCertificateMapper certificateMapper;
     @Resource
     private HrmEmployeeApi hrmEmployeeApi;
+    @Resource
+    private SafetyRefResolver refResolver;
 
     public Long createCertificate(SafetyCertificateSaveReqVO reqVO) {
         reqVO.setId(null);
@@ -99,7 +102,10 @@
         List<Long> employeeIds = certs.stream()
                 .map(SafetyCertificateDO::getEmployeeId)
                 .filter(Objects::nonNull).distinct().toList();
-        Map<Long, HrmEmployeeSimpleDTO> employeeMap = employeeIds.isEmpty() ? Map.of()
+        // 鐢� new HashMap<>() 鑰岄潪 Map.of()锛歟mployeeId 鍏佽涓� null锛�
+        // 鍚庨潰 employeeMap.get(cert.getEmployeeId()) 鍦ㄧ┖闆嗗悎鍦烘櫙浼� get(null)锛�
+        // Map.of() 鐨� get(null) 浼氭姏 NPE 瀵艰嚧璇佷欢鍒楄〃鎺ュ彛 500銆�
+        Map<Long, HrmEmployeeSimpleDTO> employeeMap = employeeIds.isEmpty() ? new HashMap<>()
                 : hrmEmployeeApi.getEmployeeList(employeeIds).stream()
                         .collect(Collectors.toMap(HrmEmployeeSimpleDTO::getId, e -> e, (a, b) -> a));
         certs.forEach(cert -> {
@@ -113,9 +119,25 @@
     }
 
     /**
+     * 鎵归噺琛ュ叏灞曠ず瀛楁锛屾寔璇佷汉妗f涓�娆℃�ф煡濂斤紝閬垮厤閫愭潯鏌ヨ
+     */
+    public void fillDisplayFieldsBatch(List<SafetyCertificateDO> certs, List<SafetyCertificateRespVO> resps) {
+        var employeeMap = refResolver.employeeMap(certs.stream().map(SafetyCertificateDO::getEmployeeId).toList());
+        for (int i = 0; i < certs.size(); i++) {
+            fillDisplayFields(certs.get(i), resps.get(i), employeeMap.get(certs.get(i).getEmployeeId()));
+        }
+    }
+
+    /**
      * 鍗曚釜璇佷欢鐨勫睍绀哄瓧娈佃ˉ鍏紙绫诲瀷鍚嶇О銆佺姸鎬佸悕绉般�佸墿浣欏ぉ鏁般�佹寔璇佷汉妗f锛�
      */
     public void fillDisplayFields(SafetyCertificateDO cert, SafetyCertificateRespVO respVO) {
+        fillDisplayFields(cert, respVO, cert.getEmployeeId() == null ? null
+                : hrmEmployeeApi.getEmployee(cert.getEmployeeId()));
+    }
+
+    private void fillDisplayFields(SafetyCertificateDO cert, SafetyCertificateRespVO respVO,
+                                   HrmEmployeeSimpleDTO employee) {
         respVO.setCertTypeName(SafetyCertificateTypeEnum.getNameByType(cert.getCertType()));
         String status = resolveStatus(cert.getExpireDate(), cert.getWarnDays(), cert.getStatus());
         respVO.setStatus(status);
@@ -123,8 +145,6 @@
         if (cert.getExpireDate() != null) {
             respVO.setRemainingDays(ChronoUnit.DAYS.between(LocalDate.now(), cert.getExpireDate()));
         }
-        HrmEmployeeSimpleDTO employee = cert.getEmployeeId() == null ? null
-                : hrmEmployeeApi.getEmployee(cert.getEmployeeId());
         if (employee != null) {
             respVO.setEmployeeName(employee.getName());
             respVO.setEmployeeNo(employee.getEmployeeNo());

--
Gitblit v1.9.3