From 2fb6c67b2c0c72195eef6fe5f7904d739b46e2c0 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期三, 25 六月 2025 11:57:28 +0800
Subject: [PATCH] Merge branch 'mdc_hyjs_master'

---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java | 2337 +++++++++++++++++++++++++----------------------------------
 1 files changed, 984 insertions(+), 1,353 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 a61862f..930f19e 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,38 +1,39 @@
 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.alibaba.fastjson.JSONObject;
 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 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.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.Department;
 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 java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
@@ -44,11 +45,13 @@
     @Lazy
     private IPartsInfoService partsInfoService;
     @Autowired
+    private IProcessSpecVersionService processSpecVersionService;
+    @Autowired
     private IProductPermissionService productPermissionService;
     @Autowired
     private IProductDepartmentService productDepartmentService;
     @Autowired
-    private IPermissionStreamService permissionStreamService;
+    private IPermissionStreamNewService permissionStreamNewService;
     @Autowired
     private IComponentDepartmentService componentDepartmentService;
     @Autowired
@@ -58,7 +61,9 @@
     @Autowired
     private IPartsPermissionService partsPermissionService;
     @Autowired
-    private IDepartmentService departmentService;
+    private IProcessSpecVersionPermissionService processSpecVersionPermissionService;
+    @Autowired
+    private IProcessSpecVersionDepartmentService processSpecVersionDepartmentService;
     @Autowired
     private ISysUserService userService;
     @Autowired
@@ -67,103 +72,120 @@
     @Autowired
     private IWorkStepService workStepService;
     @Autowired
-    private IDocInfoService docInfoService;
-    @Autowired
-    private INcLogInfoService iNcLogInfoService;
-    @Autowired
     private IWorkStepDepartmentService workStepDepartmentService;
     @Autowired
     private IProcessionDepartmentService processionDepartmentService;
     @Autowired
     private IMdcProductionService mdcProductionService;
+    @Autowired
+    private IDocRelativeService iDocRelativeService;
+    @Autowired
+    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})
     public boolean addProductInfo(ProductInfo productInfo) {
-        if(productInfo == null)
+        if (productInfo == null)
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        if(!ValidateUtil.validateString(productInfo.getProductName()))
+        if (!ValidateUtil.validateString(productInfo.getProductName()))
             ExceptionCast.cast(ProductInfoCode.PRODUCT_NAME_NONE);
-        if(!ValidateUtil.validateString(productInfo.getProductNo())) {
+        if (!ValidateUtil.validateString(productInfo.getProductNo())) {
             ExceptionCast.cast(ProductInfoCode.PRODUCT_NO_NONE);
         }
         ProductInfo en = getByProductNo(productInfo.getProductNo());
-        if(en != null)
+        if (en != null)
             ExceptionCast.cast(ProductInfoCode.PRODUCT_IS_EXIST);
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = user.getId();
-        if(!ValidateUtil.validateString(userId))
+        if (!ValidateUtil.validateString(userId))
             ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
         productInfo.setProductStatus(1);
-        //娣诲姞鏃ュ織
-        NcLogInfo ncLogInfo = new NcLogInfo();
-        //妯″潡
-        ncLogInfo.setModuleInfo("浜у搧缁撴瀯鏍�");
-        //绫诲瀷
-        ncLogInfo.setOperateType(2);
-        //鏃ュ織鍐呭
-        ncLogInfo.setLogContent("浜у搧鍚嶇О锛�"+productInfo.getProductName()+"锛屼骇鍝佺紪鍙凤細"+productInfo.getProductNo());
-        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
         boolean b = super.save(productInfo);
-        if(!b) {
+        if (!b) {
             ExceptionCast.cast(ProductInfoCode.PRODUCT_SAVE_ERROR);
         }
-        ProductPermission permission = new ProductPermission();
-        permission.setProductId(productInfo.getProductId());
-        permission.setUserId(userId);
-        b = productPermissionService.save(permission);
-        if(!b) {
+        b = productPermissionService.add(productInfo.getProductId(), userId,"1");
+        if (!b) {
             ExceptionCast.cast(ProductInfoCode.PRODUCT_SAVE_ERROR);
         }
-        PermissionStream stream = new PermissionStream();
-        stream.setProductId(productInfo.getProductId());
+        //娣诲姞缁撴瀯鏍�
+        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);
-        return permissionStreamService.save(stream);
+        stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
+        return permissionStreamNewService.addPermissionStreamNew(stream);
     }
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public boolean editProductInfo(String id ,ProductInfo productInfo) {
-        if(!ValidateUtil.validateString(id) || productInfo == null)
+    public boolean editProductInfo(String id, ProductInfo productInfo) {
+        if (!ValidateUtil.validateString(id) || productInfo == null)
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = user.getId();
-        if(!ValidateUtil.validateString(userId))
+        if (!ValidateUtil.validateString(userId))
             ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
         ProductInfo en = super.getById(id);
-        if(en == null)
+        if (en == null)
             ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
         productInfo.setProductId(id);
         productInfo.setProductStatus(null);
-        //娣诲姞鏃ュ織
-        NcLogInfo ncLogInfo = new NcLogInfo();
-        //妯″潡
-        ncLogInfo.setModuleInfo("浜у搧缁撴瀯鏍�");
-        //绫诲瀷
-        ncLogInfo.setOperateType(3);
-        //鏃ュ織鍐呭
-        ncLogInfo.setLogContent("浜у搧鍚嶇О锛�"+productInfo.getProductName());
-        ncLogInfo.setRemark(JSONObject.toJSONString(en));
-        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
         boolean b = super.updateById(productInfo);
-        if(!b)
+        //鍚屾淇敼缁撴瀯鏍�
+        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);
-        if(permission == null) {
+        if (permission == null) {
             permission = new ProductPermission();
             permission.setProductId(id);
             permission.setUserId(userId);
             b = productPermissionService.save(permission);
-            if(!b) {
+            if (!b) {
                 return false;
             }
         }
-        PermissionStream stream = permissionStreamService.getByProductIdAndUserId(id, userId);
-        if(stream == null) {
-            stream = new PermissionStream();
-            stream.setProductId(id);
+        PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(id, userId, DocAttributionTypeEnum.PRODUCT.getCode().toString());
+        if (stream == null) {
+            stream = new PermissionStreamNew();
+            stream.setBusinessId(productInfo.getProductId());
             stream.setUserId(userId);
-            return permissionStreamService.save(stream);
+            stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
+            return permissionStreamNewService.save(stream);
         }
         return b;
     }
@@ -172,41 +194,45 @@
     public List<CommonGenericTree> loadProductTree(String userId) {
         //浜у搧
         List<ProductInfo> productInfoList = getByUserPerms(userId);
-        if(productInfoList == null || productInfoList.isEmpty())
+        if (productInfoList == null || productInfoList.isEmpty())
             return Collections.emptyList();
         //閮ㄤ欢
         List<ComponentExt> componentInfoList = componentInfoService.getByUserPermsAs(userId);
-        if(componentInfoList == null)
+        if (componentInfoList == null)
             componentInfoList = Collections.emptyList();
         //闆朵欢
         List<PartsInfo> partsInfos = partsInfoService.getByUserPerms(userId);
-        if(partsInfos == null)
+        if (partsInfos == null)
             partsInfos = Collections.emptyList();
+        //宸ヨ壓瑙勭▼鐗堟湰
+        List<ProcessSpecVersion> processSpecVersions = processSpecVersionService.getByUserPerms(userId);
+        if (processSpecVersions == null)
+            processSpecVersions = Collections.emptyList();
         //宸ュ簭
-        List<ProcessStream> processStreams=processStreamService.getByuserPerms(userId);
-        if(processStreams==null)
+        List<ProcessStream> processStreams = processStreamService.getByuserPerms(userId);
+        if (processStreams == null)
             processStreams = Collections.emptyList();
         //宸ユ
-        List<WorkStep> workStepList=workStepService.getByUserPerms(userId);
-        if(workStepList==null)
+        List<WorkStep> workStepList = workStepService.getByUserPerms(userId);
+        if (workStepList == null)
             workStepList = Collections.emptyList();
-        return ProductTreeWrapper.loadTree(productInfoList, componentInfoList, partsInfos,processStreams,workStepList);
+        return ProductTreeWrapper.loadTree(productInfoList, componentInfoList, partsInfos, processSpecVersions,processStreams, workStepList);
     }
 
     @Override
     public List<ProductInfo> getByUserPerms(String userId) {
-        if(!ValidateUtil.validateString(userId))
+        if (!ValidateUtil.validateString(userId))
             return Collections.emptyList();
         return super.getBaseMapper().getByUserPerms(userId);
     }
 
     @Override
     public List<ProductInfo> getByUserPerms(String userId, String queryParam) {
-        if(!ValidateUtil.validateString(userId))
+        if (!ValidateUtil.validateString(userId))
             return Collections.emptyList();
         //鍘婚櫎鏉冮檺  TODO
         LambdaQueryWrapper<ProductInfo> queryWrapper = Wrappers.lambdaQuery();
-        if(ValidateUtil.validateString(queryParam)) {
+        if (ValidateUtil.validateString(queryParam)) {
             queryWrapper.and(wrapper -> wrapper.like(ProductInfo::getProductNo, queryParam)
                     .or()
                     .like(ProductInfo::getProductName, queryParam));
@@ -217,90 +243,90 @@
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public boolean deleteProductInfo(String id) {
-        if(!ValidateUtil.validateString(id))
+        if (!ValidateUtil.validateString(id))
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         ProductInfo productInfo = super.getById(id);
-        if(productInfo == null)
+        if (productInfo == null)
             ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
         //楠岃瘉浜у搧涓嬫槸鍚︽湁閮ㄤ欢
         List<ComponentInfo> componentInfoList = componentInfoService.getByProductId(productInfo.getProductId());
-        if(componentInfoList != null && !componentInfoList.isEmpty()) {
+        if (componentInfoList != null && !componentInfoList.isEmpty()) {
             ExceptionCast.cast(ProductInfoCode.PRODUCT_COMPONENT_EXIST);
         }
         //楠岃瘉浜у搧涓嬫槸鍚︽湁闆朵欢
         List<PartsInfo> partsInfoList = partsInfoService.getByProductId(productInfo.getProductId());
-        if(partsInfoList != null && !partsInfoList.isEmpty()) {
+        if (partsInfoList != null && !partsInfoList.isEmpty()) {
             ExceptionCast.cast(ProductInfoCode.PRODUCT_PARTS_EXIST);
         }
         List<ProcessStream> processStreams = processStreamService.findByProductId(id);
-        if(processStreams != null && !processStreams.isEmpty())
+        if (processStreams != null && !processStreams.isEmpty())
             ExceptionCast.cast(ProductInfoCode.PRODUCT_PROCESS_EXIST);
         boolean b = productPermissionService.deleteByProductId(id);
-        if(!b)
+        //楠岃瘉鏄惁瀛樺湪鏂囨。
+        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);
+        }
+        if (!b)
             ExceptionCast.cast(CommonCode.FAIL);
         b = productDepartmentService.deleteByProductId(id);
-        if(!b)
+        if (!b)
             ExceptionCast.cast(CommonCode.FAIL);
-        b = permissionStreamService.deleteUserPermsByProductId(id);
-        if(!b)
+        b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(id, DocAttributionTypeEnum.PRODUCT.getCode().toString(),"0");
+        if (!b)
             ExceptionCast.cast(CommonCode.FAIL);
-        b = permissionStreamService.deleteDepartPermsByProductId(id);
-        if(!b)
+        b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(id, DocAttributionTypeEnum.PRODUCT.getCode().toString(),"1");
+        if (!b)
             ExceptionCast.cast(CommonCode.FAIL);
-        b = docInfoService.deleteByProductId(id);
-        if(!b)
+        b = productMixService.removeById(id);
+        if (!b)
             ExceptionCast.cast(CommonCode.FAIL);
-        //娣诲姞鏃ュ織
-        NcLogInfo ncLogInfo = new NcLogInfo();
-        //妯″潡
-        ncLogInfo.setModuleInfo("浜у搧缁撴瀯鏍�");
-        //绫诲瀷
-        ncLogInfo.setOperateType(4);
-        //鏃ュ織鍐呭
-        ncLogInfo.setLogContent("浜у搧鍚嶇О锛�"+productInfo.getProductName());
-        iNcLogInfoService.saveLogNcInfos(ncLogInfo);
         return super.removeById(id);
     }
 
     @Override
     public boolean checkProductPerm(Integer nodeType, String paramId) {
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId))
+        if (!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId))
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = user.getId();
-        if(!ValidateUtil.validateString(userId))
+        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)
+            if (productInfo == null)
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
-            PermissionStream permission = permissionStreamService.getByProductIdAndUserId(paramId, userId);
+            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)
+            if (componentInfo == null)
                 ExceptionCast.cast(ComponentInfoCode.COMPONENT_NOT_EXIST);
-            PermissionStream permission = permissionStreamService.getByComponentIdAndUserId(componentInfo.getProductId(), paramId, userId);
+            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)
+            if (partsInfo == null)
                 ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            PermissionStream permission = permissionStreamService.getByPartsIdAndUserId(partsInfo.getProductId(), partsInfo.getComponentId(), paramId, userId);
+            PermissionStreamNew permission = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(partsInfo.getPartsId(), userId, "3");
             return permission != null;
-        }else if (nodeType == 5) {
-            ProcessStream processStream=processStreamService.getById(paramId);
-            if(processStream == null)
+        } 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.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
+            ProcessStream processStream = processStreamService.getById(paramId);
+            if (processStream == null)
                 ExceptionCast.cast(ProcessInfoCode.PROCESS_NOT_EXIST);
-            PermissionStream permission = permissionStreamService.getByProcessIdAndUserId(processStream.getProcessId(),processStream.getComponentId()
-                        ,processStream.getPartsId(),processStream.getProcessId(),userId);
+            PermissionStreamNew permission = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processStream.getProcessId(), userId,"5");
             return permission != null;
-        }else if (nodeType == 6){
-            WorkStep workStep=workStepService.getById(paramId);
-            if(workStep == null)
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
+            WorkStep workStep = workStepService.getById(paramId);
+            if (workStep == null)
                 ExceptionCast.cast(ProcessInfoCode.WORKSTEP_NOT_EXIST);
-            PermissionStream permission = permissionStreamService.getByStepIdAndUserId(workStep.getProcessId(),workStep.getComponentId()
-                    ,workStep.getPartsId(),workStep.getProcessId(),workStep.getId(),userId);
+            PermissionStreamNew permission = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(workStep.getId(), userId,"6");
             return permission != null;
         }
         return false;
@@ -308,50 +334,63 @@
 
     @Override
     public List<UserDepartExt> getUserPermsList(Integer nodeType, String paramId) {
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(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 {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
+            return processSpecVersionPermissionService.getUserPermsByProductId(paramId);
+        } else if (nodeType.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
+            return iProcessStreamPermissionService.getUserPermsByProductId(paramId);
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
+            return iWorkStepPermissionService.getUserPermsByProductId(paramId);
+        } else {
             return null;
         }
     }
 
     @Override
     public List<SysUser> getUserNonPermsList(Integer nodeType, String paramId) {
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(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 {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
+            return processSpecVersionPermissionService.getUserNonPermsByProductId(paramId);
+        } else if (nodeType.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
+            return iProcessStreamPermissionService.getUserNonPermsByProductId(paramId);
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
+            return iWorkStepPermissionService.getUserNonPermsByProductId(paramId);
+        } else {
             return null;
         }
     }
 
     @Override
     public List<MdcProduction> getDepartPermsList(Integer nodeType, String paramId) {
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(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 == 5) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
+            return processSpecVersionDepartmentService.getDepartPermsByPsvId(paramId);
+        } 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);
         }
-        //todo 灏佽鏍戠姸缁撴瀯
         else {
             return null;
         }
@@ -359,1197 +398,200 @@
 
     @Override
     public List<MdcProduction> getDepartNonPermsList(Integer nodeType, String paramId) {
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(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 == 5) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.OPERATION.getCode())) {
             return processionDepartmentService.getDepartNonPermsByProcessId(paramId);
-        }else if(nodeType == 6) {
+        } else if (nodeType.equals(DocAttributionTypeEnum.PROCESS.getCode())) {
+            return processionDepartmentService.getDepartNonPermsByProcessId(paramId);
+        } else if (nodeType.equals(DocAttributionTypeEnum.WORKSITE.getCode())) {
             return workStepDepartmentService.getDepartNonPermsByStepId(paramId);
-        }
-        //todo 灏佽鏍戠姸缁撴瀯
-        else {
+        } else {
             return null;
         }
     }
 
     /**
-     * 1銆佸惊鐜彃鍏ヤ紭鍖�
-     * 2銆佹煡璇紭鍖�
-     * 3銆佸皝瑁呬紭鍖� TODO
-     * @param nodeType 1 浜у搧 2 閮ㄤ欢 3 闆朵欢
-     * @param paramId  浜у搧鏍戣妭鐐筰d
+     * @param nodeType     1 浜у搧 2 閮ㄤ欢 3 闆朵欢
+     * @param paramId      浜у搧鏍戣妭鐐筰d
      * @param relativeFlag 1 鏄� 2 鍚�
-     * @param userIds 娣诲姞鐢ㄦ埛ids
+     * @param userIds      娣诲姞鐢ㄦ埛ids
+     * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛�
      * @return
      */
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public boolean assignAddUser(Integer nodeType, String paramId, Integer relativeFlag, String[] userIds) {
-        //鍙傛暟鏍¢獙
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId) ||
-                !ValidateUtil.validateInteger(relativeFlag))
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        if(userIds == null || userIds.length < 1)
-            ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_NONE);
+    public boolean assignAddUserAll(Integer nodeType, String paramId, Integer relativeFlag, String[] userIds) {
+        // 鍙傛暟鏍¢獙
+        validateInputParameters(nodeType, paramId, relativeFlag, "1", userIds);
         List<String> ids = new ArrayList<>(userIds.length);
         Collections.addAll(ids, userIds);
         Collection<SysUser> userList = userService.listByIds(ids);
-        if(userList == null || userList.isEmpty() || userList.size() != userIds.length)
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        //鑺傜偣绫诲瀷鍒ゅ畾
-        if(nodeType == 3) {
-            //澶勭悊闆朵欢
-            PartsInfo partsInfo = partsInfoService.getById(paramId);
-            if(partsInfo == null)
-                ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            boolean b = checkProductPerm(3, partsInfo.getPartsId());
-            if(!b) {
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            return partsInfoService.assignAddUser(partsInfo, userList);
-        }else if(nodeType == 1) {
-            //澶勭悊浜у搧
-            ProductInfo productInfo = super.getById(paramId);
-            if(productInfo == null)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
-            boolean b1 = checkProductPerm(1, productInfo.getProductId());
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            b1 = this.assignAddUser(productInfo, userList);
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            if(relativeFlag == 1) {
+        validateSysUserList(userList, ids);
+        switch (nodeType) {
+            case 1:
+                return handleProductInfo(paramId, relativeFlag, null,userList);
+            case 2:
+                return handleComponentInfo(paramId, relativeFlag, null,userList);
+            case 3:
+                return handlePartsInfo(paramId, relativeFlag, null,userList);
+            case 4:
+                return handleProcessSpecVersion(paramId, relativeFlag, null,userList);
+            case 5:
+                return handleProcessStream(paramId, relativeFlag, null,userList);
+            case 6:
+                return handleWorkStep(paramId, null,userList);
 
-                List<ComponentInfo> componentInfoList = componentInfoService.getByProductId(productInfo.getProductId());
-                if(componentInfoList == null || componentInfoList.isEmpty()){
-                    //娌℃湁鍙坊鍔犵殑闆堕儴浠舵潈闄�
-                    return true;
-                }
-
-                //鏈�缁堜繚瀛樻潈闄愭暟鎹垵濮嬪寲
-                List<ComponentPermission> componentPermissionList = new ArrayList<>();
-                List<PartsPermission> partsPermissionList = new ArrayList<>();
-                List<PermissionStream> permissionStreamList = new ArrayList<>();
-                //澶勭悊瀛愰儴浠�
-                List<String> componentIds = new ArrayList<>();
-                PermissionStream s;
-
-                Map<String, ComponentPermission> componentPermissionMap = new HashMap<>();
-                Map<String, ComponentInfo> componentInfoMap = new HashMap<>();
-
-                //鍒濆鍖栧叏浣撴暟鎹�
-                String key;
-                ComponentPermission cp;
-                ComponentInfo cpInfo;
-                for(ComponentInfo c : componentInfoList){
-                    componentIds.add(c.getComponentId());
-                    componentInfoMap.put(c.getComponentId(), c);
-                    for(SysUser u : userList){
-                        key = c.getComponentId() + "," + u.getId();
-                        cp = new ComponentPermission(c.getComponentId(), u.getId());
-                        componentPermissionMap.put(key, cp);
-                    }
-                }
-                //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                List<ComponentPermission> existList = componentPermissionService.getByComponentIdsAndUserIds(componentIds, ids);
-                if(existList != null && !existList.isEmpty()){
-                    //韪㈠嚭鏉冮檺鏁版嵁
-                    for(ComponentPermission permission : existList){
-                        key = permission.getComponentId() + "," + permission.getUserId();
-                        if(componentPermissionMap.containsKey(key)){
-                            componentPermissionMap.remove(key);
-                        }
-                    }
-                }
-                for(Map.Entry<String, ComponentPermission> entry : componentPermissionMap.entrySet()){
-                    cp = entry.getValue();
-                    componentPermissionList.add(cp);
-                    cpInfo = componentInfoMap.get(cp.getComponentId());
-                    s = new PermissionStream();
-                    s.setProductId(cpInfo.getProductId());
-                    s.setComponentId(cpInfo.getComponentId());
-                    s.setUserId(cp.getUserId());
-                    permissionStreamList.add(s);
-                }
-
-                //澶勭悊瀛愰浂浠�
-                List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(productInfo.getProductId(), componentIds);
-                if(partsInfoList != null && !partsInfoList.isEmpty()) {
-                    Map<String, PartsPermission> partsPermissionHashMap = new HashMap<>();
-                    Map<String, PartsInfo> partsInfoMap = new HashMap<>();
-                    List<String> partsIds = new ArrayList<>();
-                    PartsPermission pp;
-                    PartsInfo ptInfo;
-                    for(PartsInfo p : partsInfoList){
-                        partsIds.add(p.getPartsId());
-                        partsInfoMap.put(p.getPartsId(), p);
-                        for(SysUser u : userList){
-                            key = p.getPartsId() + "," + u.getId();
-                            pp = new PartsPermission(p.getPartsId(), u.getId());
-                            partsPermissionHashMap.put(key, pp);
-                        }
-                    }
-
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<PartsPermission> existPartsList = partsPermissionService.getByPartsIdsAndUserIds(partsIds, ids);
-                    if(existPartsList != null && !existPartsList.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(PartsPermission permission : existPartsList){
-                            key = permission.getPartsId() + "," + permission.getUserId();
-                            if(partsPermissionHashMap.containsKey(key)){
-                                partsPermissionHashMap.remove(key);
-                            }
-                        }
-                    }
-
-                    for(Map.Entry<String, PartsPermission> entry : partsPermissionHashMap.entrySet()){
-                        pp = entry.getValue();
-                        partsPermissionList.add(pp);
-                        ptInfo = partsInfoMap.get(pp.getPartsId());
-                        s = new PermissionStream();
-                        s.setProductId(ptInfo.getProductId());
-                        s.setComponentId(ptInfo.getComponentId());
-                        s.setPartsId(ptInfo.getPartsId());
-                        s.setUserId(pp.getUserId());
-                        permissionStreamList.add(s);
-                    }
-                }
-
-                if(!componentPermissionList.isEmpty()){
-                    componentPermissionService.saveBatch(componentPermissionList);
-                }
-                if(!partsPermissionList.isEmpty()){
-                    partsPermissionService.saveBatch(partsPermissionList);
-                }
-                if(!permissionStreamList.isEmpty()){
-                    permissionStreamService.saveBatch(permissionStreamList);
-                }
-            }
-            return true;
-        }else if(nodeType == 2) {
-            //澶勭悊閮ㄤ欢
-            ComponentInfo componentInfo = componentInfoService.getById(paramId);
-            if(componentInfo == null)
-                ExceptionCast.cast(ComponentInfoCode.COMPONENT_NOT_EXIST);
-            boolean b1 = checkProductPerm(2, componentInfo.getComponentId());
-            if(!b1){
-                //娌℃湁褰撳墠閮ㄤ欢鐨勬潈闄�
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            b1 = componentInfoService.assignAddUser(componentInfo, userList);
-            if(!b1){
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            if(relativeFlag == 1) {
-                //鏈�缁堜繚瀛樻潈闄愭暟鎹垵濮嬪寲
-                List<ComponentPermission> componentPermissionList = new ArrayList<>();
-                List<PartsPermission> partsPermissionList = new ArrayList<>();
-                List<PermissionStream> permissionStreamList = new ArrayList<>();
-
-                List<String> componentIds = new ArrayList<>();
-                PermissionStream s;
-                String key;
-                //澶勭悊瀛愰儴浠�
-                List<ComponentInfo> childrenList = componentInfoService.getByParentId(componentInfo.getComponentId());
-                if(childrenList != null && !childrenList.isEmpty()) {
-                    Map<String, ComponentPermission> componentPermissionMap = new HashMap<>();
-                    Map<String, ComponentInfo> componentInfoMap = new HashMap<>();
-
-                    //鍒濆鍖栧叏浣撴暟鎹�
-                    ComponentPermission cp;
-                    ComponentInfo cpInfo;
-                    for(ComponentInfo c : childrenList){
-                        componentIds.add(c.getComponentId());
-                        componentInfoMap.put(c.getComponentId(), c);
-                        for(SysUser u : userList){
-                            key = c.getComponentId() + "," + u.getId();
-                            cp = new ComponentPermission(c.getComponentId(), u.getId());
-                            componentPermissionMap.put(key, cp);
-                        }
-                    }
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<ComponentPermission> existList = componentPermissionService.getByComponentIdsAndUserIds(componentIds, ids);
-                    if(existList != null && !existList.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(ComponentPermission permission : existList){
-                            key = permission.getComponentId() + "," + permission.getUserId();
-                            if(componentPermissionMap.containsKey(key)){
-                                componentPermissionMap.remove(key);
-                            }
-                        }
-                    }
-                    for(Map.Entry<String, ComponentPermission> entry : componentPermissionMap.entrySet()){
-                        cp = entry.getValue();
-                        componentPermissionList.add(cp);
-                        cpInfo = componentInfoMap.get(cp.getComponentId());
-                        s = new PermissionStream();
-                        s.setProductId(cpInfo.getProductId());
-                        s.setComponentId(cpInfo.getComponentId());
-                        s.setUserId(cp.getUserId());
-                        permissionStreamList.add(s);
-                    }
-                }
-                //澶勭悊闆朵欢
-                componentIds.add(componentInfo.getComponentId());
-                List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(componentInfo.getProductId(), componentIds);
-                if(partsInfoList != null && !partsInfoList.isEmpty()) {
-                    Map<String, PartsPermission> partsPermissionHashMap = new HashMap<>();
-                    Map<String, PartsInfo> partsInfoMap = new HashMap<>();
-                    List<String> partsIds = new ArrayList<>();
-                    PartsPermission pp;
-                    PartsInfo ptInfo;
-                    for(PartsInfo p : partsInfoList){
-                        partsIds.add(p.getPartsId());
-                        partsInfoMap.put(p.getPartsId(), p);
-                        for(SysUser u : userList){
-                            key = p.getPartsId() + "," + u.getId();
-                            pp = new PartsPermission(p.getPartsId(), u.getId());
-                            partsPermissionHashMap.put(key, pp);
-                        }
-                    }
-
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<PartsPermission> existPartsList = partsPermissionService.getByPartsIdsAndUserIds(partsIds, ids);
-                    if(existPartsList != null && !existPartsList.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(PartsPermission permission : existPartsList){
-                            key = permission.getPartsId() + "," + permission.getUserId();
-                            if(partsPermissionHashMap.containsKey(key)){
-                                partsPermissionHashMap.remove(key);
-                            }
-                        }
-                    }
-
-                    for(Map.Entry<String, PartsPermission> entry : partsPermissionHashMap.entrySet()){
-                        pp = entry.getValue();
-                        partsPermissionList.add(pp);
-                        ptInfo = partsInfoMap.get(pp.getPartsId());
-                        s = new PermissionStream();
-                        s.setProductId(ptInfo.getProductId());
-                        s.setComponentId(ptInfo.getComponentId());
-                        s.setPartsId(ptInfo.getPartsId());
-                        s.setUserId(pp.getUserId());
-                        permissionStreamList.add(s);
-                    }
-                }
-                if(!componentPermissionList.isEmpty()){
-                    componentPermissionService.saveBatch(componentPermissionList);
-                }
-                if(!partsPermissionList.isEmpty()){
-                    partsPermissionService.saveBatch(partsPermissionList);
-                }
-                if(!permissionStreamList.isEmpty()){
-                    permissionStreamService.saveBatch(permissionStreamList);
-                }
-            }
-            return true;
+            default:
+                return false;
         }
-        return false;
     }
 
     /**
-     * 寰呬紭鍖� TODO
-     * @param nodeType 1 浜у搧 2 閮ㄤ欢 3 闆朵欢
-     * @param paramId  浜у搧鏍戣妭鐐筰d
-     * @param relativeFlag 1 鏄� 2 鍚�
-     * @param userIds 绉婚櫎鐢ㄦ埛ids
-     * @return
-     */
-    @Override
-    @Transactional(rollbackFor = {Exception.class})
-    public boolean assignRemoveUser(Integer nodeType, String paramId, Integer relativeFlag, String[] userIds) {
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId) ||
-                !ValidateUtil.validateInteger(relativeFlag))
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        if(userIds == null || userIds.length < 1)
-            ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_NONE);
-        List<String> ids = new ArrayList<>(userIds.length);
-        Collections.addAll(ids, userIds);
-        Collection<SysUser> userList = userService.listByIds(ids);
-        if(userList == null || userList.isEmpty() || userList.size() != userIds.length)
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        if(nodeType == 3) {
-            //澶勭悊闆朵欢
-            PartsInfo partsInfo = partsInfoService.getById(paramId);
-            if(partsInfo == null)
-                ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            boolean b = checkProductPerm(3, partsInfo.getPartsId());
-            if(!b) {
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            return partsInfoService.assignRemoveUser(partsInfo, userList);
-        }else if(nodeType == 1) {
-            //澶勭悊浜у搧
-            ProductInfo productInfo = super.getById(paramId);
-            if(productInfo == null)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
-            boolean b1 = checkProductPerm(1, productInfo.getProductId());
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            b1 = this.assignRemoveUser(productInfo, userList);
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            if(relativeFlag == 1) {
-                //澶勭悊浜у搧 涓嬬殑閮ㄤ欢
-                List<String> componentIds = new ArrayList<>();
-                //鎬昏闇�瑕佸垹闄ょ殑鏁版嵁淇℃伅
-                List<ComponentPermission> componentPermissionList = new ArrayList<>();
-                List<PartsPermission> partsPermissionList = new ArrayList<>();
-                List<PermissionStream> permissionStreamList = new ArrayList<>();
-                List<ComponentInfo> componentInfoList = componentInfoService.getByProductId(productInfo.getProductId());
-                if(componentInfoList != null && !componentInfoList.isEmpty()) {
-                    for(ComponentInfo componentInfo : componentInfoList){
-                        componentIds.add(componentInfo.getComponentId());
-                    }
-                    componentPermissionList = componentPermissionService.getByComponentIdsAndUserIds(componentIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByComponentIdsAndUserIds(componentIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                //澶勭悊浜у搧 涓嬬殑闆朵欢
-                List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(productInfo.getProductId(), componentIds);
-                List<String> partsIds = new ArrayList<>();
-                if(partsInfoList != null && !partsInfoList.isEmpty()) {
-                    for(PartsInfo partsInfo : partsInfoList){
-                        partsIds.add(partsInfo.getPartsId());
-                    }
-                    partsPermissionList = partsPermissionService.getByPartsIdsAndUserIds(partsIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByPartsIdsAndUserIds(partsIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                if(componentPermissionList != null && !componentPermissionList.isEmpty()){
-                    componentPermissionService.removeByCollection(componentPermissionList);
-                }
-                if(partsPermissionList != null && !partsPermissionList.isEmpty()){
-                    partsPermissionService.removeByCollection(partsPermissionList);
-                }
-                if(permissionStreamList != null && !permissionStreamList.isEmpty()){
-                    permissionStreamService.removeByCollection(permissionStreamList);
-                }
-            }
-            return true;
-        }else if(nodeType == 2) {
-            ComponentInfo componentInfo = componentInfoService.getById(paramId);
-            if(componentInfo == null)
-                ExceptionCast.cast(ComponentInfoCode.COMPONENT_NOT_EXIST);
-            boolean b1 = checkProductPerm(2, componentInfo.getComponentId());
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            b1 = componentInfoService.assignRemoveUser(componentInfo, userList);
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            if(relativeFlag == 1) {
-                List<String> componentIdList = new ArrayList<>();
-                //鏈�缁堥渶瑕佸垹闄ょ殑鏁版嵁
-                List<ComponentPermission> componentPermissionList = new ArrayList<>();
-                List<PartsPermission> partsPermissionList = new ArrayList<>();
-                List<PermissionStream> permissionStreamList = new ArrayList<>();
-                List<ComponentInfo> childrenList = componentInfoService.getByParentId(componentInfo.getComponentId());
-                if(childrenList != null && !childrenList.isEmpty()) {
-                    for(ComponentInfo component : childrenList){
-                        componentIdList.add(component.getComponentId());
-                    }
-                    componentPermissionList = componentPermissionService.getByComponentIdsAndUserIds(componentIdList, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByComponentIdsAndUserIds(componentIdList, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                componentIdList.add(componentInfo.getComponentId());
-                List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(componentInfo.getProductId(), componentIdList);
-                List<String> partsIds = new ArrayList<>();
-                if(partsInfoList != null && !partsInfoList.isEmpty()) {
-                    for(PartsInfo partsInfo : partsInfoList){
-                        partsIds.add(partsInfo.getPartsId());
-                    }
-                    partsPermissionList = partsPermissionService.getByPartsIdsAndUserIds(partsIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByPartsIdsAndUserIds(partsIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-                if(componentPermissionList != null && !componentPermissionList.isEmpty()){
-                    componentPermissionService.removeByCollection(componentPermissionList);
-                }
-                if(partsPermissionList != null && !partsPermissionList.isEmpty()){
-                    partsPermissionService.removeByCollection(partsPermissionList);
-                }
-                if(permissionStreamList != null && !permissionStreamList.isEmpty()){
-                    permissionStreamService.removeByCollection(permissionStreamList);
-                }
-            }
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * 寰呬紭鍖� TODO
-     * @param nodeType 1 浜у搧 2 閮ㄤ欢 3 闆朵欢 5 宸ュ簭 6 宸ユ
-     * @param paramId 浜у搧鏍戣妭鐐筰d
-     * @param relativeFlag 1 鏄� 2 鍚�
+     * @param nodeType      1 浜у搧 2 閮ㄤ欢 3 闆朵欢 5 宸ュ簭 6 宸ユ
+     * @param paramId       浜у搧鏍戣妭鐐筰d
+     * @param relativeFlag  1 鏄� 2 鍚�
      * @param departmentIds 娣诲姞閮ㄩ棬ids
+     * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛�
      * @return
      */
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public boolean assignAddDepartment(Integer nodeType, String paramId, Integer relativeFlag, String[] departmentIds) {
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId) ||
-                !ValidateUtil.validateInteger(relativeFlag))
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        if(departmentIds == null || departmentIds.length < 1)
-            ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_NONE);
+    public boolean assignAddDepartmentAll(Integer nodeType, String paramId, Integer relativeFlag, String[] departmentIds) {
+        validateInputParameters(nodeType, paramId, relativeFlag, "2", departmentIds);
         List<String> ids = new ArrayList<>(departmentIds.length);
         Collections.addAll(ids, departmentIds);
-        Collection<MdcProduction> mdcProductionList=mdcProductionService.listByIds(ids);
-        if(mdcProductionList == null || mdcProductionList.isEmpty() || mdcProductionList.size() != departmentIds.length)
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        if(nodeType == 6) {
-            //澶勭悊宸ユ
-            WorkStep workStep=workStepService.getById(paramId);
-            if (workStep == null)
-                ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            boolean b = checkProductPerm(6, workStep.getId());
-            if (!b) {
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            return workStepService.assignAddDepart(workStep, mdcProductionList);
-        }else if(nodeType == 5) {
-            //澶勭悊宸ュ簭
-            ProcessStream processStream = processStreamService.getById(paramId);
-            if (processStream == null)
-                ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            boolean b = checkProductPerm(5, processStream.getProcessId());
-            if (!b) {
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            return processStreamService.assignAddDepart(processStream, mdcProductionList);
-        }else if(nodeType == 3) {
-            //澶勭悊闆朵欢
-            PartsInfo partsInfo = partsInfoService.getById(paramId);
-            if(partsInfo == null)
-                ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            boolean b = checkProductPerm(3, partsInfo.getPartsId());
-            if(!b) {
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            return partsInfoService.assignAddDepart(partsInfo, mdcProductionList);
-        }else if(nodeType == 1) {
-            //澶勭悊浜у搧
-            ProductInfo productInfo = super.getById(paramId);
-            if(productInfo == null)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
-            boolean b1 = checkProductPerm(1, productInfo.getProductId());
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            b1 = this.assignAddDepartment(productInfo, mdcProductionList);
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            if(relativeFlag == 1) {
-                //澶勭悊浜у搧 涓嬬殑閮ㄤ欢
-                List<ComponentInfo> componentInfoList = componentInfoService.getByProductId(productInfo.getProductId());
-                //鏈�缁堜繚瀛樻潈闄愭暟鎹垵濮嬪寲
-                List<ComponentDepartment> componentPermissionList = new ArrayList<>();
-                List<PartsDepartment> partsPermissionList = new ArrayList<>();
-                List<ProcessionDepartment> processionPermissionList = new ArrayList<>();
-                List<WorkStepDepartment> workStepDepartmentList=new ArrayList<>();
-                List<PermissionStream> permissionStreamList = new ArrayList<>();
-                //澶勭悊瀛愰儴浠�
-                List<String> componentIds = new ArrayList<>();
-                List<String> partsIds= new ArrayList<>();
-                List<String> ProcessionIds= new ArrayList<>();
-                List<String> workStepIds= new ArrayList<>();
-                PermissionStream s;
+        List<String> deps=mdcProductionService.findAllProductionIds(ids);
+        Collection<MdcProduction> mdcProductionList = mdcProductionService.listByIds(deps);
+        validateMdcProductionList(mdcProductionList, deps);
+        switch (nodeType) {
+            case 1:
+                return handleProductInfo(paramId, relativeFlag, mdcProductionList,null);
+            case 2:
+                return handleComponentInfo(paramId, relativeFlag, mdcProductionList,null);
+            case 3:
+                return handlePartsInfo(paramId, relativeFlag, mdcProductionList,null);
+            case 4:
+                return handleProcessSpecVersion(paramId, relativeFlag, mdcProductionList,null);
+            case 5:
+                return handleProcessStream(paramId, relativeFlag, mdcProductionList,null);
+            case 6:
+                return handleWorkStep(paramId, mdcProductionList,null);
 
-                Map<String, ComponentDepartment> componentPermissionMap = new HashMap<>();
-                Map<String, ComponentInfo> componentInfoMap = new HashMap<>();
-
-                //鍒濆鍖栧叏浣撴暟鎹�
-                String key;
-                ComponentDepartment cp;
-                ComponentInfo cpInfo;
-                for(ComponentInfo c : componentInfoList){
-                    componentIds.add(c.getComponentId());
-                    componentInfoMap.put(c.getComponentId(), c);
-                    for(MdcProduction mdcProduction : mdcProductionList){
-                        key = c.getComponentId() + "," + mdcProduction.getId();
-                        cp = new ComponentDepartment(c.getComponentId(), mdcProduction.getId());
-                        componentPermissionMap.put(key, cp);
-                    }
-                }
-                //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                List<ComponentDepartment> existList = componentDepartmentService.getByComponentIdsAndDepartIds(componentIds, ids);
-                if(existList != null && !existList.isEmpty()){
-                    //韪㈠嚭鏉冮檺鏁版嵁
-                    for(ComponentDepartment permission : existList){
-                        key = permission.getComponentId() + "," + permission.getDepartId();
-                        if(componentPermissionMap.containsKey(key)){
-                            componentPermissionMap.remove(key);
-                        }
-                    }
-                }
-                for(Map.Entry<String, ComponentDepartment> entry : componentPermissionMap.entrySet()){
-                    cp = entry.getValue();
-                    componentPermissionList.add(cp);
-                    cpInfo = componentInfoMap.get(cp.getComponentId());
-                    s = new PermissionStream();
-                    s.setProductId(cpInfo.getProductId());
-                    s.setComponentId(cpInfo.getComponentId());
-                    s.setDepartId(cp.getDepartId());
-                    permissionStreamList.add(s);
-                }
-
-                //澶勭悊瀛愰浂浠�
-                List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(productInfo.getProductId(), componentIds);
-                if(partsInfoList != null && !partsInfoList.isEmpty()) {
-                    Map<String, PartsDepartment> partsPermissionHashMap = new HashMap<>();
-                    Map<String, PartsInfo> partsInfoMap = new HashMap<>();
-                    partsIds = new ArrayList<>();
-                    PartsDepartment pp;
-                    PartsInfo ptInfo;
-                    for(PartsInfo p : partsInfoList){
-                        partsIds.add(p.getPartsId());
-                        partsInfoMap.put(p.getPartsId(), p);
-                        for(MdcProduction mdcProduction : mdcProductionList){
-                            key = p.getPartsId() + "," + mdcProduction.getId();
-                            pp = new PartsDepartment(p.getPartsId(), mdcProduction.getId());
-                            partsPermissionHashMap.put(key, pp);
-                        }
-                    }
-
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<PartsDepartment> existPartsList = partsDepartmentService.getByPartsIdsAndDepartIds(partsIds, ids);
-                    if(existPartsList != null && !existPartsList.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(PartsDepartment permission : existPartsList){
-                            key = permission.getPartsId() + "," + permission.getDepartId();
-                            if(partsPermissionHashMap.containsKey(key)){
-                                partsPermissionHashMap.remove(key);
-                            }
-                        }
-                    }
-
-                    for(Map.Entry<String, PartsDepartment> entry : partsPermissionHashMap.entrySet()){
-                        pp = entry.getValue();
-                        partsPermissionList.add(pp);
-                        ptInfo = partsInfoMap.get(pp.getPartsId());
-                        s = new PermissionStream();
-                        s.setProductId(ptInfo.getProductId());
-                        s.setComponentId(ptInfo.getComponentId());
-                        s.setPartsId(ptInfo.getPartsId());
-                        s.setDepartId(pp.getDepartId());
-                        permissionStreamList.add(s);
-                    }
-                }
-
-                //鏌ヨ宸ュ簭宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                List<ProcessStream> processStreamList = processStreamService.getByComponentIdList(productInfo.getProductId(),componentIds,partsIds);
-                if(processStreamList != null && !processStreamList.isEmpty()) {
-                    Map<String, ProcessionDepartment> processionDepartmentHashMap = new HashMap<>();
-                    Map<String, ProcessStream> processStreamMap = new HashMap<>();
-                    ProcessionIds = new ArrayList<>();
-                    ProcessionDepartment pp;
-                    ProcessStream processStream;
-                    for(ProcessStream p : processStreamList){
-                        ProcessionIds.add(p.getProcessId());
-                        processStreamMap.put(p.getProcessId(), p);
-                        for(MdcProduction mdcProduction : mdcProductionList){
-                            key = p.getPartsId() + "," + mdcProduction.getId();
-                            pp = new ProcessionDepartment(p.getProcessId(), mdcProduction.getId());
-                            processionDepartmentHashMap.put(key, pp);
-                        }
-                    }
-
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<ProcessionDepartment> processionDepartmentList = processionDepartmentService.getByPartsIdsAndDepartIds(ProcessionIds, ids);
-                    if(processionDepartmentList != null && !processionDepartmentList.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(ProcessionDepartment processionDepartment : processionDepartmentList){
-                            key = processionDepartment.getProcessId() + "," + processionDepartment.getDepartId();
-                            if(processionDepartmentHashMap.containsKey(key)){
-                                processionDepartmentHashMap.remove(key);
-                            }
-                        }
-                    }
-
-                    for(Map.Entry<String, ProcessionDepartment> entry : processionDepartmentHashMap.entrySet()){
-                        pp = entry.getValue();
-                        processionPermissionList.add(pp);
-                        processStream = processStreamMap.get(pp.getProcessId());
-                        s = new PermissionStream();
-                        s.setProductId(processStream.getProductId());
-                        s.setComponentId(processStream.getComponentId());
-                        s.setPartsId(processStream.getPartsId());
-                        s.setProcessId(processStream.getProcessId());
-                        s.setDepartId(pp.getDepartId());
-                        permissionStreamList.add(s);
-                    }
-                }
-                //鏌ヨ宸ユ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                List<WorkStep> workStepList = workStepService.getByProcessIds(productInfo.getProductId(),ProcessionIds);
-                if(workStepList != null && !workStepList.isEmpty()) {
-                    Map<String, WorkStepDepartment> workStepDepartmentHashMap = new HashMap<>();
-                    Map<String, WorkStep> workStepHashMap = new HashMap<>();
-                    workStepIds = new ArrayList<>();
-                    WorkStepDepartment ws;
-                    WorkStep workStep;
-                    for(WorkStep w : workStepList){
-                        workStepIds.add(w.getId());
-                        workStepHashMap.put(w.getId(), w);
-                        for(MdcProduction mdcProduction : mdcProductionList){
-                            key = w.getId() + "," + mdcProduction.getId();
-                            ws = new WorkStepDepartment(w.getId(), mdcProduction.getId());
-                            workStepDepartmentHashMap.put(key, ws);
-                        }
-                    }
-
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<WorkStepDepartment> workStepDepartments = workStepDepartmentService.getByPartsIdsAndDepartIds(workStepIds, ids);
-                    if(workStepDepartments != null && !workStepDepartments.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(WorkStepDepartment workStepDepartment : workStepDepartments){
-                            key = workStepDepartment.getStepId() + "," + workStepDepartment.getDepartId();
-                            if(workStepDepartmentHashMap.containsKey(key)){
-                                workStepDepartmentHashMap.remove(key);
-                            }
-                        }
-                    }
-
-                    for(Map.Entry<String, WorkStepDepartment> entry : workStepDepartmentHashMap.entrySet()){
-                        ws = entry.getValue();
-                        workStepDepartmentList.add(ws);
-                        workStep = workStepHashMap.get(ws.getStepId());
-                        s = new PermissionStream();
-                        s.setProductId(workStep.getProductId());
-                        s.setComponentId(workStep.getComponentId());
-                        s.setPartsId(workStep.getPartsId());
-                        s.setProcessId(workStep.getProcessId());
-                        s.setStepId(workStep.getId());
-                        s.setDepartId(ws.getDepartId());
-                        permissionStreamList.add(s);
-                    }
-                }
-
-                if(!componentPermissionList.isEmpty()){
-                    componentDepartmentService.saveBatch(componentPermissionList);
-                }
-                if(!partsPermissionList.isEmpty()){
-                    partsDepartmentService.saveBatch(partsPermissionList);
-                }
-                if(!processionPermissionList.isEmpty()){
-                    processionDepartmentService.saveBatch(processionPermissionList);
-                }
-                if (!workStepDepartmentList.isEmpty()) {
-                    workStepDepartmentService.saveBatch(workStepDepartmentList);
-                }
-                if(!permissionStreamList.isEmpty()){
-                    permissionStreamService.saveBatch(permissionStreamList);
-                }
-            }
-            return true;
-        }else if(nodeType == 2) {
-            ComponentInfo componentInfo = componentInfoService.getById(paramId);
-            if(componentInfo == null)
-                ExceptionCast.cast(ComponentInfoCode.COMPONENT_NOT_EXIST);
-            boolean b1 = checkProductPerm(2, componentInfo.getComponentId());
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            b1 = componentInfoService.assignAddDepart(componentInfo, mdcProductionList);
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            if(relativeFlag == 1) {
-                List<String> componentIdList = new ArrayList<>();
-                List<ComponentInfo> childrenList = componentInfoService.getByParentId(componentInfo.getComponentId());
-
-                //鏈�缁堜繚瀛樻潈闄愭暟鎹垵濮嬪寲
-                List<ComponentDepartment> componentPermissionList = new ArrayList<>();
-                List<PartsDepartment> partsPermissionList = new ArrayList<>();
-                List<ProcessionDepartment> processionPermissionList = new ArrayList<>();
-                List<WorkStepDepartment> workStepDepartmentList=new ArrayList<>();
-                List<PermissionStream> permissionStreamList = new ArrayList<>();
-                //澶勭悊瀛愰儴浠�
-                PermissionStream s;
-                List<String> componentIds = new ArrayList<>();
-                List<String> partsIds= new ArrayList<>();
-                List<String> ProcessionIds= new ArrayList<>();
-                List<String> workStepIds= new ArrayList<>();
-                Map<String, ComponentDepartment> componentPermissionMap = new HashMap<>();
-                Map<String, ComponentInfo> componentInfoMap = new HashMap<>();
-
-                //鍒濆鍖栧叏浣撴暟鎹�
-                String key;
-                ComponentDepartment cp;
-                ComponentInfo cpInfo;
-                for(ComponentInfo c : childrenList){
-                    componentIdList.add(c.getComponentId());
-                    componentInfoMap.put(c.getComponentId(), c);
-                    for(MdcProduction mdcProduction : mdcProductionList){
-                        key = c.getComponentId() + "," + mdcProduction.getId();
-                        cp = new ComponentDepartment(c.getComponentId(), mdcProduction.getId());
-                        componentPermissionMap.put(key, cp);
-                    }
-                }
-                //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                List<ComponentDepartment> existList = componentDepartmentService.getByComponentIdsAndDepartIds(componentIdList, ids);
-                if(existList != null && !existList.isEmpty()){
-                    //韪㈠嚭鏉冮檺鏁版嵁
-                    for(ComponentDepartment permission : existList){
-                        key = permission.getComponentId() + "," + permission.getDepartId();
-                        if(componentPermissionMap.containsKey(key)){
-                            componentPermissionMap.remove(key);
-                        }
-                    }
-                }
-                for(Map.Entry<String, ComponentDepartment> entry : componentPermissionMap.entrySet()){
-                    cp = entry.getValue();
-                    componentPermissionList.add(cp);
-                    cpInfo = componentInfoMap.get(cp.getComponentId());
-                    s = new PermissionStream();
-                    s.setProductId(cpInfo.getProductId());
-                    s.setComponentId(cpInfo.getComponentId());
-                    s.setDepartId(cp.getDepartId());
-                    permissionStreamList.add(s);
-                }
-
-                //澶勭悊瀛愰浂浠�
-                componentIdList.add(componentInfo.getComponentId());
-                List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(componentInfo.getProductId(), componentIdList);
-                if(partsInfoList != null && !partsInfoList.isEmpty()) {
-                    Map<String, PartsDepartment> partsPermissionHashMap = new HashMap<>();
-                    Map<String, PartsInfo> partsInfoMap = new HashMap<>();
-                    partsIds = new ArrayList<>();
-                    PartsDepartment pp;
-                    PartsInfo ptInfo;
-                    for(PartsInfo p : partsInfoList){
-                        partsIds.add(p.getPartsId());
-                        partsInfoMap.put(p.getPartsId(), p);
-                        for(MdcProduction mdcProduction : mdcProductionList){
-                            key = p.getPartsId() + "," + mdcProduction.getId();
-                            pp = new PartsDepartment(p.getPartsId(), mdcProduction.getId());
-                            partsPermissionHashMap.put(key, pp);
-                        }
-                    }
-
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<PartsDepartment> existPartsList = partsDepartmentService.getByPartsIdsAndDepartIds(partsIds, ids);
-                    if(existPartsList != null && !existPartsList.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(PartsDepartment permission : existPartsList){
-                            key = permission.getPartsId() + "," + permission.getDepartId();
-                            if(partsPermissionHashMap.containsKey(key)){
-                                partsPermissionHashMap.remove(key);
-                            }
-                        }
-                    }
-
-                    for(Map.Entry<String, PartsDepartment> entry : partsPermissionHashMap.entrySet()){
-                        pp = entry.getValue();
-                        partsPermissionList.add(pp);
-                        ptInfo = partsInfoMap.get(pp.getPartsId());
-                        s = new PermissionStream();
-                        s.setProductId(ptInfo.getProductId());
-                        s.setComponentId(ptInfo.getComponentId());
-                        s.setPartsId(ptInfo.getPartsId());
-                        s.setDepartId(pp.getDepartId());
-                        permissionStreamList.add(s);
-                    }
-                }
-
-                //鏌ヨ宸ュ簭宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                List<ProcessStream> processStreamList = processStreamService.getByComponentIdList(componentInfo.getProductId(),componentIds,partsIds);
-                if(processStreamList != null && !processStreamList.isEmpty()) {
-                    Map<String, ProcessionDepartment> processionDepartmentHashMap = new HashMap<>();
-                    Map<String, ProcessStream> processStreamMap = new HashMap<>();
-                    ProcessionIds = new ArrayList<>();
-                    ProcessionDepartment pp;
-                    ProcessStream processStream;
-                    for(ProcessStream p : processStreamList){
-                        ProcessionIds.add(p.getProcessId());
-                        processStreamMap.put(p.getProcessId(), p);
-                        for(MdcProduction mdcProduction : mdcProductionList){
-                            key = p.getPartsId() + "," + mdcProduction.getId();
-                            pp = new ProcessionDepartment(p.getProcessId(), mdcProduction.getId());
-                            processionDepartmentHashMap.put(key, pp);
-                        }
-                    }
-
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<ProcessionDepartment> processionDepartmentList = processionDepartmentService.getByPartsIdsAndDepartIds(ProcessionIds, ids);
-                    if(processionDepartmentList != null && !processionDepartmentList.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(ProcessionDepartment processionDepartment : processionDepartmentList){
-                            key = processionDepartment.getProcessId() + "," + processionDepartment.getDepartId();
-                            if(processionDepartmentHashMap.containsKey(key)){
-                                processionDepartmentHashMap.remove(key);
-                            }
-                        }
-                    }
-
-                    for(Map.Entry<String, ProcessionDepartment> entry : processionDepartmentHashMap.entrySet()){
-                        pp = entry.getValue();
-                        processionPermissionList.add(pp);
-                        processStream = processStreamMap.get(pp.getProcessId());
-                        s = new PermissionStream();
-                        s.setProductId(processStream.getProductId());
-                        s.setComponentId(processStream.getComponentId());
-                        s.setPartsId(processStream.getPartsId());
-                        s.setProcessId(processStream.getProcessId());
-                        s.setDepartId(pp.getDepartId());
-                        permissionStreamList.add(s);
-                    }
-                }
-                //鏌ヨ宸ユ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                List<WorkStep> workStepList = workStepService.getByProcessIds(componentInfo.getProductId(),ProcessionIds);
-                if(workStepList != null && !workStepList.isEmpty()) {
-                    Map<String, WorkStepDepartment> workStepDepartmentHashMap = new HashMap<>();
-                    Map<String, WorkStep> workStepHashMap = new HashMap<>();
-                    workStepIds = new ArrayList<>();
-                    WorkStepDepartment ws;
-                    WorkStep workStep;
-                    for(WorkStep w : workStepList){
-                        workStepIds.add(w.getId());
-                        workStepHashMap.put(w.getId(), w);
-                        for(MdcProduction mdcProduction : mdcProductionList){
-                            key = w.getId() + "," + mdcProduction.getId();
-                            ws = new WorkStepDepartment(w.getId(), mdcProduction.getId());
-                            workStepDepartmentHashMap.put(key, ws);
-                        }
-                    }
-
-                    //鏌ヨ宸插瓨鍦ㄧ殑鏉冮檺鏁版嵁
-                    List<WorkStepDepartment> workStepDepartments = workStepDepartmentService.getByPartsIdsAndDepartIds(workStepIds, ids);
-                    if(workStepDepartments != null && !workStepDepartments.isEmpty()){
-                        //韪㈠嚭鏉冮檺鏁版嵁
-                        for(WorkStepDepartment workStepDepartment : workStepDepartments){
-                            key = workStepDepartment.getStepId() + "," + workStepDepartment.getDepartId();
-                            if(workStepDepartmentHashMap.containsKey(key)){
-                                workStepDepartmentHashMap.remove(key);
-                            }
-                        }
-                    }
-
-                    for(Map.Entry<String, WorkStepDepartment> entry : workStepDepartmentHashMap.entrySet()){
-                        ws = entry.getValue();
-                        workStepDepartmentList.add(ws);
-                        workStep = workStepHashMap.get(ws.getStepId());
-                        s = new PermissionStream();
-                        s.setProductId(workStep.getProductId());
-                        s.setComponentId(workStep.getComponentId());
-                        s.setPartsId(workStep.getPartsId());
-                        s.setProcessId(workStep.getProcessId());
-                        s.setStepId(workStep.getId());
-                        s.setDepartId(ws.getDepartId());
-                        permissionStreamList.add(s);
-                    }
-                }
-
-                if(!componentPermissionList.isEmpty()){
-                    componentDepartmentService.saveBatch(componentPermissionList);
-                }
-                if(!partsPermissionList.isEmpty()){
-                    partsDepartmentService.saveBatch(partsPermissionList);
-                }
-                if(!processionPermissionList.isEmpty()){
-                    processionDepartmentService.saveBatch(processionPermissionList);
-                }
-                if (!workStepDepartmentList.isEmpty()) {
-                    workStepDepartmentService.saveBatch(workStepDepartmentList);
-                }
-                if(!permissionStreamList.isEmpty()){
-                    permissionStreamService.saveBatch(permissionStreamList);
-                }
-            }
-            return true;
+            default:
+                return false;
         }
-        return false;
     }
 
     /**
-     * 寰呬紭鍖� TODO
-     * @param nodeType 1 浜у搧 2 閮ㄤ欢 3 闆朵欢 5 宸ュ簭 6 宸ユ
-     * @param paramId 浜у搧鏍戣妭鐐筰d
+     * @param nodeType     1 浜у搧 2 閮ㄤ欢 3 闆朵欢
+     * @param paramId      浜у搧鏍戣妭鐐筰d
      * @param relativeFlag 1 鏄� 2 鍚�
-     * @param departmentIds 绉婚櫎閮ㄩ棬ids
+     * @param userIds      绉婚櫎鐢ㄦ埛ids
+     * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛�
      * @return
      */
     @Override
     @Transactional(rollbackFor = {Exception.class})
-    public boolean assignRemoveDepartment(Integer nodeType, String paramId, Integer relativeFlag, String[] departmentIds) {
-        if(!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId) ||
-                !ValidateUtil.validateInteger(relativeFlag))
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        if(departmentIds == null || departmentIds.length < 1)
-            ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_NONE);
+    public boolean assignRemoveUserAll(Integer nodeType, String paramId, Integer relativeFlag, String[] userIds) {
+        validateInputParameters(nodeType, paramId, relativeFlag, "1", userIds);
+        List<String> userIdsList = Arrays.asList(userIds);
+        Collection<SysUser> userList = userService.listByIds(userIdsList);
+        validateSysUserList(userList, userIdsList);
+        switch (nodeType) {
+            case 1:
+                return handleProductInfoRemoval(paramId, relativeFlag, userList,null);
+            case 2:
+                return handleComponentInfoRemoval(paramId, relativeFlag, userList,null);
+            case 3:
+                return handlePartsInfoRemoval(paramId, relativeFlag, userList,null);
+            case 4:
+                return handleProcessSpecVersionRemoval(paramId, relativeFlag, userList,null);
+            case 5:
+                return handleProcessStreamRemoval(paramId, relativeFlag, userList,null);
+            case 6:
+                return handleWorkStepRemoval(paramId, userList,null);
+            default:
+                return false;
+        }
+    }
+
+
+    /**
+     *
+     * @param nodeType      1 浜у搧 2 閮ㄤ欢 3 闆朵欢 5 宸ュ簭 6 宸ユ
+     * @param paramId       浜у搧鏍戣妭鐐筰d
+     * @param relativeFlag  1 鏄� 2 鍚�
+     * @param departmentIds 绉婚櫎閮ㄩ棬ids
+     * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛�
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public boolean assignRemoveDepartmentAll(Integer nodeType, String paramId, Integer relativeFlag, String[] departmentIds) {
+        validateInputParameters(nodeType, paramId, relativeFlag, "2", departmentIds);
         List<String> ids = new ArrayList<>(departmentIds.length);
         Collections.addAll(ids, departmentIds);
-        Collection<MdcProduction> mdcProductionList=mdcProductionService.listByIds(ids);
-        if(mdcProductionList == null || mdcProductionList.isEmpty() || mdcProductionList.size() != departmentIds.length)
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        if(nodeType == 6) {
-            //澶勭悊宸ユ
-            WorkStep workStep=workStepService.getById(paramId);
-            if (workStep == null)
-                ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            boolean b = checkProductPerm(6, workStep.getId());
-            if (!b) {
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            return workStepService.assignRemoveDepart(workStep, mdcProductionList);
-        }else if(nodeType == 5) {
-            //澶勭悊宸ュ簭
-            ProcessStream processStream = processStreamService.getById(paramId);
-            if (processStream == null)
-                ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            boolean b = checkProductPerm(5, processStream.getProcessId());
-            if (!b) {
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            return processStreamService.assignRemoveDepart(processStream, mdcProductionList);
-        }else if(nodeType == 3) {
-            //澶勭悊闆朵欢
-            PartsInfo partsInfo = partsInfoService.getById(paramId);
-            if(partsInfo == null)
-                ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
-            boolean b = checkProductPerm(3, partsInfo.getPartsId());
-            if(!b) {
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            }
-            return partsInfoService.assignRemoveDepart(partsInfo, mdcProductionList);
-        }else if(nodeType == 1) {
-            //澶勭悊浜у搧
-            ProductInfo productInfo = super.getById(paramId);
-            if(productInfo == null)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
-            boolean b1 = checkProductPerm(1, productInfo.getProductId());
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            b1 = this.assignRemoveDepartment(productInfo, mdcProductionList);
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            if(relativeFlag == 1) {
-                //澶勭悊浜у搧 涓嬬殑閮ㄤ欢
-                List<String> componentIds = new ArrayList<>();
-                //鎬昏闇�瑕佸垹闄ょ殑鏁版嵁淇℃伅
-                List<ComponentDepartment> componentPermissionList = new ArrayList<>();
-                List<PartsDepartment> partsPermissionList = new ArrayList<>();
-                List<ProcessionDepartment> processionPermissionList = new ArrayList<>();
-                List<WorkStepDepartment> workStepDepartmentList=new ArrayList<>();
-                List<PermissionStream> permissionStreamList = new ArrayList<>();
-                List<ComponentInfo> componentInfoList = componentInfoService.getByProductId(productInfo.getProductId());
-                List<String> partsIds= new ArrayList<>();
-                List<String> ProcessionIds= new ArrayList<>();
-                List<String> workStepIds= new ArrayList<>();
-                if(componentInfoList != null && !componentInfoList.isEmpty()) {
-                    for(ComponentInfo componentInfo : componentInfoList){
-                        componentIds.add(componentInfo.getComponentId());
-                    }
-                    componentPermissionList = componentDepartmentService.getByComponentIdsAndDepartIds(componentIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByComponentIdsAndDepartIds(componentIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                //澶勭悊浜у搧 涓嬬殑闆朵欢
-                List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(productInfo.getProductId(), componentIds);
-                partsIds = new ArrayList<>();
-                if(partsInfoList != null && !partsInfoList.isEmpty()) {
-                    for(PartsInfo partsInfo : partsInfoList){
-                        partsIds.add(partsInfo.getPartsId());
-                    }
-                    partsPermissionList = partsDepartmentService.getByPartsIdsAndDepartIds(partsIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByPartsIdsAndDepartIds(partsIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                //澶勭悊宸ュ簭
-                List<ProcessStream> processStreamList=processStreamService.getByComponentIdList(productInfo.getProductId(), componentIds,partsIds);
-                ProcessionIds = new ArrayList<>();
-                if(processStreamList != null && !processStreamList.isEmpty()) {
-                    for(ProcessStream processStream : processStreamList){
-                        ProcessionIds.add(processStream.getProcessId());
-                    }
-                    processionPermissionList = processionDepartmentService.getByPartsIdsAndDepartIds(ProcessionIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByPartsIdsAndDepartIds(ProcessionIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                //澶勭悊宸ユ
-                List<WorkStep> workStepList=workStepService.getByProcessIds(productInfo.getProductId(), ProcessionIds);
-                workStepIds = new ArrayList<>();
-                if(workStepList != null && !workStepList.isEmpty()) {
-                    for(WorkStep workStep : workStepList){
-                        workStepIds.add(workStep.getId());
-                    }
-                    workStepDepartmentList = workStepDepartmentService.getByPartsIdsAndDepartIds(workStepIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByPartsIdsAndDepartIds(workStepIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                if(componentPermissionList != null && !componentPermissionList.isEmpty()){
-                    componentDepartmentService.removeByCollection(componentPermissionList);
-                }
-                if(partsPermissionList != null && !partsPermissionList.isEmpty()){
-                    partsDepartmentService.removeByCollection(partsPermissionList);
-                }
-                if(processionPermissionList != null && !processionPermissionList.isEmpty()){
-                    processionDepartmentService.removeByCollection(processionPermissionList);
-                }
-                if(workStepDepartmentList != null && !workStepDepartmentList.isEmpty()){
-                    workStepDepartmentService.removeByCollection(workStepDepartmentList);
-                }
-                if(permissionStreamList != null && !permissionStreamList.isEmpty()){
-                    permissionStreamService.removeByCollection(permissionStreamList);
-                }
-            }
-            return true;
-        }else if(nodeType == 2) {
-            ComponentInfo componentInfo = componentInfoService.getById(paramId);
-            if(componentInfo == null)
-                ExceptionCast.cast(ComponentInfoCode.COMPONENT_NOT_EXIST);
-            boolean b1 = checkProductPerm(2, componentInfo.getComponentId());
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            b1 = componentInfoService.assignRemoveDepart(componentInfo, mdcProductionList);
-            if(!b1)
-                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
-            if(relativeFlag == 1) {
-                List<String> componentIdList = new ArrayList<>();
-                //鎬昏闇�瑕佸垹闄ょ殑鏁版嵁淇℃伅
-                List<ComponentDepartment> componentPermissionList = new ArrayList<>();
-                List<PartsDepartment> partsPermissionList = new ArrayList<>();
-                List<ProcessionDepartment> processionPermissionList = new ArrayList<>();
-                List<WorkStepDepartment> workStepDepartmentList=new ArrayList<>();
-                List<PermissionStream> permissionStreamList = new ArrayList<>();
-                List<String> partsIds= new ArrayList<>();
-                List<String> ProcessionIds= new ArrayList<>();
-                List<String> workStepIds= new ArrayList<>();
-                List<ComponentInfo> childrenList = componentInfoService.getByParentId(componentInfo.getComponentId());
-                if(childrenList != null && !childrenList.isEmpty()) {
-                    for(ComponentInfo cpn : childrenList){
-                        componentIdList.add(cpn.getComponentId());
-                    }
-                    componentPermissionList = componentDepartmentService.getByComponentIdsAndDepartIds(componentIdList, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByComponentIdsAndDepartIds(componentIdList, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                //澶勭悊浜у搧 涓嬬殑闆朵欢
-                componentIdList.add(componentInfo.getComponentId());
-                List<PartsInfo> partsInfoList = partsInfoService.getByComponentIdList(componentInfo.getProductId(), componentIdList);
-                partsIds = new ArrayList<>();
-                if(partsInfoList != null && !partsInfoList.isEmpty()) {
-                    for(PartsInfo partsInfo : partsInfoList){
-                        partsIds.add(partsInfo.getPartsId());
-                    }
-                    partsPermissionList = partsDepartmentService.getByPartsIdsAndDepartIds(partsIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByPartsIdsAndDepartIds(partsIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                //澶勭悊宸ュ簭
-                List<ProcessStream> processStreamList=processStreamService.getByComponentIdList(componentInfo.getProductId(), componentIdList,partsIds);
-                ProcessionIds = new ArrayList<>();
-                if(processStreamList != null && !processStreamList.isEmpty()) {
-                    for(ProcessStream processStream : processStreamList){
-                        ProcessionIds.add(processStream.getProcessId());
-                    }
-                    processionPermissionList = processionDepartmentService.getByPartsIdsAndDepartIds(ProcessionIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByPartsIdsAndDepartIds(ProcessionIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                //澶勭悊宸ユ
-                List<WorkStep> workStepList=workStepService.getByProcessIds(componentInfo.getProductId(), ProcessionIds);
-                workStepIds = new ArrayList<>();
-                if(workStepList != null && !workStepList.isEmpty()) {
-                    for(WorkStep workStep : workStepList){
-                        workStepIds.add(workStep.getId());
-                    }
-                    workStepDepartmentList = workStepDepartmentService.getByPartsIdsAndDepartIds(workStepIds, ids);
-                    List<PermissionStream> existPermissionList = permissionStreamService.getByPartsIdsAndDepartIds(workStepIds, ids);
-                    if(existPermissionList != null && !existPermissionList.isEmpty()){
-                        permissionStreamList.addAll(existPermissionList);
-                    }
-                }
-
-                if(componentPermissionList != null && !componentPermissionList.isEmpty()){
-                    componentDepartmentService.removeByCollection(componentPermissionList);
-                }
-                if(partsPermissionList != null && !partsPermissionList.isEmpty()){
-                    partsDepartmentService.removeByCollection(partsPermissionList);
-                }
-                if(processionPermissionList != null && !processionPermissionList.isEmpty()){
-                    processionDepartmentService.removeByCollection(processionPermissionList);
-                }
-                if(workStepDepartmentList != null && !workStepDepartmentList.isEmpty()){
-                    workStepDepartmentService.removeByCollection(workStepDepartmentList);
-                }
-                if(permissionStreamList != null && !permissionStreamList.isEmpty()){
-                    permissionStreamService.removeByCollection(permissionStreamList);
-                }
-            }
-            return true;
+        List<String> deps=mdcProductionService.findAllProductionIds(ids);
+        Collection<MdcProduction> mdcProductionList = mdcProductionService.listByIds(deps);
+        validateMdcProductionList(mdcProductionList, deps);
+        switch (nodeType) {
+            case 1:
+                return handleProductInfoRemoval(paramId, relativeFlag,null, mdcProductionList);
+            case 2:
+                return handleComponentInfoRemoval(paramId, relativeFlag, null,mdcProductionList);
+            case 3:
+                return handlePartsInfoRemoval(paramId, relativeFlag,null, mdcProductionList);
+            case 4:
+                return handleProcessSpecVersionRemoval(paramId, relativeFlag, null,mdcProductionList);
+            case 5:
+                return handleProcessStreamRemoval(paramId, relativeFlag, null,mdcProductionList);
+            case 6:
+                return handleWorkStepRemoval(paramId,null,mdcProductionList);
+            default:
+                return false;
         }
-        return false;
     }
 
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public boolean assignAddUser(ProductInfo productInfo, Collection<SysUser> userList) {
-        if(productInfo == null || userList == null || userList.isEmpty())
+        if (productInfo == null || userList == null || userList.isEmpty())
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         List<ProductPermission> permissionList = new ArrayList<>();
-        List<PermissionStream> permissionStreamList = new ArrayList<>();
+        List<PermissionStreamNew> permissionStreamList = new ArrayList<>();
         userList.forEach(item -> {
             ProductPermission en = productPermissionService.getByProductIdAndUserId(productInfo.getProductId(), item.getId());
-            if(en == null) {
+            if (en == null) {
                 en = new ProductPermission();
                 en.setUserId(item.getId());
                 en.setProductId(productInfo.getProductId());
                 permissionList.add(en);
             }
-            PermissionStream stream = permissionStreamService.getByProductIdAndUserId(productInfo.getProductId(), item.getId());
-            if(stream == null) {
-                stream = new PermissionStream();
+            PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(productInfo.getProductId(), item.getId(),"1");
+            if (stream == null) {
+                stream = new PermissionStreamNew();
                 stream.setUserId(item.getId());
-                stream.setProductId(productInfo.getProductId());
+                stream.setBusinessId(productInfo.getProductId());
+                stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
                 permissionStreamList.add(stream);
             }
         });
-        if(!permissionList.isEmpty()) {
+        if (!permissionList.isEmpty()) {
             boolean b = productPermissionService.saveBatch(permissionList);
-            if(!b) {
+            if (!b) {
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
             }
         }
-        if(!permissionStreamList.isEmpty()) {
-            boolean b = permissionStreamService.saveBatch(permissionStreamList);
-            if(!b) {
+        if (!permissionStreamList.isEmpty()) {
+            boolean b =permissionStreamNewService.saveBatch(permissionStreamList);
+            if (!b) {
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
             }
         }
@@ -1559,33 +601,33 @@
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public boolean assignRemoveUser(ProductInfo productInfo, Collection<SysUser> userList) {
-        if(productInfo == null || userList == null || userList.isEmpty())
+        if (productInfo == null || userList == null || userList.isEmpty())
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         List<ProductPermission> permissionList = new ArrayList<>();
-        List<PermissionStream> permissionStreamList = new ArrayList<>();
+        List<PermissionStreamNew> permissionStreamList = new ArrayList<>();
         userList.forEach(item -> {
             ProductPermission en = productPermissionService.getByProductIdAndUserId(productInfo.getProductId(), item.getId());
-            if(en != null) {
+            if (en != null) {
                 permissionList.add(en);
             }
-            PermissionStream stream = permissionStreamService.getByProductIdAndUserId(productInfo.getProductId(), item.getId());
-            if(stream != null) {
+            PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(productInfo.getProductId(), item.getId(),"1");
+            if (stream != null) {
                 permissionStreamList.add(stream);
             }
         });
         //绉婚櫎鐢ㄦ埛鏉冮檺娓呯┖鏍¢獙
         List<ProductPermission> existList = productPermissionService.getByProductId(productInfo.getProductId());
-        if(existList.size() <= permissionList.size())
+        if (existList.size() <= permissionList.size())
             ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_NONE);
-        if(!permissionList.isEmpty()) {
+        if (!permissionList.isEmpty()) {
             boolean b = productPermissionService.removeByCollection(permissionList);
-            if(!b) {
+            if (!b) {
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
             }
         }
-        if(!permissionStreamList.isEmpty()) {
-            boolean b = permissionStreamService.removeByCollection(permissionStreamList);
-            if(!b) {
+        if (!permissionStreamList.isEmpty()) {
+            boolean b = permissionStreamNewService.deletePermissionStreamNewByList(permissionStreamList);
+            if (!b) {
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
             }
         }
@@ -1595,35 +637,36 @@
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public boolean assignAddDepartment(ProductInfo productInfo, Collection<MdcProduction> departmentList) {
-        if(productInfo == null || departmentList == null || departmentList.isEmpty())
+        if (productInfo == null || departmentList == null || departmentList.isEmpty())
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         List<ProductDepartment> productDepartmentList = new ArrayList<>();
-        List<PermissionStream> permissionStreamList = new ArrayList<>();
+        List<PermissionStreamNew> permissionStreamList = new ArrayList<>();
         departmentList.forEach(item -> {
             ProductDepartment en = productDepartmentService.getByProductIdAndDepartId(productInfo.getProductId(), item.getId());
-            if(en == null) {
+            if (en == null) {
                 en = new ProductDepartment();
                 en.setDepartId(item.getId());
                 en.setProductId(productInfo.getProductId());
                 productDepartmentList.add(en);
             }
-            PermissionStream stream = permissionStreamService.getByProductIdAndDepartId(productInfo.getProductId(), item.getId());
-            if(stream == null) {
-                stream = new PermissionStream();
+            PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndDepartId(productInfo.getProductId(), item.getId(),"1");
+            if (stream == null) {
+                stream = new PermissionStreamNew();
                 stream.setDepartId(item.getId());
-                stream.setProductId(productInfo.getProductId());
+                stream.setBusinessId(productInfo.getProductId());
+                stream.setBusinessType(DocAttributionTypeEnum.PRODUCT.getCode().toString());
                 permissionStreamList.add(stream);
             }
         });
-        if(!productDepartmentList.isEmpty()) {
+        if (!productDepartmentList.isEmpty()) {
             boolean b = productDepartmentService.saveBatch(productDepartmentList);
-            if(!b) {
+            if (!b) {
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
             }
         }
-        if(!permissionStreamList.isEmpty()) {
-            boolean b = permissionStreamService.saveBatch(permissionStreamList);
-            if(!b) {
+        if (!permissionStreamList.isEmpty()) {
+            boolean b = permissionStreamNewService.saveBatch(permissionStreamList);
+            if (!b) {
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
             }
         }
@@ -1633,29 +676,29 @@
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public boolean assignRemoveDepartment(ProductInfo productInfo, Collection<MdcProduction> departmentList) {
-        if(productInfo == null || departmentList == null || departmentList.isEmpty())
+        if (productInfo == null || departmentList == null || departmentList.isEmpty())
             ExceptionCast.cast(CommonCode.INVALID_PARAM);
         List<ProductDepartment> productDepartmentList = new ArrayList<>();
-        List<PermissionStream> permissionStreamList = new ArrayList<>();
+        List<PermissionStreamNew> permissionStreamList = new ArrayList<>();
         departmentList.forEach(item -> {
             ProductDepartment en = productDepartmentService.getByProductIdAndDepartId(productInfo.getProductId(), item.getId());
-            if(en != null) {
+            if (en != null) {
                 productDepartmentList.add(en);
             }
-            PermissionStream stream = permissionStreamService.getByProductIdAndDepartId(productInfo.getProductId(), item.getId());
-            if(stream != null) {
+            PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndDepartId(productInfo.getProductId(), item.getId(),"1");
+            if (stream != null) {
                 permissionStreamList.add(stream);
             }
         });
-        if(!productDepartmentList.isEmpty()) {
+        if (!productDepartmentList.isEmpty()) {
             boolean b = productDepartmentService.removeByCollection(productDepartmentList);
-            if(!b) {
+            if (!b) {
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
             }
         }
-        if(!permissionStreamList.isEmpty()) {
-            boolean b = permissionStreamService.removeByCollection(permissionStreamList);
-            if(!b) {
+        if (!permissionStreamList.isEmpty()) {
+            boolean b = permissionStreamNewService.deletePermissionStreamNewByList(permissionStreamList);
+            if (!b) {
                 ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
             }
         }
@@ -1666,37 +709,28 @@
     public List<String> getDepartIdsByParams(Integer nodeType, String paramId) {
         List<String> departIds = new ArrayList<>();
         //5-宸ュ簭
-        if(nodeType == 5) {
-            ProcessStream processStream= processStreamService.getById(paramId);
-            if(processStream == null)
+        if (Objects.equals(nodeType, DocAttributionTypeEnum.PROCESS.getCode())) {
+            ProcessStream processStream = processStreamService.getById(paramId);
+            if (processStream == null)
                 return null;
-            List<PermissionStream> permissionStreamList = permissionStreamService.list(new QueryWrapper<PermissionStream>()
-                    .eq(StrUtil.isNotEmpty(processStream.getProductId()),"product_id", processStream.getProductId())
-                    .eq(StrUtil.isNotEmpty(processStream.getComponentId()),"component_id",processStream.getComponentId())
-                    .eq(StrUtil.isNotEmpty(processStream.getPartsId()),"parts_id", processStream.getPartsId())
-                    .eq(StrUtil.isNotEmpty(processStream.getProcessId()),"process_id",processStream.getProcessId()));
-            if(permissionStreamList == null || permissionStreamList.isEmpty())
+            List<PermissionStreamNew> permissionStreamList = permissionStreamNewService.loadProductMixByBusinessId(processStream.getProcessId(),"5");
+            if (permissionStreamList == null || permissionStreamList.isEmpty())
                 return null;
             permissionStreamList.forEach(item -> {
                 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)
+            if (workStep == null)
                 return null;
-            List<PermissionStream> permissionStreamList = permissionStreamService.list(new QueryWrapper<PermissionStream>()
-                    .eq(StrUtil.isNotEmpty(workStep.getProductId()),"product_id", workStep.getProductId())
-                    .eq(StrUtil.isNotEmpty(workStep.getComponentId()),"component_id",workStep.getComponentId())
-                    .eq(StrUtil.isNotEmpty(workStep.getPartsId()),"parts_id", workStep.getPartsId())
-                    .eq(StrUtil.isNotEmpty(workStep.getProcessId()),"process_id",workStep.getProcessId())
-                    .eq(StrUtil.isNotEmpty(workStep.getId()),"step_id", workStep.getId()));
-            if(permissionStreamList == null || permissionStreamList.isEmpty())
+            List<PermissionStreamNew> permissionStreamList = permissionStreamNewService.loadProductMixByBusinessId(workStep.getId(),"6");
+            if (permissionStreamList == null || permissionStreamList.isEmpty())
                 return null;
             permissionStreamList.forEach(item -> {
                 departIds.add(item.getDepartId());
             });
-        }else {
+        } else {
             return null;
         }
         //鍘婚噸
@@ -1708,9 +742,9 @@
 
     @Override
     public ProductInfo getByProductNo(String productNo) {
-        if(ValidateUtil.validateString(productNo)) {
+        if (ValidateUtil.validateString(productNo)) {
             List<ProductInfo> list = super.lambdaQuery().eq(ProductInfo::getProductNo, productNo).list();
-            if(list == null || list.isEmpty())
+            if (list == null || list.isEmpty())
                 return null;
             return list.get(0);
         }
@@ -1720,7 +754,7 @@
     @Override
     public List<CommonGenericTree> loadBaseTree(String userId) {
         List<ProductInfo> productInfoList = getByUserPerms(userId);
-        if(productInfoList == null || productInfoList.isEmpty())
+        if (productInfoList == null || productInfoList.isEmpty())
             return Collections.emptyList();
 //        List<ComponentExt> componentInfoList = componentInfoService.getByUserPermsAs(userId);
 //        if(componentInfoList == null)
@@ -1730,62 +764,62 @@
 
     @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())
+            if (componentInfoList == null || componentInfoList.isEmpty())
                 return Collections.emptyList();
             List<CommonGenericTree> list = new ArrayList<>();
             CommonGenericTree<ComponentInfo> node;
-            for(ComponentInfo c : componentInfoList) {
+            for (ComponentInfo c : componentInfoList) {
                 node = new CommonGenericTree();
                 node.setId(c.getComponentId());
 //                node.setLabel("[" + c.getComponentCode()+ "]" +  c.getComponentName());
                 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;
-            if(componentInfoList != null && !componentInfoList.isEmpty()) {
-                for(ComponentInfo c : componentInfoList) {
+            if (componentInfoList != null && !componentInfoList.isEmpty()) {
+                for (ComponentInfo c : componentInfoList) {
                     componentNode = new CommonGenericTree();
                     componentNode.setId(c.getComponentId());
 //                    componentNode.setLabel("[" + c.getComponentCode()+ "]" + c.getComponentName());
                     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);
                 }
             }
             List<PartsInfo> partsInfos = partsInfoService.getByUserPerms(userId, paramId, null);
-            if(partsInfos == null || partsInfos.isEmpty())
+            if (partsInfos == null || partsInfos.isEmpty())
                 return list;
             CommonGenericTree<PartsInfo> partNode;
-            for(PartsInfo part : partsInfos) {
+            for (PartsInfo part : partsInfos) {
                 partNode = new CommonGenericTree();
                 partNode.setId(part.getPartsId());
 //                partNode.setLabel("[" + part.getPartsCode()+ "]" + part.getPartsName());
                 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);
                 list.add(partNode);
             }
             return list;
-        }else {
+        } else {
             return Collections.emptyList();
         }
     }
@@ -1795,8 +829,9 @@
         List<ProductInfo> productInfos = this.getByUserPerms(userId, queryParam);
         List<ComponentInfo> componentInfos = componentInfoService.getByUserPerms(userId, queryParam);
         List<PartsInfo> partsInfos = partsInfoService.getByUserPerms(userId, null, queryParam);
-        List<ProcessStream> processStreams=processStreamService.getByuserPerms(userId, queryParam);
-        List<WorkStep> workSteps=workStepService.getByUserPerms(userId, queryParam);
+        List<ProcessSpecVersion> processSpecVersions = processSpecVersionService.getByUserPerms(userId, queryParam);
+        List<ProcessStream> processStreams = processStreamService.getByuserPerms(userId, queryParam);
+        List<WorkStep> workSteps = workStepService.getByUserPerms(userId, queryParam);
         List<ComponentInfo> componentInfoList = new ArrayList<>();
         List<ProductInfo> productInfoList = new ArrayList<>();
 
@@ -1806,32 +841,32 @@
         ProductInfo product;
         ComponentInfo component;
 
-        if(productInfos != null && !productInfos.isEmpty()){
-            for(ProductInfo p : productInfos){
+        if (productInfos != null && !productInfos.isEmpty()) {
+            for (ProductInfo p : productInfos) {
                 productInfoList.add(p);
                 productInfoMap.put(p.getProductId(), p);
             }
         }
 
-        if(componentInfos != null && !componentInfos.isEmpty()){
-            for(ComponentInfo c : componentInfos){
+        if (componentInfos != null && !componentInfos.isEmpty()) {
+            for (ComponentInfo c : componentInfos) {
                 componentInfoList.add(c);
                 componentInfoMap.put(c.getComponentId(), c);
             }
         }
 
-        for(PartsInfo p : partsInfos) {
-            if(!productInfoMap.containsKey(p.getProductId())) {
-                product  = super.getById(p.getProductId());
-                if(product != null) {
+        for (PartsInfo p : partsInfos) {
+            if (!productInfoMap.containsKey(p.getProductId())) {
+                product = super.getById(p.getProductId());
+                if (product != null) {
                     productInfoMap.put(product.getProductId(), product);
                     productInfoList.add(product);
                 }
             }
 
-            if(!componentInfoMap.containsKey(p.getComponentId())) {
+            if (!componentInfoMap.containsKey(p.getComponentId())) {
                 component = componentInfoService.getById(p.getComponentId());
-                if(component != null) {
+                if (component != null) {
                     componentInfoMap.put(component.getComponentId(), component);
                     componentInfoList.add(component);
                 }
@@ -1841,16 +876,16 @@
 
         for (ProcessStream processStream : processStreams) {
             if (!productInfoMap.containsKey(processStream.getProductId())) {
-                product  = super.getById(processStream.getProductId());
-                if(product != null) {
+                product = super.getById(processStream.getProductId());
+                if (product != null) {
                     productInfoMap.put(product.getProductId(), product);
                     productInfoList.add(product);
                 }
             }
 
-            if(!componentInfoMap.containsKey(processStream.getComponentId())) {
+            if (!componentInfoMap.containsKey(processStream.getComponentId())) {
                 component = componentInfoService.getById(processStream.getComponentId());
-                if(component != null) {
+                if (component != null) {
                     componentInfoMap.put(component.getComponentId(), component);
                     componentInfoList.add(component);
                 }
@@ -1858,18 +893,18 @@
             }
         }
 
-        for (WorkStep workStep :workSteps){
+        for (WorkStep workStep : workSteps) {
             if (!productInfoMap.containsKey(workStep.getProductId())) {
-                product  = super.getById(workStep.getProductId());
-                if(product != null) {
+                product = super.getById(workStep.getProductId());
+                if (product != null) {
                     productInfoMap.put(product.getProductId(), product);
                     productInfoList.add(product);
                 }
             }
 
-            if(!componentInfoMap.containsKey(workStep.getComponentId())) {
+            if (!componentInfoMap.containsKey(workStep.getComponentId())) {
                 component = componentInfoService.getById(workStep.getComponentId());
-                if(component != null) {
+                if (component != null) {
                     componentInfoMap.put(component.getComponentId(), component);
                     componentInfoList.add(component);
                 }
@@ -1882,30 +917,30 @@
         long start = System.currentTimeMillis();
         log.info("寮�濮嬪惊鐜墽琛屾椂闂�={}", start);
         String pid;
-        for(ComponentInfo c : componentInfoList){
+        for (ComponentInfo c : componentInfoList) {
             int rankLevel = c.getRankLevel();
             component = c;
-            if(!productInfoMap.containsKey(c.getProductId())) {
-                product  = super.getById(c.getProductId());
-                if(product != null) {
+            if (!productInfoMap.containsKey(c.getProductId())) {
+                product = super.getById(c.getProductId());
+                if (product != null) {
                     productInfoMap.put(product.getProductId(), product);
                     productInfoList.add(product);
                 }
             }
-            while((rankLevel - 1) > 0) {
+            while ((rankLevel - 1) > 0) {
                 pid = component.getParentId();
-                if(componentInfoMap.containsKey(pid)) {
+                if (componentInfoMap.containsKey(pid)) {
                     component = componentInfoMap.get(pid);
                     rankLevel = component.getRankLevel();
                     continue;
                 }
                 component = componentInfoService.getById(pid);
-                if(component != null) {
+                if (component != null) {
                     log.info("addList娣诲姞浜嗘柊鐨勯儴浠秈d={}", component.getComponentId());
                     componentInfoMap.put(component.getComponentId(), component);
                     addList.add(component);
                     rankLevel = component.getRankLevel();
-                }else {
+                } else {
                     log.info("鏌ヨ涓嶅埌閮ㄤ欢id={}", pid);
                     break;
                 }
@@ -1915,13 +950,609 @@
         long end = System.currentTimeMillis();
         log.info("寰幆鎵ц鎬昏�楁椂={}", (end - start));
 
-        if(!addList.isEmpty()){
+        if (!addList.isEmpty()) {
             componentInfoList.addAll(addList);
         }
 
         //杞崲鏁版嵁
         List<ComponentExt> componentExtList = ComponentExt.convertToExtList(componentInfoList);
 
-        return ProductTreeWrapper.loadTree(productInfoList, componentExtList, partsInfos,processStreams,workSteps);
+        return ProductTreeWrapper.loadTree(productInfoList, componentExtList, partsInfos,processSpecVersions, processStreams, workSteps);
+    }
+
+    @Override
+    public boolean deleteProductTree(String id, Integer type) {
+        switch (type) {
+            //浜у搧
+            case 1:
+                return deleteProductInfo(id);
+            //閮ㄩ棬
+            case 2:
+                return componentInfoService.deleteComponentInfo(id);
+            //闆朵欢
+            case 3:
+                return partsInfoService.deletePartsInfo(id);
+            //宸ヨ壓瑙勭▼鐗堟湰
+            case 4:
+                return processSpecVersionService.deleteProcessSpecVersion(id);
+            //宸ュ簭
+            case 5:
+                return processStreamService.deleteProcessStream(id);
+            //宸ユ
+            case 6:
+                return workStepService.deleteWorkStep(id);
+            default:
+        }
+        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;
+    }
+
+    /**
+     * 楠岃瘉杈撳叆鍙傛暟
+     */
+    private void validateInputParameters(Integer nodeType, String paramId, Integer relativeFlag, String type, String[] paramIds) {
+        if (!ValidateUtil.validateInteger(nodeType) || !ValidateUtil.validateString(paramId) ||
+                !ValidateUtil.validateInteger(relativeFlag)) {
+            ExceptionCast.cast(CommonCode.INVALID_PARAM);
+        }
+        if (paramIds == null || paramIds.length < 1) {
+            if (("1").equals(type)) {
+                ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_NONE);
+            } else {
+                ExceptionCast.cast(ProductInfoCode.PRODUCT_DEPART_PERM_NONE);
+            }
+        }
+    }
+
+    /**
+     * 楠岃瘉 SysUser 鍒楄〃
+     */
+    private void validateSysUserList(Collection<SysUser> sysUserList, List<String> userIds) {
+        if (sysUserList == null || sysUserList.isEmpty() || sysUserList.size() != userIds.size()) {
+            ExceptionCast.cast(CommonCode.INVALID_PARAM);
+        }
+    }
+
+    /**
+     * 楠岃瘉 MdcProduction 鍒楄〃
+     */
+    private void validateMdcProductionList(Collection<MdcProduction> mdcProductionList, List<String> departmentIds) {
+        if (mdcProductionList == null || mdcProductionList.isEmpty() || mdcProductionList.size() != departmentIds.size()) {
+            ExceptionCast.cast(CommonCode.INVALID_PARAM);
+        }
+    }
+
+    /**
+     * 娣诲姞鏉冮檺
+     */
+    private boolean handleProductInfo(String paramId, Integer relativeFlag, Collection<MdcProduction> mdcProductionList,Collection<SysUser> userList) {
+        return handlePermission(paramId, 1, relativeFlag, mdcProductionList, userList, true);
+    }
+
+    private boolean handleComponentInfo(String paramId, Integer relativeFlag, Collection<MdcProduction> mdcProductionList,Collection<SysUser> userList) {
+        return handlePermission(paramId, 2, relativeFlag, mdcProductionList, userList, true);
+    }
+
+    private boolean handlePartsInfo(String paramId, Integer relativeFlag, Collection<MdcProduction> mdcProductionList,Collection<SysUser> userList) {
+        return handlePermission(paramId, 3, relativeFlag, mdcProductionList, userList, true);
+    }
+
+    private boolean handleProcessSpecVersion(String paramId, Integer relativeFlag, Collection<MdcProduction> mdcProductionList,Collection<SysUser> userList) {
+        return handlePermission(paramId, 4, relativeFlag, mdcProductionList, userList, true);
+    }
+
+    private boolean handleProcessStream(String paramId, Integer relativeFlag, Collection<MdcProduction> mdcProductionList,Collection<SysUser> userList) {
+        return handlePermission(paramId, 5, relativeFlag, mdcProductionList, userList, true);
+    }
+
+    private boolean handleWorkStep(String paramId, Collection<MdcProduction> mdcProductionList,Collection<SysUser> userList) {
+        return handlePermission(paramId, 6, null, mdcProductionList, userList, true);
+    }
+
+
+    /**
+     * 绉婚櫎鏉冮檺
+     */
+    private boolean handleProductInfoRemoval(String paramId, Integer relativeFlag, Collection<SysUser> userList, Collection<MdcProduction> mdcProductionList) {
+        return handlePermission(paramId, 1, relativeFlag, mdcProductionList, userList, false);
+    }
+
+    private boolean handleComponentInfoRemoval(String paramId, Integer relativeFlag, Collection<SysUser> userList, Collection<MdcProduction> mdcProductionList) {
+        return handlePermission(paramId, 2, relativeFlag, mdcProductionList, userList, false);
+    }
+
+    private boolean handlePartsInfoRemoval(String paramId, Integer relativeFlag, Collection<SysUser> userList, Collection<MdcProduction> mdcProductionList) {
+        return handlePermission(paramId, 3, relativeFlag, mdcProductionList, userList, false);
+    }
+
+    private boolean handleProcessSpecVersionRemoval(String paramId, Integer relativeFlag, Collection<SysUser> userList, Collection<MdcProduction> mdcProductionList) {
+        return handlePermission(paramId, 4, relativeFlag, mdcProductionList, userList, false);
+    }
+
+    private boolean handleProcessStreamRemoval(String paramId, Integer relativeFlag, Collection<SysUser> userList, Collection<MdcProduction> mdcProductionList) {
+        return handlePermission(paramId, 5, relativeFlag, mdcProductionList, userList, false);
+    }
+
+    private boolean handleWorkStepRemoval(String paramId, Collection<SysUser> userList, Collection<MdcProduction> mdcProductionList) {
+        return handlePermission(paramId, 6, null, mdcProductionList, userList, false);
+    }
+
+    /**
+    * 閫氱敤鏉冮檺澶勭悊鏂规硶
+    */
+    private boolean handlePermission(String paramId, int type, Integer relativeFlag,
+                                     Collection<MdcProduction> mdcProductionList,
+                                     Collection<SysUser> userList, boolean isAddOperation) {
+
+        // 鑾峰彇瀹炰綋鍜岃繘琛屽瓨鍦ㄦ�ф鏌�
+        Object entity = getEntityById(type, paramId);
+        if (entity == null) {
+            throwExceptionForType(type);
+        }
+
+        // 鏉冮檺妫�鏌�
+        String entityId = getEntityId(entity, type);
+        if (!checkProductPerm(type, entityId)) {
+            ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
+        }
+
+        // 鑾峰彇瀛愯妭鐐瑰垪琛�
+        List<ProductMix> productMixList = productMixService.getChildrenList(entityId);
+        boolean result;
+
+        // 鎵ц鐢ㄦ埛/閮ㄩ棬鐨勬潈闄愭搷浣�
+        if (userList != null) {
+            result = executeUserPermissionOperation(entity, type, userList, isAddOperation);
+            handleChildrenPermission(productMixList, relativeFlag, userList, null, isAddOperation);
+        } else {
+            result = executeDepartmentPermissionOperation(entity, type, mdcProductionList, isAddOperation);
+            handleChildrenPermission(productMixList, relativeFlag, null, mdcProductionList, isAddOperation);
+        }
+
+        if (!result) {
+            ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR);
+        }
+
+        return true;
+    }
+
+    /**
+     * 澶勭悊瀛愯妭鐐规潈闄�
+    */
+    private void handleChildrenPermission(List<ProductMix> productMixList, Integer relativeFlag,
+                                          Collection<SysUser> userList, Collection<MdcProduction> mdcProductionList,
+                                          boolean isAddOperation) {
+        if (relativeFlag != 1) return;
+
+        productMixList.forEach(productMix -> {
+            int childType = productMix.getTreeType();
+            executeChildPermissionOperation(String.valueOf(productMix.getId()), childType, userList, mdcProductionList, isAddOperation);
+        });
+    }
+
+    /**
+        * 鏍规嵁绫诲瀷鎵ц瀛愯妭鐐规潈闄愭搷浣�
+    */
+    private void executeChildPermissionOperation(String id, int type,
+                                                 Collection<SysUser> userList,
+                                                 Collection<MdcProduction> mdcProductionList,
+                                                 boolean isAddOperation) {
+        switch (type) {
+            case 2: // 缁勪欢
+                ComponentInfo componentInfo = componentInfoService.getById(id);
+                if (userList != null) {
+                    componentInfoService.assignPermission(componentInfo, userList, isAddOperation);
+                } else {
+                    componentInfoService.assignDepartPermission(componentInfo, mdcProductionList, isAddOperation);
+                }
+                break;
+            case 3: // 闆朵欢
+                PartsInfo partsInfo = partsInfoService.getById(id);
+                if (userList != null) {
+                    partsInfoService.assignPermission(partsInfo, userList, isAddOperation);
+                } else {
+                    partsInfoService.assignDepartPermission(partsInfo, mdcProductionList, isAddOperation);
+                }
+                break;
+            case 4: // 宸ヨ壓瑙勮寖
+                ProcessSpecVersion processSpecVersion = processSpecVersionService.getById(id);
+                if (userList != null) {
+                    processSpecVersionService.assignPermission(processSpecVersion, userList, isAddOperation);
+                } else {
+                    processSpecVersionService.assignDepartPermission(processSpecVersion, mdcProductionList, isAddOperation);
+                }
+                break;
+            case 5: // 宸ュ簭
+                ProcessStream processStream = processStreamService.getById(id);
+                if (userList != null) {
+                    processStreamService.assignPermission(processStream, userList, isAddOperation);
+                } else {
+                    processStreamService.assignDepartPermission(processStream, mdcProductionList, isAddOperation);
+                }
+                break;
+            case 6: // 宸ユ
+                WorkStep workStep = workStepService.getById(id);
+                if (userList != null) {
+                    workStepService.assignPermission(workStep, userList, isAddOperation);
+                } else {
+                    workStepService.assignDepartPermission(workStep, mdcProductionList, isAddOperation);
+                }
+                break;
+        }
+    }
+
+    /**
+     * 鏍规嵁绫诲瀷鑾峰彇瀹炰綋
+    */
+    private Object getEntityById(int type, String paramId) {
+        switch (type) {
+            case 1: return super.getById(paramId);  // 浜у搧
+            case 2: return componentInfoService.getById(paramId);  // 缁勪欢
+            case 3: return partsInfoService.getById(paramId);  // 闆朵欢
+            case 4: return processSpecVersionService.getById(paramId);  // 宸ヨ壓瑙勮寖
+            case 5: return processStreamService.getById(paramId);  // 宸ュ簭
+            case 6: return workStepService.getById(paramId);  // 宸ユ
+            default: return null;
+        }
+    }
+
+    /**
+     * 鏍规嵁绫诲瀷鎶涘嚭寮傚父
+    */
+    private void throwExceptionForType(int type) {
+        switch (type) {
+            case 1: ExceptionCast.cast(ProductInfoCode.PRODUCT_NOT_EXIST);
+            case 2: ExceptionCast.cast(ComponentInfoCode.COMPONENT_NOT_EXIST);
+            case 3: ExceptionCast.cast(PartsInfoCode.PARTS_NOT_EXIST);
+            case 4: ExceptionCast.cast(PartsInfoCode.PROCESSSPECVERSION_NOT_EXIST);
+            case 5: ExceptionCast.cast(ProcessInfoCode.PROCESS_NOT_EXIST);
+            case 6: ExceptionCast.cast(ProcessInfoCode.WORKSTEP_NOT_EXIST);
+        }
+    }
+
+    /**
+     * 鑾峰彇瀹炰綋ID
+    */
+    private String getEntityId(Object entity, int type) {
+        switch (type) {
+            case 1: return ((ProductInfo) entity).getProductId();
+            case 2: return ((ComponentInfo) entity).getComponentId();
+            case 3: return ((PartsInfo) entity).getPartsId();
+            case 4: return ((ProcessSpecVersion) entity).getId();
+            case 5: return ((ProcessStream) entity).getProcessId();
+            case 6: return ((WorkStep) entity).getId();
+            default: return null;
+        }
+    }
+
+    /**
+     * 鎵ц鐢ㄦ埛鏉冮檺鎿嶄綔
+    */
+    private boolean executeUserPermissionOperation(Object entity, int type,
+                                                   Collection<SysUser> userList,
+                                                   boolean isAddOperation) {
+        switch (type) {
+            case 1:
+                return isAddOperation ?
+                        assignAddUser((ProductInfo) entity, userList) :
+                        assignRemoveUser((ProductInfo) entity, userList);
+            case 2:
+                return isAddOperation ?
+                        componentInfoService.assignAddUser((ComponentInfo) entity, userList) :
+                        componentInfoService.assignRemoveUser((ComponentInfo) entity, userList);
+            case 3:
+                return isAddOperation ?
+                        partsInfoService.assignAddUser((PartsInfo) entity, userList) :
+                        partsInfoService.assignRemoveUser((PartsInfo) entity, userList);
+            case 4:
+                return isAddOperation ?
+                        processSpecVersionService.assignAddUser((ProcessSpecVersion) entity, userList) :
+                        processSpecVersionService.assignRemoveUser((ProcessSpecVersion) entity, userList);
+            case 5:
+                return isAddOperation ?
+                        processStreamService.assignAddUser((ProcessStream) entity, userList) :
+                        processStreamService.assignRemoveUser((ProcessStream) entity, userList);
+            case 6:
+                return isAddOperation ?
+                        workStepService.assignAddUser((WorkStep) entity, userList) :
+                        workStepService.assignRemoveUser((WorkStep) entity, userList);
+            default: return false;
+        }
+    }
+
+    /**
+     * 鎵ц閮ㄩ棬鏉冮檺鎿嶄綔
+    */
+    private boolean executeDepartmentPermissionOperation(Object entity, int type,
+                                                         Collection<MdcProduction> mdcProductionList,
+                                                         boolean isAddOperation) {
+        switch (type) {
+            case 1:
+                return isAddOperation ?
+                        assignAddDepartment((ProductInfo) entity, mdcProductionList) :
+                        assignRemoveDepartment((ProductInfo) entity, mdcProductionList);
+            case 2:
+                return isAddOperation ?
+                        componentInfoService.assignAddDepart((ComponentInfo) entity, mdcProductionList) :
+                        componentInfoService.assignRemoveDepart((ComponentInfo) entity, mdcProductionList);
+            case 3:
+                return isAddOperation ?
+                        partsInfoService.assignAddDepart((PartsInfo) entity, mdcProductionList) :
+                        partsInfoService.assignRemoveDepart((PartsInfo) entity, mdcProductionList);
+            case 4:
+                return isAddOperation ?
+                        processSpecVersionService.assignAddDepart((ProcessSpecVersion) entity, mdcProductionList) :
+                        processSpecVersionService.assignRemoveDepart((ProcessSpecVersion) entity, mdcProductionList);
+            case 5:
+                return isAddOperation ?
+                        processStreamService.assignAddDepart((ProcessStream) entity, mdcProductionList) :
+                        processStreamService.assignRemoveDepart((ProcessStream) entity, mdcProductionList);
+            case 6:
+                return isAddOperation ?
+                        workStepService.assignAddDepart((WorkStep) entity, mdcProductionList) :
+                        workStepService.assignRemoveDepart((WorkStep) entity, mdcProductionList);
+            default: return false;
+        }
     }
 }

--
Gitblit v1.9.3