From 2cf1565485060fd56e1f1f1cffbba7a4d70d42a6 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期五, 11 四月 2025 11:06:22 +0800
Subject: [PATCH] 优化dnc,设备结构树查询,优化原有代码

---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceCharactersServiceImpl.java              |   11 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java                    |    4 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/PartsInfo.java                                      |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java              |  235 +++++++++++++++++++++--------
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java                      |    5 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProcessSpecVersionService.java                    |    2 
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml                   |   20 ++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java |   32 ++++
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java                            |    3 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java            |   21 +-
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceManagementServiceImpl.java              |    5 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/PartsInfoCode.java                                |    7 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java                          |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDevicePermissionService.java                      |    2 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java         |   55 +++---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DeviceInfoController.java                       |   10 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java            |   10 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml         |   17 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java                                  |    2 
 19 files changed, 321 insertions(+), 124 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DeviceInfoController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DeviceInfoController.java
index a65a386..a99a09a 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DeviceInfoController.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DeviceInfoController.java
@@ -3,17 +3,15 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
-import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.dnc.entity.DeviceInfo;
 import org.jeecg.modules.dnc.response.*;
+import org.jeecg.modules.dnc.service.IDeviceInfoService;
 import org.jeecg.modules.dnc.service.IDevicePermissionService;
 import org.jeecg.modules.mdc.model.MdcEquipmentTree;
 import org.jeecg.modules.system.entity.SysUser;
-import org.jeecg.modules.dnc.entity.DeviceInfo;
-import org.jeecg.modules.dnc.service.IDeviceInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -171,10 +169,8 @@
     @GetMapping(value = "/queryTreeListByProduction")
     public Result<List<MdcEquipmentTree>> queryTreeListByProduction() {
         Result<List<MdcEquipmentTree>> result = new Result<>();
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        String userId = user.getId();
         try {
-            List<MdcEquipmentTree> mdcEquipmentTreeList = devicePermissionService.DncLoadTreeListByProduction(userId);
+            List<MdcEquipmentTree> mdcEquipmentTreeList = devicePermissionService.DncLoadTreeListByProduction();
             result.setSuccess(true);
             result.setResult(mdcEquipmentTreeList);
         } catch (Exception e) {
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java
index f5615b1..59a52ab 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ComponentInfo.java
@@ -46,7 +46,7 @@
     @TableField(value = "process_type")
     private Integer processType;
     @TableField(value = "structure_type")
-    private Integer structureType;
+    private String structureType;
     @TableField(value = "component_code")
     private String componentCode;
     @TableField(value = "component_status")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/PartsInfo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/PartsInfo.java
index 6c0c2d9..922814b 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/PartsInfo.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/PartsInfo.java
@@ -42,7 +42,7 @@
     @TableField(value = "process_type")
     private Integer processType;
     @TableField(value = "structure_type")
-    private Integer structureType;
+    private String structureType;
     @TableField(value = "parts_code")
     private String partsCode;
     @TableField(value = "parts_status")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java
index 3e25420..a9299d5 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoUploadRequest.java
@@ -9,6 +9,4 @@
     private String attributionId;
     private Integer attributionType;
     private String docClassCode;
-    /**鏄惁杩涘叆瀹$娴佺▼*/
-    private Boolean isApprove = true;
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/PartsInfoCode.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/PartsInfoCode.java
index d7bd592..8c04d5b 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/PartsInfoCode.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/response/PartsInfoCode.java
@@ -19,8 +19,9 @@
     PROCESSSPECVERSION_NOT_EXIST(false,25211,"宸ヨ壓瑙勭▼涓嶅瓨鍦紒"),
     PROCESSSPECVERSION_IS_EXIST(false,25212,"宸ヨ壓瑙勭▼宸插瓨鍦紒"),
     PROCESSSPECVERSION_CODE_NONE(false,25213,"璇疯緭鍏ュ伐鑹鸿绋嬬増鏈彿锛�"),
-    PROCESSSPECVERSION_PROCESS_EXIST(false,25214,"宸ヨ壓瑙勭▼鐗堟湰鏈夊叧鑱旂殑宸ュ簭淇℃伅锛�"),
-    PARTS_USER_NONE(false,25215,"闆朵欢鏃犳硶娓呯┖鐢ㄦ埛鏉冮檺锛岃鑷冲皯淇濈暀涓�浣嶅彲鎿嶄綔鐢ㄦ埛锛�");
+    PROCESSSPECVERSION_NONE(false,25214,"璇疯緭鍏ュ伐鑹鸿绋嬬増鏈悕绉帮紒"),
+    PROCESSSPECVERSION_PROCESS_EXIST(false,25215,"宸ヨ壓瑙勭▼鐗堟湰鏈夊叧鑱旂殑宸ュ簭淇℃伅锛�"),
+    PARTS_USER_NONE(false,25216,"闆朵欢鏃犳硶娓呯┖鐢ㄦ埛鏉冮檺锛岃鑷冲皯淇濈暀涓�浣嶅彲鎿嶄綔鐢ㄦ埛锛�");
 
     //鎿嶄綔浠g爜
     @ApiModelProperty(value = "鎿嶄綔鏄惁鎴愬姛", example = "true", required = true)
@@ -32,7 +33,7 @@
     //鎻愮ず淇℃伅
     @ApiModelProperty(value = "鎿嶄綔鎻愮ず", example = "鎿嶄綔杩囦簬棰戠箒锛�", required = true)
     String message;
-    private PartsInfoCode(boolean success, int code, String message){
+    PartsInfoCode(boolean success, int code, String message){
         this.success = success;
         this.code = code;
         this.message = message;
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDevicePermissionService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDevicePermissionService.java
index b819452..c886fb7 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDevicePermissionService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDevicePermissionService.java
@@ -56,5 +56,5 @@
     /**
      * 鍔犺浇浜х嚎璁惧鏍�
      */
-    List<MdcEquipmentTree> DncLoadTreeListByProduction(String userId);
+    List<MdcEquipmentTree> DncLoadTreeListByProduction();
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProcessSpecVersionService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProcessSpecVersionService.java
index e2d0c4e..c3e296a 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProcessSpecVersionService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProcessSpecVersionService.java
@@ -54,7 +54,7 @@
      * @param processSpecVersionCode
      * @return
      */
-    ProcessSpecVersion getByCode(String processSpecVersionCode);
+    ProcessSpecVersion getByCode(String partId,String processSpecVersionCode);
 
     /**
      * 鏍规嵁闆朵欢id鑾峰彇
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceCharactersServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceCharactersServiceImpl.java
index 8825c3b..523b03d 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceCharactersServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceCharactersServiceImpl.java
@@ -5,15 +5,19 @@
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.dnc.entity.DeviceCharacters;
 import org.jeecg.modules.dnc.exception.ExceptionCast;
 import org.jeecg.modules.dnc.mapper.DeviceCharactersMapper;
-import org.jeecg.modules.dnc.response.CommonCode;
-import org.jeecg.modules.dnc.response.QueryPageResponseResult;
 import org.jeecg.modules.dnc.request.DeviceCharactersRequest;
+import org.jeecg.modules.dnc.response.CommonCode;
 import org.jeecg.modules.dnc.service.IDeviceCharactersService;
 import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
 
 @Service
 public class DeviceCharactersServiceImpl extends ServiceImpl<DeviceCharactersMapper, DeviceCharacters> implements IDeviceCharactersService {
@@ -24,6 +28,8 @@
             ExceptionCast.cast(CommonCode.INVALID_PAGE);
         }
         IPage<DeviceCharacters> pageData = new Page<>(page, size);
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        List<String> productIdList = Arrays.asList(user.getProductionIds().split(","));
         LambdaQueryChainWrapper<DeviceCharacters> lambdaQuery = super.lambdaQuery();
         if(deviceCharactersRequest != null) {
             lambdaQuery.like(StrUtil.isNotEmpty(deviceCharactersRequest.getDeviceNo()),DeviceCharacters::getDeviceNo, deviceCharactersRequest.getDeviceNo());
@@ -33,6 +39,7 @@
             lambdaQuery.ge(StrUtil.isNotEmpty(deviceCharactersRequest.getStartTime()),DeviceCharacters::getCreateTime,deviceCharactersRequest.getStartTime());
             lambdaQuery.le(StrUtil.isNotEmpty(deviceCharactersRequest.getEndTime()),DeviceCharacters::getCreateTime,deviceCharactersRequest.getEndTime());
         }
+        lambdaQuery.in(DeviceCharacters::getDepartId, productIdList);
         lambdaQuery.orderByDesc(DeviceCharacters::getCreateTime);
         IPage<DeviceCharacters> userIPage = lambdaQuery.page(pageData);
         return Result.ok(userIPage);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceManagementServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceManagementServiceImpl.java
index 716979e..bd5c852 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceManagementServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceManagementServiceImpl.java
@@ -5,7 +5,9 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.dnc.entity.DeviceManagement;
 import org.jeecg.modules.dnc.entity.DeviceType;
 import org.jeecg.modules.dnc.exception.ExceptionCast;
@@ -143,10 +145,13 @@
      */
     @Override
     public Result<?> query(DeviceManagement deviceManagement, Integer pageNo, Integer pageSize){
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        List<String> productIdList = Arrays.asList(user.getProductionIds().split(","));
         QueryWrapper<DeviceManagement> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(StrUtil.isNotEmpty(deviceManagement.getProductionId()),"production_id",deviceManagement.getProductionId());
         queryWrapper.like(StrUtil.isNotEmpty(deviceManagement.getDeviceManagementName()),"device_management_name",deviceManagement.getDeviceManagementName());
         queryWrapper.like(StrUtil.isNotEmpty(deviceManagement.getDeviceManagementCode()),"device_management_code",deviceManagement.getDeviceManagementCode());
+        queryWrapper.in("production_id",productIdList);
         queryWrapper.orderByDesc("create_time");
         Page<DeviceManagement> page = new Page<>(pageNo, pageSize);
         IPage<DeviceManagement> pageList = super.page(page, queryWrapper);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java
index 498a9e9..ce32abf 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java
@@ -5,7 +5,9 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.dnc.entity.DevicePermission;
 import org.jeecg.modules.dnc.mapper.DevicePermissionMapper;
 import org.jeecg.modules.dnc.service.IDevicePermissionService;
@@ -24,10 +26,10 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class DevicePermissionServiceImpl extends ServiceImpl<DevicePermissionMapper, DevicePermission> implements IDevicePermissionService {
@@ -92,80 +94,181 @@
 
 
     /**
-     * 鍔犺浇浜х嚎璁惧鏍�
+     * * 鍔犺浇浜х嚎璁惧鏍�
      */
     @Override
-    public List<MdcEquipmentTree> DncLoadTreeListByProduction(String userId){
-        //鑾峰彇鎵�鏈変骇绾挎暟鎹�
-        List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder));
-        //鏍规嵁鐢ㄦ埛id鑾峰彇鎷ユ湁鐨勪骇绾夸俊鎭泦鍚�
-        List<String> productionIds = mdcUserProductionService.queryProductionIdsByUserId(userId);
-        List<String> allProductionIds = new ArrayList<>();
-        //鎵惧埌鎵�鏈変骇绾縤d鐨勪笂绾d
-        if (productionIds != null && !productionIds.isEmpty()) {
-            for (String productionId : productionIds) {
-                this.getAllProductionIds(productionList, productionId, allProductionIds);
-            }
-        }
-        //杩囨护浜х嚎鏁版嵁
-        List<MdcProduction> list = productionList.stream().filter((MdcProduction mdcProduction) -> allProductionIds.contains(mdcProduction.getId())).collect(Collectors.toList());
-        //缁勮浜х嚎璁惧鏍�
-        List<MdcEquipmentTree> treeList = FindsEquipmentProductionUtil.wrapEquipmentProductionTreeList(list);
-        //濉厖璁惧鏁版嵁
-        FillEquipmentByProduction(treeList,userId);
+    public List<MdcEquipmentTree> DncLoadTreeListByProduction() {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        // 鑾峰彇鎵�鏈夋湁鏁堜骇绾垮苟寤虹珛蹇�熸煡璇㈡槧灏�
+        Map<String, MdcProduction> productionMap = getValidProductions();
+
+        // 鑾峰彇鐢ㄦ埛鏉冮檺鐩稿叧鐨勬墍鏈変骇绾縄D锛堝寘鍚眰绾х鍏堬級
+        Set<String> authorizedProductionIds = getAuthorizedProductionIds(user.getId(), productionMap);
+
+        // 鏋勫缓浜х嚎鏍戠粨鏋�
+        List<MdcEquipmentTree> treeList = buildProductionTree(new ArrayList<>(authorizedProductionIds), productionMap);
+
+        // 鎵归噺濉厖璁惧鏁版嵁
+        fillEquipmentData(treeList, user);
+
         return treeList;
     }
 
     /**
-     * 鑾峰彇鎵�鏈夌殑浜х嚎id锛堝寘鍚墍鏈変笂绾э級
-     */
-    private void getAllProductionIds(List<MdcProduction> productionList, String productionId, List<String> allProductionIds) {
-        if (!allProductionIds.contains(productionId)) {
-            allProductionIds.add(productionId);
-        }
-        for (MdcProduction mdcProduction : productionList) {
-            if (StringUtils.isEmpty(mdcProduction.getParentId())) {
-                continue;
-            }
-            if (productionId.equals(mdcProduction.getId())) {
-                if (!allProductionIds.contains(mdcProduction.getParentId())) {
-                    allProductionIds.add(mdcProduction.getParentId());
-                    getAllProductionIds(productionList, mdcProduction.getParentId(), allProductionIds);
-                }
-            }
+     * 鑾峰彇鎵�鏈夋湁鏁堜骇绾垮苟寤虹珛ID鏄犲皠
+    */
+    private Map<String, MdcProduction> getValidProductions() {
+        List<MdcProduction> productions = mdcProductionService.list(
+                new LambdaQueryWrapper<MdcProduction>()
+                        .eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0)
+                        .orderByAsc(MdcProduction::getProductionOrder)
+        );
+        return productions.stream().collect(Collectors.toMap(MdcProduction::getId, Function.identity()));
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛鏉冮檺鐩稿叧鐨勬墍鏈変骇绾縄D锛堝寘鍚眰绾х鍏堬級
+    */
+    private Set<String> getAuthorizedProductionIds(String userId, Map<String, MdcProduction> productionMap) {
+        Set<String> result = new HashSet<>();
+
+        // 鑾峰彇鐩存帴鍏宠仈鐨勪骇绾縄D
+        List<String> directProductionIds = Optional.ofNullable(mdcUserProductionService.queryProductionIdsByUserId(userId))
+                .orElse(Collections.emptyList());
+
+        // 閫掑綊鏀堕泦鎵�鏈夊眰绾D
+        directProductionIds.forEach(id -> collectHierarchyIds(id, productionMap, result));
+
+        return result;
+    }
+
+    /**
+    * 閫掑綊鏀堕泦灞傜骇ID锛堝寘鍚嚜韬強鎵�鏈夌鍏堬級
+    */
+    private void collectHierarchyIds(String productionId, Map<String, MdcProduction> productionMap, Set<String> collector) {
+        if (collector.contains(productionId)) return;
+
+        MdcProduction current = productionMap.get(productionId);
+        if (current == null) return;
+
+        collector.add(productionId);
+        if (StringUtils.isNotBlank(current.getParentId())) {
+            collectHierarchyIds(current.getParentId(), productionMap, collector);
         }
     }
 
     /**
-     * 浜х嚎璁惧鏍戝~鍏呰澶囨暟鎹�
-     */
-    private void FillEquipmentByProduction(List<MdcEquipmentTree> treeList,String userId) {
-        //鑾峰彇宸插垎閰嶆潈闄愯澶囨暟鎹�
-        List<String> deviceIds=super.list(new QueryWrapper<DevicePermission>().eq("user_id",userId)).stream().map(DevicePermission::getDeviceId).collect(Collectors.toList());
-        if (!deviceIds.isEmpty()){
-            for (MdcEquipmentTree mdcEquipmentTree : treeList) {
-                List<MdcEquipment> equipmentList = mdcEquipmentMapper.queryByProductionIdAndType(mdcEquipmentTree.getKey(),deviceIds);
-                if (equipmentList != null && !equipmentList.isEmpty()) {
-                    for (MdcEquipment mdcEquipment : equipmentList) {
-                        if (mdcEquipment.getCreateBy()!=null&& !mdcEquipment.getCreateBy().isEmpty()){
-                            mdcEquipment.setCreateBy(sysUserService.getUserByName(mdcEquipment.getCreateBy()).getRealname());
-                        }
-                        if (mdcEquipment.getUpdateBy()!=null&& !mdcEquipment.getUpdateBy().isEmpty()){
-                            mdcEquipment.setUpdateBy(sysUserService.getUserByName(mdcEquipment.getUpdateBy()).getRealname());
-                        }
-                        MdcEquipmentTree tree = new MdcEquipmentTree().convert(mdcEquipment);
-                        tree.setParentId(mdcEquipmentTree.getKey());
-                        tree.setEntity(mdcEquipment);
-                        tree.setType(2);
-                        mdcEquipmentTree.getChildren().add(tree);
-                    }
-                    mdcEquipmentTree.setLeaf(false);
-                }
-                if (!mdcEquipmentTree.getChildren().isEmpty()) {
-                    FillEquipmentByProduction(mdcEquipmentTree.getChildren(),userId);
-                }
-            }
+     鏋勫缓浜х嚎鏍戠粨鏋�
+    */
+    private List<MdcEquipmentTree> buildProductionTree(List<String> productionIds, Map<String, MdcProduction> productionMap) {
+
+        List<MdcProduction> filteredProductions = new ArrayList<>();
+        productionIds.forEach(id -> {
+        MdcProduction production = productionMap.get(id);
+        if (production != null) {
+            filteredProductions.add(production);
         }
+        });
+        return FindsEquipmentProductionUtil.wrapEquipmentProductionTreeList(filteredProductions);
+    }
+    /**
+    * 鎵归噺濉厖璁惧鏁版嵁
+    */
+    private void fillEquipmentData(List<MdcEquipmentTree> treeList, LoginUser user) {
+        // 鑾峰彇鐢ㄦ埛璁惧鏉冮檺
+        Set<String> deviceIds = getAuthorizedDeviceIds(user.getId());
+        if (deviceIds.isEmpty()) return;
+
+        // 鎵归噺鑾峰彇鎵�鏈夌浉鍏宠澶�
+        Map<String, List<MdcEquipment>> equipmentMap = getEquipmentMap(user, deviceIds);
+
+        // 鎵归噺鑾峰彇鐢ㄦ埛淇℃伅
+        Map<String, String> userRealNameMap = getUserRealNameMapping(equipmentMap.values());
+
+        // 濉厖璁惧鏁版嵁鍒版爲鑺傜偣
+        populateEquipmentNodes(treeList, equipmentMap, userRealNameMap);
+    }
+
+/**
+        * 鑾峰彇鎺堟潈璁惧ID闆嗗悎
+ */
+    private Set<String> getAuthorizedDeviceIds(String userId) {
+        return super.list(new QueryWrapper<DevicePermission>().select("device_id").eq("user_id", userId))
+                .stream()
+                .map(DevicePermission::getDeviceId)
+                .collect(Collectors.toSet());
+    }
+
+    /**
+     * 鎵归噺鑾峰彇璁惧鏁版嵁骞舵寜浜х嚎鍒嗙粍
+    */
+    private Map<String, List<MdcEquipment>> getEquipmentMap(LoginUser user, Set<String> deviceIds) {
+        List<String> productionIds=Arrays.asList(user.getProductionIds().split(","));
+        return mdcEquipmentMapper.queryByDepartIdsAndType(productionIds, new ArrayList<>(deviceIds))
+                .stream()
+                .collect(Collectors.groupingBy(MdcEquipment::getProductionId));
+    }
+
+
+    /*** 鎵归噺鑾峰彇鐢ㄦ埛鐪熷疄濮撳悕鏄犲皠
+    */
+    private Map<String, String> getUserRealNameMapping(Collection<List<MdcEquipment>> equipmentLists) {
+        Set<String> userNames = equipmentLists.stream()
+                .flatMap(List::stream)
+                .flatMap(e -> Stream.of(e.getCreateBy(), e.getUpdateBy()))
+                .filter(StringUtils::isNotBlank)
+                .collect(Collectors.toSet());
+
+        return sysUserService.getUserRealNamesByUserNames(new ArrayList<>(userNames));
+    }
+
+    /**
+     * 濉厖璁惧鑺傜偣鏁版嵁
+    */
+    private void populateEquipmentNodes(List<MdcEquipmentTree> nodes,
+                                        Map<String, List<MdcEquipment>> equipmentMap,
+                                        Map<String, String> userRealNameMap) {
+        for (MdcEquipmentTree node : nodes) {
+            if (!isProductionNode(node)) continue;
+
+            List<MdcEquipment> equipments = equipmentMap.getOrDefault(node.getKey(), Collections.emptyList());
+            List<MdcEquipmentTree> equipmentNodes = convertToEquipmentNodes(equipments, userRealNameMap, node.getKey());
+
+            node.getChildren().addAll(equipmentNodes);
+            node.setLeaf(equipmentNodes.isEmpty());
+
+            // 閫掑綊澶勭悊瀛愯妭鐐�
+            populateEquipmentNodes(node.getChildren(), equipmentMap, userRealNameMap);
+        }
+    }
+
+/**
+        * 杞崲璁惧鏁版嵁涓烘爲鑺傜偣
+ */
+    private List<MdcEquipmentTree> convertToEquipmentNodes(List<MdcEquipment> equipments,
+                                                           Map<String, String> userRealNameMap,
+                                                           String parentId) {
+        return equipments.stream().map(e -> {
+            // 鏇存柊鐢ㄦ埛鏄剧ず鍚嶇О
+            Optional.ofNullable(e.getCreateBy()).ifPresent(name ->
+                    e.setCreateBy(userRealNameMap.getOrDefault(name, name)));
+            Optional.ofNullable(e.getUpdateBy()).ifPresent(name ->
+                    e.setUpdateBy(userRealNameMap.getOrDefault(name, name)));
+
+            MdcEquipmentTree node = new MdcEquipmentTree().convert(e);
+            node.setParentId(parentId);
+            node.setEntity(e);
+            node.setType(2); // 璁惧鑺傜偣绫诲瀷
+            return node;
+        }).collect(Collectors.toList());
+    }
+
+/**
+        * 鍒ゆ柇鏄惁涓轰骇绾胯妭鐐癸紙鏍规嵁涓氬姟閫昏緫瀹氫箟锛�
+            */
+    private boolean isProductionNode(MdcEquipmentTree node) {
+        return node.getType() == 1; // 鍋囪绫诲瀷1琛ㄧず浜х嚎鑺傜偣
     }
 
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
index 22055f0..008852d 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
@@ -90,7 +90,7 @@
         if(ProcessSpecVersion == null)
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         if(!ValidateUtil.validateString(ProcessSpecVersion.getProcessSpecVersionName()))
-            ExceptionCast.cast(PartsInfoCode.PARTS_NAME_NONE);
+            ExceptionCast.cast(PartsInfoCode.PROCESSSPECVERSION_NONE);
         if(!ValidateUtil.validateString(ProcessSpecVersion.getProductId()))
             ExceptionCast.cast(PartsInfoCode.PARTS_PRODUCT_NONE);
         if(!ValidateUtil.validateString(ProcessSpecVersion.getComponentId()))
@@ -99,7 +99,7 @@
             ExceptionCast.cast(ProcessInfoCode.PROCESS_PARTS_NONE);
         if(!ValidateUtil.validateString(ProcessSpecVersion.getProcessSpecVersionCode()))
             ExceptionCast.cast(PartsInfoCode.PROCESSSPECVERSION_CODE_NONE);
-        ProcessSpecVersion en = getByCode(ProcessSpecVersion.getProcessSpecVersionCode());
+        ProcessSpecVersion en = getByCode(ProcessSpecVersion.getPartsId(),ProcessSpecVersion.getProcessSpecVersionCode());
         if(en != null)
             ExceptionCast.cast(PartsInfoCode.PROCESSSPECVERSION_IS_EXIST);
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -243,9 +243,11 @@
     }
 
     @Override
-    public ProcessSpecVersion getByCode(String processSpecVersionCode) {
+    public ProcessSpecVersion getByCode(String partId,String processSpecVersionCode) {
         if(ValidateUtil.validateString(processSpecVersionCode)) {
-            List<ProcessSpecVersion> list = super.lambdaQuery().eq(ProcessSpecVersion::getProcessSpecVersionCode, processSpecVersionCode).list();
+            List<ProcessSpecVersion> list = super.lambdaQuery()
+                    .eq(ProcessSpecVersion::getPartsId, partId)
+                    .eq(ProcessSpecVersion::getProcessSpecVersionCode, processSpecVersionCode).list();
             if(list == null || list.isEmpty())
                 return null;
             return list.get(0);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
index e2bfacc..2d4824d 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
@@ -19,6 +19,10 @@
     @Autowired
     private IPermissionStreamNewService permissionStreamNewService;
 
+    /**
+     * 榛樿缁撴瀯鏍戞煡璇�
+     * @return
+     */
     @Override
     public List<ProductMix> getTree() {
         LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
index 543ad28..f7873d5 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
@@ -186,4 +186,7 @@
     @Dict(dicCode = "mdc_staff_team")
     @ApiModelProperty(value = "閰嶉�佸皬缁�")
     private String teamCode;
+
+    // 鍏宠仈浜х嚎锛堥潪鏁版嵁搴撳瓧娈碉級
+    private transient String productionId;
 }
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
index cba730b..57d0f71 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -64,6 +64,11 @@
     List<MdcEquipment> queryByProductionIdAndType(@Param("productionId") String productionId, @Param("deviceIds") List<String> deviceIds);
 
     /**
+     * 鏍规嵁閮ㄩ棬ids銆佸凡鍒嗛厤鏉冮檺鏁版嵁 鏌ヨ璁惧
+     */
+    List<MdcEquipment> queryByDepartIdsAndType(@Param("productionIds") List<String> productionIds, @Param("deviceIds") List<String> deviceIds);
+
+    /**
      * 鏌ユ壘璁惧鐩戞帶淇℃伅
      */
     List<MdcEquipmentMonitor> checkStatusFromEquipmentIds(@Param("equipmentIds") List<String> equipmentIds);
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
index 19bb11d..8440226 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -279,7 +279,8 @@
 
     <select id="queryByProductionIdAndType" resultType="org.jeecg.modules.mdc.entity.MdcEquipment">
         SELECT
-        me.*
+        me.*,
+        mpe.production_id
         FROM
         mdc_production_equipment mpe,
         mdc_equipment me
@@ -339,5 +340,22 @@
             #{equipmentType}
         </foreach>
     </select>
+    <select id="queryByDepartIdsAndType" resultType="org.jeecg.modules.mdc.entity.MdcEquipment">
+        SELECT
+            e.*,
+        ep.production_id
+        FROM
+        mdc_equipment e
+        INNER JOIN mdc_production_equipment ep ON e.id = ep.equipment_id
+        WHERE
+        ep.production_id IN
+        <foreach collection='productionIds' item='id' open='(' separator=',' close=')'>
+            #{id}
+        </foreach>
+        AND e.id IN
+        <foreach collection='deviceIds' item='deviceId' open='(' separator=',' close=')'>
+            #{deviceId}
+        </foreach>
+    </select>
 
 </mapper>
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
index 7966336..3200bfe 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
@@ -27,7 +27,7 @@
 	 * @param username
 	 * @return
 	 */
-	public SysUser getUserByName(@Param("username") String username);
+    SysUser getUserByName(@Param("username") String username);
 
 	/**
 	 *  鏍规嵁閮ㄩ棬Id鏌ヨ鐢ㄦ埛淇℃伅
@@ -62,28 +62,28 @@
 	 * @return
 	 */
 	IPage<SysUser> getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username);
-	
+
 	/**
 	 * 鏍规嵁鐢ㄦ埛鍚嶈缃儴闂↖D
 	 * @param username
 	 * @param orgCode
 	 */
 	void updateUserDepart(@Param("username") String username,@Param("orgCode") String orgCode);
-	
+
 	/**
 	 * 鏍规嵁鎵嬫満鍙锋煡璇㈢敤鎴蜂俊鎭�
 	 * @param phone
 	 * @return
 	 */
-	public SysUser getUserByPhone(@Param("phone") String phone);
-	
-	
+    SysUser getUserByPhone(@Param("phone") String phone);
+
+
 	/**
 	 * 鏍规嵁閭鏌ヨ鐢ㄦ埛淇℃伅
 	 * @param email
 	 * @return
 	 */
-	public SysUser getUserByEmail(@Param("email")String email);
+    SysUser getUserByEmail(@Param("email") String email);
 
 	/**
 	 * 鏍规嵁 orgCode 鏌ヨ鐢ㄦ埛锛屽寘鎷瓙閮ㄩ棬涓嬬殑鐢ㄦ埛
@@ -150,7 +150,7 @@
      */
     @Deprecated
     int updateNullByEmptyString(@Param("fieldName") String fieldName);
-    
+
 	/**
 	 *  鏍规嵁閮ㄩ棬Ids,鏌ヨ閮ㄩ棬涓嬬敤鎴蜂俊鎭�
 	 * @param departIds
@@ -183,4 +183,9 @@
 	 * 鏍规嵁瑙掕壊缂栫爜鍜岃澶囩紪鍙锋煡璇㈢敤鎴�
 	 */
     List<SysUser> getEquipmentAdmin(@Param("roleCode") String roleCode, @Param("equipmentId") String equipmentId);
+
+	/** 鏍规嵁鐢ㄦ埛鍚嶆壒閲忔煡璇�
+     * @param userNames 鐢ㄦ埛鍚嶅垪琛紙闇�纭繚闈炵┖锛�
+	 */
+	List<SysUser> selectUsersByNames(@Param("userNames") List<String> userNames);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
index 3e751a9..2eda850 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
@@ -45,7 +45,7 @@
 			and username = #{username}
 		</if>
 	</select>
-	
+
 	<!--  淇敼鐢ㄦ埛閮ㄩ棬code -->
 	<update id="updateUserDepart">
 		UPDATE sys_user SET org_code = #{orgCode} where username = #{username}
@@ -55,7 +55,7 @@
 	<select id="getUserByPhone"  resultType="org.jeecg.modules.system.entity.SysUser">
 		select * from  sys_user  where phone = #{phone} and del_flag = 0
 	</select>
-	
+
 	<!-- 鏍规嵁閭鏌ヨ鐢ㄦ埛淇℃伅 -->
 	<select id="getUserByEmail" resultType="org.jeecg.modules.system.entity.SysUser">
 	select * from  sys_user  where email = #{email} and del_flag = 0
@@ -217,4 +217,15 @@
 		WHERE
 			t3.role_code = #{roleCode} AND equipment_ids LIKE concat(concat('%',#{equipmentId}),'%')
 	</select>
-</mapper>
\ No newline at end of file
+    <select id="selectUsersByNames" resultType="org.jeecg.modules.system.entity.SysUser">
+		SELECT
+		username,
+		realname
+		FROM sys_user
+		WHERE
+		username IN
+		<foreach item="name" collection="userNames" open="(" separator="," close=")">
+			#{name}
+		</foreach>
+	</select>
+</mapper>
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
index 4a23faa..3604d3f 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -37,7 +37,7 @@
 	 * @param confirmpassword
 	 * @return
 	 */
-	public Result<?> resetPassword(String username, String oldpassword, String newpassword, String confirmpassword);
+    Result<?> resetPassword(String username, String oldpassword, String newpassword, String confirmpassword);
 
 	/**
 	 * 淇敼瀵嗙爜
@@ -45,50 +45,50 @@
 	 * @param sysUser
 	 * @return
 	 */
-	public Result<?> changePassword(SysUser sysUser);
+    Result<?> changePassword(SysUser sysUser);
 
 	/**
 	 * 鍒犻櫎鐢ㄦ埛
 	 * @param userId
 	 * @return
 	 */
-	public boolean deleteUser(String userId);
+    boolean deleteUser(String userId);
 
 	/**
 	 * 鎵归噺鍒犻櫎鐢ㄦ埛
 	 * @param userIds
 	 * @return
 	 */
-	public boolean deleteBatchUsers(String userIds);
+    boolean deleteBatchUsers(String userIds);
 
     /**
      * 鏍规嵁鐢ㄦ埛鍚嶆煡璇�
      * @param username 鐢ㄦ埛鍚�
      * @return SysUser
      */
-	public SysUser getUserByName(String username);
-	
+    SysUser getUserByName(String username);
+
 	/**
 	 * 娣诲姞鐢ㄦ埛鍜岀敤鎴疯鑹插叧绯�
 	 * @param user
 	 * @param roles
 	 */
-	public void addUserWithRole(SysUser user,String roles);
-	
-	
+    void addUserWithRole(SysUser user, String roles);
+
+
 	/**
 	 * 淇敼鐢ㄦ埛鍜岀敤鎴疯鑹插叧绯�
 	 * @param user
 	 * @param roles
 	 */
-	public void editUserWithRole(SysUser user,String roles);
+    void editUserWithRole(SysUser user, String roles);
 
 	/**
 	 * 鑾峰彇鐢ㄦ埛鐨勬巿鏉冭鑹�
 	 * @param username
 	 * @return
 	 */
-	public List<String> getRole(String username);
+    List<String> getRole(String username);
 
 	/**
 	 * 鑾峰彇鏍规嵁鐧诲綍鐢ㄦ埛鐨勮鑹茶幏鍙栧姩鎬侀椤�
@@ -97,15 +97,15 @@
 	 * @param version 鍓嶇UI鐗堟湰
 	 * @return
 	 */
-	public SysRoleIndex getDynamicIndexByUserRole(String username,String version);
-	
+    SysRoleIndex getDynamicIndexByUserRole(String username, String version);
+
 	/**
 	  * 鏌ヨ鐢ㄦ埛淇℃伅鍖呮嫭 閮ㄩ棬淇℃伅
 	 * @param username
 	 * @return
 	 */
 	@Deprecated
-	public SysUserCacheInfo getCacheUser(String username);
+    SysUserCacheInfo getCacheUser(String username);
 
 	/**
 	 * 鏍规嵁閮ㄩ棬Id鏌ヨ
@@ -114,7 +114,7 @@
      * @param username 鐢ㄦ埛璐︽埛鍚嶇О
 	 * @return
 	 */
-	public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId, String username);
+    IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId, String username);
 
 	/**
 	 * 鏍规嵁閮ㄩ棬Ids鏌ヨ
@@ -123,14 +123,14 @@
      * @param username 鐢ㄦ埛璐︽埛鍚嶇О
 	 * @return
 	 */
-	public IPage<SysUser> getUserByDepIds(Page<SysUser> page, List<String> departIds, String username);
+    IPage<SysUser> getUserByDepIds(Page<SysUser> page, List<String> departIds, String username);
 
 	/**
 	 * 鏍规嵁 userIds鏌ヨ锛屾煡璇㈢敤鎴锋墍灞為儴闂ㄧ殑鍚嶇О锛堝涓儴闂ㄥ悕閫楀彿闅斿紑锛�
 	 * @param userIds
 	 * @return
 	 */
-	public Map<String,String> getDepNamesByUserIds(List<String> userIds);
+    Map<String,String> getDepNamesByUserIds(List<String> userIds);
 
     /**
      * 鏍规嵁閮ㄩ棬 Id 鍜� QueryWrapper 鏌ヨ
@@ -161,7 +161,7 @@
      * @param username 鐢ㄦ埛璐︽埛鍚嶇О
 	 * @return
 	 */
-	public IPage<SysUser> getUserByRoleId(Page<SysUser> page,String roleId, String username);
+    IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username);
 
 	/**
 	 * 閫氳繃鐢ㄦ埛鍚嶈幏鍙栫敤鎴疯鑹查泦鍚�
@@ -178,20 +178,20 @@
 	 * @return 鏉冮檺闆嗗悎
 	 */
 	Set<String> getUserPermissionsSet(String username);
-	
+
 	/**
 	 * 鏍规嵁鐢ㄦ埛鍚嶈缃儴闂↖D
 	 * @param username
 	 * @param orgCode
 	 */
 	void updateUserDepart(String username,String orgCode);
-	
+
 	/**
 	 * 鏍规嵁鎵嬫満鍙疯幏鍙栫敤鎴峰悕鍜屽瘑鐮�
      * @param phone 鎵嬫満鍙�
      * @return SysUser
 	 */
-	public SysUser getUserByPhone(String phone);
+    SysUser getUserByPhone(String phone);
 
 
 	/**
@@ -199,7 +199,7 @@
      * @param email 閭
      * @return SysUser
      */
-	public SysUser getUserByEmail(String email);
+    SysUser getUserByEmail(String email);
 
 
 	/**
@@ -215,7 +215,7 @@
 	 * @param departs
 	 */
 	void editUserWithDepart(SysUser user, String departs);
-	
+
 	/**
 	   * 鏍¢獙鐢ㄦ埛鏄惁鏈夋晥
 	 * @param sysUser
@@ -316,7 +316,7 @@
 	 * @param
 	 * @return
 	 */
-	public List<SysUser> getAllUsersByRoleId(String roleId);
+    List<SysUser> getAllUsersByRoleId(String roleId);
 
 	List<String> getUserByRoleCode(String roleCode);
 
@@ -330,4 +330,11 @@
 	 * @return
 	 */
     List<UserSelector> selectOperatorList(String equipmentCode, String productionId, String positionCode);
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛鍚嶆壒閲忚幏鍙栫湡瀹炲鍚嶆槧灏�
+     * @param userNames 鐢ㄦ埛鍚嶅垪琛�
+     * @return 鐢ㄦ埛鍚�->鐪熷疄濮撳悕鐨勬槧灏勶紙涓嶅瓨鍦ㄦ椂鍊间负null锛�
+	 */
+	Map<String, String> getUserRealNamesByUserNames(List<String> userNames);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
index d2d6455..2518957 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -762,4 +763,35 @@
 		List<UserSelector> collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList());
 		return collect;
 	}
+
+	/**
+	 * 鏍规嵁鐢ㄦ埛鍚嶆壒閲忚幏鍙栫湡瀹炲鍚嶆槧灏�
+	 * @param userNames 鐢ㄦ埛鍚嶅垪琛�
+	 * @return 鐢ㄦ埛鍚�->鐪熷疄濮撳悕鐨勬槧灏勶紙涓嶅瓨鍦ㄦ椂鍊间负null锛�
+	 */
+	@Override
+	public Map<String, String> getUserRealNamesByUserNames(List<String> userNames) {
+		if (CollectionUtils.isEmpty(userNames)) {
+			return Collections.emptyMap();
+		}
+
+		// 鍘婚噸骞惰繃婊ょ┖鍊�
+		Set<String> uniqueNames = userNames.stream()
+				.filter(StringUtils::isNotBlank)
+				.collect(Collectors.toSet());
+		if (uniqueNames.isEmpty()) {
+			return Collections.emptyMap();
+		}
+
+		// 鎵归噺鏌ヨ锛堣嚜鍔ㄥ鐞咺N璇彞鍒嗙墖锛�
+		List<SysUser> users = userMapper.selectUsersByNames(new ArrayList<>(uniqueNames));
+
+		// 鏋勫缓鏄犲皠鍏崇郴
+		return users.stream()
+				.collect(Collectors.toMap(
+						SysUser::getUsername,
+						SysUser::getRealname,
+						(existing, replacement) -> existing // 閲嶅閿鐞�
+				));
+	}
 }

--
Gitblit v1.9.3