Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	ruoyi-common/src/main/java/com/ruoyi/common/config/Bpm/BpmProperties.java
侯茂昌 1 year ago
parent
commit
7dac1ea922
31 changed files with 761 additions and 348 deletions
  1. 2 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmNodeHandleUserController.java
  2. 22 18
      ruoyi-admin/src/main/java/com/ruoyi/web/ljj.java
  3. 11 5
      ruoyi-admin/src/main/resources/application.yml
  4. 0 16
      ruoyi-common/src/main/java/com/ruoyi/common/config/Bpm/BpmProperties.java
  5. 0 0
      ruoyi-common/src/main/java/com/ruoyi/common/config/bpm/BpmProperties.java
  6. 5 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java
  7. 5 2
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/controller/BpmExecuteProcessController.java
  8. 1 1
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/runbpm/BpmUserScriptVo.java
  9. 77 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/runbpm/IRunBPMEntity.java
  10. 57 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/runbpm/IScriptEntity.java
  11. 1 1
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/runbpm/IntoProduction.java
  12. 12 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/mapper/BpmExecuteNodeMapper.java
  13. 192 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/runbpm/PreExecutionToolClass.java
  14. 21 17
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/runbpm/RunImplementationClass.java
  15. 19 9
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteNodeService.java
  16. 1 1
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteProcessService.java
  17. 7 12
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IRunBPMService.java
  18. 20 21
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/BpmExecuteNodeServiceImpl.java
  19. 10 154
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/BpmExecuteProcessServiceImpl.java
  20. 16 2
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/script/common/CommonProductionSchedulingServiceImpl.java
  21. 86 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/utils/VerifyExecutionProcess.java
  22. 14 18
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/templateimpl/RunBPMImpl.java
  23. 119 55
      ruoyi-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteNodeMapper.xml
  24. 7 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/BpmNodeHandleUserMapper.java
  25. 7 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/BpmNodeScriptRelevanceMapper.java
  26. 7 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IBpmNodeHandleUserService.java
  27. 7 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IBpmNodeScriptRelevanceService.java
  28. 5 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmNodeHandleUserServiceImpl.java
  29. 5 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmNodeScriptRelevanceServiceImpl.java
  30. 17 13
      ruoyi-system/src/main/resources/mapper/bpm/BpmNodeHandleUserMapper.xml
  31. 8 3
      ruoyi-system/src/main/resources/mapper/bpm/BpmNodeScriptRelevanceMapper.xml

+ 2 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmNodeHandleUserController.java

@@ -3,6 +3,8 @@ package com.ruoyi.web.controller.bpm;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 
+import com.ruoyi.common.config.bpm.BpmProperties;
+import com.ruoyi.common.utils.bpm.BpmUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;

+ 22 - 18
ruoyi-admin/src/main/java/com/ruoyi/web/ljj.java

@@ -1,5 +1,6 @@
 package com.ruoyi.web;
 
+import com.ruoyi.common.config.bpm.BpmProperties;
 import com.ruoyi.system.entity.BpmProcess;
 
 import javax.tools.SimpleJavaFileObject;
@@ -14,24 +15,27 @@ import java.util.stream.Collectors;
  */
 public class ljj {
     public static void main(String[] args) {
-        String yourClassPath = System.getProperty("java.class.path");
-        System.out.println(yourClassPath);
-        List<String> asd = new ArrayList<>();
-        asd.add("123");
-        asd.add("456");
-        asd.add("789");
-        BpmProcess process = new BpmProcess();
-        List<BpmProcess> list = new ArrayList<>();
-        process.setProcessId(1L);
-        process.setProcessXmlContent("流程开始");
-        list.add(process);
-        process.setProcessId(2L);
-        process.setProcessXmlContent("流程执行");
-        list.add(process);
-        process.setProcessId(3L);
-        process.setProcessXmlContent("流程结束");
-        List<BpmProcess> k = list.stream().filter(item -> item.getProcessId() == 2L).collect(Collectors.toList());
-        System.out.println(process);
+
+
+
+//        String yourClassPath = System.getProperty("java.class.path");
+//        System.out.println(yourClassPath);
+//        List<String> asd = new ArrayList<>();
+//        asd.add("123");
+//        asd.add("456");
+//        asd.add("789");
+//        BpmProcess process = new BpmProcess();
+//        List<BpmProcess> list = new ArrayList<>();
+//        process.setProcessId(1L);
+//        process.setProcessXmlContent("流程开始");
+//        list.add(process);
+//        process.setProcessId(2L);
+//        process.setProcessXmlContent("流程执行");
+//        list.add(process);
+//        process.setProcessId(3L);
+//        process.setProcessXmlContent("流程结束");
+//        List<BpmProcess> k = list.stream().filter(item -> item.getProcessId() == 2L).collect(Collectors.toList());
+//        System.out.println(process);
 
 //        asd.stream()
 //                .filter(entity -> entity.getId() == targetId)

+ 11 - 5
ruoyi-admin/src/main/resources/application.yml

@@ -9,13 +9,13 @@ ruoyi:
   # 实例演示开关
   demoEnabled: true
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: /Users/zrwj/Desktop/ZKQY_LJJ/log/file/
+  profile: D:/ruoyi/uploadPath
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
   captchaType: math
   # 流程文件存储地址
-  bpmnPath: /Users/zrwj/Desktop/ZKQY_LJJ/log/file/bpmnXML/
+  bpmnPath: D:/ruoyi/uploadPath
 
 
 # 开发环境配置
@@ -87,13 +87,13 @@ spring:
   # redis 配置
   redis:
     # 地址
-    host: 192.168.110.15
+    host: localhost
     # 端口,默认为6379
     port: 6379
     # 数据库索引
     database: 0
     # 密码
-    password:
+    password: 123456
     # 连接超时时间
     timeout: 10s
     lettuce:
@@ -153,4 +153,10 @@ xss:
 parameter:
   ip:
     # 用户下对应的所有角色key
-    MAIN_ROLESKEY_IP: http://127.0.0.1:8080/system/user/roleKeyByUserId/
+    MAIN_ROLESKEY_IP: http://127.0.0.1:8080/system/user/roleKeyByUserId/
+    # CRM项目根据scriptKey获取节点脚本详情地址
+    GET_NODESCRIPT_IP: http://localhost:8080/system/script/selectSysBpmNodeScriptByScriptKey/
+    # crm项目查看角色下是否存在真实用户
+    QUERY_USER_EXISTS_BY_ROLEKEY_IP: http://localhost:8080/system/role/selectUserByRoleKey/
+    # crm项目查看一组用户是否存在真实用户
+    QUERY_USER_EXISTS_BY_USERIDS_IP: http://localhost:8080/system/user/selectUserByUserIds/

+ 0 - 16
ruoyi-common/src/main/java/com/ruoyi/common/config/Bpm/BpmProperties.java

@@ -1,16 +0,0 @@
-package com.ruoyi.common.config.bpm;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * @author hmc
- * @date 2023-11-02 18:07
- * @Description:test
- */
-@Configuration
-public class BpmProperties {
-    //根据用户id查询当前用户所具备的角色key的ip地址 MAIN_ROLESKEY_IP2312313
-    @Value("${parameter.ip.MAIN_ROLESKEY_IP}")
-    public static final String mainRolesKeyIp = "";
-}

+ 0 - 0
ruoyi-common/src/main/java/com/ruoyi/common/config/bpm/BpmProperties.java


+ 5 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java

@@ -106,5 +106,10 @@ public class HttpStatus {
      */
     public static final int EXECUTEPROCESS = 604;
 
+    /**
+     * 流程执行出现问题,执行脚本异常
+     */
+    public static final int SCRIPTEXCEPTION = 605;
+
 
 }

+ 5 - 2
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/controller/BpmExecuteProcessController.java

@@ -3,7 +3,8 @@ package com.ruoyi.execution.produce.dispersed.controller;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 
-import com.ruoyi.system.entity.runbpm.IntoProduction;
+import com.ruoyi.execution.produce.dispersed.runbpm.RunImplementationClass;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IntoProduction;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -34,6 +35,8 @@ import com.ruoyi.common.core.page.TableDataInfo;
 public class BpmExecuteProcessController extends BaseController {
     @Autowired
     private IBpmExecuteProcessService bpmExecuteProcessService;
+    @Autowired
+    private RunImplementationClass implementationClass;
 
     /**
      * 查询流程执行任务列表
@@ -102,7 +105,7 @@ public class BpmExecuteProcessController extends BaseController {
      */
     @Log(title = "投产执行流程", businessType = BusinessType.DELETE)
     @PostMapping("/productionScheduling")
-    public AjaxResult productionScheduling(IntoProduction intoProduction) {
+    public AjaxResult productionScheduling(@RequestBody IntoProduction intoProduction) {
         return bpmExecuteProcessService.productionScheduling(intoProduction);
     }
 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/runbpm/BpmUserScriptVo.java → ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/runbpm/BpmUserScriptVo.java

@@ -1,4 +1,4 @@
-package com.ruoyi.system.entity.runbpm;
+package com.ruoyi.execution.produce.dispersed.enetity.runbpm;
 
 import com.ruoyi.system.entity.BpmNodeHandleUser;
 import com.ruoyi.system.entity.BpmNodeScriptRelevance;

+ 77 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/runbpm/IRunBPMEntity.java

@@ -0,0 +1,77 @@
+package com.ruoyi.execution.produce.dispersed.enetity.runbpm;
+
+import java.util.Map;
+
+/**
+ * 使用脚本时通过本类承载参数
+ *
+ * @author hanzihang
+ * @date 2023/11/14
+ */
+public class IRunBPMEntity {
+
+    // 脚本实现类名称
+    private String implementationName;
+
+    // 执行流程Key
+    private String executionFlowKey;
+
+    // 执行节点Key
+    private String executionNodeKey;
+
+    //  其他执行参数
+    private Map<String, Object> executionMap;
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer("IRunBPMEntity{");
+        sb.append("implementationName='").append(implementationName).append('\'');
+        sb.append(", executionFlowKey='").append(executionFlowKey).append('\'');
+        sb.append(", executionNodeKey='").append(executionNodeKey).append('\'');
+        sb.append(", executionMap=").append(executionMap);
+        sb.append('}');
+        return sb.toString();
+    }
+
+    public String getImplementationName() {
+        return implementationName;
+    }
+
+    public void setImplementationName(String implementationName) {
+        this.implementationName = implementationName;
+    }
+
+    public String getExecutionFlowKey() {
+        return executionFlowKey;
+    }
+
+    public void setExecutionFlowKey(String executionFlowKey) {
+        this.executionFlowKey = executionFlowKey;
+    }
+
+    public String getExecutionNodeKey() {
+        return executionNodeKey;
+    }
+
+    public void setExecutionNodeKey(String executionNodeKey) {
+        this.executionNodeKey = executionNodeKey;
+    }
+
+    public Map<String, Object> getExecutionMap() {
+        return executionMap;
+    }
+
+    public void setExecutionMap(Map<String, Object> executionMap) {
+        this.executionMap = executionMap;
+    }
+
+    public IRunBPMEntity() {
+    }
+
+    public IRunBPMEntity(String implementationName, String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap) {
+        this.implementationName = implementationName;
+        this.executionFlowKey = executionFlowKey;
+        this.executionNodeKey = executionNodeKey;
+        this.executionMap = executionMap;
+    }
+}

+ 57 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/runbpm/IScriptEntity.java

@@ -0,0 +1,57 @@
+package com.ruoyi.execution.produce.dispersed.enetity.runbpm;
+
+/**
+ * @author hanzihang
+ * @date 2023/11/14 2:39 PM
+ */
+public class IScriptEntity {
+    // 脚本方法名称
+    private String implementationName;
+    // 执行流程key
+    private String scriptFlowKey;
+    // 执行节点key
+    private String scriptNodeKey;
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer("IScriptEntity{");
+        sb.append("implementationName='").append(implementationName).append('\'');
+        sb.append(", scriptFlowKey='").append(scriptFlowKey).append('\'');
+        sb.append(", scriptNodeKey='").append(scriptNodeKey).append('\'');
+        sb.append('}');
+        return sb.toString();
+    }
+
+    public String getImplementationName() {
+        return implementationName;
+    }
+
+    public void setImplementationName(String implementationName) {
+        this.implementationName = implementationName;
+    }
+
+    public String getScriptFlowKey() {
+        return scriptFlowKey;
+    }
+
+    public void setScriptFlowKey(String scriptFlowKey) {
+        this.scriptFlowKey = scriptFlowKey;
+    }
+
+    public String getScriptNodeKey() {
+        return scriptNodeKey;
+    }
+
+    public void setScriptNodeKey(String scriptNodeKey) {
+        this.scriptNodeKey = scriptNodeKey;
+    }
+
+    public IScriptEntity() {
+    }
+
+    public IScriptEntity(String implementationName, String scriptFlowKey, String scriptNodeKey) {
+        this.implementationName = implementationName;
+        this.scriptFlowKey = scriptFlowKey;
+        this.scriptNodeKey = scriptNodeKey;
+    }
+}

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/runbpm/IntoProduction.java → ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/runbpm/IntoProduction.java

@@ -1,4 +1,4 @@
-package com.ruoyi.system.entity.runbpm;
+package com.ruoyi.execution.produce.dispersed.enetity.runbpm;
 
 
 /**

+ 12 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/mapper/BpmExecuteNodeMapper.java

@@ -67,4 +67,16 @@ public interface BpmExecuteNodeMapper {
      * @return 结果
      */
     public int deleteBpmExecuteNodeByIds(Long[] ids);
+
+
+    /**
+     * 更新执行中的流程节点状态
+     * * @param taskProcessKey 当前流程任务key
+     * * @param taskNodeKey    当前节点key
+     * * state状态
+     *
+     * @param bpmExecuteNode
+     * @return
+     */
+    public int updateNodeState(BpmExecuteNode bpmExecuteNode);
 }

+ 192 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/runbpm/PreExecutionToolClass.java

@@ -0,0 +1,192 @@
+package com.ruoyi.execution.produce.dispersed.runbpm;
+
+import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode;
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNodeMiddle;
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.BpmUserScriptVo;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IScriptEntity;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IntoProduction;
+import com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteNodeMapper;
+import com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteNodeMiddleMapper;
+import com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteProcessMapper;
+import com.ruoyi.execution.produce.dispersed.service.impl.utils.VerifyExecutionProcess;
+import com.ruoyi.system.entity.BpmNodeHandleUser;
+import com.ruoyi.system.entity.BpmNodeScriptRelevance;
+import com.ruoyi.system.entity.BpmProcess;
+import com.ruoyi.system.entity.BpmProcessConfiguration;
+import com.ruoyi.system.mapper.BpmNodeHandleUserMapper;
+import com.ruoyi.system.mapper.BpmNodeScriptRelevanceMapper;
+import com.ruoyi.system.mapper.BpmProcessConfigurationMapper;
+import com.ruoyi.system.mapper.BpmProcessMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 预备执行流程工具类
+ *
+ * @author hanzihang
+ * @date 2023/11/15
+ */
+@Component
+public class PreExecutionToolClass<R> {
+    @Autowired // 执行流程
+    private BpmExecuteProcessMapper runBpmExecuteProcessMapper;
+
+    @Autowired  // 执行流程中间表
+    private BpmExecuteNodeMiddleMapper runBpmExecuteNodeMiddleMapper;
+
+    @Autowired  // 执行流程节点表
+    private BpmExecuteNodeMapper runBpmExecuteNodeMapper;
+
+    @Autowired  // 定义流程
+    private BpmProcessMapper bpmProcessMapper;
+
+    @Autowired  // 定义流程节点详细信息
+    private BpmProcessConfigurationMapper bpmProcessConfigurationMapper;
+
+    @Autowired  // 节点执行用户
+    private BpmNodeHandleUserMapper bpmNodeHandleUserMapper;
+
+    @Autowired  // 节点执行脚本
+    private BpmNodeScriptRelevanceMapper bpmNodeScriptRelevanceMapper;
+
+    @Autowired  // 真正执行脚本
+    private RunImplementationClass iRunImplementationClass;
+
+    @Autowired
+    private VerifyExecutionProcess iVerifyExecutionProcess;
+
+    /**
+     * 预执行流程自动执行开始节点
+     *
+     * @param executionParameters
+     * @return
+     */
+    public int ReadyToExecute(R executionParameters) {
+        IntoProduction intoProduction = (IntoProduction) executionParameters;
+        /**
+         * 根据流程key校验当前流程数据的完整性,是否可以运行
+         */
+        if (!iVerifyExecutionProcess.VerifyProcessData(intoProduction.getTaskProcessKey()))
+            return HttpStatus.EXECUTEPROCESS;
+
+        /**1️⃣1️⃣1️⃣ 得到当前投产需要执行的流程详细信息*/
+        //--得到当前流程的详细信息
+        BpmProcess bpmProcess = bpmProcessMapper.selectBpmProcessByProcessKey(intoProduction.getTaskProcessKey());
+        //---根据流程key得到当前流程的所有节点信息
+        List<BpmProcessConfiguration> bpmProcessConfigurationList = bpmProcessConfigurationMapper.selectBpmProcessConfigurationList(new BpmProcessConfiguration(intoProduction.getTaskProcessKey()));
+        //----根据节点得到所有节点执行用户以及执行脚本的数据 ⬇⬇⬇⬇⬇⬇
+        //---------------
+
+        List<String> nodekeyList = new ArrayList<>(); // 当前流程所有节点
+        // 根据节点表示得到所有脚本以及所有执行用户信息
+        bpmProcessConfigurationList.forEach(item -> nodekeyList.add(item.getNodeKey()));
+        // 当前流程的所有节点详细信息
+        List<BpmUserScriptVo> bpmUserScriptVoList = new ArrayList<>();
+        bpmProcessConfigurationList.forEach(item -> {
+            BpmUserScriptVo bpmUserScriptVo = new BpmUserScriptVo();
+            bpmUserScriptVo.setNodeKey(item.getNodeKey());
+            bpmNodeHandleUserMapper.selectBpmNodeHandleUserList(new BpmNodeHandleUser(item.getNodeRolePermission()));
+            bpmUserScriptVo.setBpmNodeScriptRelevanceList(bpmNodeScriptRelevanceMapper.selectBpmNodeScriptRelevanceList(new BpmNodeScriptRelevance(item.getNodeKey())));
+            bpmUserScriptVoList.add(bpmUserScriptVo);
+        });
+        /**2️⃣2️⃣2️⃣ 新增执行流程表数据*/
+        BpmExecuteProcess runBpmExecuteProcess = new BpmExecuteProcess();
+        // 当前流程启动的唯一标识
+        runBpmExecuteProcess.setTaskKey("");
+        // 投产数据条的唯一标识
+        runBpmExecuteProcess.setTaskPlanKey(intoProduction.getGuid());
+        // 当前流程任务名称
+        runBpmExecuteProcess.setTaskName("");
+        // 定义表中的流程别名
+        runBpmExecuteProcess.setTaskProcessKey(bpmProcess.getProcessKey());
+        // 定义表中的流程xml标签内容
+        runBpmExecuteProcess.setTaskProcessXmlContent(bpmProcess.getProcessXmlContent());
+        // 启动流程的状态 默认:0 正常 1暂停 2弃用
+        runBpmExecuteProcess.setTaskProcessState(0L);
+        // 当前任务流程的版本注释
+        runBpmExecuteProcess.setTaskProcessNote(bpmProcess.getNote());
+        // 流程类型
+        runBpmExecuteProcess.setTaskProcessType(bpmProcess.getProcessType().toString());
+        // 执行新增方法
+        runBpmExecuteProcessMapper.insertBpmExecuteProcess(runBpmExecuteProcess);
+        /**3️⃣3️⃣3️⃣ 插入所有预执行节点*/
+        List<BpmExecuteNode> runBpmExecuteNodeList = new ArrayList<>();
+        bpmProcessConfigurationList.forEach(item -> {
+            BpmExecuteNode bpmExecuteNode = new BpmExecuteNode();
+            bpmExecuteNode.setTaskProcessKey(runBpmExecuteProcess.getTaskKey());
+            bpmExecuteNode.setTaskNodeKey(item.getNodeKey());
+            bpmExecuteNode.setTaskNodeName(item.getNodeName());
+            bpmExecuteNode.setTaskNodeFormKey(item.getNodeFormKey());
+            bpmExecuteNode.setTaskNodeType(item.getNodeType());
+            bpmExecuteNode.setTaskNodeBefore(item.getNodeBefore());
+            bpmExecuteNode.setTaskNodeAfter(item.getNodeAfter());
+            bpmExecuteNode.setTaskNodeRolePermission(item.getNodeRolePermission());
+            bpmExecuteNode.setTaskRemark(item.getRemark());
+            bpmExecuteNode.setTaskNodeState("0");  // 状态默认未执行
+            bpmExecuteNode.setTaskPriority("1");   // 任务优先级 设计是从排产操作时选中的任务优先级
+            runBpmExecuteNodeList.add(bpmExecuteNode);
+        });
+        runBpmExecuteNodeMapper.insertBpmExecuteNodeList(runBpmExecuteNodeList);
+        /**3️⃣3️⃣3️⃣ 执行流程任务所有关联数据执行用户,执行脚本等*/
+        List<BpmExecuteNodeMiddle> runBpmExecuteNodeMiddleList = new ArrayList<>();
+        int index = 0;
+        // bpmUserScriptVoList  当前节点的所有执行用户脚本
+        bpmUserScriptVoList.forEach(item -> {
+            BpmExecuteNodeMiddle bpmExecuteNodeMiddle = new BpmExecuteNodeMiddle();
+            // 节点标识
+            bpmExecuteNodeMiddle.setTaskNodeKey(item.getNodeKey());
+            // 节点执行角色编码
+            bpmExecuteNodeMiddle.setTaskRealRole(item.getBpmNodeHandleUserList().get(index).getRealRole());
+            // 节点执行用户id
+            bpmExecuteNodeMiddle.setTaskExecuteUserNo(item.getBpmNodeHandleUserList().get(index).getExecuteUserNo());
+            // 节点手动触发脚本
+            List<String> script0 = new ArrayList<>(), script1 = new ArrayList<>();// 手动触发 // 自动触发
+
+            item.getBpmNodeScriptRelevanceList().forEach(stem -> {
+                if (stem.getNodeKey().contains(item.getNodeKey())) {
+                    if (stem.getScriptTriggerType() == 0L) {  // 0L 标识手动触发 1L表示自动触发
+                        script0.add(stem.getScriptKey());
+                    } else {
+                        script1.add(stem.getScriptKey());
+                    }
+                }
+            });
+            bpmExecuteNodeMiddle.setTaskArtificialScriptKey(script0.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
+            // 节点自动触发脚本
+            bpmExecuteNodeMiddle.setTaskAutomaticScriptTriggerType(script1.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
+            runBpmExecuteNodeMiddleList.add(bpmExecuteNodeMiddle);
+        });
+        runBpmExecuteNodeMiddleMapper.insertBpmExecuteNodeMiddleList(runBpmExecuteNodeMiddleList);
+        /**4️⃣4️⃣4️⃣ 调用执行节点接口 预执行当前投产流程的开始节点,执行开始节点*/
+        // bpmUserScriptVoList  节点key对应的脚本
+        // 根据节点类型startEvent 筛选得到当前流程的开始节点,进行自动执行    // startEvent  开始节点类型
+        Optional<BpmProcessConfiguration> optionalStartNode = bpmProcessConfigurationList.stream().filter(item -> item.getNodeType().equals("startEvent")).findFirst();
+        if (optionalStartNode.isPresent()) {
+            // optionalStartNode.get().getNodeKey();  当前流程开始节点key
+            Optional<BpmUserScriptVo> optionalBpmUserScriptVo = bpmUserScriptVoList.stream().filter(item -> item.getNodeKey().equals(optionalStartNode.get().getNodeKey())).findFirst();
+            if (optionalBpmUserScriptVo.isPresent()) {
+                // 得到当前节点需要执行的脚本  只需执行自动执行的脚本即可
+                List<BpmNodeScriptRelevance> scriptAutoList = optionalBpmUserScriptVo.get().getBpmNodeScriptRelevanceList();
+                scriptAutoList.removeIf(item -> item.getScriptTriggerType() == 0L);
+                IScriptEntity iScriptEntity = new IScriptEntity();
+                iScriptEntity.setImplementationName(scriptAutoList.get(0).getScriptKey());
+                iScriptEntity.setScriptNodeKey(optionalBpmUserScriptVo.get().getNodeKey());
+                if (!iRunImplementationClass.RunScriptImplementationClassLogicCode(iScriptEntity, intoProduction)) {
+                    // 判断脚本执行状态
+                    return HttpStatus.SCRIPTEXCEPTION;
+                }
+            }
+        } else {
+            // 数据出现问题
+            return HttpStatus.EXECUTEPROCESS;
+        }
+        /**5️⃣5️⃣5️⃣ 执行结果返回前端*/
+        return HttpStatus.SUCCESS;
+    }
+}

+ 21 - 17
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/RunImplementationClass.java → ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/runbpm/RunImplementationClass.java

@@ -1,6 +1,8 @@
-package com.ruoyi.execution.produce;
+package com.ruoyi.execution.produce.dispersed.runbpm;
 
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IRunBPMEntity;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IScriptEntity;
 import com.ruoyi.execution.produce.dispersed.service.IRunBPMService;
 import com.ruoyi.execution.produce.dispersed.service.IScriptService;
 import org.slf4j.Logger;
@@ -9,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
 
-import java.util.Map;
 
 /**
  * 调用脚本逻辑执行类
@@ -31,38 +32,41 @@ public class RunImplementationClass<J> {
     private static final Logger log = LoggerFactory.getLogger(RunImplementationClass.class);
 
     /**
-     * @param implementationName 实现类名称
+     * @param iRunBPMEntity 节点执行参数
      * @return
      */
-    public AjaxResult RunBPMImplementationClassLogicCode(String implementationName, String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap) {
+    public AjaxResult RunBPMImplementationClassLogicCode(IRunBPMEntity iRunBPMEntity) {
         AjaxResult ajaxResult = new AjaxResult();
-        if (applicationContext.containsBean(implementationName)) {
-            IRunBPMService iRunBPMService = (IRunBPMService) applicationContext.getBean(implementationName, IRunBPMService.class);
+        if (applicationContext.containsBean(iRunBPMEntity.getImplementationName())) {
+            IRunBPMService iRunBPMService = (IRunBPMService) applicationContext.getBean(iRunBPMEntity.getImplementationName(), IRunBPMService.class);
             // 校验当前需要执行的脚本是否存在
             if (iRunBPMService.isVerificationMethod()) {
                 // 脚本执行前验证
-                if (iRunBPMService.preValidation(executionFlowKey, executionNodeKey, executionMap).get("code").equals("200")) {
-                    ajaxResult = iRunBPMService.executeNode(executionFlowKey, executionNodeKey, executionMap);
-                    iRunBPMService.afterValidation(executionFlowKey, executionNodeKey, executionMap);
+                if (iRunBPMService.preValidation(iRunBPMEntity).get("code").equals("200")) {
+                    ajaxResult = iRunBPMService.executeNode(iRunBPMEntity);
+                    // 把当前节点置为已经执行状态
+                    iRunBPMService.afterValidation(iRunBPMEntity);
                 }
                 // 执行清理操作
                 iRunBPMService.preDestroy();
             }
-            log.info("Service execution successful:" + implementationName);
+            log.info("Service execution successful:" + iRunBPMEntity.getImplementationName());
             return ajaxResult;
         } else {
-            log.error("Service not found for name: " + implementationName);
+            log.error("Service not found for name: " + iRunBPMEntity.getImplementationName());
             return AjaxResult.error("网络出现问题!请联系管理员!!!");
         }
     }
 
+
     /**
-     * @param implementationName 实现类名称
+     * @param iScriptEntity 定位执行脚本所需参数
+     * @param parameter     脚本实现逻辑其他参数
      * @return
      */
-    public boolean RunScriptImplementationClassLogicCode(String implementationName, J parameter) {
-        if (applicationContext.containsBean(implementationName)) {
-            IScriptService iScriptService = (IScriptService) applicationContext.getBean(implementationName, IScriptService.class);
+    public boolean RunScriptImplementationClassLogicCode(IScriptEntity iScriptEntity, J parameter) {
+        if (applicationContext.containsBean(iScriptEntity.getImplementationName())) {
+            IScriptService iScriptService = (IScriptService) applicationContext.getBean(iScriptEntity.getImplementationName(), IScriptService.class);
             // 校验当前需要执行的脚本是否存在
             if (iScriptService.isVerificationMethod()) {
                 // 脚本执行前验证
@@ -73,10 +77,10 @@ public class RunImplementationClass<J> {
                 // 执行清理操作
                 return iScriptService.preDestroy();
             }
-            log.info("Service execution successful:" + implementationName);
+            log.info("Service execution successful:" + iScriptEntity.getImplementationName());
             return true;
         } else {
-            log.error("Service not found for name: " + implementationName);
+            log.error("Service not found for name: " + iScriptEntity.getImplementationName());
             return false;
         }
     }

+ 19 - 9
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteNodeService.java

@@ -6,15 +6,14 @@ import java.util.List;
 
 /**
  * 节点执行(记录)Service接口
- * 
+ *
  * @author hzh
  * @date 2023-11-01
  */
-public interface IBpmExecuteNodeService 
-{
+public interface IBpmExecuteNodeService {
     /**
      * 查询节点执行(记录)
-     * 
+     *
      * @param id 节点执行(记录)主键
      * @return 节点执行(记录)
      */
@@ -22,7 +21,7 @@ public interface IBpmExecuteNodeService
 
     /**
      * 查询节点执行(记录)列表
-     * 
+     *
      * @param bpmExecuteNode 节点执行(记录)
      * @return 节点执行(记录)集合
      */
@@ -30,7 +29,7 @@ public interface IBpmExecuteNodeService
 
     /**
      * 新增节点执行(记录)
-     * 
+     *
      * @param bpmExecuteNode 节点执行(记录)
      * @return 结果
      */
@@ -38,7 +37,7 @@ public interface IBpmExecuteNodeService
 
     /**
      * 修改节点执行(记录)
-     * 
+     *
      * @param bpmExecuteNode 节点执行(记录)
      * @return 结果
      */
@@ -46,7 +45,7 @@ public interface IBpmExecuteNodeService
 
     /**
      * 批量删除节点执行(记录)
-     * 
+     *
      * @param ids 需要删除的节点执行(记录)主键集合
      * @return 结果
      */
@@ -54,9 +53,20 @@ public interface IBpmExecuteNodeService
 
     /**
      * 删除节点执行(记录)信息
-     * 
+     *
      * @param id 节点执行(记录)主键
      * @return 结果
      */
     public int deleteBpmExecuteNodeById(Long id);
+
+    /**
+     * 更新执行中的流程节点状态
+     * * @param taskProcessKey 当前流程任务key
+     * * @param taskNodeKey    当前节点key
+     * * state状态
+     *
+     * @param bpmExecuteNode
+     * @return
+     */
+    public int updateNodeState(BpmExecuteNode bpmExecuteNode);
 }

+ 1 - 1
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteProcessService.java

@@ -4,7 +4,7 @@ import java.util.List;
 
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess;
-import com.ruoyi.system.entity.runbpm.IntoProduction;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IntoProduction;
 
 /**
  * 流程执行任务Service接口

+ 7 - 12
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IRunBPMService.java

@@ -2,6 +2,7 @@ package com.ruoyi.execution.produce.dispersed.service;
 
 
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IRunBPMEntity;
 
 import java.util.Map;
 
@@ -16,33 +17,27 @@ public interface IRunBPMService {
     /**
      * 前置验证节点
      *
-     * @param executionFlowKey 执行流程key
-     * @param executionNodeKey 执行节点key
-     * @param executionMap     其他执行参数
+     * @param iRunBPMEntity 节点执行参数
      * @return
      */
-    AjaxResult preValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);
+    AjaxResult preValidation(IRunBPMEntity iRunBPMEntity);
 
 
     /**
      * 节点执行流程
      *
-     * @param executionFlowKey 执行流程key
-     * @param executionNodeKey 执行节点key
-     * @param executionMap     其他执行参数
+     * @param iRunBPMEntity 节点执行参数
      * @return
      */
-    AjaxResult executeNode(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);
+    AjaxResult executeNode(IRunBPMEntity iRunBPMEntity);
 
     /**
      * 后置验证节点
      *
-     * @param executionFlowKey 执行流程key
-     * @param executionNodeKey 执行节点key
-     * @param executionMap     其他执行参数
+     * @param iRunBPMEntity 节点执行参数
      * @return
      */
-    AjaxResult afterValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);
+    AjaxResult afterValidation(IRunBPMEntity iRunBPMEntity);
 
     /**
      * 验证脚本bean是否存在 在流程执行前会验证当前流程所绑定的节点脚本等

+ 20 - 21
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/BpmExecuteNodeServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ruoyi.execution.produce.dispersed.service.impl;
 
 import java.util.List;
+
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,86 +11,84 @@ import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteNodeService;
 
 /**
  * 节点执行(记录)Service业务层处理
- * 
+ *
  * @author hzh
  * @date 2023-11-01
  */
 @Service
-public class BpmExecuteNodeServiceImpl implements IBpmExecuteNodeService 
-{
+public class BpmExecuteNodeServiceImpl implements IBpmExecuteNodeService {
     @Autowired
     private BpmExecuteNodeMapper bpmExecuteNodeMapper;
 
     /**
      * 查询节点执行(记录)
-     * 
+     *
      * @param id 节点执行(记录)主键
      * @return 节点执行(记录)
      */
     @Override
-    public BpmExecuteNode selectBpmExecuteNodeById(Long id)
-    {
+    public BpmExecuteNode selectBpmExecuteNodeById(Long id) {
         return bpmExecuteNodeMapper.selectBpmExecuteNodeById(id);
     }
 
     /**
      * 查询节点执行(记录)列表
-     * 
+     *
      * @param bpmExecuteNode 节点执行(记录)
      * @return 节点执行(记录)
      */
     @Override
-    public List<BpmExecuteNode> selectBpmExecuteNodeList(BpmExecuteNode bpmExecuteNode)
-    {
+    public List<BpmExecuteNode> selectBpmExecuteNodeList(BpmExecuteNode bpmExecuteNode) {
         return bpmExecuteNodeMapper.selectBpmExecuteNodeList(bpmExecuteNode);
     }
 
     /**
      * 新增节点执行(记录)
-     * 
+     *
      * @param bpmExecuteNode 节点执行(记录)
      * @return 结果
      */
     @Override
-    public int insertBpmExecuteNode(BpmExecuteNode bpmExecuteNode)
-    {
+    public int insertBpmExecuteNode(BpmExecuteNode bpmExecuteNode) {
         bpmExecuteNode.setCreateTime(DateUtils.getNowDate());
         return bpmExecuteNodeMapper.insertBpmExecuteNode(bpmExecuteNode);
     }
 
     /**
      * 修改节点执行(记录)
-     * 
+     *
      * @param bpmExecuteNode 节点执行(记录)
      * @return 结果
      */
     @Override
-    public int updateBpmExecuteNode(BpmExecuteNode bpmExecuteNode)
-    {
+    public int updateBpmExecuteNode(BpmExecuteNode bpmExecuteNode) {
         return bpmExecuteNodeMapper.updateBpmExecuteNode(bpmExecuteNode);
     }
 
     /**
      * 批量删除节点执行(记录)
-     * 
+     *
      * @param ids 需要删除的节点执行(记录)主键
      * @return 结果
      */
     @Override
-    public int deleteBpmExecuteNodeByIds(Long[] ids)
-    {
+    public int deleteBpmExecuteNodeByIds(Long[] ids) {
         return bpmExecuteNodeMapper.deleteBpmExecuteNodeByIds(ids);
     }
 
     /**
      * 删除节点执行(记录)信息
-     * 
+     *
      * @param id 节点执行(记录)主键
      * @return 结果
      */
     @Override
-    public int deleteBpmExecuteNodeById(Long id)
-    {
+    public int deleteBpmExecuteNodeById(Long id) {
         return bpmExecuteNodeMapper.deleteBpmExecuteNodeById(id);
     }
+
+    @Override
+    public int updateNodeState(BpmExecuteNode bpmExecuteNode) {
+        return bpmExecuteNodeMapper.updateNodeState(bpmExecuteNode);
+    }
 }

+ 10 - 154
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/BpmExecuteProcessServiceImpl.java

@@ -2,20 +2,12 @@ package com.ruoyi.execution.produce.dispersed.service.impl;
 
 import java.util.*;
 
-import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.execution.produce.RunImplementationClass;
-import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode;
-import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNodeMiddle;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.execution.produce.dispersed.runbpm.PreExecutionToolClass;
 import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess;
-import com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteNodeMapper;
-import com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteNodeMiddleMapper;
 import com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteProcessMapper;
-import com.ruoyi.execution.produce.dispersed.service.impl.utils.VerifyExecutionProcess;
-import com.ruoyi.system.entity.*;
-import com.ruoyi.system.entity.runbpm.BpmUserScriptVo;
-import com.ruoyi.system.entity.runbpm.IntoProduction;
-import com.ruoyi.system.mapper.*;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IntoProduction;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteProcessService;
@@ -32,31 +24,8 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
     @Autowired // 执行流程
     private BpmExecuteProcessMapper runBpmExecuteProcessMapper;
 
-    @Autowired  // 执行流程中间表
-    private BpmExecuteNodeMiddleMapper runBpmExecuteNodeMiddleMapper;
-
-    @Autowired  // 执行流程节点表
-    private BpmExecuteNodeMapper runBpmExecuteNodeMapper;
-
-    @Autowired  // 定义流程
-    private BpmProcessMapper bpmProcessMapper;
-
-    @Autowired  // 定义流程节点详细信息
-    private BpmProcessConfigurationMapper bpmProcessConfigurationMapper;
-
-    @Autowired  // 节点执行用户
-    private BpmNodeHandleUserMapper bpmNodeHandleUserMapper;
-
-    @Autowired  // 节点执行脚本
-    private BpmNodeScriptRelevanceMapper bpmNodeScriptRelevanceMapper;
-
-    @Autowired  // 真正执行脚本
-    private RunImplementationClass iRunImplementationClass;
-
     @Autowired
-    private VerifyExecutionProcess iVerifyExecutionProcess;
-//    @Autowired  // 运行流程
-//    private IRunBPM iRunBPM;
+    private PreExecutionToolClass ipreExecutionToolClass;
 
     /**
      * 查询流程执行任务
@@ -77,6 +46,10 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
      */
     @Override
     public List<BpmExecuteProcess> selectBpmExecuteProcessList(BpmExecuteProcess bpmExecuteProcess) {
+        // 根据当前的用户id得到可以执行的流程节点
+        SecurityUtils.getUserId();
+
+
         return runBpmExecuteProcessMapper.selectBpmExecuteProcessList(bpmExecuteProcess);
     }
 
@@ -132,125 +105,8 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
      */
     @Override
     public AjaxResult productionScheduling(IntoProduction intoProduction) {
-
-        /**
-         * 根据流程key校验当前流程数据的完整性,是否可以运行
-         */
-
-        if (!iVerifyExecutionProcess.VerifyProcessData(intoProduction.getTaskProcessKey()))
-            return AjaxResult.error(String.valueOf(HttpStatus.EXECUTEPROCESS));
-
         // 得到流程key 和 投产数据条的id  (做关联查询)
-        intoProduction.getTaskProcessKey();
-        /**1️⃣ 得到当前投产需要执行的流程详细信息*/
-        //--得到当前流程的详细信息
-        BpmProcess bpmProcess = bpmProcessMapper.selectBpmProcessByProcessKey(intoProduction.getTaskProcessKey());
-
-        //---根据流程key得到当前流程的所有节点信息
-        List<BpmProcessConfiguration> bpmProcessConfigurationList = bpmProcessConfigurationMapper.selectBpmProcessConfigurationList(new BpmProcessConfiguration(intoProduction.getTaskProcessKey()));
-        //----根据节点得到所有节点执行用户以及执行脚本的数据 ⬇⬇⬇⬇⬇⬇
-        //---------------
-
-        List<String> nodekeyList = new ArrayList<>(); // 当前流程所有节点
-        // 根据节点表示得到所有脚本以及所有执行用户信息
-        bpmProcessConfigurationList.forEach(item -> nodekeyList.add(item.getNodeKey()));
-
-        // 当前流程的所有节点详细信息
-        List<BpmUserScriptVo> bpmUserScriptVoList = new ArrayList<>();
-        bpmProcessConfigurationList.forEach(item -> {
-            BpmUserScriptVo bpmUserScriptVo = new BpmUserScriptVo();
-            bpmUserScriptVo.setNodeKey(item.getNodeKey());
-            bpmNodeHandleUserMapper.selectBpmNodeHandleUserList(new BpmNodeHandleUser(item.getNodeRolePermission()));
-            bpmUserScriptVo.setBpmNodeScriptRelevanceList(bpmNodeScriptRelevanceMapper.selectBpmNodeScriptRelevanceList(new BpmNodeScriptRelevance(item.getNodeKey())));
-            bpmUserScriptVoList.add(bpmUserScriptVo);
-        });
-        /**2️⃣2️⃣2️⃣ 新增执行流程表数据*/
-        BpmExecuteProcess runBpmExecuteProcess = new BpmExecuteProcess();
-        // 当前流程启动的唯一标识
-        runBpmExecuteProcess.setTaskKey("");
-        // 投产数据条的唯一标识
-        runBpmExecuteProcess.setTaskPlanKey(intoProduction.getGuid());
-        // 当前流程任务名称
-        runBpmExecuteProcess.setTaskName("");
-        // 定义表中的流程别名
-        runBpmExecuteProcess.setTaskProcessKey(bpmProcess.getProcessKey());
-        // 定义表中的流程xml标签内容
-        runBpmExecuteProcess.setTaskProcessXmlContent(bpmProcess.getProcessXmlContent());
-        // 启动流程的状态 默认:0 正常 1暂停 2弃用
-        runBpmExecuteProcess.setTaskProcessState(0L);
-        // 当前任务流程的版本注释
-        runBpmExecuteProcess.setTaskProcessNote(bpmProcess.getNote());
-        // 流程类型
-        runBpmExecuteProcess.setTaskProcessType(intoProduction.getTaskProcessKey());
-        // 执行新增方法
-        runBpmExecuteProcessMapper.insertBpmExecuteProcess(runBpmExecuteProcess);
-        /**3️⃣3️⃣3️⃣ 插入所有预执行节点*/
-        List<BpmExecuteNode> runBpmExecuteNodeList = new ArrayList<>();
-        bpmProcessConfigurationList.forEach(item -> {
-            BpmExecuteNode bpmExecuteNode = new BpmExecuteNode();
-            bpmExecuteNode.setTaskProcessKey(runBpmExecuteProcess.getTaskKey());
-            bpmExecuteNode.setTaskNodeKey(item.getNodeKey());
-            bpmExecuteNode.setTaskNodeName(item.getNodeName());
-            bpmExecuteNode.setTaskNodeFormKey(item.getNodeFormKey());
-            bpmExecuteNode.setTaskNodeType(item.getNodeType());
-            bpmExecuteNode.setTaskNodeBefore(item.getNodeBefore());
-            bpmExecuteNode.setTaskNodeAfter(item.getNodeAfter());
-            bpmExecuteNode.setTaskNodeRolePermission(item.getNodeRolePermission());
-            bpmExecuteNode.setTaskRemark(item.getRemark());
-            bpmExecuteNode.setTaskNodeState("0");  // 状态默认未执行
-            bpmExecuteNode.setTaskPriority("1");   // 任务优先级 设计是从排产操作时选中的任务优先级
-            runBpmExecuteNodeList.add(bpmExecuteNode);
-        });
-        runBpmExecuteNodeMapper.insertBpmExecuteNodeList(runBpmExecuteNodeList);
-        /**3️⃣3️⃣3️⃣ 执行流程任务所有关联数据执行用户,执行脚本等*/
-        List<BpmExecuteNodeMiddle> runBpmExecuteNodeMiddleList = new ArrayList<>();
-
-        int index = 0;
-        // bpmUserScriptVoList  当前节点的所有执行用户脚本
-        bpmUserScriptVoList.forEach(item -> {
-            BpmExecuteNodeMiddle bpmExecuteNodeMiddle = new BpmExecuteNodeMiddle();
-            // 节点标识
-            bpmExecuteNodeMiddle.setTaskNodeKey(item.getNodeKey());
-            // 节点执行角色编码
-            bpmExecuteNodeMiddle.setTaskRealRole(item.getBpmNodeHandleUserList().get(index).getRealRole());
-            // 节点执行用户id
-            bpmExecuteNodeMiddle.setTaskExecuteUserNo(item.getBpmNodeHandleUserList().get(index).getExecuteUserNo());
-            // 节点手动触发脚本
-            List<String> script0 = new ArrayList<>(), script1 = new ArrayList<>();// 手动触发 // 自动触发
-
-            item.getBpmNodeScriptRelevanceList().forEach(stem -> {
-                if (stem.getNodeKey().contains(item.getNodeKey())) {
-                    if (stem.getScriptTriggerType() == 0L) {  // 0L 标识手动触发 1L表示自动触发
-                        script0.add(stem.getScriptKey());
-                    } else {
-                        script1.add(stem.getScriptKey());
-                    }
-                }
-            });
-            bpmExecuteNodeMiddle.setTaskArtificialScriptKey(script0.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
-            // 节点自动触发脚本
-            bpmExecuteNodeMiddle.setTaskAutomaticScriptTriggerType(script1.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
-            runBpmExecuteNodeMiddleList.add(bpmExecuteNodeMiddle);
-        });
-        runBpmExecuteNodeMiddleMapper.insertBpmExecuteNodeMiddleList(runBpmExecuteNodeMiddleList);
-        /**4️⃣4️⃣4️⃣ 调用执行节点接口 预执行当前投产流程的开始节点,执行开始节点*/
-        // bpmUserScriptVoList  节点key对应的脚本
-        // 根据节点类型startEvent 筛选得到当前流程的开始节点,进行自动执行    // startEvent  开始节点类型
-        Optional<BpmProcessConfiguration> optionalStartNode = bpmProcessConfigurationList.stream().filter(item -> item.getNodeType().equals("startEvent")).findFirst();
-        if (optionalStartNode.isPresent()) {
-            // optionalStartNode.get().getNodeKey();  当前流程开始节点key
-            Optional<BpmUserScriptVo> optionalBpmUserScriptVo = bpmUserScriptVoList.stream().filter(item -> item.getNodeKey().equals(optionalStartNode.get().getNodeKey())).findFirst();
-            if (optionalBpmUserScriptVo.isPresent()) {
-                // 得到当前节点需要执行的脚本  只需执行自动执行的脚本即可
-                List<BpmNodeScriptRelevance> scriptAutoList = optionalBpmUserScriptVo.get().getBpmNodeScriptRelevanceList();
-                scriptAutoList.removeIf(item -> item.getScriptTriggerType() == 0L);
-                iRunImplementationClass.RunScriptImplementationClassLogicCode(scriptAutoList.get(0).getScriptKey(), intoProduction);
-            }
-        } else {
-            // 数据出现问题
-            return AjaxResult.error(String.valueOf(HttpStatus.EXECUTEPROCESS));
-        }
-        /**5️⃣5️⃣5️⃣ 执行结果返回前端*/
-        return AjaxResult.success();
+        // intoProduction.getTaskProcessKey();
+        return AjaxResult.success(ipreExecutionToolClass.ReadyToExecute(intoProduction));
     }
 }

+ 16 - 2
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/script/common/CommonProductionSchedulingServiceImpl.java

@@ -1,7 +1,10 @@
 package com.ruoyi.execution.produce.dispersed.service.impl.script.common;
 
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode;
+import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteNodeService;
 import com.ruoyi.execution.produce.dispersed.service.IScriptService;
-import com.ruoyi.system.entity.runbpm.IntoProduction;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IntoProduction;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
@@ -13,10 +16,12 @@ import javax.annotation.PreDestroy;
  * @author hanzihang
  * @date 2023/11/13
  */
-@Service("CommonProductionSchedulingServiceImpl")
+@Service("ff473748-9d44-41f1-bc74-a34cc7783ceb")
 @Scope("prototype")
 public class CommonProductionSchedulingServiceImpl implements IScriptService {
 
+    @Autowired  // 执行节点记录表
+    private IBpmExecuteNodeService iBpmExecuteNodeService;
 
     @Override
     public Object preExecutionScript(Object parameter) {
@@ -25,7 +30,16 @@ public class CommonProductionSchedulingServiceImpl implements IScriptService {
 
     @Override
     public Object ExecutionScript(Object parameter) {
+        // 得到当前脚本执行所需数据
         IntoProduction intoProduction = (IntoProduction) parameter;
+        // 根据流程别名 把开始节点执行
+        BpmExecuteNode bpmExecuteNode = new BpmExecuteNode();
+        bpmExecuteNode.setTaskNodeState("1");
+        bpmExecuteNode.setTaskNodeType("startEvent");   // 每个流程里只会存在一个开始节点
+        bpmExecuteNode.setTaskProcessKey(intoProduction.getTaskProcessKey());
+        iBpmExecuteNodeService.updateNodeState(bpmExecuteNode);
+        // 根据其他的条件更新投产表状态
+
 
         return null;
     }

+ 86 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/utils/VerifyExecutionProcess.java

@@ -1,6 +1,21 @@
 package com.ruoyi.execution.produce.dispersed.service.impl.utils;
 
+import com.ruoyi.common.config.bpm.BpmProperties;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.execution.produce.dispersed.runbpm.RunImplementationClass;
+import com.ruoyi.system.entity.BpmNodeHandleUser;
+import com.ruoyi.system.entity.BpmNodeScriptRelevance;
+import com.ruoyi.system.entity.BpmProcessConfiguration;
+import com.ruoyi.system.service.IBpmNodeHandleUserService;
+import com.ruoyi.system.service.IBpmNodeScriptRelevanceService;
+import com.ruoyi.system.service.IBpmProcessConfigurationService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author hanzihang
@@ -10,7 +25,78 @@ import org.springframework.stereotype.Component;
 @Component
 public class VerifyExecutionProcess {
 
+    @Autowired
+    private IBpmProcessConfigurationService bpmProcessConfigurationService;
+
+    @Autowired
+    private IBpmNodeScriptRelevanceService bpmNodeScriptRelevanceService;
+
+    @Autowired
+    private IBpmNodeHandleUserService bpmNodeHandleUserService;
+
+    @Autowired
+    private RunImplementationClass runImplementationClass;
+
+    @Autowired
+    private BpmProperties bpmProperties;
+
+    /*
+      判断是否有开始结束节点,有,循环判断每一个节点是否包含自动执行脚本,并且脚本是否存在,
+      节点是否绑定角色权限,真实角色下是否存在可处理用户,虚拟角色下用户是否都真实存在
+    */
     public boolean VerifyProcessData(String processKey) {
+        RestTemplate restTemplate = new RestTemplate();
+        // 根据流程编号(node_process_key)查询流程配置表(bpm_process_configuration)得到该流程所有节点信息
+        BpmProcessConfiguration bpmProcessConfiguration = new BpmProcessConfiguration();
+        bpmProcessConfiguration.setNodeProcessKey(processKey);
+        List<BpmProcessConfiguration> bpmProcessConfigurationList = bpmProcessConfigurationService.selectBpmProcessConfigurationList(bpmProcessConfiguration);
+        // 定义变量开始节点(startNode),结束节点(endNode)
+        int startNode = 0;
+        int endNode = 0;
+        for (BpmProcessConfiguration b : bpmProcessConfigurationList) {
+            //判断节点前后是否执行自动脚本,并且脚本是否存在
+            if (b.getNodeBefore().equals("true") || b.getNodeAfter().equals("true")) {
+                // 查询自动执行脚本
+                BpmNodeScriptRelevance bpmNodeScriptRelevance = bpmNodeScriptRelevanceService.selectAutoScriptByNodeKey(b.getNodeKey());
+                 if (bpmNodeScriptRelevance != null) {
+                     // 获取执行脚本名称,判断脚本是否存在
+                     AjaxResult ajaxResult = restTemplate.getForObject(bpmProperties.getNodeScriptIp + bpmNodeScriptRelevance.getScriptKey(), AjaxResult.class);
+                     if(Long.valueOf(ajaxResult.get("code").toString()) != 200L){
+                         return false;
+                     }
+                     Map<String,Object> map = (Map<String,Object>)ajaxResult.get("data");
+                     runImplementationClass.isVerificationMethod(map.get("scriptFunctionName").toString());
+                 }else {
+                     return false;
+                 }
+            }else {
+                return false;
+            }
+            //判断节点是否绑定角色权限,真实角色下是否存在可处理用户,虚拟角色下用户是否都真实存在
+            if (StringUtils.isNotEmpty(b.getNodeRolePermission())) {
+                BpmNodeHandleUser bpmNodeHandleUser = bpmNodeHandleUserService.selectBpmNodeHandleUserByVirtuallyRole(b.getNodeRolePermission());
+                // 真实角色不为空查询真实角色下是否存在可处理用户
+                if (StringUtils.isNotEmpty(bpmNodeHandleUser.getRealRole())) {
+                    AjaxResult ajaxResult = restTemplate.getForObject(bpmProperties.queryUserExistsByRoleKeyIp + bpmNodeHandleUser.getRealRole(),AjaxResult.class);
+                    Long count = Long.valueOf(ajaxResult.get("data").toString());
+                    if (count <= 0) {
+                        return false;
+                    }
+                }
+                // 虚拟角色下用户是否都真实存在
+                if(StringUtils.isNotEmpty(bpmNodeHandleUser.getExecuteUserNo())){
+                    AjaxResult ajaxResult = restTemplate.getForObject(bpmProperties.queryUserExistsByUserIdsIp + bpmNodeHandleUser.getExecuteUserNo(),AjaxResult.class);
+                    Long count = Long.valueOf(ajaxResult.get("data").toString());
+                    if (count <= 0) {
+                        return false;
+                    }
+                }
+            }else {
+                return false;
+            }
+            if (b.getNodeType().equals("startEvent")) startNode++;
+            if (b.getNodeType().equals("endEvent")) endNode++;
+        }
         return true;
     }
 

+ 14 - 18
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/templateimpl/RunBPMImpl.java

@@ -2,6 +2,7 @@ package com.ruoyi.execution.produce.dispersed.service.templateimpl;
 
 
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.execution.produce.dispersed.enetity.runbpm.IRunBPMEntity;
 import com.ruoyi.execution.produce.dispersed.service.IRunBPMService;
 import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode;
 import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteNodeService;
@@ -35,43 +36,33 @@ public class RunBPMImpl implements IRunBPMService {
     /**
      * 前置验证节点
      *
-     * @param executionFlowKey 执行流程key
-     * @param executionNodeKey 执行节点key
-     * @param executionMap     其他执行参数
+     * @param iRunBPMEntity 节点执行参数
      * @return
      */
     @Override
-    public AjaxResult preValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap) {
-        System.out.println("测试RunBPMImpl成功!");
-        List<BpmExecuteNode> list = bpmExecuteNodeService.selectBpmExecuteNodeList(new BpmExecuteNode());
-        return AjaxResult.success(list);
+    public AjaxResult preValidation(IRunBPMEntity iRunBPMEntity) {
+        return null;
     }
 
     /**
      * 节点执行流程
      *
-     * @param executionFlowKey 执行流程key
-     * @param executionNodeKey 执行节点key
-     * @param executionMap     其他执行参数
+     * @param iRunBPMEntity 节点执行参数
      * @return
      */
     @Override
-    public AjaxResult executeNode(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap) {
+    public AjaxResult executeNode(IRunBPMEntity iRunBPMEntity) {
         return null;
     }
 
     /**
      * 后置验证节点
      *
-     * @param executionFlowKey 执行流程key
-     * @param executionNodeKey 执行节点key
-     * @param executionMap     其他执行参数
-     * @return
-     * @PreDestroy 注解用来清理当前bean。
-     * spring不会清理prototype作用域的bean。
+     * @param iRunBPMEntity 节点执行参数
+     *                      spring不会清理prototype作用域的bean。
      */
     @Override
-    public AjaxResult afterValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap) {
+    public AjaxResult afterValidation(IRunBPMEntity iRunBPMEntity) {
         return null;
     }
 
@@ -86,6 +77,11 @@ public class RunBPMImpl implements IRunBPMService {
         return true;
     }
 
+    /**
+     * * @PreDestroy 注解用来清理当前bean。
+     *
+     * @return
+     */
     @Override
     @PreDestroy
     public boolean preDestroy() {

+ 119 - 55
ruoyi-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteNodeMapper.xml

@@ -1,70 +1,100 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteNodeMapper">
-    
+
     <resultMap type="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode" id="BpmExecuteNodeResult">
-        <result property="id"    column="id"    />
-        <result property="taskProcessKey"    column="task_process_key"    />
-        <result property="taskNodeKey"    column="task_node_key"    />
-        <result property="taskNodeName"    column="task_node_name"    />
-        <result property="taskNodeFormKey"    column="task_node_form_key"    />
-        <result property="taskNodeType"    column="task_node_type"    />
-        <result property="taskNodeBefore"    column="task_node_before"    />
-        <result property="taskNodeAfter"    column="task_node_after"    />
-        <result property="taskNodeRolePermission"    column="task_node_role_permission"    />
-        <result property="taskRemark"    column="task_remark"    />
-        <result property="taskNodeNumber"    column="task_node_number"    />
-        <result property="taskNodeWeight"    column="task_node_weight"    />
-        <result property="taskNodeState"    column="task_node_state"    />
-        <result property="taskPriority"    column="task_priority"    />
-        <result property="task1"    column="task1"    />
-        <result property="task2"    column="task2"    />
-        <result property="task3"    column="task3"    />
-        <result property="task4"    column="task4"    />
-        <result property="task5"    column="task5"    />
-        <result property="delFlag"    column="del_flag"    />
-        <result property="createById"    column="create_by_id"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
+        <result property="id" column="id"/>
+        <result property="taskProcessKey" column="task_process_key"/>
+        <result property="taskNodeKey" column="task_node_key"/>
+        <result property="taskNodeName" column="task_node_name"/>
+        <result property="taskNodeFormKey" column="task_node_form_key"/>
+        <result property="taskNodeType" column="task_node_type"/>
+        <result property="taskNodeBefore" column="task_node_before"/>
+        <result property="taskNodeAfter" column="task_node_after"/>
+        <result property="taskNodeRolePermission" column="task_node_role_permission"/>
+        <result property="taskRemark" column="task_remark"/>
+        <result property="taskNodeNumber" column="task_node_number"/>
+        <result property="taskNodeWeight" column="task_node_weight"/>
+        <result property="taskNodeState" column="task_node_state"/>
+        <result property="taskPriority" column="task_priority"/>
+        <result property="task1" column="task1"/>
+        <result property="task2" column="task2"/>
+        <result property="task3" column="task3"/>
+        <result property="task4" column="task4"/>
+        <result property="task5" column="task5"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createById" column="create_by_id"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
     </resultMap>
 
     <sql id="selectBpmExecuteNodeVo">
-        select id, task_process_key, task_node_key, task_node_name, task_node_form_key, task_node_type, task_node_before, task_node_after, task_node_role_permission, task_remark, task_node_number, task_node_weight, task_node_state, task_priority, task1, task2, task3, task4, task5, del_flag, create_by_id, create_by, create_time from bpm_execute_node
+        select id,
+               task_process_key,
+               task_node_key,
+               task_node_name,
+               task_node_form_key,
+               task_node_type,
+               task_node_before,
+               task_node_after,
+               task_node_role_permission,
+               task_remark,
+               task_node_number,
+               task_node_weight,
+               task_node_state,
+               task_priority,
+               task1,
+               task2,
+               task3,
+               task4,
+               task5,
+               del_flag,
+               create_by_id,
+               create_by,
+               create_time
+        from bpm_execute_node
     </sql>
 
-    <select id="selectBpmExecuteNodeList" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode" resultMap="BpmExecuteNodeResult">
+    <select id="selectBpmExecuteNodeList" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode"
+            resultMap="BpmExecuteNodeResult">
         <include refid="selectBpmExecuteNodeVo"/>
-        <where>  
-            <if test="taskProcessKey != null  and taskProcessKey != ''"> and task_process_key = #{taskProcessKey}</if>
-            <if test="taskNodeKey != null  and taskNodeKey != ''"> and task_node_key = #{taskNodeKey}</if>
-            <if test="taskNodeName != null  and taskNodeName != ''"> and task_node_name like concat('%', #{taskNodeName}, '%')</if>
-            <if test="taskNodeFormKey != null  and taskNodeFormKey != ''"> and task_node_form_key = #{taskNodeFormKey}</if>
-            <if test="taskNodeType != null  and taskNodeType != ''"> and task_node_type = #{taskNodeType}</if>
-            <if test="taskNodeBefore != null  and taskNodeBefore != ''"> and task_node_before = #{taskNodeBefore}</if>
-            <if test="taskNodeAfter != null  and taskNodeAfter != ''"> and task_node_after = #{taskNodeAfter}</if>
-            <if test="taskNodeRolePermission != null  and taskNodeRolePermission != ''"> and task_node_role_permission = #{taskNodeRolePermission}</if>
-            <if test="taskRemark != null  and taskRemark != ''"> and task_remark = #{taskRemark}</if>
-            <if test="taskNodeNumber != null  and taskNodeNumber != ''"> and task_node_number = #{taskNodeNumber}</if>
-            <if test="taskNodeWeight != null  and taskNodeWeight != ''"> and task_node_weight = #{taskNodeWeight}</if>
-            <if test="taskNodeState != null  and taskNodeState != ''"> and task_node_state = #{taskNodeState}</if>
-            <if test="taskPriority != null  and taskPriority != ''"> and task_priority = #{taskPriority}</if>
-            <if test="task1 != null  and task1 != ''"> and task1 = #{task1}</if>
-            <if test="task2 != null  and task2 != ''"> and task2 = #{task2}</if>
-            <if test="task3 != null  and task3 != ''"> and task3 = #{task3}</if>
-            <if test="task4 != null  and task4 != ''"> and task4 = #{task4}</if>
-            <if test="task5 != null  and task5 != ''"> and task5 = #{task5}</if>
-<!--&#45;&#45;             <if test="createById != null  and createById != ''"> and create_by_id = #{createById}</if>-->
+        <where>
+            <if test="taskProcessKey != null  and taskProcessKey != ''">and task_process_key = #{taskProcessKey}</if>
+            <if test="taskNodeKey != null  and taskNodeKey != ''">and task_node_key = #{taskNodeKey}</if>
+            <if test="taskNodeName != null  and taskNodeName != ''">and task_node_name like concat('%', #{taskNodeName},
+                '%')
+            </if>
+            <if test="taskNodeFormKey != null  and taskNodeFormKey != ''">and task_node_form_key = #{taskNodeFormKey}
+            </if>
+            <if test="taskNodeType != null  and taskNodeType != ''">and task_node_type = #{taskNodeType}</if>
+            <if test="taskNodeBefore != null  and taskNodeBefore != ''">and task_node_before = #{taskNodeBefore}</if>
+            <if test="taskNodeAfter != null  and taskNodeAfter != ''">and task_node_after = #{taskNodeAfter}</if>
+            <if test="taskNodeRolePermission != null  and taskNodeRolePermission != ''">and task_node_role_permission =
+                #{taskNodeRolePermission}
+            </if>
+            <if test="taskRemark != null  and taskRemark != ''">and task_remark = #{taskRemark}</if>
+            <if test="taskNodeNumber != null  and taskNodeNumber != ''">and task_node_number = #{taskNodeNumber}</if>
+            <if test="taskNodeWeight != null  and taskNodeWeight != ''">and task_node_weight = #{taskNodeWeight}</if>
+            <if test="taskNodeState != null  and taskNodeState != ''">and task_node_state = #{taskNodeState}</if>
+            <if test="taskPriority != null  and taskPriority != ''">and task_priority = #{taskPriority}</if>
+            <if test="task1 != null  and task1 != ''">and task1 = #{task1}</if>
+            <if test="task2 != null  and task2 != ''">and task2 = #{task2}</if>
+            <if test="task3 != null  and task3 != ''">and task3 = #{task3}</if>
+            <if test="task4 != null  and task4 != ''">and task4 = #{task4}</if>
+            <if test="task5 != null  and task5 != ''">and task5 = #{task5}</if>
+            <!--&#45;&#45;             <if test="createById != null  and createById != ''"> and create_by_id = #{createById}</if>-->
         </where>
     </select>
-    
+
     <select id="selectBpmExecuteNodeById" parameterType="Long" resultMap="BpmExecuteNodeResult">
         <include refid="selectBpmExecuteNodeVo"/>
         where id = #{id}
     </select>
-        
-    <insert id="insertBpmExecuteNode" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode" useGeneratedKeys="true" keyProperty="id">
+
+    <insert id="insertBpmExecuteNode" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode"
+            useGeneratedKeys="true" keyProperty="id">
         insert into bpm_execute_node
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="taskProcessKey != null">task_process_key,</if>
@@ -89,7 +119,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createById != null">create_by_id,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="taskProcessKey != null">#{taskProcessKey},</if>
             <if test="taskNodeKey != null">#{taskNodeKey},</if>
@@ -113,7 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createById != null">#{createById},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
-         </trim>
+        </trim>
     </insert>
 
     <insert id="insertBpmExecuteNodeList" parameterType="java.util.List">
@@ -195,14 +225,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </update>
 
+
     <delete id="deleteBpmExecuteNodeById" parameterType="Long">
-        delete from bpm_execute_node where id = #{id}
+        delete
+        from bpm_execute_node
+        where id = #{id}
     </delete>
 
     <delete id="deleteBpmExecuteNodeByIds" parameterType="String">
-        delete from bpm_execute_node where id in 
+        delete from bpm_execute_node where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
+
+    <update id="updateNodeState" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode">
+        UPDATE bpm_execute_node SET
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskProcessKey != null">task_process_key = #{taskProcessKey},</if>
+            <if test="taskNodeKey != null">task_node_key = #{taskNodeKey},</if>
+            <if test="taskNodeName != null">task_node_name = #{taskNodeName},</if>
+            <if test="taskNodeFormKey != null">task_node_form_key = #{taskNodeFormKey},</if>
+            <if test="taskNodeType != null">task_node_type = #{taskNodeType},</if>
+            <if test="taskNodeBefore != null">task_node_before = #{taskNodeBefore},</if>
+            <if test="taskNodeAfter != null">task_node_after = #{taskNodeAfter},</if>
+            <if test="taskNodeRolePermission != null">task_node_role_permission = #{taskNodeRolePermission},</if>
+            <if test="taskRemark != null">task_remark = #{taskRemark},</if>
+            <if test="taskNodeNumber != null">task_node_number = #{taskNodeNumber},</if>
+            <if test="taskNodeWeight != null">task_node_weight = #{taskNodeWeight},</if>
+            <if test="taskNodeState != null">task_node_state = #{taskNodeState},</if>
+            <if test="taskPriority != null">task_priority = #{taskPriority},</if>
+            <if test="task1 != null">task1 = #{task1},</if>
+            <if test="task2 != null">task2 = #{task2},</if>
+            <if test="task3 != null">task3 = #{task3},</if>
+            <if test="task4 != null">task4 = #{task4},</if>
+            <if test="task5 != null">task5 = #{task5},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+        </trim>
+        where task_process_key = #{taskProcessKey}
+        <if test="taskNodeKey != null">AND task_node_key = #{taskNodeKey}</if>
+        <if test="taskNodeType != null">AND task_node_type = #{taskNodeType}</if>
+    </update>
 </mapper>

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/BpmNodeHandleUserMapper.java

@@ -58,4 +58,11 @@ public interface BpmNodeHandleUserMapper
      * @return 结果
      */
     public int deleteBpmNodeHandleUserByIds(Long[] ids);
+
+    /**
+     * 根据虚拟角色查询节点处理用户
+     * @param virtuallyRole
+     * @return
+     */
+    BpmNodeHandleUser selectBpmNodeHandleUserByVirtuallyRole(String virtuallyRole);
 }

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/BpmNodeScriptRelevanceMapper.java

@@ -58,4 +58,11 @@ public interface BpmNodeScriptRelevanceMapper
      * @return 结果
      */
     public int deleteBpmNodeScriptRelevanceByIds(Long[] ids);
+
+    /**
+     * 查询自动执行脚本
+     * @param nodeKey 节点key
+     * @return
+     */
+    BpmNodeScriptRelevance selectAutoScriptByNodeKey(String nodeKey);
 }

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IBpmNodeHandleUserService.java

@@ -58,4 +58,11 @@ public interface IBpmNodeHandleUserService
      * @return 结果
      */
     public int deleteBpmNodeHandleUserById(Long id);
+
+    /**
+     * 根据虚拟角色查询节点处理用户
+     * @param virtuallyRole
+     * @return
+     */
+    BpmNodeHandleUser selectBpmNodeHandleUserByVirtuallyRole(String virtuallyRole);
 }

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IBpmNodeScriptRelevanceService.java

@@ -58,4 +58,11 @@ public interface IBpmNodeScriptRelevanceService {
      * @return 结果
      */
     public int deleteBpmNodeScriptRelevanceById(Long id);
+
+    /**
+     * 查询自动执行脚本
+     * @param nodeKey 节点key
+     * @return
+     */
+    BpmNodeScriptRelevance selectAutoScriptByNodeKey(String nodeKey);
 }

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmNodeHandleUserServiceImpl.java

@@ -91,4 +91,9 @@ public class BpmNodeHandleUserServiceImpl implements IBpmNodeHandleUserService {
     public int deleteBpmNodeHandleUserById(Long id) {
         return bpmNodeHandleUserMapper.deleteBpmNodeHandleUserById(id);
     }
+
+    @Override
+    public BpmNodeHandleUser selectBpmNodeHandleUserByVirtuallyRole(String virtuallyRole) {
+        return bpmNodeHandleUserMapper.selectBpmNodeHandleUserByVirtuallyRole(virtuallyRole);
+    }
 }

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmNodeScriptRelevanceServiceImpl.java

@@ -90,4 +90,9 @@ public class BpmNodeScriptRelevanceServiceImpl implements IBpmNodeScriptRelevanc
     public int deleteBpmNodeScriptRelevanceById(Long id) {
         return bpmNodeScriptRelevanceMapper.deleteBpmNodeScriptRelevanceById(id);
     }
+
+    @Override
+    public BpmNodeScriptRelevance selectAutoScriptByNodeKey(String nodeKey) {
+        return bpmNodeScriptRelevanceMapper.selectAutoScriptByNodeKey(nodeKey);
+    }
 }

+ 17 - 13
ruoyi-system/src/main/resources/mapper/bpm/BpmNodeHandleUserMapper.xml

@@ -49,17 +49,21 @@
         where id = #{id}
     </update>
 
-<delete id="deleteBpmNodeHandleUserById" parameterType="Long">
-update
-    bpm_node_handle_user
-set del_flag = '2'
-where id = #{id}
-</delete>
+    <delete id="deleteBpmNodeHandleUserById" parameterType="Long">
+        delete from bpm_node_handle_user
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteBpmNodeHandleUserByIds" parameterType="String">
+        delete from bpm_node_handle_user where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="selectBpmNodeHandleUserByVirtuallyRole" parameterType="String" resultMap="BpmNodeHandleUserResult">
+        <include refid="selectBpmNodeHandleUserVo"/>
+        where virtually_role = #{virtuallyKole}
+    </select>
 
-<delete id="deleteBpmNodeHandleUserByIds" parameterType="String">
-update bpm_node_handle_user set del_flag = '2' where id in
-<foreach item="id" collection="array" open="(" separator="," close=")">
-    #{id}
-</foreach>
-</delete>
-        </mapper>
+</mapper>

+ 8 - 3
ruoyi-system/src/main/resources/mapper/bpm/BpmNodeScriptRelevanceMapper.xml

@@ -51,15 +51,20 @@
     </update>
 
     <delete id="deleteBpmNodeScriptRelevanceById" parameterType="Long">
-        update bpm_node_script_relevance
-        set del_flag = '2'
+        delete from bpm_node_script_relevance
         where id = #{id}
     </delete>
 
     <delete id="deleteBpmNodeScriptRelevanceByIds" parameterType="String">
-        update bpm_node_script_relevance set del_flag = '2' where id in
+        delete from bpm_node_script_relevance where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
+
+    <select id="selectAutoScriptByNodeKey" resultMap="BpmNodeScriptRelevanceResult">
+        <include refid="selectBpmNodeScriptRelevanceVo"/>
+        where node_key = #{nodeKey} and script_trigger_type = 1
+    </select>
+
 </mapper>