From fccfe7d50f42f5be4c4612d61b7ae852e2ef37cd Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 17 四月 2025 15:26:09 +0800
Subject: [PATCH] 优化指派设备与审签设备的权限校验查询,新增导入电子样板触发审签流程,新增电子样板指派设备功能

---
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ComponentHandler.java                 |   35 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/PermissionService.java           |   88 +++++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/adapter/AssignFileStreamAdapter.java          |   52 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/adapter/DispatchFileAdapter.java              |   53 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/StreamTarget.java                     |   12 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/PermissionHandler.java                |    8 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java          |    5 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/PartsHandler.java                     |   35 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/PermissionProcessor.java              |   56 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProcessHandle.java                    |   39 +++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProductHandler.java                   |   36 +++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProcessSpecVersionHandle.java         |   37 +++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java     |   76 -----
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java              |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java   |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java |   84 ------
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java                  |   14 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/WorkStepHandle.java                   |   40 +++
 18 files changed, 521 insertions(+), 153 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
index a1498cd..fdf2f26 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
@@ -146,7 +146,7 @@
         if (sysParams ==null){
             throw new JeecgBootException("鏈厤缃鍏C涓庣數瀛愬浘鐗堟槸鍚﹁Е鍙戝绛炬祦绋嬶紝璇疯仈绯荤鐞嗗憳");
         }else {
-            if (saveBool&&sysParams.getSettingValue().equals("1")&&uploadRequest.getDocClassCode().equals("NC")){
+            if (saveBool&&sysParams.getSettingValue().equals("1")){
                 //瑙﹀彂瀹$
                 DispatchFile dispatchFile = new DispatchFile();
                 dispatchFile.setDocId(docInfo.getDocId());
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
index a30dec5..cd089c4 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
@@ -490,7 +490,7 @@
         queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeCode()),ProcessSpecVersion::getProcessSpecVersionCode, treeInfoRequest.getTreeName());
         queryWrapper.orderByDesc(ProcessSpecVersion::getCreateTime);
         List<ProcessSpecVersion> list = super.list(queryWrapper);
-        if (list == null || list.isEmpty()){
+        if (list == null || list.isEmpty() || StrUtil.isNotBlank(treeInfoRequest.getStructureType())){
             return new ArrayList<>();
         }else {
             String ids=list.stream().map(ProcessSpecVersion::getId).collect(Collectors.joining(","));
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 ac328de..d289e58 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
@@ -85,6 +85,7 @@
     @Autowired
     private IProductMixService productMixService;
     @Autowired
+    @Lazy
     private IDocInfoService docInfoService;
 
     @Override
@@ -1038,9 +1039,11 @@
                 // 绠�鍖栨潯浠跺垽鏂�
                 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)) {
                     // 浣跨敤ID鍒楄〃鑰岄潪鎷兼帴瀛楃涓�
                     List<String> productIds = productInfoList.stream()
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/adapter/AssignFileStreamAdapter.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/adapter/AssignFileStreamAdapter.java
new file mode 100644
index 0000000..7862c2e
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/adapter/AssignFileStreamAdapter.java
@@ -0,0 +1,52 @@
+package org.jeecg.modules.dncFlow.adapter;
+
+import org.jeecg.modules.dncFlow.entity.AssignFileStream;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+
+public class AssignFileStreamAdapter implements StreamTarget {
+    private final AssignFileStream stream;
+
+    public AssignFileStreamAdapter(AssignFileStream stream) {
+        this.stream = stream;
+    }
+
+    @Override
+    public void setProductId(String productId) {
+        stream.setProductId(productId);
+    }
+
+    @Override
+    public void setComponentId(String componentId) {
+        stream.setComponentId(componentId);
+    }
+
+    @Override
+    public void setPartsId(String partsId) {
+        stream.setPartsId(partsId);
+    }
+
+    @Override
+    public void setProcessId(String processId) {
+        stream.setProcessId(processId);
+    }
+
+    @Override
+    public void setPsvId(String psvId) {
+        stream.setPsvId(psvId);
+    }
+
+    @Override
+    public void setStepId(String stepId) {
+        stream.setStepId(stepId);
+    }
+
+    @Override
+    public void setDeviceTypeId(String deviceTypeId) {
+        stream.setDeviceTypeId(deviceTypeId);
+    }
+
+    @Override
+    public String getAttributionId() {
+        return stream.getAttributionId();
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/adapter/DispatchFileAdapter.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/adapter/DispatchFileAdapter.java
new file mode 100644
index 0000000..11fc3cd
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/adapter/DispatchFileAdapter.java
@@ -0,0 +1,53 @@
+package org.jeecg.modules.dncFlow.adapter;
+
+import org.jeecg.modules.dncFlow.entity.DispatchFile;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+
+public class DispatchFileAdapter implements StreamTarget {
+    private final DispatchFile file;
+
+    public DispatchFileAdapter(DispatchFile file) {
+        this.file = file;
+    }
+
+    @Override
+    public void setProductId(String productId) {
+        file.setProductId(productId);
+    }
+
+    @Override
+    public void setComponentId(String componentId) {
+        file.setComponentId(componentId);
+    }
+
+    @Override
+    public void setPartsId(String partsId) {
+        file.setPartsId(partsId);
+    }
+
+    @Override
+    public void setProcessId(String processId) {
+        file.setProcessId(processId);
+    }
+
+    @Override
+    public void setPsvId(String psvId) {
+        file.setPsvId(psvId);
+    }
+
+    @Override
+    public void setStepId(String stepId) {
+        file.setStepId(stepId);
+    }
+
+    @Override
+    public void setDeviceTypeId(String deviceTypeId) {
+        file.setDeviceTypeId(deviceTypeId);
+    }
+
+    @Override
+    public String getAttributionId() {
+        return file.getAttributionId();
+    }
+
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java
index 833ab90..07c5da1 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/entity/AssignFileStream.java
@@ -55,6 +55,14 @@
     @TableField(value = "status")
     @Dict(dicCode = "dnc_assign_stream_status")
     private Integer status;
+
+    /**鎸囨淳璁惧涓撶敤-鎵�灞濱D*/
+    @TableField(value = "attribution_id")
+    private String attributionId;
+
+    /**鎸囨淳璁惧涓撶敤-鎵�灞瀟ype*/
+    @TableField(value = "attribution_type")
+    private String attributionType;
     @JsonIgnore
     @TableField(value = "create_time", select = false, fill = FieldFill.INSERT)
     private Date createTime;
@@ -71,10 +79,4 @@
     @TableLogic
     @TableField(value = "delete_flag", select = false)
     private Integer deleteFlag = 0;
-
-    /**鎸囨淳璁惧涓撶敤-鎵�灞濱D*/
-    private transient String attributionId;
-
-    /**鎸囨淳璁惧涓撶敤-鎵�灞瀟ype*/
-    private transient String attributionType;
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ComponentHandler.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ComponentHandler.java
new file mode 100644
index 0000000..8ac20bf
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ComponentHandler.java
@@ -0,0 +1,35 @@
+package org.jeecg.modules.dncFlow.handler;
+
+import org.jeecg.modules.dnc.entity.ComponentInfo;
+import org.jeecg.modules.dnc.service.IComponentInfoService;
+import org.jeecg.modules.dncFlow.service.PermissionHandler;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ComponentHandler implements PermissionHandler<ComponentInfo> {
+    @Autowired
+    private IComponentInfoService componentInfoService;
+
+    @Override
+    public ComponentInfo loadEntity(String id) {
+        return componentInfoService.getById(id);
+    }
+
+    @Override
+    public String getBusinessId(ComponentInfo entity) {
+        return entity.getComponentId();
+    }
+
+    @Override
+    public String getTypeCode() {
+        return "2";
+    }
+
+    @Override
+    public void setRelations(ComponentInfo entity, StreamTarget target) {
+        target.setProductId(entity.getProductId());
+        target.setComponentId(entity.getComponentId());
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/PartsHandler.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/PartsHandler.java
new file mode 100644
index 0000000..4faa76f
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/PartsHandler.java
@@ -0,0 +1,35 @@
+package org.jeecg.modules.dncFlow.handler;
+import org.jeecg.modules.dnc.entity.PartsInfo;
+import org.jeecg.modules.dnc.service.IPartsInfoService;
+import org.jeecg.modules.dncFlow.service.PermissionHandler;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PartsHandler implements PermissionHandler<PartsInfo> {
+    @Autowired
+    private IPartsInfoService partsInfoService;
+
+    @Override
+    public PartsInfo loadEntity(String id) {
+        return partsInfoService.getById(id);
+    }
+
+    @Override
+    public String getBusinessId(PartsInfo entity) {
+        return entity.getPartsId();
+    }
+
+    @Override
+    public String getTypeCode() {
+        return "3";
+    }
+
+    @Override
+    public void setRelations(PartsInfo entity, StreamTarget target) {
+        target.setProductId(entity.getProductId());
+        target.setComponentId(entity.getComponentId());
+        target.setPartsId(entity.getPartsId());
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/PermissionProcessor.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/PermissionProcessor.java
new file mode 100644
index 0000000..4ecbf3e
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/PermissionProcessor.java
@@ -0,0 +1,56 @@
+package org.jeecg.modules.dncFlow.handler;
+
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.dnc.entity.PermissionStreamNew;
+import org.jeecg.modules.dnc.exception.ExceptionCast;
+import org.jeecg.modules.dnc.response.CommonCode;
+import org.jeecg.modules.dnc.service.IDeviceTypeService;
+import org.jeecg.modules.dnc.service.IPermissionStreamNewService;
+import org.jeecg.modules.dncFlow.service.PermissionHandler;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Optional;
+
+@Component
+public class PermissionProcessor {
+    @Autowired
+    private IDeviceTypeService deviceTypeService;
+
+    @Autowired
+    private IPermissionStreamNewService permissionStreamNewService;
+
+    public <T> PermissionStreamNew process(
+            String attributionId,
+            LoginUser user,
+            StreamTarget target,
+            PermissionHandler<T> handler
+    ) {
+        // 1. 鍔犺浇涓氬姟瀹炰綋
+        T entity = handler.loadEntity(attributionId);
+        if (entity == null) {
+            ExceptionCast.cast(CommonCode.INVALID_PARAM);
+        }
+
+        // 2. 璁剧疆鍏宠仈鍏崇郴
+        handler.setRelations(entity, target);
+
+        // 3. 璁剧疆璁惧绫诲瀷
+        setupDeviceType(target);
+
+        // 4. 鑾峰彇鏉冮檺娴�
+        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(
+                handler.getBusinessId(entity),
+                user.getId(),
+                handler.getTypeCode()
+        );
+    }
+
+    private void setupDeviceType(StreamTarget target) {
+        Optional.ofNullable(deviceTypeService.getById(target.getAttributionId()))
+                .ifPresent(device ->
+                        target.setDeviceTypeId(device.getId())
+                );
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProcessHandle.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProcessHandle.java
new file mode 100644
index 0000000..59e53b2
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProcessHandle.java
@@ -0,0 +1,39 @@
+package org.jeecg.modules.dncFlow.handler;
+
+import org.jeecg.modules.dnc.entity.ProcessStream;
+import org.jeecg.modules.dnc.service.IProcessStreamService;
+import org.jeecg.modules.dncFlow.service.PermissionHandler;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ProcessHandle implements PermissionHandler<ProcessStream> {
+
+    @Autowired
+    private IProcessStreamService ProcessStreamService;
+
+    @Override
+    public ProcessStream loadEntity(String id) {
+        return ProcessStreamService.getById(id);
+    }
+
+    @Override
+    public String getBusinessId(ProcessStream entity) {
+        return entity.getProcessId();
+    }
+
+    @Override
+    public String getTypeCode() {
+        return "5";
+    }
+
+    @Override
+    public void setRelations(ProcessStream entity, StreamTarget target) {
+        target.setProductId(entity.getProductId());
+        target.setComponentId(entity.getComponentId());
+        target.setPartsId(entity.getPartsId());
+        target.setPsvId(entity.getPsvId());
+        target.setProcessId(entity.getProcessId());
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProcessSpecVersionHandle.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProcessSpecVersionHandle.java
new file mode 100644
index 0000000..74895bc
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProcessSpecVersionHandle.java
@@ -0,0 +1,37 @@
+package org.jeecg.modules.dncFlow.handler;
+import org.jeecg.modules.dnc.entity.ProcessSpecVersion;
+import org.jeecg.modules.dnc.service.IProcessSpecVersionService;
+import org.jeecg.modules.dncFlow.service.PermissionHandler;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ProcessSpecVersionHandle implements PermissionHandler<ProcessSpecVersion> {
+
+    @Autowired
+    private IProcessSpecVersionService processSpecVersionService;
+
+    @Override
+    public ProcessSpecVersion loadEntity(String id) {
+        return processSpecVersionService.getById(id);
+    }
+
+    @Override
+    public String getBusinessId(ProcessSpecVersion entity) {
+        return entity.getId();
+    }
+
+    @Override
+    public String getTypeCode() {
+        return "4";
+    }
+
+    @Override
+    public void setRelations(ProcessSpecVersion entity, StreamTarget target) {
+        target.setProductId(entity.getProductId());
+        target.setComponentId(entity.getComponentId());
+        target.setPartsId(entity.getPartsId());
+        target.setPsvId(entity.getId());
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProductHandler.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProductHandler.java
new file mode 100644
index 0000000..3bf263f
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/ProductHandler.java
@@ -0,0 +1,36 @@
+package org.jeecg.modules.dncFlow.handler;
+
+import org.jeecg.modules.dnc.entity.ProductInfo;
+import org.jeecg.modules.dnc.service.IProductInfoService;
+import org.jeecg.modules.dncFlow.service.PermissionHandler;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+// 浜у搧绛栫暐
+@Component
+public class ProductHandler implements PermissionHandler<ProductInfo> {
+    @Autowired
+    private IProductInfoService productInfoService;
+
+    @Override
+    public ProductInfo loadEntity(String id) {
+        return productInfoService.getById(id);
+    }
+
+    @Override
+    public String getBusinessId(ProductInfo entity) {
+        return entity.getProductId();
+    }
+
+    @Override
+    public String getTypeCode() {
+        return "1";
+    }
+
+    @Override
+    public void setRelations(ProductInfo entity, StreamTarget target) {
+        target.setProductId(entity.getProductId());
+    }
+}
+
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/WorkStepHandle.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/WorkStepHandle.java
new file mode 100644
index 0000000..ef5772b
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/handler/WorkStepHandle.java
@@ -0,0 +1,40 @@
+package org.jeecg.modules.dncFlow.handler;
+
+import org.jeecg.modules.dnc.entity.WorkStep;
+import org.jeecg.modules.dnc.service.IWorkStepService;
+import org.jeecg.modules.dncFlow.service.PermissionHandler;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class WorkStepHandle implements PermissionHandler<WorkStep> {
+
+    @Autowired
+    private IWorkStepService WorkStepService;
+
+    @Override
+    public WorkStep loadEntity(String id) {
+        return WorkStepService.getById(id);
+    }
+
+    @Override
+    public String getBusinessId(WorkStep entity) {
+        return entity.getId();
+    }
+
+    @Override
+    public String getTypeCode() {
+        return "6";
+    }
+
+    @Override
+    public void setRelations(WorkStep entity, StreamTarget target) {
+        target.setProductId(entity.getProductId());
+        target.setComponentId(entity.getComponentId());
+        target.setPartsId(entity.getPartsId());
+        target.setPsvId(entity.getPsvId());
+        target.setProcessId(entity.getProcessId());
+        target.setStepId(entity.getId());
+    }
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/PermissionHandler.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/PermissionHandler.java
new file mode 100644
index 0000000..cb61cd1
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/PermissionHandler.java
@@ -0,0 +1,8 @@
+package org.jeecg.modules.dncFlow.service;
+
+public interface PermissionHandler<T> {
+    T loadEntity(String id);
+    String getBusinessId(T entity);
+    String getTypeCode();
+    void setRelations(T entity, StreamTarget target);
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/StreamTarget.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/StreamTarget.java
new file mode 100644
index 0000000..89fa455
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/StreamTarget.java
@@ -0,0 +1,12 @@
+package org.jeecg.modules.dncFlow.service;
+
+public interface StreamTarget {
+    void setProductId(String productId);
+    void setComponentId(String componentId);
+    void setPartsId(String partsId);
+    void setProcessId(String processId);
+    void setPsvId(String psvId);
+    void setStepId(String stepId);
+    void setDeviceTypeId(String deviceTypeId);
+    String getAttributionId();
+}
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
index 49e51e3..3bfd2bb 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
@@ -44,7 +44,6 @@
 import org.jeecg.modules.flowable.service.IFlowTaskService;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
 import org.jeecg.modules.mdc.service.IMdcEquipmentService;
-import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -75,10 +74,6 @@
     @Autowired
     private IProcessStreamService processStreamService;
     @Autowired
-    private IWorkStepService workStepService;
-    @Autowired
-    private IPermissionStreamNewService permissionStreamNewService;
-    @Autowired
     private IDocClassificationService classificationService;
     @Autowired
     private IToEquipmentTaskService equipmentTaskService;
@@ -105,9 +100,9 @@
     @Autowired
     private IFlowTaskService flowTaskService;
     @Autowired
-    private IDeviceTypeService deviceTypeService;
-    @Autowired
     private IFlowMyBusinessService flowMyBusinessService;
+    @Autowired
+    private PermissionService permissionService;
 
     @Value("${securedoc.whether}")
     private String whether;
@@ -332,16 +327,10 @@
         if(!b)
             ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
         if(up.getStatus() == 2) {
-            DocInfo docInfo;
             //鍚屾剰鎿嶄綔
-            if (StrUtil.isNotEmpty(en.getStepId())){
-                //宸ユ涓嬭澶囩被鎸囨淳
-                docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 6, en.getDeviceTypeId());
-            }else {
-                docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getDeviceTypeId());
-            }
-            if(docInfo == null || docInfo.getDocStatus() == 3)
-                               ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
+            DocInfo docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), Integer.valueOf(en.getAttributionType()), en.getAttributionId());
+            if(docInfo == null )
+               ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
             MdcEquipment mdcEquipment = iMdcEquipmentService.getById(en.getDeviceId());
             if(mdcEquipment == null)
                 ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
@@ -593,69 +582,12 @@
     }
 
     private PermissionStreamNew getPermissionStreams(AssignFileStream stream) {
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        DeviceType deviceType = deviceTypeService.getById(stream.getAttributionId());
-        String attributionId = deviceType != null ? deviceType.getAttributionId() : stream.getAttributionId();
-
-        PermissionStreamNew permissionStreams;
-        if (stream.getAttributionType().equals("5")) {
-            // 宸ュ簭
-            permissionStreams = handleProcess(stream, attributionId, user);
-        } else {
-            // 宸ユ
-            permissionStreams = handleWorkStep(stream, attributionId, user);
-        }
-        if (permissionStreams == null) {
+        PermissionStreamNew permissionStreamNew = permissionService.getPermissionStreams(stream);
+        if (permissionStreamNew  == null) {
             ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE);
         }
-        return permissionStreams;
+        return permissionStreamNew ;
     }
-
-    private PermissionStreamNew handleProcess(AssignFileStream stream, String attributionId, LoginUser user) {
-        ProcessStream processStream = processStreamService.getById(attributionId);
-        if (processStream == null) {
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        }
-        stream.setProductId(processStream.getProductId());
-        stream.setComponentId(processStream.getComponentId());
-        stream.setPartsId(processStream.getPartsId());
-        stream.setProcessId(processStream.getProcessId());
-        if (deviceTypeService.getById(stream.getAttributionId()) != null) {
-            stream.setDeviceTypeId(deviceTypeService.getById(stream.getAttributionId()).getId());
-        }
-        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processStream.getProcessId(), user.getId(), "5");
-    }
-
-    private PermissionStreamNew handleWorkStep(AssignFileStream stream, String attributionId, LoginUser user) {
-        WorkStep workStep = workStepService.getById(attributionId);
-        if (workStep == null) {
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        }
-        stream.setProductId(workStep.getProductId());
-        stream.setComponentId(workStep.getComponentId());
-        stream.setPartsId(workStep.getPartsId());
-        stream.setProcessId(workStep.getProcessId());
-        stream.setStepId(workStep.getId());
-        if (deviceTypeService.getById(stream.getAttributionId()) != null) {
-            stream.setDeviceTypeId(deviceTypeService.getById(stream.getAttributionId()).getId());
-        }
-        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(workStep.getId(), user.getId(), "6");
-    }
-
-    //鑾峰彇閮ㄩ棬淇℃伅
-    //todo 淇敼
-    private List<String> getDepartIds(List<PermissionStream> permissionStreams, String userId) {
-        Map<String, MdcProduction> map = iMdcProductionService.getUserAssignedDepart(userId);
-        List<String> departIds = permissionStreams.stream()
-                .filter(item -> map.containsKey(item.getDepartId()))
-                .map(PermissionStream::getDepartId)
-                .collect(Collectors.toList());
-        if (departIds.isEmpty()) {
-            ExceptionCast.cast(ActivitiCode.ACT_USER_NOT_PERM);
-        }
-        return departIds;
-    }
-
 
     //灏佽鏁版嵁
     private void saveBusinessObject(AssignFileStream stream, String userId) {
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java
index f52a1f8..f72e491 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java
@@ -12,14 +12,15 @@
 import org.flowable.task.api.Task;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.modules.dnc.entity.*;
+import org.jeecg.modules.dnc.entity.DocInfo;
+import org.jeecg.modules.dnc.entity.PermissionStreamNew;
 import org.jeecg.modules.dnc.exception.ExceptionCast;
 import org.jeecg.modules.dnc.mapper.DocInfoMapper;
 import org.jeecg.modules.dnc.request.DocInfoQueryRequest;
 import org.jeecg.modules.dnc.response.ActivitiCode;
 import org.jeecg.modules.dnc.response.CommonCode;
 import org.jeecg.modules.dnc.response.UcenterCode;
-import org.jeecg.modules.dnc.service.*;
+import org.jeecg.modules.dnc.service.IDocInfoService;
 import org.jeecg.modules.dnc.utils.ValidateUtil;
 import org.jeecg.modules.dncFlow.entity.DispatchFile;
 import org.jeecg.modules.dncFlow.mapper.DispatchFileMapper;
@@ -53,20 +54,12 @@
     @Autowired
     @Lazy
     private IDocInfoService docInfoService;
-    @Autowired
-    private IProcessStreamService processStreamService;
-    @Autowired
-    private IWorkStepService workStepService;
-    @Autowired
-    private IPermissionStreamNewService permissionStreamNewService;
     @Resource
     private FlowCommonService flowCommonService;
     @Resource
     private IFlowDefinitionService flowDefinitionService;
     @Autowired
     private IFlowTaskService flowTaskService;
-    @Autowired
-    private IDeviceTypeService deviceTypeService;
     @Autowired
     private TaskService taskService;
     @Autowired
@@ -75,6 +68,8 @@
     private DocInfoMapper docInfoMapper;
     @Autowired
     private ISysUserRoleService sysUserRoleService;
+    @Autowired
+    private PermissionService permissionService;
     /**
      * 娴佺▼鍚姩,淇濆瓨瀵瑰簲鐨勬暟鎹�
      * @param dispatchFile
@@ -424,67 +419,12 @@
         return true;
     }
 
-    //鑾峰彇鏂囦欢淇℃伅
-    private DocInfo getDocInfo(DispatchFile dispatchFile) {
-        DocInfo docInfo = docInfoService.getByDocAttrAndDocId(dispatchFile.getDocId(),
-                Integer.parseInt(dispatchFile.getAttributionType()), dispatchFile.getAttributionId());
-        if (docInfo == null || docInfo.getDocStatus() == 3) {
-            ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
-        }
-        return docInfo;
-    }
-
-
     private PermissionStreamNew getPermissionStreams(DispatchFile dispatchFile) {
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        DeviceType deviceType = deviceTypeService.getById(dispatchFile.getAttributionId());
-        String attributionId = deviceType != null ? deviceType.getAttributionId() : dispatchFile.getAttributionId();
-
-        PermissionStreamNew permissionStreams;
-        if (dispatchFile.getAttributionType().equals("5")) {
-            // 宸ュ簭
-            permissionStreams = handleProcess(dispatchFile, attributionId, user);
-        } else {
-            // 宸ユ
-            permissionStreams = handleWorkStep(dispatchFile, attributionId, user);
-        }
-        if (permissionStreams == null) {
+        PermissionStreamNew permissionStreamNew = permissionService.getPermissionStreams(dispatchFile);
+        if (permissionStreamNew == null) {
             ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE);
         }
-        return permissionStreams;
-    }
-
-    private PermissionStreamNew handleProcess(DispatchFile dispatchFile, String attributionId, LoginUser user) {
-        ProcessStream processStream = processStreamService.getById(attributionId);
-        if (processStream == null) {
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        }
-        dispatchFile.setProductId(processStream.getProductId());
-        dispatchFile.setComponentId(processStream.getComponentId());
-        dispatchFile.setPartsId(processStream.getPartsId());
-        dispatchFile.setPsvId(processStream.getPsvId());
-        dispatchFile.setProcessId(processStream.getProcessId());
-        if (deviceTypeService.getById(dispatchFile.getAttributionId()) != null) {
-            dispatchFile.setDeviceTypeId(deviceTypeService.getById(dispatchFile.getAttributionId()).getId());
-        }
-        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(processStream.getProcessId(), user.getId(), "5");
-    }
-
-    private PermissionStreamNew handleWorkStep(DispatchFile dispatchFile, String attributionId, LoginUser user) {
-        WorkStep workStep = workStepService.getById(attributionId);
-        if (workStep == null) {
-            ExceptionCast.cast(CommonCode.INVALID_PARAM);
-        }
-        dispatchFile.setProductId(workStep.getProductId());
-        dispatchFile.setComponentId(workStep.getComponentId());
-        dispatchFile.setPartsId(workStep.getPartsId());
-        dispatchFile.setPsvId(workStep.getPsvId());
-        dispatchFile.setProcessId(workStep.getProcessId());
-        dispatchFile.setStepId(workStep.getId());
-        if (deviceTypeService.getById(dispatchFile.getAttributionId()) != null) {
-            dispatchFile.setDeviceTypeId(deviceTypeService.getById(dispatchFile.getAttributionId()).getId());
-        }
-        return permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(workStep.getId(), user.getId(), "6");
+        return permissionStreamNew;
     }
 
     @Override
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/PermissionService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/PermissionService.java
new file mode 100644
index 0000000..1f4ef4d
--- /dev/null
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/PermissionService.java
@@ -0,0 +1,88 @@
+package org.jeecg.modules.dncFlow.service.impl;
+
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.dnc.entity.DeviceType;
+import org.jeecg.modules.dnc.entity.PermissionStreamNew;
+import org.jeecg.modules.dnc.exception.ExceptionCast;
+import org.jeecg.modules.dnc.response.ActivitiCode;
+import org.jeecg.modules.dnc.service.IDeviceTypeService;
+import org.jeecg.modules.dncFlow.adapter.AssignFileStreamAdapter;
+import org.jeecg.modules.dncFlow.adapter.DispatchFileAdapter;
+import org.jeecg.modules.dncFlow.entity.AssignFileStream;
+import org.jeecg.modules.dncFlow.entity.DispatchFile;
+import org.jeecg.modules.dncFlow.handler.*;
+import org.jeecg.modules.dncFlow.service.PermissionHandler;
+import org.jeecg.modules.dncFlow.service.StreamTarget;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PermissionService {
+    @Autowired
+    private PermissionProcessor processor;
+
+    @Autowired
+    private ProductHandler productHandler;
+
+    @Autowired
+    private ComponentHandler componentHandler;
+
+    @Autowired
+    private PartsHandler partsHandler;
+
+    @Autowired
+    private ProcessSpecVersionHandle processSpecVersionHandler;
+
+    @Autowired
+    private ProcessHandle processHandler;
+
+    @Autowired
+    private WorkStepHandle workStepHandler;
+
+    @Autowired
+    private IDeviceTypeService deviceTypeService;
+
+    public PermissionStreamNew getPermissionStreams(DispatchFile file) {
+        return processInternal(new DispatchFileAdapter(file), file.getAttributionType());
+    }
+
+    public PermissionStreamNew getPermissionStreams(AssignFileStream stream) {
+        return processInternal(new AssignFileStreamAdapter(stream), stream.getAttributionType());
+    }
+
+    private PermissionStreamNew processInternal(StreamTarget target, String attributionType) {
+        LoginUser user = getCurrentUser();
+        String resolvedId = resolveAttributionId(target.getAttributionId());
+
+        PermissionHandler<?> handler = resolveHandler(attributionType);
+        return processor.process(resolvedId, user, target, handler);
+    }
+
+    private String resolveAttributionId(String AttributionId) {
+        DeviceType deviceType = deviceTypeService.getById(AttributionId);
+        if (deviceType == null) {
+            return AttributionId;
+        }else {
+            return deviceType.getAttributionId();
+        }
+    }
+
+    private PermissionHandler<?> resolveHandler(String type) {
+        switch (type) {
+            case "1": return productHandler;
+            case "2": return componentHandler;
+            case "3": return partsHandler;
+            case "4": return processSpecVersionHandler;
+            case "5": return processHandler;
+            case "6": return workStepHandler;
+            default:
+                ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE);
+                return null; // 瀹為檯涓嶄細鎵ц
+        }
+    }
+
+    private LoginUser getCurrentUser() {
+        return (LoginUser) SecurityUtils.getSubject().getPrincipal();
+    }
+}

--
Gitblit v1.9.3