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/SafetyOrgService.java |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyOrgService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyOrgService.java
index 9f0d696..c9594a8 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyOrgService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyOrgService.java
@@ -29,12 +29,15 @@
 
     @Resource
     private SafetyOrgMapper safetyOrgMapper;
+    @Resource
+    private SafetyRefResolver refResolver;
 
     public Long createOrg(SafetyOrgSaveReqVO reqVO) {
         reqVO.setId(null);
         validateParent(reqVO.getParentId(), null);
         SafetyOrgDO org = BeanUtils.toBean(reqVO, SafetyOrgDO.class);
         org.setParentId(reqVO.getParentId() == null ? 0L : reqVO.getParentId());
+        applyLeader(org, reqVO.getLeaderId());
         safetyOrgMapper.insert(org);
         return org.getId();
     }
@@ -44,7 +47,22 @@
         validateParent(reqVO.getParentId(), reqVO.getId());
         SafetyOrgDO org = BeanUtils.toBean(reqVO, SafetyOrgDO.class);
         org.setParentId(reqVO.getParentId() == null ? 0L : reqVO.getParentId());
+        applyLeader(org, reqVO.getLeaderId());
         safetyOrgMapper.updateById(org);
+    }
+
+    /**
+     * 璐熻矗浜猴細浠庡憳宸ユ。妗堝甫鍑哄鍚嶄笌鐢佃瘽骞惰惤蹇収
+     */
+    private void applyLeader(SafetyOrgDO org, Long leaderId) {
+        org.setLeaderId(leaderId);
+        if (leaderId == null) {
+            org.setLeaderName("");
+            return;
+        }
+        var employee = refResolver.requireEmployee(leaderId, SAFETY_EMPLOYEE_REQUIRED);
+        org.setLeaderName(employee.getName());
+        org.setLeaderPhone(employee.getPhone());
     }
 
     public void deleteOrg(Long id) {
@@ -60,11 +78,27 @@
     }
 
     /**
+     * 鍙栬礋璐d汉鏈�鏂版。妗堬紙渚涘崟鏉℃煡璇㈠洖濉敤锛�
+     */
+    public cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleDTO getLeader(Long leaderId) {
+        return refResolver.findEmployee(leaderId);
+    }
+
+    /**
      * 鏌ヨ缁勭粐鏍�
      */
     public List<SafetyOrgRespVO> getOrgTree() {
         List<SafetyOrgDO> all = safetyOrgMapper.selectListOrdered();
         List<SafetyOrgRespVO> nodes = BeanUtils.toBean(all, SafetyOrgRespVO.class);
+        // 璐熻矗浜虹敤鍛樺伐妗f鏈�鏂板鍚嶈鐩栧揩鐓э紝鍛樺伐鏀瑰悕/璋冨矖鍚庢爲涔熷悓姝�
+        var employeeMap = refResolver.employeeMap(
+                all.stream().map(SafetyOrgDO::getLeaderId).toList());
+        nodes.forEach(node -> {
+            var employee = employeeMap.get(node.getLeaderId());
+            if (employee != null) {
+                node.setLeaderName(employee.getName());
+            }
+        });
         Map<Long, List<SafetyOrgRespVO>> grouped = nodes.stream()
                 .collect(Collectors.groupingBy(SafetyOrgRespVO::getParentId, Collectors.toList()));
         nodes.forEach(node -> node.setChildren(grouped.getOrDefault(node.getId(), new ArrayList<>())));

--
Gitblit v1.9.3