From 416558785276159b8730b2826e71995fc16b59a7 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期四, 29 十月 2026 11:47:44 +0800
Subject: [PATCH] refactor(safety): 人员与车间字段全面改为主数据关联

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java |   76 ++++++++++++++++++++++++++++++++++----
 1 files changed, 68 insertions(+), 8 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java
index 77c9b00..3899bc6 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyWorkPermitService.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.mes.service.safety;
 
+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.common.util.object.BeanUtils;
@@ -41,6 +42,8 @@
     @Resource
     private SafetyWorkPermitMapper permitMapper;
     @Resource
+    private SafetyRefResolver refResolver;
+    @Resource
     private SafetyWorkPermitMonitorMapper monitorMapper;
 
     /**
@@ -53,7 +56,7 @@
         SafetyWorkPermitDO permit = BeanUtils.toBean(reqVO, SafetyWorkPermitDO.class);
         permit.setCode(permitMapper.selectNextCode("WP" + LocalDate.now().format(CODE_DATE)));
         permit.setTitle(StrUtil.trim(reqVO.getTitle()));
-        permit.setApplicant(StrUtil.trim(reqVO.getApplicant()));
+        applyPermitRefs(permit, reqVO);
         permit.setApplyTime(reqVO.getApplyTime() == null ? LocalDateTime.now() : reqVO.getApplyTime());
         permit.setRiskLevel(StrUtil.blankToDefault(reqVO.getRiskLevel(), SafetyRiskLevelEnum.NORMAL.getLevel()));
         permit.setStatus(SafetyPermitStatusEnum.PENDING.getStatus());
@@ -72,7 +75,23 @@
         SafetyWorkPermitDO update = BeanUtils.toBean(reqVO, SafetyWorkPermitDO.class);
         update.setCode(null);
         update.setStatus(null);
+        applyPermitRefs(update, reqVO);
         permitMapper.updateById(update);
+    }
+
+    /**
+     * 浣滀笟绁ㄧ殑涓绘暟鎹紩鐢細浣滀笟杞﹂棿 + 鐢宠浜� + 鐩戞姢浜猴紝浠庝富鏁版嵁甯﹀嚭鍚嶇О钀藉揩鐓�
+     */
+    private void applyPermitRefs(SafetyWorkPermitDO permit, SafetyWorkPermitSaveReqVO reqVO) {
+        permit.setWorkshopId(reqVO.getWorkshopId());
+        permit.setWorkshopName(reqVO.getWorkshopId() == null ? ""
+                : refResolver.requireWorkshop(reqVO.getWorkshopId()).getName());
+        var applicant = refResolver.requireEmployee(reqVO.getApplicantId(), SAFETY_EMPLOYEE_REQUIRED);
+        permit.setApplicantId(applicant.getId());
+        permit.setApplicant(applicant.getName());
+        permit.setGuardianId(reqVO.getGuardianId());
+        permit.setGuardian(reqVO.getGuardianId() == null ? ""
+                : refResolver.requireEmployee(reqVO.getGuardianId(), SAFETY_EMPLOYEE_REQUIRED).getName());
     }
 
     /**
@@ -85,19 +104,20 @@
     public void approvePermit(SafetyWorkPermitApproveReqVO reqVO) {
         SafetyWorkPermitDO permit = validatePermitExists(reqVO.getId());
         ensureStatus(permit, SafetyPermitStatusEnum.PENDING);
-        String approver = StrUtil.trim(reqVO.getApprover());
-        // 鐢宠浜轰笉鑳藉鎵硅嚜宸辩殑浣滀笟绁�
-        if (approver.equals(permit.getApplicant())) {
-            throw exception(SAFETY_PERMIT_STATUS_ERROR);
+        var approver = refResolver.requireEmployee(reqVO.getApproverId(), SAFETY_EMPLOYEE_REQUIRED);
+        // 鐢宠浜轰笉鑳藉鎵硅嚜宸辩殑浣滀笟绁紙鎸夊憳宸ョ紪鍙锋瘮杈冿紝閬垮厤鍚屽悕璇垽锛�
+        if (permit.getApplicantId() != null && permit.getApplicantId().equals(approver.getId())) {
+            throw exception(SAFETY_PERMIT_SELF_APPROVE);
         }
         boolean approved = "APPROVED".equals(reqVO.getDecision());
         if (approved && SafetyPermitTypeEnum.requiresGuardian(permit.getPermitType())
-                && StrUtil.isBlank(permit.getGuardian())) {
+                && permit.getGuardianId() == null) {
             throw exception(SAFETY_PERMIT_GUARDIAN_REQUIRED);
         }
         SafetyWorkPermitDO update = new SafetyWorkPermitDO();
         update.setId(permit.getId());
-        update.setApprover(approver);
+        update.setApproverId(approver.getId());
+        update.setApprover(approver.getName());
         update.setApproveTime(LocalDateTime.now());
         update.setApproveComment(reqVO.getApproveComment());
         update.setStatus(approved ? SafetyPermitStatusEnum.APPROVED.getStatus()
@@ -173,7 +193,9 @@
         }
         SafetyWorkPermitMonitorDO monitor = BeanUtils.toBean(reqVO, SafetyWorkPermitMonitorDO.class);
         monitor.setId(null);
-        monitor.setGuardian(StrUtil.trim(reqVO.getGuardian()));
+        var guardian = refResolver.requireEmployee(reqVO.getGuardianId(), SAFETY_EMPLOYEE_REQUIRED);
+        monitor.setGuardianId(guardian.getId());
+        monitor.setGuardian(guardian.getName());
         monitor.setMonitorTime(reqVO.getMonitorTime() == null ? LocalDateTime.now() : reqVO.getMonitorTime());
         monitorMapper.insert(monitor);
         return monitor.getId();
@@ -192,6 +214,44 @@
 
     // ==================== 灞曠ず瀛楁 ====================
 
+    /**
+     * 鎵归噺鍥炲~浣滀笟绁ㄧ殑杞﹂棿鍚嶄笌涓変釜浜哄憳濮撳悕锛堢敵璇蜂汉/瀹℃壒浜�/鐩戞姢浜猴級
+     */
+    public void fillPermitRefs(List<SafetyWorkPermitDO> permits) {
+        if (CollUtil.isEmpty(permits)) {
+            return;
+        }
+        var workshopMap = refResolver.workshopMap(permits.stream().map(SafetyWorkPermitDO::getWorkshopId).toList());
+        var ids = new java.util.ArrayList<Long>(permits.size() * 3);
+        permits.forEach(p -> { ids.add(p.getApplicantId()); ids.add(p.getApproverId()); ids.add(p.getGuardianId()); });
+        var employeeMap = refResolver.employeeMap(ids);
+        permits.forEach(permit -> {
+            var workshop = workshopMap.get(permit.getWorkshopId());
+            if (workshop != null) permit.setWorkshopName(workshop.getName());
+            var applicant = employeeMap.get(permit.getApplicantId());
+            if (applicant != null) permit.setApplicant(applicant.getName());
+            var approver = employeeMap.get(permit.getApproverId());
+            if (approver != null) permit.setApprover(approver.getName());
+            var guardian = employeeMap.get(permit.getGuardianId());
+            if (guardian != null) permit.setGuardian(guardian.getName());
+        });
+    }
+
+    /**
+     * 鎵归噺鍥炲~鐩戞姢璁板綍鐨勭洃鎶や汉鏈�鏂板鍚�
+     */
+    public void fillMonitorGuardians(List<SafetyWorkPermitMonitorDO> monitors) {
+        if (CollUtil.isEmpty(monitors)) {
+            return;
+        }
+        var employeeMap = refResolver.employeeMap(
+                monitors.stream().map(SafetyWorkPermitMonitorDO::getGuardianId).toList());
+        monitors.forEach(monitor -> {
+            var employee = employeeMap.get(monitor.getGuardianId());
+            if (employee != null) monitor.setGuardian(employee.getName());
+        });
+    }
+
     public static void fillPermitDisplay(SafetyWorkPermitDO permit, SafetyWorkPermitRespVO respVO) {
         respVO.setPermitTypeName(SafetyPermitTypeEnum.getNameByType(permit.getPermitType()));
         respVO.setRiskLevelName(SafetyRiskLevelEnum.getNameByLevel(permit.getRiskLevel()));

--
Gitblit v1.9.3