From 0990dd4a4a52a6d26ff4d640980206fbff392dfb Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期三, 02 四月 2025 09:19:07 +0800
Subject: [PATCH] 修改产品结构树,修改审签功能

---
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java      |   57 +++++++++++++++++++
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java              |    7 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java              |    6 +
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java                |    8 ++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/DispatchFileServiceImpl.java        |   33 +++++++++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java           |   13 ++++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java                   |    5 +
 lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java |    6 ++
 8 files changed, 133 insertions(+), 2 deletions(-)

diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
index d9eb74e..e2bfacc 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java
@@ -29,8 +29,10 @@
         }else{
             //闇�瑕佹潈闄愯繃婊�
             String productIds = loginUser.getProductionIds();
-            List<String> productIdList = Arrays.asList(productIds.split(","));
-            rawData = permissionStreamNewService.loadProductMix(loginUser.getId(),productIdList);
+            if (productIds != null && !productIds.isEmpty()) {
+                List<String> productIdList = Arrays.asList(productIds.split(","));
+                rawData = permissionStreamNewService.loadProductMix(loginUser.getId(),productIdList);
+            }
         }
         TreeBuilder builder = new TreeBuilder();
         TreeBuilder.CleanResult cleanResult = builder.preprocessData(rawData);
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java
index 6d338fb..313c0c8 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/DispatchFileController.java
@@ -21,6 +21,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
 
  /**
@@ -86,6 +87,18 @@
 		 return dispatchFileService.auditDispatchFile(dispatchFileFlowTaskVo);
 	 }
 
+	 /**
+	  * 鎵归噺瀹℃壒鎿嶄綔
+	  * @param dispatchFileFlowTaskVo
+	  * @return
+	  */
+	 @AutoLog(value = "nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鎵归噺瀹℃壒鎿嶄綔")
+	 @ApiOperation(value="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鎵归噺瀹℃壒鎿嶄綔", notes="nc绋嬪簭涓庣數瀛愬浘鐗堢娲�-鎵归噺瀹℃壒鎿嶄綔")
+	 @PostMapping(value = "/approvalBatch")
+	 public Result<?> approvalBatch(@RequestBody DispatchFileFlowTaskVo dispatchFileFlowTaskVo) throws InvocationTargetException, IllegalAccessException {
+		return dispatchFileService.auditBatchDispatchFile(dispatchFileFlowTaskVo);
+	 }
+
 
 	 @ApiOperation(value = "鑾峰彇宸ヤ綔娴佸巻鍙蹭换鍔�", response = FlowTaskDto.class)
 	 @GetMapping(value = "/queryHisTaskList")
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java
index 7502bd7..0068598 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IDispatchFileService.java
@@ -5,6 +5,8 @@
 import org.jeecg.modules.dncFlow.entity.DispatchFile;
 import org.jeecg.modules.dncFlow.vo.DispatchFileFlowTaskVo;
 
+import java.lang.reflect.InvocationTargetException;
+
 /**
  * @Description: nc绋嬪簭涓庣數瀛愬浘鐗堢娲�
  * @Author: jeecg-boot
@@ -34,6 +36,12 @@
     Result<?> auditDispatchFile(DispatchFileFlowTaskVo dispatchFileFlowTaskVo);
 
     /**
+     * 鎵归噺瀹℃壒鎿嶄綔
+     * @param dispatchFileFlowTaskVo
+     * @return
+     */
+    Result<?> auditBatchDispatchFile(DispatchFileFlowTaskVo dispatchFileFlowTaskVo) throws InvocationTargetException, IllegalAccessException;
+    /**
      * 鏌ヨ瀹$鍩烘湰淇℃伅
      * @param id
      */
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 6ffcbf9..f52a1f8 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
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.beanutils.BeanUtils;
 import org.apache.shiro.SecurityUtils;
 import org.flowable.common.engine.api.FlowableException;
 import org.flowable.engine.TaskService;
@@ -37,6 +38,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.lang.reflect.InvocationTargetException;
 import java.util.*;
 
 /**
@@ -230,6 +232,7 @@
      * @return
      */
     @Override
+    @Transactional
     public Result<?> auditDispatchFile(DispatchFileFlowTaskVo dispatchFileFlowTaskVo) {
         try {
             // 鍙傛暟鏍¢獙
@@ -302,6 +305,36 @@
     }
 
     /**
+     * 鎵归噺瀹℃壒鎿嶄綔
+     * @param dispatchFileFlowTaskVo
+     * @return
+     */
+    @Override
+    @Transactional
+    public Result<?> auditBatchDispatchFile(DispatchFileFlowTaskVo dispatchFileFlowTaskVo) throws InvocationTargetException, IllegalAccessException {
+        if (dispatchFileFlowTaskVo.getTaskIds()==null || dispatchFileFlowTaskVo.getTaskIds().isEmpty()) {
+            return Result.error(CommonCode.INVALID_PARAM.toString());
+        }
+        if (dispatchFileFlowTaskVo.getTaskIds().contains(",")){
+            String[] taskIds = dispatchFileFlowTaskVo.getTaskIds().split(",");
+            for (String taskId : taskIds) {
+                FlowMyBusiness flowMyBusiness=flowMyBusinessService.getOne(new QueryWrapper<FlowMyBusiness>().eq("task_id",taskId));
+                DispatchFileFlowTaskVo dispatchFileFlowTaskVoNew=new DispatchFileFlowTaskVo();
+                BeanUtils.copyProperties(dispatchFileFlowTaskVoNew, dispatchFileFlowTaskVo);
+                dispatchFileFlowTaskVoNew.setTaskId(taskId);
+                dispatchFileFlowTaskVoNew.setDataId(flowMyBusiness.getDataId());
+                dispatchFileFlowTaskVoNew.setInstanceId(flowMyBusiness.getProcessInstanceId());
+                if (dispatchFileFlowTaskVo.getTargetKey().equals("task_prepare")){
+                    reStartDispatchFile(dispatchFileFlowTaskVoNew);
+                }else {
+                    auditDispatchFile(dispatchFileFlowTaskVoNew);
+                }
+            }
+        }
+        return Result.OK("鎿嶄綔鎴愬姛");
+    }
+
+    /**
      * 鏌ヨ瀹$鍩烘湰淇℃伅
      * @param id
      */
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java
index 4dca430..b373baa 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/vo/DispatchFileFlowTaskVo.java
@@ -34,4 +34,9 @@
      * false:瀹氬瀷涓嶉�氳繃
      */
     private Boolean stereotype;
+
+    /**
+     * taskIds
+     */
+    private String taskIds;
 }
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java
index 19c20a9..4c35971 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java
@@ -67,6 +67,12 @@
         return Result.OK(pageList);
     }
 
+    @ApiOperation(value = "閫氳繃浼犲叆TaskIds鍒ゆ柇鏄惁鍦ㄥ悓涓�鑺傜偣")
+    @GetMapping(value = "/isSameNode")
+    public Result isSameNode(@RequestParam(name = "taskIds") String taskIds) {
+        return flowTaskService.isSameNode(taskIds);
+    }
+
     @ApiOperation(value = "鑾峰彇寰呭姙鍒楄〃", response = FlowTaskDto.class)
     @GetMapping(value = "/todoList")
     public Result todoList(@ApiParam(value = "褰撳墠椤电爜", required = true) @RequestParam (name="pageNum", defaultValue="1") Integer pageNum,
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java
index 52766d2..62cb661 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java
@@ -113,6 +113,13 @@
      */
     Result todoList(Integer pageNum, Integer pageSize);
 
+    /**
+     * 閫氳繃浼犲叆TaskIds鍒ゆ柇鏄惁鍦ㄥ悓涓�鑺傜偣
+     * @param taskIds
+     * @return
+     */
+    Result isSameNode(String taskIds);
+
 
     /**
      * 宸插姙浠诲姟鍒楄〃
diff --git a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
index c9ae8f1..dc9b5ec 100644
--- a/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
+++ b/lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
@@ -916,6 +916,63 @@
         return Result.OK();
     }
 
+
+    /**
+     * 鍒ゆ柇澶氫釜浠诲姟鏄惁澶勪簬鍚屼竴娴佺▼鑺傜偣
+     * @param taskIds 閫楀彿鍒嗛殧鐨勪换鍔D瀛楃涓�
+     * @return 缁熶竴缁撴灉灏佽
+     */
+    @Override
+    public Result isSameNode(String taskIds) {
+        // 1. 鍙傛暟鏍¢獙
+        if (StringUtils.isBlank(taskIds)) {
+            return Result.error("浠诲姟ID涓嶈兘涓虹┖");
+        }
+
+        // 2. 鍒嗗壊浠诲姟ID
+        String[] taskIdArray = taskIds.split(",");
+        if (taskIdArray.length == 0) {
+            return Result.error("鏈彁渚涙湁鏁堢殑浠诲姟ID");
+        }
+
+        // 3. 鍗曚换鍔$洿鎺ヨ繑鍥瀟rue
+        if (taskIdArray.length == 1) {
+            return Result.ok(true);
+        }
+
+        // 4. 澶氫换鍔℃鏌ラ�昏緫
+        String referenceNodeId = null;
+        String currentNodeId = null;
+        for (String taskId : taskIdArray) {
+            // 4.1 鏌ヨ浠诲姟瀹炰緥
+            Task task = taskService.createTaskQuery()
+                    .taskId(taskId.trim())
+                    .singleResult();
+
+            // 4.2 浠诲姟涓嶅瓨鍦ㄥ鐞�
+            if (task == null) {
+                return Result.error("浠诲姟涓嶅瓨鍦�: " + taskId);
+            }
+
+            // 4.3 鑾峰彇鑺傜偣鏍囪瘑锛圱askDefinitionKey锛�
+            currentNodeId = task.getTaskDefinitionKey();
+
+            // 4.4 棣栨閬嶅巻鍒濆鍖栧弬鑰冭妭鐐�
+            if (referenceNodeId == null) {
+                referenceNodeId = currentNodeId;
+                continue;
+            }
+
+            // 4.5 鑺傜偣涓嶄竴鑷寸洿鎺ヨ繑鍥�
+            if (!referenceNodeId.equals(currentNodeId)) {
+                return Result.ok("鑺傜偣涓嶄竴鑷�");
+            }
+        }
+
+        // 5. 鎵�鏈変换鍔¤妭鐐逛竴鑷�
+        return Result.ok(currentNodeId);
+    }
+
     /**
      * 浠e姙浠诲姟鍒楄〃
      *

--
Gitblit v1.9.3