From 24e0bdd24a10449c98013cdb5bcc5e37735f5a91 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期一, 16 六月 2025 09:04:01 +0800
Subject: [PATCH] 对接刀具系统,涉密网封装结构树与文件

---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java |  461 ++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 389 insertions(+), 72 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java
index ee0c849..6a6c10f 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java
@@ -1,32 +1,36 @@
 package org.jeecg.modules.dnc.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import liquibase.pro.packaged.S;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.dnc.constant.DocAttributionTypeEnum;
 import org.jeecg.modules.dnc.dto.ComponentExt;
+import org.jeecg.modules.dnc.entity.*;
 import org.jeecg.modules.dnc.exception.ExceptionCast;
-import org.jeecg.modules.dnc.mapper.ProcessSpecVersionPermissionMapper;
 import org.jeecg.modules.dnc.mapper.ProductInfoMapper;
+import org.jeecg.modules.dnc.request.DocInfoQueryRequest;
+import org.jeecg.modules.dnc.request.TreeInfoRequest;
 import org.jeecg.modules.dnc.response.*;
 import org.jeecg.modules.dnc.service.*;
 import org.jeecg.modules.dnc.service.support.ProductTreeWrapper;
 import org.jeecg.modules.dnc.ucenter.UserDepartExt;
 import org.jeecg.modules.dnc.utils.ValidateUtil;
-import org.jeecg.modules.dnc.entity.*;
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.jeecg.modules.system.service.ISysUserService;
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import redis.clients.jedis.Jedis;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -79,6 +83,15 @@
     private IProcessStreamPermissionService iProcessStreamPermissionService;
     @Autowired
     private IWorkStepPermissionService iWorkStepPermissionService;
+    @Autowired
+    private IProductMixService productMixService;
+    @Autowired
+    @Lazy
+    private IDocInfoService docInfoService;
+    @Autowired
+    private IDeviceTypeService deviceTypeService;
+    @Autowired
+    private IDeviceManagementService deviceManagementService;
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
@@ -106,11 +119,32 @@
         if (!b) {
             ExceptionCast.cast(ProductInfoCode.PRODUCT_SAVE_ERROR);
         }
+        //娣诲姞缁撴瀯鏍�
+        ProductMix productMix = new ProductMix(Long.parseLong(productInfo.getProductId()),0L,
+                productInfo.getProductName(),productInfo.getProductNo(),1,new Date());
+        productMixService.save(productMix);
+        //娣诲姞鐢ㄦ埛閮ㄩ棬
+        if(StrUtil.isNotBlank(user.getProductionIds())){
+            String[] split = user.getProductionIds().split(",");
+            String[] departIds = split;
+            for (String departId : departIds) {
+                ProductDepartment productDepartment = new ProductDepartment();
+                productDepartment.setProductId(productInfo.getProductId());
+                productDepartment.setDepartId(departId);
+                productDepartmentService.save(productDepartment);
+                PermissionStreamNew stream = new PermissionStreamNew();
+                stream.setBusinessId(productInfo.getProductId());
+                stream.setDepartId(departId);
+                stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
+                permissionStreamNewService.save(stream);
+            }
+        }
+        //娣诲姞鐢ㄦ埛鏉冮檺
         PermissionStreamNew stream = new PermissionStreamNew();
         stream.setBusinessId(productInfo.getProductId());
         stream.setUserId(userId);
-        stream.setBusinessType("1");
-        return permissionStreamNewService.save(stream);
+        stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
+        return permissionStreamNewService.addPermissionStreamNew(stream);
     }
 
     @Override
@@ -128,6 +162,11 @@
         productInfo.setProductId(id);
         productInfo.setProductStatus(null);
         boolean b = super.updateById(productInfo);
+        //鍚屾淇敼缁撴瀯鏍�
+        ProductMix productMix = productMixService.getById(Long.parseLong(id));
+        productMix.setTreeName(productInfo.getProductName());
+        productMix.setTreeCode(productInfo.getProductNo());
+        productMixService.updateById(productMix);
         if (!b)
             return false;
         ProductPermission permission = productPermissionService.getByProductIdAndUserId(id, userId);
@@ -140,12 +179,12 @@
                 return false;
             }
         }
-        PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(id, userId, "1");
+        PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(id, userId, DocAttributionTypeEnum.PRODUCT.getCode().toString());
         if (stream == null) {
             stream = new PermissionStreamNew();
             stream.setBusinessId(productInfo.getProductId());
             stream.setUserId(userId);
-            stream.setBusinessType("1");
+            stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
             return permissionStreamNewService.save(stream);
         }
         return b;
@@ -224,7 +263,7 @@
             ExceptionCast.cast(ProductInfoCode.PRODUCT_PROCESS_EXIST);
         boolean b = productPermissionService.deleteByProductId(id);
         //楠岃瘉鏄惁瀛樺湪鏂囨。
-        List<DocRelative> docRelativeList = iDocRelativeService.list(new QueryWrapper<DocRelative>().eq("attribution_type", "1").eq("attribution_id", id));
+        List<DocRelative> docRelativeList = iDocRelativeService.list(new QueryWrapper<DocRelative>().eq("attribution_type", DocAttributionTypeEnum.PRODUCT.getCode() ).eq("attribution_id", id));
         if (!docRelativeList.isEmpty()) {
             ExceptionCast.cast(ProductInfoCode.PRODUCT_DOC_EXIST);
         }
@@ -233,10 +272,13 @@
         b = productDepartmentService.deleteByProductId(id);
         if (!b)
             ExceptionCast.cast(CommonCode.FAIL);
-        b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(id, "1","0");
+        b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(id, DocAttributionTypeEnum.PRODUCT.getCode().toString(),"0");
         if (!b)
             ExceptionCast.cast(CommonCode.FAIL);
-        b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(id, "1","1");
+        b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(id, DocAttributionTypeEnum.PRODUCT.getCode().toString(),"1");
+        if (!b)
+            ExceptionCast.cast(CommonCode.FAIL);
+        b = productMixService.removeById(id);
         if (!b)
             ExceptionCast.cast(CommonCode.FAIL);
         return super.removeById(id);
@@ -250,37 +292,37 @@
         String userId = user.getId();
         if (!ValidateUtil.validateString(userId))
             ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
-        if (nodeType == 1) {
+        if (nodeType.equals(DocAttributionTypeEnum.PRODUCT.getCode())) {
             ProductInfo productInfo = super.getById(paramId);
             if (productInfo == null)
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
             PermissionStreamNew permission = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(paramId, userId,"1");
             return permission != null;
-        } else if (nodeType == 2) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.COMPONENT.getCode())) {
             ComponentInfo componentInfo = componentInfoService.getById(paramId);
             if (componentInfo == null)
                 ExceptionCast.cast(ComponentInfoCode.COMPONENT_NOT_EXIST);
             PermissionStreamNew permission = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(componentInfo.getComponentId(), userId,"2");
             return permission != null;
-        } else if (nodeType == 3) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PARTS.getCode())) {
             PartsInfo partsInfo = partsInfoService.getById(paramId);
             if (partsInfo == null)
                 ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
             PermissionStreamNew permission = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(partsInfo.getPartsId(), userId, "3");
             return permission != null;
-        } else if (nodeType == 4) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
             ProcessSpecVersion processSpecVersion = processSpecVersionService.getById(paramId);
             if (processSpecVersion == null)
                 ExceptionCast.cast(PartsInfoCode.PROCESSSPECVERSION_NOT_EXIST);
             PermissionStreamNew permission = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processSpecVersion.getId(),userId,"4");
             return permission != null;
-        } else if (nodeType == 5) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
             ProcessStream processStream = processStreamService.getById(paramId);
             if (processStream == null)
                 ExceptionCast.cast(ProcessInfoCode.PROCESS_NOT_EXIST);
             PermissionStreamNew permission = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processStream.getProcessId(), userId,"5");
             return permission != null;
-        } else if (nodeType == 6) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
             WorkStep workStep = workStepService.getById(paramId);
             if (workStep == null)
                 ExceptionCast.cast(ProcessInfoCode.WORKSTEP_NOT_EXIST);
@@ -294,17 +336,17 @@
     public List<UserDepartExt> getUserPermsList(Integer nodeType, String paramId) {
         if (!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId))
             return null;
-        if (nodeType == 1) {
+        if (nodeType.equals(DocAttributionTypeEnum.PRODUCT.getCode())) {
             return productPermissionService.getUserPermsByProductId(paramId);
-        } else if (nodeType == 2) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.COMPONENT.getCode())) {
             return componentPermissionService.getUserPermsByComponentId(paramId);
-        } else if (nodeType == 3) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PARTS.getCode())) {
             return partsPermissionService.getUserPermsByProductId(paramId);
-        } else if (nodeType == 4) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
             return processSpecVersionPermissionService.getUserPermsByProductId(paramId);
-        } else if (nodeType == 5) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
             return iProcessStreamPermissionService.getUserPermsByProductId(paramId);
-        } else if (nodeType == 6) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
             return iWorkStepPermissionService.getUserPermsByProductId(paramId);
         } else {
             return null;
@@ -315,17 +357,17 @@
     public List<SysUser> getUserNonPermsList(Integer nodeType, String paramId) {
         if (!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId))
             return null;
-        if (nodeType == 1) {
+        if (nodeType.equals(DocAttributionTypeEnum.PRODUCT.getCode())) {
             return productPermissionService.getUserNonPermsByProductId(paramId);
-        } else if (nodeType == 2) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.COMPONENT.getCode())){
             return componentPermissionService.getUserNonPermsByComponentId(paramId);
-        } else if (nodeType == 3) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PARTS.getCode())) {
             return partsPermissionService.getUserNonPermsByProductId(paramId);
-        } else if (nodeType == 4) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
             return processSpecVersionPermissionService.getUserNonPermsByProductId(paramId);
-        } else if (nodeType == 5) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
             return iProcessStreamPermissionService.getUserNonPermsByProductId(paramId);
-        } else if (nodeType == 6) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
             return iWorkStepPermissionService.getUserNonPermsByProductId(paramId);
         } else {
             return null;
@@ -336,17 +378,17 @@
     public List<MdcProduction> getDepartPermsList(Integer nodeType, String paramId) {
         if (!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId))
             return null;
-        if (nodeType == 1) {
+        if (nodeType.equals(DocAttributionTypeEnum.PRODUCT.getCode())) {
             return productDepartmentService.getDepartPermsByProductId(paramId);
-        } else if (nodeType == 2) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.COMPONENT.getCode())){
             return componentDepartmentService.getDepartPermsByComponentId(paramId);
-        } else if (nodeType == 3) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PARTS.getCode())) {
             return partsDepartmentService.getDepartPermsByPartsId(paramId);
-        } else if (nodeType == 4) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
             return processSpecVersionDepartmentService.getDepartPermsByPsvId(paramId);
-        }else if (nodeType == 5) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
             return processionDepartmentService.getDepartPermsByProcessId(paramId);
-        } else if (nodeType == 6) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
             return workStepDepartmentService.getDepartPermsByStepId(paramId);
         }
         else {
@@ -358,17 +400,17 @@
     public List<MdcProduction> getDepartNonPermsList(Integer nodeType, String paramId) {
         if (!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId))
             return null;
-        if (nodeType == 1) {
+        if (nodeType.equals(DocAttributionTypeEnum.PRODUCT.getCode())) {
             return productDepartmentService.getDepartNonPermsByProductId(paramId);
-        } else if (nodeType == 2) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.COMPONENT.getCode())){
             return componentDepartmentService.getDepartNonPermsByComponentId(paramId);
-        } else if (nodeType == 3) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PARTS.getCode())) {
             return partsDepartmentService.getDepartNonPermsByProductId(paramId);
-        } else if (nodeType == 4) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
             return processionDepartmentService.getDepartNonPermsByProcessId(paramId);
-        } else if (nodeType == 5) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
             return processionDepartmentService.getDepartNonPermsByProcessId(paramId);
-        } else if (nodeType == 6) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
             return workStepDepartmentService.getDepartNonPermsByStepId(paramId);
         } else {
             return null;
@@ -380,6 +422,7 @@
      * @param paramId      浜у搧鏍戣妭鐐筰d
      * @param relativeFlag 1 鏄� 2 鍚�
      * @param userIds      娣诲姞鐢ㄦ埛ids
+     * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛�
      * @return
      */
     @Override
@@ -415,6 +458,7 @@
      * @param paramId       浜у搧鏍戣妭鐐筰d
      * @param relativeFlag  1 鏄� 2 鍚�
      * @param departmentIds 娣诲姞閮ㄩ棬ids
+     * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛�
      * @return
      */
     @Override
@@ -450,6 +494,7 @@
      * @param paramId      浜у搧鏍戣妭鐐筰d
      * @param relativeFlag 1 鏄� 2 鍚�
      * @param userIds      绉婚櫎鐢ㄦ埛ids
+     * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛�
      * @return
      */
     @Override
@@ -484,6 +529,7 @@
      * @param paramId       浜у搧鏍戣妭鐐筰d
      * @param relativeFlag  1 鏄� 2 鍚�
      * @param departmentIds 绉婚櫎閮ㄩ棬ids
+     * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛�
      * @return
      */
     @Override
@@ -533,7 +579,7 @@
                 stream = new PermissionStreamNew();
                 stream.setUserId(item.getId());
                 stream.setBusinessId(productInfo.getProductId());
-                stream.setBusinessType("1");
+                stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
                 permissionStreamList.add(stream);
             }
         });
@@ -608,7 +654,7 @@
                 stream = new PermissionStreamNew();
                 stream.setDepartId(item.getId());
                 stream.setBusinessId(productInfo.getProductId());
-                stream.setBusinessType("1");
+                stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
                 permissionStreamList.add(stream);
             }
         });
@@ -663,7 +709,7 @@
     public List<String> getDepartIdsByParams(Integer nodeType, String paramId) {
         List<String> departIds = new ArrayList<>();
         //5-宸ュ簭
-        if (nodeType == 5) {
+        if (Objects.equals(nodeType, DocAttributionTypeEnum.PROCESS.getCode())) {
             ProcessStream processStream = processStreamService.getById(paramId);
             if (processStream == null)
                 return null;
@@ -674,7 +720,7 @@
                 departIds.add(item.getDepartId());
             });
             //6-宸ユ
-        } else if (nodeType == 6) {
+        } else if (Objects.equals(nodeType, DocAttributionTypeEnum.WORKSITE.getCode())) {
             WorkStep workStep = workStepService.getById(paramId);
             if (workStep == null)
                 return null;
@@ -718,7 +764,7 @@
 
     @Override
     public List<CommonGenericTree> loadTree(String userId, Integer nodeType, String paramId) {
-        if (nodeType == 1) {
+        if (Objects.equals(nodeType, DocAttributionTypeEnum.PRODUCT.getCode())) {
             List<ComponentInfo> componentInfoList = componentInfoService.getByProductIdAndUserId(paramId, userId);
             if (componentInfoList == null || componentInfoList.isEmpty())
                 return Collections.emptyList();
@@ -731,13 +777,13 @@
                 node.setLabel(c.getComponentName());
                 node.setParentId(c.getProductId());
                 node.setIconClass("");
-                node.setType(2);
+                node.setType(DocAttributionTypeEnum.COMPONENT.getCode());
                 node.setRField(c.getProductId());
                 node.setEntity(c);
                 list.add(node);
             }
             return list;
-        } else if (nodeType == 2) {
+        } else if (Objects.equals(nodeType, DocAttributionTypeEnum.COMPONENT.getCode())) {
             List<ComponentInfo> componentInfoList = componentInfoService.getByParentIdAndUserId(paramId, userId);
             List<CommonGenericTree> list = new ArrayList<>();
             CommonGenericTree<ComponentInfo> componentNode;
@@ -749,7 +795,7 @@
                     componentNode.setLabel(c.getComponentName());
                     componentNode.setParentId(c.getParentId());
                     componentNode.setIconClass("");
-                    componentNode.setType(2);
+                    componentNode.setType(DocAttributionTypeEnum.COMPONENT.getCode());
                     componentNode.setRField(c.getProductId());
                     componentNode.setEntity(c);
                     list.add(componentNode);
@@ -766,7 +812,7 @@
                 partNode.setLabel(part.getPartsName());
                 partNode.setParentId(part.getComponentId());
                 partNode.setIconClass("");
-                partNode.setType(3);
+                partNode.setType(DocAttributionTypeEnum.PARTS.getCode());
                 partNode.setRField(part.getComponentId());
                 partNode.setEntity(part);
                 partNode.setLeaf(true);
@@ -940,6 +986,268 @@
         return false;
     }
 
+    @Override
+    public Result<?> getTreeById(String id, Integer type){
+        if (StrUtil.isNotEmpty(id)||type!=null){
+            switch (type){
+                case 1:
+                    //浜у搧
+                    QueryWrapper<ProductInfo> productInfoQueryWrapper = new QueryWrapper<>();
+                    productInfoQueryWrapper.eq("product_id",id);
+                    List<ProductInfo> productInfos = this.list(productInfoQueryWrapper);
+                    return Result.OK(productInfos);
+                case 2:
+                    //缁勪欢
+                    QueryWrapper<ComponentInfo> componentInfoQueryWrapper = new QueryWrapper<>();
+                    componentInfoQueryWrapper.eq("component_id",id);
+                    List<ComponentInfo> componentInfos = componentInfoService.list(componentInfoQueryWrapper);
+                    return Result.OK(componentInfos);
+                case 3:
+                    //闆朵欢
+                    QueryWrapper<PartsInfo> partsInfoQueryWrapper = new QueryWrapper<>();
+                    partsInfoQueryWrapper.eq("parts_id",id);
+                    List<PartsInfo> partsInfos = partsInfoService.list(partsInfoQueryWrapper);
+                    return Result.OK(partsInfos);
+                case 4:
+                    //宸ヨ壓瑙勫垝鐗堟湰
+                    QueryWrapper<ProcessSpecVersion> processSpecVersionQueryWrapper = new QueryWrapper<>();
+                    processSpecVersionQueryWrapper.eq("id",id);
+                    List<ProcessSpecVersion> processSpecVersions = processSpecVersionService.list(processSpecVersionQueryWrapper);
+                    return Result.OK(processSpecVersions);
+                case 5:
+                    //宸ュ簭
+                    QueryWrapper<ProcessStream> processStreamQueryWrapper = new QueryWrapper<>();
+                    processStreamQueryWrapper.eq("process_id",id);
+                    List<ProcessStream> processStreams = processStreamService.list(processStreamQueryWrapper);
+                    return Result.OK(processStreams);
+                case 6:
+                    //宸ユ
+                    QueryWrapper<WorkStep> workStepQueryWrapper = new QueryWrapper<>();
+                    workStepQueryWrapper.eq("id",id);
+                    List<WorkStep> workSteps = workStepService.list(workStepQueryWrapper);
+                    return Result.OK(workSteps);
+            }
+        }
+        return Result.error("鍙傛暟閿欒");
+    }
+
+    /**
+     * 閫氳繃浠e彿銆佸悕绉般�佹潗璐ㄧ瓑鏌ヨ瀵瑰簲鐢靛瓙鏍锋澘
+     * @param treeInfoRequest
+     * @return
+     */
+    @Override
+    public List<DocInfo> getByTreeOtherFileInfo(TreeInfoRequest treeInfoRequest){
+        switch (treeInfoRequest.getAttributionType()){
+            case 1:
+                LambdaQueryWrapper<ProductInfo> queryWrapper = new LambdaQueryWrapper<>();
+                // 鏄庣‘鏉′欢锛氫粎褰揳ttributionType涓�1涓攁ttributionId闈炵┖鏃舵坊鍔犳潯浠�
+                if (treeInfoRequest.getAttributionType() == 1 && StrUtil.isNotBlank(treeInfoRequest.getAttributionId())) {
+                    queryWrapper.eq(ProductInfo::getProductId, treeInfoRequest.getAttributionId());
+                }
+                queryWrapper.like(StrUtil.isNotBlank(treeInfoRequest.getTreeCode()), ProductInfo::getProductNo, treeInfoRequest.getTreeCode())
+                        .like(StrUtil.isNotBlank(treeInfoRequest.getTreeName()), ProductInfo::getProductName, treeInfoRequest.getTreeName());
+                List<ProductInfo> productInfoList = super.list(queryWrapper);
+                List<DocInfo> docInfos = new ArrayList<>();
+                if (StrUtil.isNotBlank(treeInfoRequest.getStructureType())){
+                    productInfoList=new ArrayList<>();
+                }
+                if (CollectionUtil.isNotEmpty(productInfoList)) {
+                    String ids=productInfoList.stream().map(ProductInfo::getProductId).collect(Collectors.joining(","));
+                    DocInfoQueryRequest docQuery = new DocInfoQueryRequest();
+                    BeanUtil.copyProperties(treeInfoRequest, docQuery);
+                    docQuery.setAttributionIds(ids);
+                    docQuery.setDocClassCode("OTHER");
+                    docQuery.setAttributionType(DocAttributionTypeEnum.PRODUCT.getCode());
+                    docInfos = docInfoService.findListByDocQuery(docQuery);
+                }
+                // 鍒涘缓鏂拌姹傚璞¢伩鍏嶆薄鏌撳師鍙傛暟
+                TreeInfoRequest componentRequest = new TreeInfoRequest();
+                BeanUtil.copyProperties(treeInfoRequest, componentRequest);
+                componentRequest.setProductIds(Collections.singletonList(treeInfoRequest.getAttributionId()));
+                // 鍚堝苟鏌ヨ缁撴灉
+                docInfos.addAll(componentInfoService.getByComponentInfo(componentRequest));
+                docInfos.addAll(partsInfoService.getByPartsInfo(componentRequest));
+                docInfos.addAll(processSpecVersionService.getByProcessSpecVersion(componentRequest));
+                docInfos.addAll(processStreamService.getByProcessStreamOtherFile(componentRequest));
+                docInfos.addAll(workStepService.getByWorkStepOtherFile(componentRequest));
+                return getByTreeOtherFileInfo(docInfos);
+            case 2:
+                return getByTreeOtherFileInfo(componentInfoService.getByComponentInfo(treeInfoRequest));
+            case 3:
+                return getByTreeOtherFileInfo(partsInfoService.getByPartsInfo(treeInfoRequest));
+            case 4:
+                return getByTreeOtherFileInfo(processSpecVersionService.getByProcessSpecVersion(treeInfoRequest));
+            case 5:
+                return getByTreeOtherFileInfo(processStreamService.getByProcessStreamOtherFile(treeInfoRequest));
+            case 6:
+                return getByTreeOtherFileInfo(workStepService.getByWorkStepOtherFile(treeInfoRequest));
+        }
+        return new ArrayList<>();
+    }
+
+    /**
+     * 閫氳繃浠e彿銆佸悕绉般�佹潗璐ㄧ瓑鏌ヨ瀵瑰簲NC鏂囦欢
+     * @param treeInfoRequest
+     * @return
+     */
+    @Override
+    public List<DocInfo> getByTreeNcFileInfo(TreeInfoRequest treeInfoRequest){
+        //浜у搧銆侀儴浠躲�侀浂浠躲�佸伐鑹鸿绋嬬増鏈兘娌℃湁瀵瑰簲鐨凬C鏂囦欢锛岀洿鎺ユ煡璇㈠瓙缁撴瀯
+        switch (treeInfoRequest.getAttributionType()){
+            case 1:
+                LambdaQueryWrapper<ProductInfo> queryWrapper = new LambdaQueryWrapper<>();
+                // 鏄庣‘鏉′欢锛氫粎褰揳ttributionType涓�1涓攁ttributionId闈炵┖鏃舵坊鍔犳潯浠�
+                if (StrUtil.isNotBlank(treeInfoRequest.getAttributionId())) {
+                    queryWrapper.eq(ProductInfo::getProductId, treeInfoRequest.getAttributionId());
+                }
+                // 绠�鍖栨潯浠跺垽鏂�
+                queryWrapper.like(StrUtil.isNotBlank(treeInfoRequest.getTreeCode()), ProductInfo::getProductNo, treeInfoRequest.getTreeCode())
+                        .like(StrUtil.isNotBlank(treeInfoRequest.getTreeName()), ProductInfo::getProductName, treeInfoRequest.getTreeName());
+                List<ProductInfo> productInfoList = super.list(queryWrapper);
+                if (CollectionUtil.isNotEmpty(productInfoList)) {
+                    treeInfoRequest.setProductIds(productInfoList.stream().map(ProductInfo::getProductId).collect(Collectors.toList()));
+                }
+                return getByTreeNcFileInfo(processStreamService.getByProcessStreamNCFile(treeInfoRequest));
+            case 2:
+                LambdaQueryWrapper<ComponentInfo> componentInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                // 鏄庣‘鏉′欢锛氫粎褰揳ttributionType涓�1涓攁ttributionId闈炵┖鏃舵坊鍔犳潯浠�
+                if (StrUtil.isNotBlank(treeInfoRequest.getAttributionId())) {
+                    componentInfoLambdaQueryWrapper.eq(ComponentInfo::getComponentId, treeInfoRequest.getAttributionId());
+                }
+                componentInfoLambdaQueryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeCode()),ComponentInfo::getComponentCode, treeInfoRequest.getTreeCode());
+                componentInfoLambdaQueryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeName()),ComponentInfo::getComponentName, treeInfoRequest.getTreeName());
+                componentInfoLambdaQueryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getStructureType()),ComponentInfo::getStructureType, treeInfoRequest.getStructureType());
+                componentInfoLambdaQueryWrapper.orderByDesc(ComponentInfo::getCreateTime);
+                List<ComponentInfo> componentInfoList = componentInfoService.list(componentInfoLambdaQueryWrapper);
+                if (CollectionUtil.isNotEmpty(componentInfoList)) {
+                    treeInfoRequest.setComponentIds(componentInfoList.stream().map(ComponentInfo::getComponentId).collect(Collectors.toList()));
+                }
+                return getByTreeNcFileInfo(processStreamService.getByProcessStreamNCFile(treeInfoRequest));
+            case 3:
+                LambdaQueryWrapper<PartsInfo> partsInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                if (treeInfoRequest.getProductIds() != null && !treeInfoRequest.getProductIds().isEmpty()) {
+                    partsInfoLambdaQueryWrapper.in(PartsInfo::getProductId, treeInfoRequest.getProductIds());
+                }
+                if (treeInfoRequest.getComponentIds() != null && !treeInfoRequest.getComponentIds().isEmpty()) {
+                    partsInfoLambdaQueryWrapper.in(PartsInfo::getComponentId, treeInfoRequest.getComponentIds());
+                }
+                if (Objects.equals(treeInfoRequest.getAttributionType(), DocAttributionTypeEnum.PARTS.getCode())){
+                    partsInfoLambdaQueryWrapper.eq(StrUtil.isNotEmpty(treeInfoRequest.getAttributionId()),PartsInfo::getPartsId,treeInfoRequest.getAttributionId());
+                }
+                partsInfoLambdaQueryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeCode()),PartsInfo::getPartsCode, treeInfoRequest.getTreeCode());
+                partsInfoLambdaQueryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeName()),PartsInfo::getPartsName, treeInfoRequest.getTreeName());
+                partsInfoLambdaQueryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getStructureType()),PartsInfo::getStructureType, treeInfoRequest.getStructureType());
+                partsInfoLambdaQueryWrapper.orderByDesc(PartsInfo::getCreateTime);
+                List<PartsInfo> list = partsInfoService.list(partsInfoLambdaQueryWrapper);
+                if (CollectionUtil.isNotEmpty(list)) {
+                    treeInfoRequest.setPartsIds(list.stream().map(PartsInfo::getPartsId).collect(Collectors.toList()));
+                }
+                return getByTreeNcFileInfo(processStreamService.getByProcessStreamNCFile(treeInfoRequest));
+            case 4:
+                LambdaQueryWrapper<ProcessSpecVersion> processSpecVersionLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                if (treeInfoRequest.getProductIds() != null && !treeInfoRequest.getProductIds().isEmpty()) {
+                    processSpecVersionLambdaQueryWrapper.in(ProcessSpecVersion::getProductId, treeInfoRequest.getProductIds());
+                }
+                if (treeInfoRequest.getComponentIds() != null && !treeInfoRequest.getComponentIds().isEmpty()) {
+                    processSpecVersionLambdaQueryWrapper.in(ProcessSpecVersion::getComponentId, treeInfoRequest.getComponentIds());
+                }
+                if (treeInfoRequest.getPartsIds() != null && !treeInfoRequest.getPartsIds().isEmpty()) {
+                    processSpecVersionLambdaQueryWrapper.in(ProcessSpecVersion::getPartsId, treeInfoRequest.getPartsIds());
+                }
+                if (Objects.equals(treeInfoRequest.getAttributionType(), DocAttributionTypeEnum.OPERATION.getCode())){
+                    processSpecVersionLambdaQueryWrapper.eq(StrUtil.isNotEmpty(treeInfoRequest.getAttributionId()),ProcessSpecVersion::getId,treeInfoRequest.getAttributionId());
+                }
+                processSpecVersionLambdaQueryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeName()),ProcessSpecVersion::getProcessSpecVersionName, treeInfoRequest.getTreeName());
+                processSpecVersionLambdaQueryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeCode()),ProcessSpecVersion::getProcessSpecVersionCode, treeInfoRequest.getTreeName());
+                processSpecVersionLambdaQueryWrapper.orderByDesc(ProcessSpecVersion::getCreateTime);
+                List<ProcessSpecVersion> processSpecVersions = processSpecVersionService.list(processSpecVersionLambdaQueryWrapper);
+                if (CollectionUtil.isNotEmpty(processSpecVersions)) {
+                    treeInfoRequest.setPsvIds(processSpecVersions.stream().map(ProcessSpecVersion::getId).collect(Collectors.toList()));
+                }
+                return getByTreeNcFileInfo(processStreamService.getByProcessStreamNCFile(treeInfoRequest));
+            case 5:
+                return getByTreeNcFileInfo(processStreamService.getByProcessStreamNCFile(treeInfoRequest));
+            case 6:
+                return getByTreeNcFileInfo(workStepService.getByWorkStepNCFile(treeInfoRequest));
+        }
+        return new ArrayList<>();
+    }
+
+    private List<DocInfo> getByTreeOtherFileInfo(List<DocInfo> docInfos){
+        //瀵规墍灞瀒d杩涜缈昏瘧
+        if (docInfos != null && !docInfos.isEmpty()) {
+            docInfos.forEach(docInfo -> {
+                switch (docInfo.getAttributionType()){
+                    case 1:
+                        ProductInfo productInfo=this.getById(docInfo.getAttributionId());
+                        docInfo.setNodeName(productInfo.getProductName());
+                        docInfo.setNodeCode(productInfo.getProductNo());
+                        docInfo.setNodeId(productInfo.getProductId());
+                        break;
+                    case 2:
+                        ComponentInfo componentInfo=componentInfoService.getById(docInfo.getAttributionId());
+                        docInfo.setNodeName(componentInfo.getComponentName());
+                        docInfo.setNodeCode(componentInfo.getComponentCode());
+                        docInfo.setNodeId(componentInfo.getComponentId());
+                        break;
+                    case 3:
+                        PartsInfo partsInfo=partsInfoService.getById(docInfo.getAttributionId());
+                        docInfo.setNodeCode(partsInfo.getPartsCode());
+                        docInfo.setNodeName(partsInfo.getPartsName());
+                        docInfo.setNodeId(partsInfo.getPartsId());
+                        break;
+                    case 4:
+                        ProcessSpecVersion processSpecVersion=processSpecVersionService.getById(docInfo.getAttributionId());
+                        docInfo.setNodeName(processSpecVersion.getProcessSpecVersionName());
+                        docInfo.setNodeCode(processSpecVersion.getProcessSpecVersionCode());
+                        docInfo.setNodeId(processSpecVersion.getId());
+                        break;
+                    case 5:
+                        ProcessStream processStream=processStreamService.getById(docInfo.getAttributionId());
+                        docInfo.setNodeName(processStream.getProcessName());
+                        docInfo.setNodeCode(processStream.getProcessCode());
+                        docInfo.setNodeId(processStream.getProcessId());
+                        break;
+                    case 6:
+                        WorkStep workStep=workStepService.getById(docInfo.getAttributionId());
+                        docInfo.setNodeName(workStep.getStepName());
+                        docInfo.setNodeCode(workStep.getStepName());
+                        docInfo.setNodeId(workStep.getId());
+                        break;
+                }
+            });
+        }
+        return docInfos;
+    }
+
+    private List<DocInfo> getByTreeNcFileInfo(List<DocInfo> docInfos){
+        //瀵规墍灞瀒d杩涜缈昏瘧
+        if (docInfos != null && !docInfos.isEmpty()) {
+            docInfos.forEach(docInfo -> {
+                //NC鏂囦欢瀛樺湪璁惧绫讳笅
+                DeviceType deviceType=deviceTypeService.getById(docInfo.getAttributionId());
+                DeviceManagement deviceManagement= deviceManagementService.getById(deviceType.getDeviceManagementId());
+                docInfo.setDeviceName(deviceManagement.getDeviceManagementName());
+                docInfo.setDeviceCode(deviceManagement.getDeviceManagementCode());
+                if (deviceType.getAttributionType().equals(DocAttributionTypeEnum.PROCESS.getCode())){
+                    //宸ュ簭涓嬬殑璁惧绫�
+                    ProcessStream processStream=processStreamService.getById(deviceType.getAttributionId());
+                    docInfo.setNodeName(processStream.getProcessName());
+                    docInfo.setNodeCode(processStream.getProcessCode());
+                    docInfo.setNodeId(processStream.getProcessId());
+                }else {
+                    //宸ユ涓嬬殑璁惧绫�
+                    WorkStep workStep=workStepService.getById(deviceType.getAttributionId());
+                    docInfo.setNodeName(workStep.getStepName());
+                    docInfo.setNodeCode(workStep.getStepName());
+                    docInfo.setNodeId(workStep.getId());
+                }
+            });
+        }
+        return docInfos;
+    }
+
     /**
      * 楠岃瘉杈撳叆鍙傛暟
      */
@@ -991,8 +1299,11 @@
                         .map(PartsInfo::getPartsId)
                         .collect(Collectors.toList());
                 handlePartsPermissions(partsIds, userList, partsPermissionList, permissionStreamList);
-                List<String> psvIds = processSpecVersionService.getByPartsIds(partsIds).stream().map(ProcessSpecVersion::getId).collect(Collectors.toList());
-                handlePsvPermissions(psvIds, userList, processSpecVersionPermissionList, permissionStreamList);
+                List<ProcessSpecVersion> processSpecVersionList = processSpecVersionService.getByPartsIds(partsIds);
+                if (processSpecVersionList!= null &&!processSpecVersionList.isEmpty()) {
+                    List<String> psvIds = processSpecVersionList.stream().map(ProcessSpecVersion::getId).collect(Collectors.toList());
+                    handlePsvPermissions(psvIds, userList, processSpecVersionPermissionList, permissionStreamList);
+                }
                 List<ProcessStream> processStreamList = processStreamService.getByComponentIdList(productId, componentIds, partsIds);
                 processStreamApi(productId, userList, processionPermissionList, workStepPermissionList, permissionStreamList, processStreamList);
             }
@@ -1087,8 +1398,8 @@
             componentPermissionList.add(cp);
             ComponentInfo cpInfo = componentInfoMap.get(cp.getComponentId());
             PermissionStreamNew s = new PermissionStreamNew();
-            s.setBusinessId(cpInfo.getProductId());
-            s.setBusinessType("1");
+            s.setBusinessId(cpInfo.getComponentId());
+            s.setBusinessType(DocAttributionTypeEnum.COMPONENT.getCode().toString());
             s.setUserId(cp.getUserId());
             permissionStreamList.add(s);
         }
@@ -1119,7 +1430,7 @@
             PartsInfo ptInfo = partsInfoMap.get(pp.getPartsId());
             PermissionStreamNew s = new PermissionStreamNew();
             s.setBusinessId(ptInfo.getPartsId());
-            s.setBusinessType("3");
+            s.setBusinessType(DocAttributionTypeEnum.PARTS.getCode().toString());
             s.setUserId(pp.getUserId());
             permissionStreamList.add(s);
         }
@@ -1150,7 +1461,7 @@
             ProcessSpecVersion processSpecVersion = processStreamMap.get(pp.getPsvId());
             PermissionStreamNew s = new PermissionStreamNew();
             s.setBusinessId(processSpecVersion.getId());
-            s.setBusinessType("4");
+            s.setBusinessType(DocAttributionTypeEnum.OPERATION.getCode().toString());
             s.setUserId(pp.getUserId());
             permissionStreamList.add(s);
         }
@@ -1181,7 +1492,7 @@
             ProcessStream processStream = processStreamMap.get(pp.getProcessId());
             PermissionStreamNew s = new PermissionStreamNew();
             s.setBusinessId(processStream.getProcessId());
-            s.setBusinessType("5");
+            s.setBusinessType(DocAttributionTypeEnum.PROCESS.getCode().toString());
             s.setUserId(pp.getUserId());
             permissionStreamList.add(s);
         }
@@ -1212,7 +1523,7 @@
             WorkStep workStep = workStepHashMap.get(ws.getStepId());
             PermissionStreamNew s = new PermissionStreamNew();
             s.setBusinessId(workStep.getId());
-            s.setBusinessType("6");
+            s.setBusinessType(DocAttributionTypeEnum.WORKSITE.getCode().toString());
             s.setUserId(ws.getUserId());
             permissionStreamList.add(s);
         }
@@ -1388,6 +1699,8 @@
                             .collect(Collectors.toList());
                 }
                 componentIds.add(componentInfo.getComponentId());
+
+
                 handleRelativePermissions(componentInfo.getProductId(), componentIds, null, null,null, userList);
             }
         }else {
@@ -1438,7 +1751,7 @@
             WorkStep workStep = workStepMap.get(wsDep.getStepId());
             PermissionStreamNew permStream = new PermissionStreamNew();
             permStream.setBusinessId(workStep.getId());
-            permStream.setBusinessType("6");
+            permStream.setBusinessType(DocAttributionTypeEnum.WORKSITE.getCode().toString());
             permStream.setDepartId(wsDep.getDepartId());
             newPermissionStreams.add(permStream);
         }
@@ -1509,7 +1822,7 @@
             ProcessStream processStream = processStreamMap.get(procDep.getProcessId());
             PermissionStreamNew permStream = new PermissionStreamNew();
             permStream.setBusinessId(processStream.getProcessId());
-            permStream.setBusinessType("5");
+            permStream.setBusinessType(DocAttributionTypeEnum.PROCESS.getCode().toString());
             permStream.setDepartId(procDep.getDepartId());
             newPermissionStreams.add(permStream);
         }
@@ -1582,7 +1895,7 @@
             ComponentInfo componentInfo = componentInfoMap.get(compDep.getComponentId());
             PermissionStreamNew permStream = new PermissionStreamNew();
             permStream.setBusinessId(componentInfo.getComponentId());
-            permStream.setBusinessType("2");
+            permStream.setBusinessType(DocAttributionTypeEnum.COMPONENT.getCode().toString());
             permStream.setDepartId(compDep.getDepartId());
             newPermissionStreams.add(permStream);
         }
@@ -1656,7 +1969,7 @@
                 childComponent = componentInfoMap.get(compDep.getComponentId());
                 PermissionStreamNew permStream = new PermissionStreamNew();
                 permStream.setBusinessId(childComponent.getComponentId());
-                permStream.setBusinessType("2");
+                permStream.setBusinessType(DocAttributionTypeEnum.COMPONENT.getCode().toString());
                 permStream.setDepartId(compDep.getDepartId());
                 newPermissionStreams.add(permStream);
             }
@@ -2061,18 +2374,22 @@
 
     private void handlePartsRemovals(String productId, List<String> componentIds,Collection<SysUser> userList) {
         List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(productId, componentIds);
-        partsInfoList.forEach(item->{
-            partsInfoService.assignRemoveUser(item,userList);
-            //鍒犻櫎
-            handlePartRelatedRemovals(item, userList);
-        });
+        if (partsInfoList!=null){
+            partsInfoList.forEach(item->{
+                partsInfoService.assignRemoveUser(item,userList);
+                //鍒犻櫎
+                handlePartRelatedRemovals(item, userList);
+            });
+        }
     }
     private void handlePartsDepartmentRemovals(String productId, List<String> componentIds, Collection<MdcProduction> mdcProductionList) {
         List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(productId, componentIds);
-        partsInfoList.forEach(item->{
-            partsInfoService.assignRemoveDepart(item,mdcProductionList);
-            handlePartRelatedDepartmentRemovals(item, mdcProductionList);
-        });
+        if (partsInfoList!=null) {
+            partsInfoList.forEach(item->{
+                partsInfoService.assignRemoveDepart(item,mdcProductionList);
+                handlePartRelatedDepartmentRemovals(item, mdcProductionList);
+            });
+        }
     }
 
     private void handleComponentRelatedRemovals(ComponentInfo componentInfo, Collection<SysUser> userList, Collection<MdcProduction> mdcProductionList) {

--
Gitblit v1.9.3