Browse Source

feat:新增流程执行模块,新增流程预执行逻辑、投产流程执行、共通节点脚本接口等结构目录的优化。实体基类的默认值附加。等等等。。。。。。

韩帛霖 1 year ago
parent
commit
c7c5fd9c77
93 changed files with 2986 additions and 455 deletions
  1. 1 0
      pom.xml
  2. 6 0
      ruoyi-admin/pom.xml
  3. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
  4. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
  5. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmNodeHandleUserController.java
  6. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmNodeScriptRelevanceController.java
  7. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmProcessConfigurationController.java
  8. 1 10
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmProcessController.java
  9. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/dragForm/CommonFileController.java
  10. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/dragForm/SysDictDataController.java
  11. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/dragForm/SysDictTypeController.java
  12. 0 7
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/nodeexceptionscript/DynamicClassLoader.java
  13. 0 192
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/nodeexceptionscript/NodeExceptionScriptController.java
  14. 0 63
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/nodeexceptionscript/asd.java
  15. 2 7
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DataSourceController.java
  16. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
  17. 42 0
      ruoyi-admin/src/main/java/com/ruoyi/web/ljj.java
  18. 2 3
      ruoyi-admin/src/main/resources/application.yml
  19. 0 18
      ruoyi-common/src/main/java/com/ruoyi/common/config/Bpm/config/BpmProperties.java
  20. 5 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java
  21. 78 60
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
  22. 29 0
      ruoyi-process-execution/pom.xml
  23. 84 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/RunImplementationClass.java
  24. 98 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/controller/BpmExecuteNodeController.java
  25. 98 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/controller/BpmExecuteNodeMiddleController.java
  26. 110 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/controller/BpmExecuteProcessController.java
  27. 307 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/BpmExecuteNode.java
  28. 121 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/BpmExecuteNodeMiddle.java
  29. 185 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/BpmExecuteProcess.java
  30. 70 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/mapper/BpmExecuteNodeMapper.java
  31. 70 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/mapper/BpmExecuteNodeMiddleMapper.java
  32. 63 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/mapper/BpmExecuteProcessMapper.java
  33. 61 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteNodeMiddleService.java
  34. 61 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteNodeService.java
  35. 72 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteProcessService.java
  36. 62 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IRunBPMService.java
  37. 52 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IScriptService.java
  38. 93 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/BpmExecuteNodeMiddleServiceImpl.java
  39. 95 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/BpmExecuteNodeServiceImpl.java
  40. 256 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/BpmExecuteProcessServiceImpl.java
  41. 8 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/runbpm/qwe.java
  42. 49 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/script/common/CommonProductionSchedulingServiceImpl.java
  43. 17 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/utils/VerifyExecutionProcess.java
  44. 96 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/templateimpl/RunBPMImpl.java
  45. 74 0
      ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/templateimpl/ScriptImpl.java
  46. 208 0
      ruoyi-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteNodeMapper.xml
  47. 98 0
      ruoyi-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteNodeMiddleMapper.xml
  48. 99 0
      ruoyi-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteProcessMapper.xml
  49. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmNodeHandleUser.java
  50. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmNodeScript.java
  51. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmNodeScriptRelevance.java
  52. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmProcess.java
  53. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmProcessConfiguration.java
  54. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/entity/DragForm.java
  55. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/entity/DragTable.java
  56. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/entity/DragTableCondition.java
  57. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/entity/DragTableForm.java
  58. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/entity/TableSql.java
  59. 67 0
      ruoyi-system/src/main/java/com/ruoyi/system/entity/runbpm/BpmUserScriptVo.java
  60. 89 0
      ruoyi-system/src/main/java/com/ruoyi/system/entity/runbpm/IntoProduction.java
  61. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/entity/vo/DragTableVo.java
  62. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/entity/vo/MetaVo.java
  63. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/entity/vo/RouterVo.java
  64. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/BpmNodeHandleUserMapper.java
  65. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/BpmNodeScriptRelevanceMapper.java
  66. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/BpmProcessMapper.java
  67. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/DragFormMapper.java
  68. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/DragTableConditionMapper.java
  69. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/DragTableMapper.java
  70. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
  71. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
  72. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/TableSqlMapper.java
  73. 0 16
      ruoyi-system/src/main/java/com/ruoyi/system/netfservice/netfService.java
  74. 0 24
      ruoyi-system/src/main/java/com/ruoyi/system/netfservice/netfServiceImpl.java
  75. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/IBpmNodeHandleUserService.java
  76. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/IBpmNodeScriptRelevanceService.java
  77. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/IDragTableConditionService.java
  78. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/IDragTableService.java
  79. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
  80. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
  81. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/ITableSqlService.java
  82. 2 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmNodeHandleUserServiceImpl.java
  83. 3 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmNodeScriptRelevanceServiceImpl.java
  84. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DragFormServiceImpl.java
  85. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DragTableConditionServiceImpl.java
  86. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DragTableServiceImpl.java
  87. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
  88. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
  89. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TableSqlServiceImpl.java
  90. 0 0
      ruoyi-system/src/main/resources/mapper/bpm/BpmNodeHandleUserMapper.xml
  91. 0 0
      ruoyi-system/src/main/resources/mapper/bpm/BpmNodeScriptRelevanceMapper.xml
  92. 0 0
      ruoyi-system/src/main/resources/mapper/bpm/BpmProcessConfigurationMapper.xml
  93. 0 0
      ruoyi-system/src/main/resources/mapper/bpm/BpmProcessMapper.xml

+ 1 - 0
pom.xml

@@ -185,6 +185,7 @@
         <module>ruoyi-system</module>
 
         <module>ruoyi-common</module>
+        <module>ruoyi-process-execution</module>
     </modules>
     <packaging>pom</packaging>
 

+ 6 - 0
ruoyi-admin/pom.xml

@@ -75,6 +75,12 @@
             <scope>system</scope>
             <systemPath>${project.basedir}/src/main/resources/lib/DmJdbcDriver18.jar</systemPath>
         </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-process-execution</artifactId>
+            <version>3.8.5</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java

@@ -7,7 +7,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 /**
  * 启动程序
  *
- * @author ruoyi
+ * @author hzh
  */
 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
 public class RuoYiApplication {

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java

@@ -6,7 +6,7 @@ import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
 /**
  * web容器中进行部署
  * 
- * @author ruoyi
+ * @author hzh
  */
 public class RuoYiServletInitializer extends SpringBootServletInitializer
 {

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

@@ -1,4 +1,4 @@
-package com.ruoyi.web.controller;
+package com.ruoyi.web.controller.bpm;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
@@ -27,7 +27,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
 /**
  * 节点处理用户Controller
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 @RestController

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/BpmNodeScriptRelevanceController.java → ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmNodeScriptRelevanceController.java

@@ -1,4 +1,4 @@
-package com.ruoyi.web.controller;
+package com.ruoyi.web.controller.bpm;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
@@ -26,7 +26,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
 /**
  * 流程节点脚本关联Controller
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 @RestController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/BpmProcessConfigurationController.java → ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmProcessConfigurationController.java

@@ -1,4 +1,4 @@
-package com.ruoyi.web.controller;
+package com.ruoyi.web.controller.bpm;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;

+ 1 - 10
ruoyi-admin/src/main/java/com/ruoyi/web/controller/BpmProcessController.java → ruoyi-admin/src/main/java/com/ruoyi/web/controller/bpm/BpmProcessController.java

@@ -1,24 +1,15 @@
-package com.ruoyi.web.controller;
+package com.ruoyi.web.controller.bpm;
 
-import java.io.*;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import com.ruoyi.common.annotation.Anonymous;
 import com.ruoyi.system.entity.BpmProcess;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/dragForm/CommonFileController.java

@@ -38,7 +38,7 @@ import static com.ruoyi.common.core.domain.AjaxResult.success;
 /**
  * 通用请求处理
  *
- * @author ruoyi
+ * @author hzh
  */
 
 @RestController

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/dragForm/SysDictDataController.java

@@ -23,7 +23,7 @@ import java.util.List;
 /**
  * 数据字典信息
  * 
- * @author ruoyi
+ * @author hzh
  */
 @RestController
 @RequestMapping("/system/dict/data")

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/dragForm/SysDictTypeController.java

@@ -19,7 +19,7 @@ import java.util.List;
 /**
  * 数据字典信息
  * 
- * @author ruoyi
+ * @author hzh
  */
 @RestController
 @RequestMapping("/system/dict/type")

+ 0 - 7
ruoyi-admin/src/main/java/com/ruoyi/web/controller/nodeexceptionscript/DynamicClassLoader.java

@@ -1,7 +0,0 @@
-package com.ruoyi.web.controller.nodeexceptionscript;
-
-class DynamicClassLoader extends ClassLoader {
-    public Class<?> loadClass(String className) throws ClassNotFoundException {
-        return super.findSystemClass(className);
-    }
-}

+ 0 - 192
ruoyi-admin/src/main/java/com/ruoyi/web/controller/nodeexceptionscript/NodeExceptionScriptController.java

@@ -1,192 +0,0 @@
-package com.ruoyi.web.controller.nodeexceptionscript;
-
-import com.alibaba.fastjson2.util.DynamicClassLoader;
-import com.ruoyi.common.annotation.Anonymous;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.system.netfservice.netfService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.tools.JavaCompiler;
-import javax.tools.ToolProvider;
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardOpenOption;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * @author hanzihang
- * @date 2023/10/25 11:15AM
- */
-@RestController
-@RequestMapping("/NodeExceptionScript")
-public class NodeExceptionScriptController {
-
-    @Autowired
-    private netfService netfService;
-
-    @Anonymous
-    @PostMapping("/handle")
-    public AjaxResult nodeScript(@RequestBody Map<String, Object> map) {
-        String codeToExecute = map.get("JavaCode").toString();
-        try {
-            String className = "netfServiceImpl";
-            String packageName = NodeExceptionScriptController.class.getPackage().getName(); // 获取当前类的包名
-            String sourceCode = "package com.ruoyi.system.netfservice;\n" +
-                    "\n" +
-                    "import com.ruoyi.system.entity.BpmProcess;\n" +
-                    "import com.ruoyi.system.mapper.BpmProcessConfigurationMapper;\n" +
-                    "import com.ruoyi.system.mapper.BpmProcessMapper;\n" +
-                    "import org.springframework.beans.factory.annotation.Autowired;\n" +
-                    "import org.springframework.stereotype.Service;\n" +
-                    "\n" +
-                    "import java.util.List;\n" +
-                    "import java.util.Map;\n" +
-                    " \n" +
-                    "@Service\n" +
-                    "public class netfServiceImpl implements netfService {\n" +
-                    "    @Autowired\n" +
-                    "    private BpmProcessConfigurationMapper bpmProcessConfigurationMapper;\n" +
-                    "\n" +
-                    "    @Autowired\n" +
-                    "    private BpmProcessMapper bpmProcessMapper;\n" +
-                    "\n" +
-
-                    "    public List<BpmProcess> handleNodeException(Map<String, Object> map) {\n" +
-                    " \n" + codeToExecute +
-                    "    }\n" +
-                    "}\n" +
-                    " \n";
-
-            //, packageName.replace(".", "/")
-            // 获取当前包的路径
-            Path packagePath = Paths.get("ruoyi-system/src/main/java/com/ruoyi/system/netfservice");
-            // 将源代码写入一个.java文件,保存到当前包下
-            Path sourcePath = packagePath.resolve(className + ".java");
-            Files.createDirectories(packagePath);
-            Files.write(sourcePath, sourceCode.getBytes(), StandardOpenOption.CREATE);
-
-            // 使用Java编译器编译.java文件为.class文件
-//             Process compileProcess = Runtime.getRuntime().exec("javac " + sourcePath, null, packagePath.toFile());
-//             compileProcess.waitFor();
-//             Process compileProcess = Runtime.getRuntime().exec("javac -d " + packagePath.toFile() + " " + sourcePath);
-//             compileProcess.waitFor();
-
-            String[] envp = new String[]{"ruoyi-system/target/classes/com/ruoyi/system/netfservice"};
-            Process compileProcess = Runtime.getRuntime().exec("javac " + sourcePath, envp, packagePath.toFile());
-            compileProcess.waitFor();
-
-            // 创建一个新的ClassLoader以加载编译后的类
-            DynamicClassLoader classLoader = new DynamicClassLoader();
-            Class<?> dynamicClass = classLoader.loadClass("com.ruoyi.system.netfservice.netfServiceImpl");
-            // com.ruoyi.system.netfservice.netfServiceImpl.class.getMethod("handleNodeException");
-
-            // 在动态生成的类上查找名为"execute"的方法
-            dynamicClass.getMethod("handleNodeException").invoke(dynamicClass.newInstance());
-
-            // 删除生成的.java和.class文件
-            Files.deleteIfExists(sourcePath);
-            Files.deleteIfExists(packagePath.resolve(className + ".class"));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return AjaxResult.success();
-    }
-
-    @Anonymous
-    @PostMapping("/handleTest")
-    public AjaxResult test(@RequestBody Map<String, Object> map) {
-
-        try {
-            // 将文件内容转换为 String
-            String content = map.get("JavaCode").toString();
-
-
-            // 启动一个 JVM 进程,并将文件内容作为参数传递给 JVM
-            Process process = Runtime.getRuntime().exec(content);
-
-            // 等待 JVM 执行完成
-            int exitCode = process.waitFor();
-
-            if (exitCode == 0) {
-                return AjaxResult.success();
-            } else {
-                return AjaxResult.success();
-            }
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Anonymous
-    @PostMapping("/handleTest1")
-    public String test1(@RequestBody Map<String, Object> map) {
-
-        // 获取编译后的类文件的目录
-        String classPath = System.getProperty("java.class.path");
-        System.err.println("编译后的类文件目录: " + classPath);
-        String classOutputDirectory = "/Users/zrwj/Desktop/ZKQY_LJJ/Intelligent_manufacturing/drag_process/ruoyi-system/target/classes /Users/zrwj/Desktop/ZKQY_LJJ/Intelligent_manufacturing/drag_process/UserCode.java";
-
-        System.getProperty("java.class.path");
-
-
-        String userCode = map.get("JavaCode").toString();
-        try {
-            // 在这里将用户上传的代码编译和执行
-            // 为了简单起见,我们使用内置的JavaCompiler来执行代码
-            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-            if (compiler == null) {
-                return "Java compiler not available.";
-            }
-
-
-            // 创建一个临时文件,将用户上传的代码写入其中
-            String code = "package com.ruoyi.system.netfservice; import java.util.*;\n" +
-                    "public class UserCode {\n" +
-                    "    public static void main(String[] args) {\n" +
-                    userCode +
-                    "    }\n" +
-                    "}\n";
-            File sourceFile = new File("UserCode.java");
-            Files.write(sourceFile.toPath(), code.getBytes(StandardCharsets.UTF_8));
-            System.err.println(sourceFile.getPath());
-            // 设置编译输出目录
-            List<String> compilationOptions = new ArrayList<>();
-            compilationOptions.add("-d");
-            compilationOptions.add(classOutputDirectory);
-            String scripttext = "javac -d " +  classOutputDirectory;
-            // 编译代码
-            int compilationResult = compiler.run(null, null, null, scripttext, sourceFile.getPath());
-            if (compilationResult != 0) {
-                return "Code compilation failed.";
-            }
-            // 使用反射加载和执行用户代码
-            URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{new File(classOutputDirectory).toURI().toURL()}, this.getClass().getClassLoader());
-//            URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{sourceFile.toURI().toURL()});
-            Class<?> userClass = Class.forName("UserCode", true, classLoader);
-            Method method = userClass.getMethod("main", String[].class);
-            method.invoke(null, (Object) new String[]{}); // 调用用户代码的main方法
-
-            // 在这里返回执行结果
-            return "Code executed successfully.";
-        } catch (Exception e) {
-            e.printStackTrace();
-            return "Error executing code: " + e.getMessage();
-        }
-    }
-
-
-}
-

+ 0 - 63
ruoyi-admin/src/main/java/com/ruoyi/web/controller/nodeexceptionscript/asd.java

@@ -1,63 +0,0 @@
-package com.ruoyi.web.controller.nodeexceptionscript;
-
-import javax.tools.JavaCompiler;
-import javax.tools.ToolProvider;
-import java.io.File;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-/**
- * @author hanzihang
- * @date 2023/10/26 4:39 PM
- */
-public class asd {
-    public static void main(String[] args) throws Exception {
-        String asa = "123";
-        System.out.println(asa.split(",").length);
-        for (String s : asa.split(",")) {
-            System.out.println(s);
-        }
-
-
-//        // Java源代码
-//        String sourceCode = "public class Test {\n" +
-//                "    public static void main(String[] args) {\n" +
-//                "        System.out.println(\"Hello, World1236!\");\n" +
-//                "    }\n" +
-//                "}";
-//
-//        // 创建一个临时文件并写入源代码
-//        File tempSourceFile = File.createTempFile("Test", ".java");
-//        System.err.println(tempSourceFile);
-//
-//        String className = tempSourceFile.getName();
-//        String sourceCode1 = "public class "+className.split("\\.")[0]+" {\n" +
-//                "    public static void main(String[] args) {\n" +
-//                "        System.out.println(\"Hello,nihaoa!\");\n" +
-//                "    }\n" +
-//                "}";
-//
-//        try (java.io.PrintWriter out = new java.io.PrintWriter(tempSourceFile)) {
-//            out.print(sourceCode1);
-//        }
-//
-//        // 获取Java编译器
-//        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-//        int result = compiler.run(null, null, null, tempSourceFile.getPath());
-//        if (result == 0) {
-//            System.out.println("编译成功");
-//        } else {
-//            System.out.println("编译失败");
-//        }
-//
-//        // 加载并运行编译的类
-//        URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{tempSourceFile.getParentFile().toURI().toURL()});
-//        System.err.println(tempSourceFile.getName());
-//
-//
-//        Class<?> cls = Class.forName(tempSourceFile.getName().split("\\.")[0], true, classLoader); // 加载类
-//        Method method = cls.getMethod("main", String[].class); // 获取main方法
-//        method.invoke(null, (Object) new String[]{}); // 执行main方法,输出 "Hello, World!"
-    }
-}

+ 2 - 7
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DataSourceController.java

@@ -1,7 +1,8 @@
 package com.ruoyi.web.controller.system;
+
+
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.DataSource;
-import com.ruoyi.common.utils.bpm.BpmUtils;
 import com.ruoyi.system.entity.TableInfo;
 import com.ruoyi.system.service.IDataSourceService;
 import org.springframework.web.bind.annotation.*;
@@ -46,10 +47,4 @@ public class DataSourceController {
     }
 
 
-    //@GetMapping("/a")
-    //public String[] aa() {
-    //    String mainRolesKeyIp = properties.getMainRolesKeyIp();
-    //    System.out.println(mainRolesKeyIp);
-    //    return BpmUtils.getRoleKeyByUserId(mainRolesKeyIp, 1L);
-    //}
 }

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java

@@ -21,7 +21,7 @@ import java.util.List;
 /**
  * Swagger2的接口配置
  *
- * @author ruoyi
+ * @author hzh
  */
 @Configuration
 public class SwaggerConfig {

+ 42 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/ljj.java

@@ -0,0 +1,42 @@
+package com.ruoyi.web;
+
+import com.ruoyi.system.entity.BpmProcess;
+
+import javax.tools.SimpleJavaFileObject;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author hanzihang
+ * @date 2023/11/3 2:52 PM
+ */
+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);
+
+//        asd.stream()
+//                .filter(entity -> entity.getId() == targetId)
+        //(item-> item.equals("456"));
+
+        //System.out.println(asd.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
+    }
+}

+ 2 - 3
ruoyi-admin/src/main/resources/application.yml

@@ -119,7 +119,7 @@ token:
 # MyBatis配置
 mybatis:
   # 搜索指定包别名
-  typeAliasesPackage: com.ruoyi.**.domain
+  typeAliasesPackage: com.ruoyi.**.entity
   # 配置mapper的扫描,找到所有的mapper.xml映射文件
   mapperLocations: classpath*:mapper/**/*Mapper.xml
   # 加载全局的配置文件
@@ -149,9 +149,8 @@ xss:
   # 匹配链接
   urlPatterns: /system/*,/monitor/*,/tool/*
 
-
 # 参数配置项
 parameter:
   ip:
     # 用户下对应的所有角色key
-    MAIN_ROLESKEY_IP: http://192.168.110.83:8080/system/user/roleKeyByUserId/
+    MAIN_ROLESKEY_IP: http://127.0.0.1:8080/system/user/roleKeyByUserId/

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

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

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

@@ -101,5 +101,10 @@ public class HttpStatus {
      */
     public static final int SQLERROR = 603;
 
+    /**
+     * 流程执行出现问题
+     */
+    public static final int EXECUTEPROCESS = 604;
+
 
 }

+ 78 - 60
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java

@@ -1,142 +1,160 @@
 package com.ruoyi.common.core.domain;
 
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
 
 /**
  * Entity基类
- * 
+ *
  * @author ruoyi
  */
-public class BaseEntity implements Serializable
-{
+public class BaseEntity implements Serializable {
 
 
     private static final long serialVersionUID = 1L;
 
-    /** 搜索值 */
+    /**
+     * 搜索值
+     */
     @JsonIgnore
     private String searchValue;
 
-    /** 创建者Id*/
+    /**
+     * 创建者Id
+     */
     private Long createById;
 
-    /** 创建者 */
+    /**
+     * 创建者
+     */
     private String createBy;
 
-    /** 创建时间 */
+    /**
+     * 创建时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
-    /** 修改者Id */
+    /**
+     * 修改者Id
+     */
     private Long updateById;
 
-    /** 更新者 */
+    /**
+     * 更新者
+     */
     private String updateBy;
 
-    /** 更新时间 */
+    /**
+     * 更新时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
-    /** 备注 */
+    /**
+     * 备注
+     */
     private String remark;
 
-    /** 请求参数 */
+    /**
+     * 请求参数
+     */
     @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private Map<String, Object> params;
 
-    public String getSearchValue()
-    {
+    public String getSearchValue() {
         return searchValue;
     }
 
-    public void setSearchValue(String searchValue)
-    {
+    public void setSearchValue(String searchValue) {
         this.searchValue = searchValue;
     }
 
-    public String getCreateBy()
-    {
-        return createBy;
+    public Long getCreateById() {
+        return createById == null ? SecurityUtils.getUserId() : createById;
     }
 
-    public void setCreateBy(String createBy)
-    {
-        this.createBy = createBy;
+    public void setCreateById(Long createById) {
+        this.createById = createById;
     }
 
-    public Date getCreateTime()
-    {
-        return createTime;
+    public String getCreateBy() {
+        return createBy == null ? SecurityUtils.getUsername() : createBy;
     }
 
-    public void setCreateTime(Date createTime)
-    {
-        this.createTime = createTime;
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
     }
 
-    public String getUpdateBy()
-    {
-        return updateBy;
+    public Date getCreateTime() {
+        return createTime == null || createTime.toString().isEmpty() ? getNowData() : createTime;
     }
 
-    public void setUpdateBy(String updateBy)
-    {
-        this.updateBy = updateBy;
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
     }
 
-    public Date getUpdateTime()
-    {
-        return updateTime;
+    public Long getUpdateById() {
+        return updateById == null ? SecurityUtils.getUserId() : updateById;
     }
 
-    public void setUpdateTime(Date updateTime)
-    {
-        this.updateTime = updateTime;
+    public void setUpdateById(Long updateById) {
+        this.updateById = updateById;
     }
 
-    public String getRemark()
-    {
-        return remark;
+    public String getUpdateBy() {
+        return updateBy == null ? SecurityUtils.getUsername() : updateBy;
     }
 
-    public void setRemark(String remark)
-    {
-        this.remark = remark;
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
     }
 
-    public Long getCreateById() {
-        return createById;
+    public Date getUpdateTime() {
+        return updateTime == null || updateTime.toString().isEmpty() ? getNowData() : updateTime;
     }
 
-    public void setCreateById(Long createById) {
-        this.createById = createById;
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
     }
 
-    public Long getUpdateById() {
-        return updateById;
+    public String getRemark() {
+        return remark;
     }
 
-    public void setUpdateById(Long updateById) {
-        this.updateById = updateById;
+    public void setRemark(String remark) {
+        this.remark = remark;
     }
 
-    public Map<String, Object> getParams()
-    {
-        if (params == null)
-        {
+    public Map<String, Object> getParams() {
+        if (params == null) {
             params = new HashMap<>();
         }
         return params;
     }
 
-    public void setParams(Map<String, Object> params)
-    {
+    public void setParams(Map<String, Object> params) {
         this.params = params;
     }
+
+    Date getNowData() {
+        String dateString = DateUtils.getTime();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date date = sdf.parse(dateString);
+            return date;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return new Date();
+    }
 }

+ 29 - 0
ruoyi-process-execution/pom.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>mec_process</artifactId>
+        <version>3.8.5</version>
+    </parent>
+
+    <artifactId>ruoyi-process-execution</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-system</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 84 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/RunImplementationClass.java

@@ -0,0 +1,84 @@
+package com.ruoyi.execution.produce;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.execution.produce.dispersed.service.IRunBPMService;
+import com.ruoyi.execution.produce.dispersed.service.IScriptService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 调用脚本逻辑执行类
+ * * 执行所有脚本类
+ * * 将IScriptService的实现类的Spring Bean的作用域设置为prototype,
+ * * 这样每次调用applicationContext.getBean()时都会返回一个新的实例。
+ * * 这样可以避免多线程环境下共享实例的问题
+ *
+ * @author hanzihang
+ * @date 2023/11/13
+ */
+@Component
+public class RunImplementationClass<J> {
+
+    @Autowired
+    private ApplicationContext applicationContext;
+
+
+    private static final Logger log = LoggerFactory.getLogger(RunImplementationClass.class);
+
+    /**
+     * @param implementationName 实现类名称
+     * @return
+     */
+    public AjaxResult RunBPMImplementationClassLogicCode(String implementationName, String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap) {
+        AjaxResult ajaxResult = new AjaxResult();
+        if (applicationContext.containsBean(implementationName)) {
+            IRunBPMService iRunBPMService = (IRunBPMService) applicationContext.getBean(implementationName, 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);
+                }
+                // 执行清理操作
+                iRunBPMService.preDestroy();
+            }
+            log.info("Service execution successful:" + implementationName);
+            return ajaxResult;
+        } else {
+            log.error("Service not found for name: " + implementationName);
+            return AjaxResult.error("网络出现问题!请联系管理员!!!");
+        }
+    }
+
+    /**
+     * @param implementationName 实现类名称
+     * @return
+     */
+    public Boolean RunScriptImplementationClassLogicCode(String implementationName, J parameter) {
+        if (applicationContext.containsBean(implementationName)) {
+            IScriptService iScriptService = (IScriptService) applicationContext.getBean(implementationName, IScriptService.class);
+            // 校验当前需要执行的脚本是否存在
+            if (iScriptService.isVerificationMethod()) {
+                // 脚本执行前验证
+                if ((Boolean) iScriptService.preExecutionScript(parameter)) {
+                    iScriptService.ExecutionScript(parameter);
+                    iScriptService.afterExecutionScript(parameter);
+                }
+                // 执行清理操作
+                return iScriptService.preDestroy();
+            }
+            log.info("Service execution successful:" + implementationName);
+            return true;
+        } else {
+            log.error("Service not found for name: " + implementationName);
+            return false;
+        }
+    }
+
+}

+ 98 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/controller/BpmExecuteNodeController.java

@@ -0,0 +1,98 @@
+package com.ruoyi.execution.produce.dispersed.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode;
+import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteNodeService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 节点执行(记录)Controller
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+@RestController
+@RequestMapping("/system/execute/node")
+public class BpmExecuteNodeController extends BaseController {
+    @Autowired
+    private IBpmExecuteNodeService bpmExecuteNodeService;
+
+    /**
+     * 查询节点执行(记录)列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:node:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BpmExecuteNode bpmExecuteNode) {
+        startPage();
+        List<BpmExecuteNode> list = bpmExecuteNodeService.selectBpmExecuteNodeList(bpmExecuteNode);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出节点执行(记录)列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:node:export')")
+    @Log(title = "节点执行(记录)", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BpmExecuteNode bpmExecuteNode) {
+        List<BpmExecuteNode> list = bpmExecuteNodeService.selectBpmExecuteNodeList(bpmExecuteNode);
+        ExcelUtil<BpmExecuteNode> util = new ExcelUtil<BpmExecuteNode>(BpmExecuteNode.class);
+        util.exportExcel(response, list, "节点执行(记录)数据");
+    }
+
+    /**
+     * 获取节点执行(记录)详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:node:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(bpmExecuteNodeService.selectBpmExecuteNodeById(id));
+    }
+
+    /**
+     * 新增节点执行(记录)
+     */
+    @PreAuthorize("@ss.hasPermi('system:node:add')")
+    @Log(title = "节点执行(记录)", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BpmExecuteNode bpmExecuteNode) {
+        return toAjax(bpmExecuteNodeService.insertBpmExecuteNode(bpmExecuteNode));
+    }
+
+    /**
+     * 修改节点执行(记录)
+     */
+    @PreAuthorize("@ss.hasPermi('system:node:edit')")
+    @Log(title = "节点执行(记录)", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BpmExecuteNode bpmExecuteNode) {
+        return toAjax(bpmExecuteNodeService.updateBpmExecuteNode(bpmExecuteNode));
+    }
+
+    /**
+     * 删除节点执行(记录)
+     */
+    @PreAuthorize("@ss.hasPermi('system:node:remove')")
+    @Log(title = "节点执行(记录)", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(bpmExecuteNodeService.deleteBpmExecuteNodeByIds(ids));
+    }
+}

+ 98 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/controller/BpmExecuteNodeMiddleController.java

@@ -0,0 +1,98 @@
+package com.ruoyi.execution.produce.dispersed.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNodeMiddle;
+import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteNodeMiddleService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 执行流程用户、节点关联脚本中间Controller
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+@RestController
+@RequestMapping("/system/execute/middle")
+public class BpmExecuteNodeMiddleController extends BaseController {
+    @Autowired
+    private IBpmExecuteNodeMiddleService bpmExecuteNodeMiddleService;
+
+    /**
+     * 查询执行流程用户、节点关联脚本中间列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:middle:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BpmExecuteNodeMiddle bpmExecuteNodeMiddle) {
+        startPage();
+        List<BpmExecuteNodeMiddle> list = bpmExecuteNodeMiddleService.selectBpmExecuteNodeMiddleList(bpmExecuteNodeMiddle);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出执行流程用户、节点关联脚本中间列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:middle:export')")
+    @Log(title = "执行流程用户、节点关联脚本中间", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BpmExecuteNodeMiddle bpmExecuteNodeMiddle) {
+        List<BpmExecuteNodeMiddle> list = bpmExecuteNodeMiddleService.selectBpmExecuteNodeMiddleList(bpmExecuteNodeMiddle);
+        ExcelUtil<BpmExecuteNodeMiddle> util = new ExcelUtil<BpmExecuteNodeMiddle>(BpmExecuteNodeMiddle.class);
+        util.exportExcel(response, list, "执行流程用户、节点关联脚本中间数据");
+    }
+
+    /**
+     * 获取执行流程用户、节点关联脚本中间详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:middle:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(bpmExecuteNodeMiddleService.selectBpmExecuteNodeMiddleById(id));
+    }
+
+    /**
+     * 新增执行流程用户、节点关联脚本中间
+     */
+    @PreAuthorize("@ss.hasPermi('system:middle:add')")
+    @Log(title = "执行流程用户、节点关联脚本中间", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BpmExecuteNodeMiddle bpmExecuteNodeMiddle) {
+        return toAjax(bpmExecuteNodeMiddleService.insertBpmExecuteNodeMiddle(bpmExecuteNodeMiddle));
+    }
+
+    /**
+     * 修改执行流程用户、节点关联脚本中间
+     */
+    @PreAuthorize("@ss.hasPermi('system:middle:edit')")
+    @Log(title = "执行流程用户、节点关联脚本中间", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BpmExecuteNodeMiddle bpmExecuteNodeMiddle) {
+        return toAjax(bpmExecuteNodeMiddleService.updateBpmExecuteNodeMiddle(bpmExecuteNodeMiddle));
+    }
+
+    /**
+     * 删除执行流程用户、节点关联脚本中间
+     */
+    @PreAuthorize("@ss.hasPermi('system:middle:remove')")
+    @Log(title = "执行流程用户、节点关联脚本中间", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(bpmExecuteNodeMiddleService.deleteBpmExecuteNodeMiddleByIds(ids));
+    }
+}

+ 110 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/controller/BpmExecuteProcessController.java

@@ -0,0 +1,110 @@
+package com.ruoyi.execution.produce.dispersed.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.system.entity.runbpm.IntoProduction;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess;
+import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteProcessService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 流程执行任务Controller
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+@RestController
+@RequestMapping("/system/execute/process")
+public class BpmExecuteProcessController extends BaseController {
+    @Autowired
+    private IBpmExecuteProcessService bpmExecuteProcessService;
+
+    /**
+     * 查询流程执行任务列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:process:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BpmExecuteProcess bpmExecuteProcess) {
+        startPage();
+        List<BpmExecuteProcess> list = bpmExecuteProcessService.selectBpmExecuteProcessList(bpmExecuteProcess);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出流程执行任务列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:process:export')")
+    @Log(title = "流程执行任务", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BpmExecuteProcess bpmExecuteProcess) {
+        List<BpmExecuteProcess> list = bpmExecuteProcessService.selectBpmExecuteProcessList(bpmExecuteProcess);
+        ExcelUtil<BpmExecuteProcess> util = new ExcelUtil<BpmExecuteProcess>(BpmExecuteProcess.class);
+        util.exportExcel(response, list, "流程执行任务数据");
+    }
+
+    /**
+     * 获取流程执行任务详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:process:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(bpmExecuteProcessService.selectBpmExecuteProcessById(id));
+    }
+
+    /**
+     * 新增流程执行任务
+     */
+    @PreAuthorize("@ss.hasPermi('system:process:add')")
+    @Log(title = "流程执行任务", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BpmExecuteProcess bpmExecuteProcess) {
+        return toAjax(bpmExecuteProcessService.insertBpmExecuteProcess(bpmExecuteProcess));
+    }
+
+    /**
+     * 修改流程执行任务
+     */
+    @PreAuthorize("@ss.hasPermi('system:process:edit')")
+    @Log(title = "流程执行任务", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BpmExecuteProcess bpmExecuteProcess) {
+        return toAjax(bpmExecuteProcessService.updateBpmExecuteProcess(bpmExecuteProcess));
+    }
+
+    /**
+     * 删除流程执行任务
+     */
+    @PreAuthorize("@ss.hasPermi('system:process:remove')")
+    @Log(title = "流程执行任务", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(bpmExecuteProcessService.deleteBpmExecuteProcessByIds(ids));
+    }
+
+    /**
+     * 共通投产流程接口
+     */
+    @Log(title = "投产执行流程", businessType = BusinessType.DELETE)
+    @PostMapping("/productionScheduling")
+    public AjaxResult productionScheduling(IntoProduction intoProduction) {
+        return bpmExecuteProcessService.productionScheduling(intoProduction);
+    }
+
+
+}

+ 307 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/BpmExecuteNode.java

@@ -0,0 +1,307 @@
+package com.ruoyi.execution.produce.dispersed.enetity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 节点执行(记录)对象 bpm_execute_node
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+public class BpmExecuteNode extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 当前执行流程任务编号task_key */
+    @Excel(name = "当前执行流程任务编号task_key")
+    private String taskProcessKey;
+
+    /** 节点编号 */
+    @Excel(name = "节点编号")
+    private String taskNodeKey;
+
+    /** 节点名称 */
+    @Excel(name = "节点名称")
+    private String taskNodeName;
+
+    /** 表单编号 */
+    @Excel(name = "表单编号")
+    private String taskNodeFormKey;
+
+    /** 节点类型(当前节点是判断、网关、普通节点等等。。。。。) */
+    @Excel(name = "节点类型", readConverterExp = "当=前节点是判断、网关、普通节点等等。。。。。")
+    private String taskNodeType;
+
+    /** 节点前(节点前后只能执行脚本,下一个节点前相当于当前节点后) */
+    @Excel(name = "节点前", readConverterExp = "节=点前后只能执行脚本,下一个节点前相当于当前节点后")
+    private String taskNodeBefore;
+
+    /** 节点后(节点前只存在一个) */
+    @Excel(name = "节点后", readConverterExp = "节=点前只存在一个")
+    private String taskNodeAfter;
+
+    /** 角色权限 虚拟角色-》勾选用户存储中间表 */
+    @Excel(name = "角色权限 虚拟角色-》勾选用户存储中间表")
+    private String taskNodeRolePermission;
+
+    /** 节点描述 */
+    @Excel(name = "节点描述")
+    private String taskRemark;
+
+    /** 节点任务执行数量记录(件数) */
+    @Excel(name = "节点任务执行数量记录", readConverterExp = "件=数")
+    private String taskNodeNumber;
+
+    /** 节点任务执行重量记录(重量) */
+    @Excel(name = "节点任务执行重量记录", readConverterExp = "重=量")
+    private String taskNodeWeight;
+
+    /** 节点状态(0:未执行 1:已执行) */
+    @Excel(name = "节点状态(0:未执行 1:已执行)")
+    private String taskNodeState;
+
+    /** 流程发起的时添设置该任务的优先级 */
+    @Excel(name = "流程发起的时添设置该任务的优先级")
+    private String taskPriority;
+
+    /** 执行节点备用列(未启用) */
+    @Excel(name = "执行节点备用列", readConverterExp = "未=启用")
+    private String task1;
+
+    /** 执行节点备用列(未启用) */
+    @Excel(name = "执行节点备用列", readConverterExp = "未=启用")
+    private String task2;
+
+    /** 执行节点备用列(未启用) */
+    @Excel(name = "执行节点备用列", readConverterExp = "未=启用")
+    private String task3;
+
+    /** 执行节点备用列(未启用) */
+    @Excel(name = "执行节点备用列", readConverterExp = "未=启用")
+    private String task4;
+
+    /** 执行节点备用列(未启用) */
+    @Excel(name = "执行节点备用列", readConverterExp = "未=启用")
+    private String task5;
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setTaskProcessKey(String taskProcessKey)
+    {
+        this.taskProcessKey = taskProcessKey;
+    }
+
+    public String getTaskProcessKey()
+    {
+        return taskProcessKey;
+    }
+    public void setTaskNodeKey(String taskNodeKey)
+    {
+        this.taskNodeKey = taskNodeKey;
+    }
+
+    public String getTaskNodeKey()
+    {
+        return taskNodeKey;
+    }
+    public void setTaskNodeName(String taskNodeName)
+    {
+        this.taskNodeName = taskNodeName;
+    }
+
+    public String getTaskNodeName()
+    {
+        return taskNodeName;
+    }
+    public void setTaskNodeFormKey(String taskNodeFormKey)
+    {
+        this.taskNodeFormKey = taskNodeFormKey;
+    }
+
+    public String getTaskNodeFormKey()
+    {
+        return taskNodeFormKey;
+    }
+    public void setTaskNodeType(String taskNodeType)
+    {
+        this.taskNodeType = taskNodeType;
+    }
+
+    public String getTaskNodeType()
+    {
+        return taskNodeType;
+    }
+    public void setTaskNodeBefore(String taskNodeBefore)
+    {
+        this.taskNodeBefore = taskNodeBefore;
+    }
+
+    public String getTaskNodeBefore()
+    {
+        return taskNodeBefore;
+    }
+    public void setTaskNodeAfter(String taskNodeAfter)
+    {
+        this.taskNodeAfter = taskNodeAfter;
+    }
+
+    public String getTaskNodeAfter()
+    {
+        return taskNodeAfter;
+    }
+    public void setTaskNodeRolePermission(String taskNodeRolePermission)
+    {
+        this.taskNodeRolePermission = taskNodeRolePermission;
+    }
+
+    public String getTaskNodeRolePermission()
+    {
+        return taskNodeRolePermission;
+    }
+    public void setTaskRemark(String taskRemark)
+    {
+        this.taskRemark = taskRemark;
+    }
+
+    public String getTaskRemark()
+    {
+        return taskRemark;
+    }
+    public void setTaskNodeNumber(String taskNodeNumber)
+    {
+        this.taskNodeNumber = taskNodeNumber;
+    }
+
+    public String getTaskNodeNumber()
+    {
+        return taskNodeNumber;
+    }
+    public void setTaskNodeWeight(String taskNodeWeight)
+    {
+        this.taskNodeWeight = taskNodeWeight;
+    }
+
+    public String getTaskNodeWeight()
+    {
+        return taskNodeWeight;
+    }
+    public void setTaskNodeState(String taskNodeState)
+    {
+        this.taskNodeState = taskNodeState;
+    }
+
+    public String getTaskNodeState()
+    {
+        return taskNodeState;
+    }
+    public void setTaskPriority(String taskPriority)
+    {
+        this.taskPriority = taskPriority;
+    }
+
+    public String getTaskPriority()
+    {
+        return taskPriority;
+    }
+    public void setTask1(String task1)
+    {
+        this.task1 = task1;
+    }
+
+    public String getTask1()
+    {
+        return task1;
+    }
+    public void setTask2(String task2)
+    {
+        this.task2 = task2;
+    }
+
+    public String getTask2()
+    {
+        return task2;
+    }
+    public void setTask3(String task3)
+    {
+        this.task3 = task3;
+    }
+
+    public String getTask3()
+    {
+        return task3;
+    }
+    public void setTask4(String task4)
+    {
+        this.task4 = task4;
+    }
+
+    public String getTask4()
+    {
+        return task4;
+    }
+    public void setTask5(String task5)
+    {
+        this.task5 = task5;
+    }
+
+    public String getTask5()
+    {
+        return task5;
+    }
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag.isEmpty() ? "0" : delFlag;
+    }
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskProcessKey", getTaskProcessKey())
+            .append("taskNodeKey", getTaskNodeKey())
+            .append("taskNodeName", getTaskNodeName())
+            .append("taskNodeFormKey", getTaskNodeFormKey())
+            .append("taskNodeType", getTaskNodeType())
+            .append("taskNodeBefore", getTaskNodeBefore())
+            .append("taskNodeAfter", getTaskNodeAfter())
+            .append("taskNodeRolePermission", getTaskNodeRolePermission())
+            .append("taskRemark", getTaskRemark())
+            .append("taskNodeNumber", getTaskNodeNumber())
+            .append("taskNodeWeight", getTaskNodeWeight())
+            .append("taskNodeState", getTaskNodeState())
+            .append("taskPriority", getTaskPriority())
+            .append("task1", getTask1())
+            .append("task2", getTask2())
+            .append("task3", getTask3())
+            .append("task4", getTask4())
+            .append("task5", getTask5())
+            .append("delFlag", getDelFlag())
+            .append("createById", getCreateById())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .toString();
+    }
+}

+ 121 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/BpmExecuteNodeMiddle.java

@@ -0,0 +1,121 @@
+package com.ruoyi.execution.produce.dispersed.enetity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 执行流程用户、节点关联脚本中间对象 bpm_execute_node_middle
+ * 
+ * @author hzh
+ * @date 2023-11-01
+ */
+public class BpmExecuteNodeMiddle extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 节点编码 */
+    @Excel(name = "节点编码")
+    private String taskNodeKey;
+
+    /** 虚拟角色编码 */
+    @Excel(name = "虚拟角色编码")
+    private String taskVirtuallyRole;
+
+    /** 角色编码1,2,3 */
+    @Excel(name = "角色编码1,2,3")
+    private String taskRealRole;
+
+    /** 执行用户编号1,2,3 */
+    @Excel(name = "执行用户编号1,2,3")
+    private String taskExecuteUserNo;
+
+    /** 手动触发脚本编码1,2,3 */
+    @Excel(name = "手动触发脚本编码1,2,3")
+    private String taskArtificialScriptKey;
+
+    /** 自动触发脚本编码1,2,3(自动触发的脚本需要根据执行节点表中的节点前后执行) */
+    @Excel(name = "自动触发脚本编码1,2,3(自动触发的脚本需要根据执行节点表中的节点前后执行)")
+    private String taskAutomaticScriptTriggerType;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTaskNodeKey(String taskNodeKey) 
+    {
+        this.taskNodeKey = taskNodeKey;
+    }
+
+    public String getTaskNodeKey() 
+    {
+        return taskNodeKey;
+    }
+    public void setTaskVirtuallyRole(String taskVirtuallyRole) 
+    {
+        this.taskVirtuallyRole = taskVirtuallyRole;
+    }
+
+    public String getTaskVirtuallyRole() 
+    {
+        return taskVirtuallyRole;
+    }
+    public void setTaskRealRole(String taskRealRole) 
+    {
+        this.taskRealRole = taskRealRole;
+    }
+
+    public String getTaskRealRole() 
+    {
+        return taskRealRole;
+    }
+    public void setTaskExecuteUserNo(String taskExecuteUserNo) 
+    {
+        this.taskExecuteUserNo = taskExecuteUserNo;
+    }
+
+    public String getTaskExecuteUserNo() 
+    {
+        return taskExecuteUserNo;
+    }
+    public void setTaskArtificialScriptKey(String taskArtificialScriptKey) 
+    {
+        this.taskArtificialScriptKey = taskArtificialScriptKey;
+    }
+
+    public String getTaskArtificialScriptKey() 
+    {
+        return taskArtificialScriptKey;
+    }
+    public void setTaskAutomaticScriptTriggerType(String taskAutomaticScriptTriggerType) 
+    {
+        this.taskAutomaticScriptTriggerType = taskAutomaticScriptTriggerType;
+    }
+
+    public String getTaskAutomaticScriptTriggerType() 
+    {
+        return taskAutomaticScriptTriggerType;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("taskNodeKey", getTaskNodeKey())
+            .append("taskVirtuallyRole", getTaskVirtuallyRole())
+            .append("taskRealRole", getTaskRealRole())
+            .append("taskExecuteUserNo", getTaskExecuteUserNo())
+            .append("taskArtificialScriptKey", getTaskArtificialScriptKey())
+            .append("taskAutomaticScriptTriggerType", getTaskAutomaticScriptTriggerType())
+            .toString();
+    }
+}

+ 185 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/enetity/BpmExecuteProcess.java

@@ -0,0 +1,185 @@
+package com.ruoyi.execution.produce.dispersed.enetity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 流程执行任务对象 bpm_execute_process
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+public class BpmExecuteProcess extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 流程任务执行别名
+     */
+    @Excel(name = "流程任务执行别名")
+    private String taskKey;
+
+    /**
+     * 任务名称
+     */
+    @Excel(name = "任务计划key")
+    private String taskPlanKey;
+
+    /**
+     * 任务名称
+     */
+    @Excel(name = "任务名称")
+    private String taskName;
+
+    /**
+     * 任务节点别名(记录当前流程执行过的最后一个节点id)
+     */
+    @Excel(name = "任务节点别名", readConverterExp = "记=录当前流程执行过的最后一个节点id")
+    private String taskNodeKey;
+
+    /**
+     * 定义的流程别名
+     */
+    @Excel(name = "定义的流程别名")
+    private String taskProcessKey;
+
+    /**
+     * xml标签内容
+     */
+    @Excel(name = "xml标签内容")
+    private String taskProcessXmlContent;
+
+    /**
+     * 任务流程状态
+     */
+    @Excel(name = "任务流程状态")
+    private Long taskProcessState;
+
+    /**
+     * 版本注释
+     */
+    @Excel(name = "版本注释")
+    private String taskProcessNote;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    private String delFlag;
+
+    /**
+     * 流程类型
+     */
+    @Excel(name = "流程类型")
+    private String taskProcessType;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTaskKey() {
+        return taskKey;
+    }
+
+    public void setTaskKey(String taskKey) {
+        this.taskKey = taskKey;
+    }
+
+    public String getTaskPlanKey() {
+        return taskPlanKey;
+    }
+
+    public void setTaskPlanKey(String taskPlanKey) {
+        this.taskPlanKey = taskPlanKey;
+    }
+
+    public String getTaskName() {
+        return taskName;
+    }
+
+    public void setTaskName(String taskName) {
+        this.taskName = taskName;
+    }
+
+    public String getTaskNodeKey() {
+        return taskNodeKey;
+    }
+
+    public void setTaskNodeKey(String taskNodeKey) {
+        this.taskNodeKey = taskNodeKey;
+    }
+
+    public String getTaskProcessKey() {
+        return taskProcessKey;
+    }
+
+    public void setTaskProcessKey(String taskProcessKey) {
+        this.taskProcessKey = taskProcessKey;
+    }
+
+    public String getTaskProcessXmlContent() {
+        return taskProcessXmlContent;
+    }
+
+    public void setTaskProcessXmlContent(String taskProcessXmlContent) {
+        this.taskProcessXmlContent = taskProcessXmlContent;
+    }
+
+    public Long getTaskProcessState() {
+        return taskProcessState;
+    }
+
+    public void setTaskProcessState(Long taskProcessState) {
+        this.taskProcessState = taskProcessState;
+    }
+
+    public String getTaskProcessNote() {
+        return taskProcessNote;
+    }
+
+    public void setTaskProcessNote(String taskProcessNote) {
+        this.taskProcessNote = taskProcessNote;
+    }
+
+    public String getDelFlag() {
+        return delFlag.isEmpty() ? "0" : delFlag;
+    }
+
+    public void setDelFlag(String delFlag) {
+        this.delFlag = delFlag;
+    }
+
+    public String getTaskProcessType() {
+        return taskProcessType;
+    }
+
+    public void setTaskProcessType(String taskProcessType) {
+        this.taskProcessType = taskProcessType;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("taskKey", getTaskKey())
+                .append("taskName", getTaskName())
+                .append("taskNodeKey", getTaskNodeKey())
+                .append("taskProcessKey", getTaskProcessKey())
+                .append("taskProcessXmlContent", getTaskProcessXmlContent())
+                .append("taskProcessState", getTaskProcessState())
+                .append("taskProcessNote", getTaskProcessNote())
+                .append("delFlag", getDelFlag())
+                .append("remark", getRemark())
+                .append("taskProcessType", getTaskProcessType())
+                .toString();
+    }
+}

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

@@ -0,0 +1,70 @@
+package com.ruoyi.execution.produce.dispersed.mapper;
+
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode;
+
+import java.util.List;
+
+
+/**
+ * 节点执行(记录)Mapper接口
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+public interface BpmExecuteNodeMapper {
+    /**
+     * 查询节点执行(记录)
+     *
+     * @param id 节点执行(记录)主键
+     * @return 节点执行(记录)
+     */
+    public BpmExecuteNode selectBpmExecuteNodeById(Long id);
+
+    /**
+     * 查询节点执行(记录)列表
+     *
+     * @param bpmExecuteNode 节点执行(记录)
+     * @return 节点执行(记录)集合
+     */
+    public List<BpmExecuteNode> selectBpmExecuteNodeList(BpmExecuteNode bpmExecuteNode);
+
+    /**
+     * 新增节点执行(记录)
+     *
+     * @param bpmExecuteNode 节点执行(记录)
+     * @return 结果
+     */
+    public int insertBpmExecuteNode(BpmExecuteNode bpmExecuteNode);
+
+    /**
+     * 新增节点执行(记录)
+     *
+     * @param bpmExecuteNodeList 节点执行(记录)
+     * @return 结果
+     */
+    public int insertBpmExecuteNodeList(List<BpmExecuteNode> bpmExecuteNodeList);
+
+    /**
+     * 修改节点执行(记录)
+     *
+     * @param bpmExecuteNode 节点执行(记录)
+     * @return 结果
+     */
+    public int updateBpmExecuteNode(BpmExecuteNode bpmExecuteNode);
+
+    /**
+     * 删除节点执行(记录)
+     *
+     * @param id 节点执行(记录)主键
+     * @return 结果
+     */
+    public int deleteBpmExecuteNodeById(Long id);
+
+    /**
+     * 批量删除节点执行(记录)
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBpmExecuteNodeByIds(Long[] ids);
+}

+ 70 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/mapper/BpmExecuteNodeMiddleMapper.java

@@ -0,0 +1,70 @@
+package com.ruoyi.execution.produce.dispersed.mapper;
+
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNodeMiddle;
+
+import java.util.List;
+
+
+/**
+ * 执行流程用户、节点关联脚本中间Mapper接口
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+public interface BpmExecuteNodeMiddleMapper {
+    /**
+     * 查询执行流程用户、节点关联脚本中间
+     *
+     * @param id 执行流程用户、节点关联脚本中间主键
+     * @return 执行流程用户、节点关联脚本中间
+     */
+    public BpmExecuteNodeMiddle selectBpmExecuteNodeMiddleById(Long id);
+
+    /**
+     * 查询执行流程用户、节点关联脚本中间列表
+     *
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 执行流程用户、节点关联脚本中间集合
+     */
+    public List<BpmExecuteNodeMiddle> selectBpmExecuteNodeMiddleList(BpmExecuteNodeMiddle bpmExecuteNodeMiddle);
+
+    /**
+     * 新增执行流程用户、节点关联脚本中间
+     *
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 结果
+     */
+    public int insertBpmExecuteNodeMiddle(BpmExecuteNodeMiddle bpmExecuteNodeMiddle);
+
+    /**
+     * 新增执行流程用户、节点关联脚本中间
+     *
+     * @param bpmExecuteNodeMiddleList 执行流程用户、节点关联脚本中间
+     * @return 结果
+     */
+    public int insertBpmExecuteNodeMiddleList(List<BpmExecuteNodeMiddle> bpmExecuteNodeMiddleList);
+
+    /**
+     * 修改执行流程用户、节点关联脚本中间
+     *
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 结果
+     */
+    public int updateBpmExecuteNodeMiddle(BpmExecuteNodeMiddle bpmExecuteNodeMiddle);
+
+    /**
+     * 删除执行流程用户、节点关联脚本中间
+     *
+     * @param id 执行流程用户、节点关联脚本中间主键
+     * @return 结果
+     */
+    public int deleteBpmExecuteNodeMiddleById(Long id);
+
+    /**
+     * 批量删除执行流程用户、节点关联脚本中间
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBpmExecuteNodeMiddleByIds(Long[] ids);
+}

+ 63 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/mapper/BpmExecuteProcessMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.execution.produce.dispersed.mapper;
+
+import java.util.List;
+
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess;
+import com.ruoyi.system.entity.BpmExecuteProcess;
+
+/**
+ * 流程执行任务Mapper接口
+ * 
+ * @author hzh
+ * @date 2023-11-01
+ */
+public interface BpmExecuteProcessMapper 
+{
+    /**
+     * 查询流程执行任务
+     *
+     * @param id 流程执行任务主键
+     * @return 流程执行任务
+     */
+    public BpmExecuteProcess selectBpmExecuteProcessById(Long id);
+
+    /**
+     * 查询流程执行任务列表
+     * 
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 流程执行任务集合
+     */
+    public List<BpmExecuteProcess> selectBpmExecuteProcessList(BpmExecuteProcess bpmExecuteProcess);
+
+    /**
+     * 新增流程执行任务
+     * 
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 结果
+     */
+    public int insertBpmExecuteProcess(BpmExecuteProcess bpmExecuteProcess);
+
+    /**
+     * 修改流程执行任务
+     * 
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 结果
+     */
+    public int updateBpmExecuteProcess(BpmExecuteProcess bpmExecuteProcess);
+
+    /**
+     * 删除流程执行任务
+     * 
+     * @param id 流程执行任务主键
+     * @return 结果
+     */
+    public int deleteBpmExecuteProcessById(Long id);
+
+    /**
+     * 批量删除流程执行任务
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBpmExecuteProcessByIds(Long[] ids);
+}

+ 61 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteNodeMiddleService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.execution.produce.dispersed.service;
+
+import java.util.List;
+import com.ruoyi.system.entity.BpmExecuteNodeMiddle;
+
+/**
+ * 执行流程用户、节点关联脚本中间Service接口
+ * 
+ * @author hzh
+ * @date 2023-11-01
+ */
+public interface IBpmExecuteNodeMiddleService 
+{
+    /**
+     * 查询执行流程用户、节点关联脚本中间
+     * 
+     * @param id 执行流程用户、节点关联脚本中间主键
+     * @return 执行流程用户、节点关联脚本中间
+     */
+    public BpmExecuteNodeMiddle selectBpmExecuteNodeMiddleById(Long id);
+
+    /**
+     * 查询执行流程用户、节点关联脚本中间列表
+     * 
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 执行流程用户、节点关联脚本中间集合
+     */
+    public List<BpmExecuteNodeMiddle> selectBpmExecuteNodeMiddleList(BpmExecuteNodeMiddle bpmExecuteNodeMiddle);
+
+    /**
+     * 新增执行流程用户、节点关联脚本中间
+     * 
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 结果
+     */
+    public int insertBpmExecuteNodeMiddle(BpmExecuteNodeMiddle bpmExecuteNodeMiddle);
+
+    /**
+     * 修改执行流程用户、节点关联脚本中间
+     * 
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 结果
+     */
+    public int updateBpmExecuteNodeMiddle(BpmExecuteNodeMiddle bpmExecuteNodeMiddle);
+
+    /**
+     * 批量删除执行流程用户、节点关联脚本中间
+     * 
+     * @param ids 需要删除的执行流程用户、节点关联脚本中间主键集合
+     * @return 结果
+     */
+    public int deleteBpmExecuteNodeMiddleByIds(Long[] ids);
+
+    /**
+     * 删除执行流程用户、节点关联脚本中间信息
+     * 
+     * @param id 执行流程用户、节点关联脚本中间主键
+     * @return 结果
+     */
+    public int deleteBpmExecuteNodeMiddleById(Long id);
+}

+ 61 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IBpmExecuteNodeService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.execution.produce.dispersed.service;
+
+import java.util.List;
+import com.ruoyi.system.entity.BpmExecuteNode;
+
+/**
+ * 节点执行(记录)Service接口
+ * 
+ * @author hzh
+ * @date 2023-11-01
+ */
+public interface IBpmExecuteNodeService 
+{
+    /**
+     * 查询节点执行(记录)
+     * 
+     * @param id 节点执行(记录)主键
+     * @return 节点执行(记录)
+     */
+    public BpmExecuteNode selectBpmExecuteNodeById(Long id);
+
+    /**
+     * 查询节点执行(记录)列表
+     * 
+     * @param bpmExecuteNode 节点执行(记录)
+     * @return 节点执行(记录)集合
+     */
+    public List<BpmExecuteNode> selectBpmExecuteNodeList(BpmExecuteNode bpmExecuteNode);
+
+    /**
+     * 新增节点执行(记录)
+     * 
+     * @param bpmExecuteNode 节点执行(记录)
+     * @return 结果
+     */
+    public int insertBpmExecuteNode(BpmExecuteNode bpmExecuteNode);
+
+    /**
+     * 修改节点执行(记录)
+     * 
+     * @param bpmExecuteNode 节点执行(记录)
+     * @return 结果
+     */
+    public int updateBpmExecuteNode(BpmExecuteNode bpmExecuteNode);
+
+    /**
+     * 批量删除节点执行(记录)
+     * 
+     * @param ids 需要删除的节点执行(记录)主键集合
+     * @return 结果
+     */
+    public int deleteBpmExecuteNodeByIds(Long[] ids);
+
+    /**
+     * 删除节点执行(记录)信息
+     * 
+     * @param id 节点执行(记录)主键
+     * @return 结果
+     */
+    public int deleteBpmExecuteNodeById(Long id);
+}

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

@@ -0,0 +1,72 @@
+package com.ruoyi.execution.produce.dispersed.service;
+
+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;
+
+/**
+ * 流程执行任务Service接口
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+public interface IBpmExecuteProcessService {
+    /**
+     * 查询流程执行任务
+     *
+     * @param id 流程执行任务主键
+     * @return 流程执行任务
+     */
+    public BpmExecuteProcess selectBpmExecuteProcessById(Long id);
+
+    /**
+     * 查询流程执行任务列表
+     *
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 流程执行任务集合
+     */
+    public List<BpmExecuteProcess> selectBpmExecuteProcessList(BpmExecuteProcess bpmExecuteProcess);
+
+    /**
+     * 新增流程执行任务
+     *
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 结果
+     */
+    public int insertBpmExecuteProcess(BpmExecuteProcess bpmExecuteProcess);
+
+    /**
+     * 修改流程执行任务
+     *
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 结果
+     */
+    public int updateBpmExecuteProcess(BpmExecuteProcess bpmExecuteProcess);
+
+    /**
+     * 批量删除流程执行任务
+     *
+     * @param ids 需要删除的流程执行任务主键集合
+     * @return 结果
+     */
+    public int deleteBpmExecuteProcessByIds(Long[] ids);
+
+    /**
+     * 删除流程执行任务信息
+     *
+     * @param id 流程执行任务主键
+     * @return 结果
+     */
+    public int deleteBpmExecuteProcessById(Long id);
+
+
+    /**
+     * 共通投产流程接口
+     *
+     * @param intoProduction 预执行流程任务实体
+     * @return
+     */
+    public AjaxResult productionScheduling(IntoProduction intoProduction);
+}

+ 62 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IRunBPMService.java

@@ -0,0 +1,62 @@
+package com.ruoyi.execution.produce.dispersed.service;
+
+
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import java.util.Map;
+
+/**
+ * 执行流程接口
+ * 作用: 仅为一个标识接口,实现类可以直接被注入到流程执行引擎。
+ *
+ * @author hzh
+ */
+public interface IRunBPMService {
+
+    /**
+     * 前置验证节点
+     *
+     * @param executionFlowKey 执行流程key
+     * @param executionNodeKey 执行节点key
+     * @param executionMap     其他执行参数
+     * @return
+     */
+    AjaxResult preValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);
+
+
+    /**
+     * 节点执行流程
+     *
+     * @param executionFlowKey 执行流程key
+     * @param executionNodeKey 执行节点key
+     * @param executionMap     其他执行参数
+     * @return
+     */
+    AjaxResult executeNode(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);
+
+    /**
+     * 后置验证节点
+     *
+     * @param executionFlowKey 执行流程key
+     * @param executionNodeKey 执行节点key
+     * @param executionMap     其他执行参数
+     * @return
+     */
+    AjaxResult afterValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap);
+
+    /**
+     * 验证脚本bean是否存在 在流程执行前会验证当前流程所绑定的节点脚本等
+     * 或其他验证使用
+     *
+     * @return
+     */
+    boolean isVerificationMethod();
+
+    /**
+     * 用来清理prototype作用域bean 因spring不会帮助清理
+     * 注:定义成prototype类型的bean,可以避免并发的操作。applicationContext.getBean() 每次都会返回一个新的实例
+     */
+    boolean preDestroy();
+
+
+}

+ 52 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/IScriptService.java

@@ -0,0 +1,52 @@
+package com.ruoyi.execution.produce.dispersed.service;
+
+/**
+ * 脚本接口
+ * 作用: 仅为一个标识接口,实现类可以直接被注入到脚本执行引擎,进行计算。
+ * 参数: 一般采用map形式传输参数,例如表名、参数、条件等等
+ *
+ * @author hzh
+ */
+public interface IScriptService<J> {
+
+    /**
+     * 执行脚本前验证
+     *
+     * @param parameter
+     * @return
+     */
+    J preExecutionScript(J parameter);
+
+    /**
+     * 执行脚本
+     *
+     * @param parameter
+     * @return
+     */
+    J ExecutionScript(J parameter);
+
+    /**
+     * 执行脚本后验证
+     *
+     * @param parameter
+     * @return
+     */
+    J afterExecutionScript(J parameter);
+
+    /**
+     * 验证脚本bean是否存在 在流程执行前会验证当前流程所绑定的节点脚本等
+     * 或其他验证使用
+     *
+     * @return
+     */
+    boolean isVerificationMethod();
+
+    /**
+     * 用来清理prototype作用域bean 因spring不会帮助清理
+     * 注:定义成prototype类型的bean,可以避免并发的操作。applicationContext.getBean() 每次都会返回一个新的实例
+     *
+     * @return
+     */
+    boolean preDestroy();
+
+}

+ 93 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/BpmExecuteNodeMiddleServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.execution.produce.dispersed.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteNodeMiddleMapper;
+import com.ruoyi.system.entity.BpmExecuteNodeMiddle;
+import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteNodeMiddleService;
+
+/**
+ * 执行流程用户、节点关联脚本中间Service业务层处理
+ * 
+ * @author hzh
+ * @date 2023-11-01
+ */
+@Service
+public class BpmExecuteNodeMiddleServiceImpl implements IBpmExecuteNodeMiddleService 
+{
+    @Autowired
+    private BpmExecuteNodeMiddleMapper bpmExecuteNodeMiddleMapper;
+
+    /**
+     * 查询执行流程用户、节点关联脚本中间
+     * 
+     * @param id 执行流程用户、节点关联脚本中间主键
+     * @return 执行流程用户、节点关联脚本中间
+     */
+    @Override
+    public BpmExecuteNodeMiddle selectBpmExecuteNodeMiddleById(Long id)
+    {
+        return bpmExecuteNodeMiddleMapper.selectBpmExecuteNodeMiddleById(id);
+    }
+
+    /**
+     * 查询执行流程用户、节点关联脚本中间列表
+     * 
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 执行流程用户、节点关联脚本中间
+     */
+    @Override
+    public List<BpmExecuteNodeMiddle> selectBpmExecuteNodeMiddleList(BpmExecuteNodeMiddle bpmExecuteNodeMiddle)
+    {
+        return bpmExecuteNodeMiddleMapper.selectBpmExecuteNodeMiddleList(bpmExecuteNodeMiddle);
+    }
+
+    /**
+     * 新增执行流程用户、节点关联脚本中间
+     * 
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 结果
+     */
+    @Override
+    public int insertBpmExecuteNodeMiddle(BpmExecuteNodeMiddle bpmExecuteNodeMiddle)
+    {
+        return bpmExecuteNodeMiddleMapper.insertBpmExecuteNodeMiddle(bpmExecuteNodeMiddle);
+    }
+
+    /**
+     * 修改执行流程用户、节点关联脚本中间
+     * 
+     * @param bpmExecuteNodeMiddle 执行流程用户、节点关联脚本中间
+     * @return 结果
+     */
+    @Override
+    public int updateBpmExecuteNodeMiddle(BpmExecuteNodeMiddle bpmExecuteNodeMiddle)
+    {
+        return bpmExecuteNodeMiddleMapper.updateBpmExecuteNodeMiddle(bpmExecuteNodeMiddle);
+    }
+
+    /**
+     * 批量删除执行流程用户、节点关联脚本中间
+     * 
+     * @param ids 需要删除的执行流程用户、节点关联脚本中间主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBpmExecuteNodeMiddleByIds(Long[] ids)
+    {
+        return bpmExecuteNodeMiddleMapper.deleteBpmExecuteNodeMiddleByIds(ids);
+    }
+
+    /**
+     * 删除执行流程用户、节点关联脚本中间信息
+     * 
+     * @param id 执行流程用户、节点关联脚本中间主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBpmExecuteNodeMiddleById(Long id)
+    {
+        return bpmExecuteNodeMiddleMapper.deleteBpmExecuteNodeMiddleById(id);
+    }
+}

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

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

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

@@ -0,0 +1,256 @@
+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.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 org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteProcessService;
+
+/**
+ * 流程执行任务Service业务层处理
+ *
+ * @author hzh
+ * @date 2023-11-01
+ */
+@Service
+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;
+
+    /**
+     * 查询流程执行任务
+     *
+     * @param id 流程执行任务主键
+     * @return 流程执行任务
+     */
+    @Override
+    public BpmExecuteProcess selectBpmExecuteProcessById(Long id) {
+        return runBpmExecuteProcessMapper.selectBpmExecuteProcessById(id);
+    }
+
+    /**
+     * 查询流程执行任务列表
+     *
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 流程执行任务
+     */
+    @Override
+    public List<BpmExecuteProcess> selectBpmExecuteProcessList(BpmExecuteProcess bpmExecuteProcess) {
+        return runBpmExecuteProcessMapper.selectBpmExecuteProcessList(bpmExecuteProcess);
+    }
+
+    /**
+     * 新增流程执行任务
+     *
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 结果
+     */
+    @Override
+    public int insertBpmExecuteProcess(BpmExecuteProcess bpmExecuteProcess) {
+        return runBpmExecuteProcessMapper.insertBpmExecuteProcess(bpmExecuteProcess);
+    }
+
+    /**
+     * 修改流程执行任务
+     *
+     * @param bpmExecuteProcess 流程执行任务
+     * @return 结果
+     */
+    @Override
+    public int updateBpmExecuteProcess(BpmExecuteProcess bpmExecuteProcess) {
+        return runBpmExecuteProcessMapper.updateBpmExecuteProcess(bpmExecuteProcess);
+    }
+
+    /**
+     * 批量删除流程执行任务
+     *
+     * @param ids 需要删除的流程执行任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBpmExecuteProcessByIds(Long[] ids) {
+        return runBpmExecuteProcessMapper.deleteBpmExecuteProcessByIds(ids);
+    }
+
+    /**
+     * 删除流程执行任务信息
+     *
+     * @param id 流程执行任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBpmExecuteProcessById(Long id) {
+        return runBpmExecuteProcessMapper.deleteBpmExecuteProcessById(id);
+    }
+
+    /**
+     * 共通投产流程接口
+     *
+     * @param intoProduction 预执行流程任务实体
+     * @return
+     */
+    @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();
+    }
+}

+ 8 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/impl/runbpm/qwe.java

@@ -0,0 +1,8 @@
+package com.ruoyi.execution.produce.dispersed.service.impl.runbpm;
+
+/**
+ * @author hanzihang
+ * @date 2023/11/13 2:39 PM
+ */
+public class qwe {
+}

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

@@ -0,0 +1,49 @@
+package com.ruoyi.execution.produce.dispersed.service.impl.script.common;
+
+import com.ruoyi.execution.produce.dispersed.service.IScriptService;
+import com.ruoyi.system.entity.runbpm.IntoProduction;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PreDestroy;
+
+/**
+ * 公共的投产节点脚本
+ *
+ * @author hanzihang
+ * @date 2023/11/13
+ */
+@Service("CommonProductionSchedulingServiceImpl")
+@Scope("prototype")
+public class CommonProductionSchedulingServiceImpl implements IScriptService {
+
+
+    @Override
+    public Object preExecutionScript(Object parameter) {
+        return true;
+    }
+
+    @Override
+    public Object ExecutionScript(Object parameter) {
+        IntoProduction intoProduction = (IntoProduction) parameter;
+
+        return null;
+    }
+
+    @Override
+    public Object afterExecutionScript(Object parameter) {
+        return null;
+    }
+
+    @Override
+    public boolean isVerificationMethod() {
+        return true;
+    }
+
+    @Override
+    @PreDestroy
+    public boolean preDestroy() {
+        System.out.println("清理成功!");
+        return true;
+    }
+}

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

@@ -0,0 +1,17 @@
+package com.ruoyi.execution.produce.dispersed.service.impl.utils;
+
+import org.springframework.stereotype.Component;
+
+/**
+ * @author hanzihang
+ * @date 2023/11/13 4:44 PM
+ */
+
+@Component
+public class VerifyExecutionProcess {
+
+    public boolean VerifyProcessData(String processKey) {
+        return true;
+    }
+
+}

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

@@ -0,0 +1,96 @@
+package com.ruoyi.execution.produce.dispersed.service.templateimpl;
+
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.execution.produce.dispersed.service.IRunBPMService;
+import com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode;
+import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteNodeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PreDestroy;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author hanzihang
+ * @date 2023/11/3
+ * <p>
+ * 当前bean名称必填项!
+ * {
+ * @AliasFor(annotation = Component.class)
+ * String value() default "";
+ * }
+ * <p>
+ * 使用 @Scope("prototype") 注解指定了 bean 的作用域为 prototype。
+ * 这样,在每次通过 applicationContext.getBean()
+ * 获取该 bean 的实例时,都会返回一个新的实例。从而避免并发的的操作
+ */
+@Service("RunBPMImpl")
+public class RunBPMImpl implements IRunBPMService {
+
+    @Autowired
+    private IBpmExecuteNodeService bpmExecuteNodeService;
+
+    /**
+     * 前置验证节点
+     *
+     * @param executionFlowKey 执行流程key
+     * @param executionNodeKey 执行节点key
+     * @param executionMap     其他执行参数
+     * @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);
+    }
+
+    /**
+     * 节点执行流程
+     *
+     * @param executionFlowKey 执行流程key
+     * @param executionNodeKey 执行节点key
+     * @param executionMap     其他执行参数
+     * @return
+     */
+    @Override
+    public AjaxResult executeNode(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap) {
+        return null;
+    }
+
+    /**
+     * 后置验证节点
+     *
+     * @param executionFlowKey 执行流程key
+     * @param executionNodeKey 执行节点key
+     * @param executionMap     其他执行参数
+     * @return
+     * @PreDestroy 注解用来清理当前bean。
+     * spring不会清理prototype作用域的bean。
+     */
+    @Override
+    public AjaxResult afterValidation(String executionFlowKey, String executionNodeKey, Map<String, Object> executionMap) {
+        return null;
+    }
+
+    /**
+     * 需要手动修改返回为true!当前实现类中不得写逻辑代码!
+     * 此操作只为验证当前实现类是否存在!
+     *
+     * @return
+     */
+    @Override
+    public boolean isVerificationMethod() {
+        return true;
+    }
+
+    @Override
+    @PreDestroy
+    public boolean preDestroy() {
+        // 执行清理操作
+        System.out.println("清理成功!");
+        return true;
+    }
+}

+ 74 - 0
ruoyi-process-execution/src/main/java/com/ruoyi/execution/produce/dispersed/service/templateimpl/ScriptImpl.java

@@ -0,0 +1,74 @@
+package com.ruoyi.execution.produce.dispersed.service.templateimpl;
+
+import com.ruoyi.execution.produce.dispersed.service.IScriptService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PreDestroy;
+
+/**
+ * 脚本实现类模版
+ *
+ * @author hzh
+ */
+
+// 当前bean名称必填项!
+// {
+//  @AliasFor(annotation = Component.class)
+//  String value() default "";
+//  }
+@Service("ScriptImpl")
+public class ScriptImpl implements IScriptService {
+
+    /**
+     * 当前脚本前置验证
+     *
+     * @param parameter
+     * @return
+     */
+    @Override
+    public Object preExecutionScript(Object parameter) {
+        return null;
+    }
+
+    /**
+     * 当前脚本执行逻辑
+     *
+     * @param parameter
+     * @return
+     */
+    @Override
+    public Object ExecutionScript(Object parameter) {
+        return null;
+    }
+
+    /**
+     * 当前脚本后置验证
+     *
+     * @param parameter
+     * @return
+     */
+    @Override
+    public Object afterExecutionScript(Object parameter) {
+        return null;
+    }
+
+    /**
+     * 需要手动修改返回为true!当前实现类中不得写逻辑代码!
+     * 此操作只为验证当前实现类是否存在!
+     *
+     * @return
+     */
+    @Override
+    public boolean isVerificationMethod() {
+        return true;
+    }
+
+    @Override
+    @PreDestroy
+    public boolean preDestroy() {
+        // 执行清理操作
+        System.out.println("清理成功!");
+        return true;
+    }
+
+}

+ 208 - 0
ruoyi-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteNodeMapper.xml

@@ -0,0 +1,208 @@
+<?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">
+<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"    />
+    </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
+    </sql>
+
+    <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>
+    </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 into bpm_execute_node
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskProcessKey != null">task_process_key,</if>
+            <if test="taskNodeKey != null">task_node_key,</if>
+            <if test="taskNodeName != null">task_node_name,</if>
+            <if test="taskNodeFormKey != null">task_node_form_key,</if>
+            <if test="taskNodeType != null">task_node_type,</if>
+            <if test="taskNodeBefore != null">task_node_before,</if>
+            <if test="taskNodeAfter != null">task_node_after,</if>
+            <if test="taskNodeRolePermission != null">task_node_role_permission,</if>
+            <if test="taskRemark != null">task_remark,</if>
+            <if test="taskNodeNumber != null">task_node_number,</if>
+            <if test="taskNodeWeight != null">task_node_weight,</if>
+            <if test="taskNodeState != null">task_node_state,</if>
+            <if test="taskPriority != null">task_priority,</if>
+            <if test="task1 != null">task1,</if>
+            <if test="task2 != null">task2,</if>
+            <if test="task3 != null">task3,</if>
+            <if test="task4 != null">task4,</if>
+            <if test="task5 != null">task5,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createById != null">create_by_id,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskProcessKey != null">#{taskProcessKey},</if>
+            <if test="taskNodeKey != null">#{taskNodeKey},</if>
+            <if test="taskNodeName != null">#{taskNodeName},</if>
+            <if test="taskNodeFormKey != null">#{taskNodeFormKey},</if>
+            <if test="taskNodeType != null">#{taskNodeType},</if>
+            <if test="taskNodeBefore != null">#{taskNodeBefore},</if>
+            <if test="taskNodeAfter != null">#{taskNodeAfter},</if>
+            <if test="taskNodeRolePermission != null">#{taskNodeRolePermission},</if>
+            <if test="taskRemark != null">#{taskRemark},</if>
+            <if test="taskNodeNumber != null">#{taskNodeNumber},</if>
+            <if test="taskNodeWeight != null">#{taskNodeWeight},</if>
+            <if test="taskNodeState != null">#{taskNodeState},</if>
+            <if test="taskPriority != null">#{taskPriority},</if>
+            <if test="task1 != null">#{task1},</if>
+            <if test="task2 != null">#{task2},</if>
+            <if test="task3 != null">#{task3},</if>
+            <if test="task4 != null">#{task4},</if>
+            <if test="task5 != null">#{task5},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createById != null">#{createById},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+         </trim>
+    </insert>
+
+    <insert id="insertBpmExecuteNodeList" parameterType="java.util.List">
+        insert into bpm_execute_node (
+        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 )values
+        <foreach collection="list" item="item" index="index" separator=",">
+            (#{item.taskProcessKey},
+            #{item.taskNodeKey},
+            #{item.taskNodeName},
+            #{item.taskNodeFormKey},
+            #{item.taskNodeType},
+            #{item.taskNodeBefore},
+            #{item.taskNodeAfter},
+            #{item.taskNodeRolePermission},
+            #{item.taskRemark},
+            #{item.taskNodeNumber},
+            #{item.taskNodeWeight},
+            #{item.taskNodeState},
+            #{item.taskPriority},
+            #{item.task1},
+            #{item.task2},
+            #{item.task3},
+            #{item.task4},
+            #{item.task5},
+            #{item.delFlag},
+            #{item.createById},
+            #{item.createBy},
+            #{item.createTime})
+        </foreach>
+    </insert>
+
+    <update id="updateBpmExecuteNode" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNode">
+        update bpm_execute_node
+        <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 id = #{id}
+    </update>
+
+    <delete id="deleteBpmExecuteNodeById" parameterType="Long">
+        delete from bpm_execute_node where id = #{id}
+    </delete>
+
+    <delete id="deleteBpmExecuteNodeByIds" parameterType="String">
+        delete from bpm_execute_node where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 98 - 0
ruoyi-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteNodeMiddleMapper.xml

@@ -0,0 +1,98 @@
+<?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">
+<mapper namespace="com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteNodeMiddleMapper">
+    
+    <resultMap type="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNodeMiddle" id="BpmExecuteNodeMiddleResult">
+        <result property="id"    column="id"    />
+        <result property="taskNodeKey"    column="task_node_key"    />
+        <result property="taskVirtuallyRole"    column="task_virtually_role"    />
+        <result property="taskRealRole"    column="task_real_role"    />
+        <result property="taskExecuteUserNo"    column="task_execute_user_no"    />
+        <result property="taskArtificialScriptKey"    column="task_artificial_script_key"    />
+        <result property="taskAutomaticScriptTriggerType"    column="task_automatic_script_trigger_type"    />
+    </resultMap>
+
+    <sql id="selectBpmExecuteNodeMiddleVo">
+        select id, task_node_key, task_virtually_role, task_real_role, task_execute_user_no, task_artificial_script_key, task_automatic_script_trigger_type from bpm_execute_node_middle
+    </sql>
+
+    <select id="selectBpmExecuteNodeMiddleList" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNodeMiddle" resultMap="BpmExecuteNodeMiddleResult">
+        <include refid="selectBpmExecuteNodeMiddleVo"/>
+        <where>  
+            <if test="taskNodeKey != null  and taskNodeKey != ''"> and task_node_key = #{taskNodeKey}</if>
+            <if test="taskVirtuallyRole != null  and taskVirtuallyRole != ''"> and task_virtually_role = #{taskVirtuallyRole}</if>
+            <if test="taskRealRole != null  and taskRealRole != ''"> and task_real_role = #{taskRealRole}</if>
+            <if test="taskExecuteUserNo != null  and taskExecuteUserNo != ''"> and task_execute_user_no = #{taskExecuteUserNo}</if>
+            <if test="taskArtificialScriptKey != null  and taskArtificialScriptKey != ''"> and task_artificial_script_key = #{taskArtificialScriptKey}</if>
+            <if test="taskAutomaticScriptTriggerType != null  and taskAutomaticScriptTriggerType != ''"> and task_automatic_script_trigger_type = #{taskAutomaticScriptTriggerType}</if>
+        </where>
+    </select>
+    
+    <select id="selectBpmExecuteNodeMiddleById" parameterType="Long" resultMap="BpmExecuteNodeMiddleResult">
+        <include refid="selectBpmExecuteNodeMiddleVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertBpmExecuteNodeMiddle" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNodeMiddle" useGeneratedKeys="true" keyProperty="id">
+        insert into bpm_execute_node_middle
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskNodeKey != null">task_node_key,</if>
+            <if test="taskVirtuallyRole != null">task_virtually_role,</if>
+            <if test="taskRealRole != null">task_real_role,</if>
+            <if test="taskExecuteUserNo != null">task_execute_user_no,</if>
+            <if test="taskArtificialScriptKey != null">task_artificial_script_key,</if>
+            <if test="taskAutomaticScriptTriggerType != null">task_automatic_script_trigger_type,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskNodeKey != null">#{taskNodeKey},</if>
+            <if test="taskVirtuallyRole != null">#{taskVirtuallyRole},</if>
+            <if test="taskRealRole != null">#{taskRealRole},</if>
+            <if test="taskExecuteUserNo != null">#{taskExecuteUserNo},</if>
+            <if test="taskArtificialScriptKey != null">#{taskArtificialScriptKey},</if>
+            <if test="taskAutomaticScriptTriggerType != null">#{taskAutomaticScriptTriggerType},</if>
+         </trim>
+    </insert>
+   <insert id="insertBpmExecuteNodeMiddleList" parameterType="java.util.List">
+       insert into bpm_execute_node_middle(task_node_key,
+       task_virtually_role,
+       task_real_role,
+       task_execute_user_no,
+       task_artificial_script_key,
+       task_automatic_script_trigger_type)
+       values
+       <foreach collection="list" item="item" index="index" separator=",">
+           (#{item.taskNodeKey},
+           #{item.taskVirtuallyRole},
+           #{item.taskRealRole},
+           #{item.taskExecuteUserNo},
+           #{item.taskArtificialScriptKey},
+           #{item.taskAutomaticScriptTriggerType})
+       </foreach>
+   </insert>
+
+    <update id="updateBpmExecuteNodeMiddle" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteNodeMiddle">
+        update bpm_execute_node_middle
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskNodeKey != null">task_node_key = #{taskNodeKey},</if>
+            <if test="taskVirtuallyRole != null">task_virtually_role = #{taskVirtuallyRole},</if>
+            <if test="taskRealRole != null">task_real_role = #{taskRealRole},</if>
+            <if test="taskExecuteUserNo != null">task_execute_user_no = #{taskExecuteUserNo},</if>
+            <if test="taskArtificialScriptKey != null">task_artificial_script_key = #{taskArtificialScriptKey},</if>
+            <if test="taskAutomaticScriptTriggerType != null">task_automatic_script_trigger_type = #{taskAutomaticScriptTriggerType},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBpmExecuteNodeMiddleById" parameterType="Long">
+        delete from bpm_execute_node_middle where id = #{id}
+    </delete>
+
+    <delete id="deleteBpmExecuteNodeMiddleByIds" parameterType="String">
+        delete from bpm_execute_node_middle where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 99 - 0
ruoyi-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteProcessMapper.xml

@@ -0,0 +1,99 @@
+<?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">
+<mapper namespace="com.ruoyi.execution.produce.dispersed.mapper.BpmExecuteProcessMapper">
+    
+    <resultMap type="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess" id="BpmExecuteProcessResult">
+        <result property="id"    column="id"    />
+        <result property="taskKey"    column="task_key"    />
+        <result property="taskName"    column="task_name"    />
+        <result property="taskNodeKey"    column="task_node_key"    />
+        <result property="taskProcessKey"    column="task_process_key"    />
+        <result property="taskProcessXmlContent"    column="task_process_xml_content"    />
+        <result property="taskProcessState"    column="task_process_state"    />
+        <result property="taskProcessNote"    column="task_process_note"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="remark"    column="remark"    />
+        <result property="taskProcessType"    column="task_process_type"    />
+    </resultMap>
+
+    <sql id="selectBpmExecuteProcessVo">
+        select id, task_key, task_name, task_node_key, task_process_key, task_process_xml_content, task_process_state, task_process_note, del_flag, remark, task_process_type from bpm_execute_process
+    </sql>
+
+    <select id="selectBpmExecuteProcessList" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess" resultMap="BpmExecuteProcessResult">
+        <include refid="selectBpmExecuteProcessVo"/>
+        <where>  
+            <if test="taskKey != null  and taskKey != ''"> and task_key = #{taskKey}</if>
+            <if test="taskName != null  and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
+            <if test="taskNodeKey != null  and taskNodeKey != ''"> and task_node_key = #{taskNodeKey}</if>
+            <if test="taskProcessKey != null  and taskProcessKey != ''"> and task_process_key = #{taskProcessKey}</if>
+            <if test="taskProcessXmlContent != null  and taskProcessXmlContent != ''"> and task_process_xml_content = #{taskProcessXmlContent}</if>
+            <if test="taskProcessState != null "> and task_process_state = #{taskProcessState}</if>
+            <if test="taskProcessNote != null  and taskProcessNote != ''"> and task_process_note = #{taskProcessNote}</if>
+            <if test="taskProcessType != null  and taskProcessType != ''"> and task_process_type = #{taskProcessType}</if>
+        </where>
+    </select>
+    
+    <select id="selectBpmExecuteProcessById" parameterType="Long" resultMap="BpmExecuteProcessResult">
+        <include refid="selectBpmExecuteProcessVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertBpmExecuteProcess" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess" useGeneratedKeys="true" keyProperty="id">
+        insert into bpm_execute_process
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="taskKey != null">task_key,</if>
+            <if test="taskName != null">task_name,</if>
+            <if test="taskNodeKey != null">task_node_key,</if>
+            <if test="taskProcessKey != null">task_process_key,</if>
+            <if test="taskProcessXmlContent != null">task_process_xml_content,</if>
+            <if test="taskProcessState != null">task_process_state,</if>
+            <if test="taskProcessNote != null">task_process_note,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="remark != null">remark,</if>
+            <if test="taskProcessType != null">task_process_type,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="taskKey != null">#{taskKey},</if>
+            <if test="taskName != null">#{taskName},</if>
+            <if test="taskNodeKey != null">#{taskNodeKey},</if>
+            <if test="taskProcessKey != null">#{taskProcessKey},</if>
+            <if test="taskProcessXmlContent != null">#{taskProcessXmlContent},</if>
+            <if test="taskProcessState != null">#{taskProcessState},</if>
+            <if test="taskProcessNote != null">#{taskProcessNote},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="taskProcessType != null">#{taskProcessType},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBpmExecuteProcess" parameterType="com.ruoyi.execution.produce.dispersed.enetity.BpmExecuteProcess">
+        update bpm_execute_process
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="taskKey != null">task_key = #{taskKey},</if>
+            <if test="taskName != null">task_name = #{taskName},</if>
+            <if test="taskNodeKey != null">task_node_key = #{taskNodeKey},</if>
+            <if test="taskProcessKey != null">task_process_key = #{taskProcessKey},</if>
+            <if test="taskProcessXmlContent != null">task_process_xml_content = #{taskProcessXmlContent},</if>
+            <if test="taskProcessState != null">task_process_state = #{taskProcessState},</if>
+            <if test="taskProcessNote != null">task_process_note = #{taskProcessNote},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="taskProcessType != null">task_process_type = #{taskProcessType},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBpmExecuteProcessById" parameterType="Long">
+        delete from bpm_execute_process where id = #{id}
+    </delete>
+
+    <delete id="deleteBpmExecuteProcessByIds" parameterType="String">
+        delete from bpm_execute_process where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmNodeHandleUser.java

@@ -8,7 +8,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
 /**
  * 节点处理用户对象 bpm_node_handle_user
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 public class BpmNodeHandleUser extends BaseEntity {

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmNodeScript.java

@@ -8,7 +8,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
 /**
  * 流程节点脚本对象 bpm_node_script
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 public class BpmNodeScript extends BaseEntity
@@ -115,7 +115,7 @@ public class BpmNodeScript extends BaseEntity
 
     public String getDelFlag() 
     {
-        return delFlag;
+        return delFlag.isEmpty() ? "0" : delFlag;
     }
 
     @Override

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmNodeScriptRelevance.java

@@ -8,7 +8,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
 /**
  * 流程节点脚本关联对象 bpm_node_script_relevance
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 public class BpmNodeScriptRelevance extends BaseEntity {

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmProcess.java

@@ -13,7 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
 /**
  * 流程定义对象 bpm_process
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-10
  */
 public class BpmProcess extends BaseEntity {
@@ -238,7 +238,7 @@ public class BpmProcess extends BaseEntity {
     }
 
     public String getDelFlag() {
-        return delFlag;
+        return delFlag.isEmpty() ? "0" : delFlag;
     }
 
     public void setDelFlag(String delFlag) {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/BpmProcessConfiguration.java

@@ -199,7 +199,7 @@ public class BpmProcessConfiguration extends BaseEntity {
     }
 
     public String getDelFlag() {
-        return delFlag;
+        return delFlag.isEmpty() ? "0" : delFlag;
     }
 
     public void setDelFlag(String delFlag) {

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/entity/DragForm.java

@@ -9,7 +9,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
  * 动态表单
  * 对象 drag_form
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-12
  */
 public class DragForm extends BaseEntity {
@@ -204,7 +204,7 @@ public class DragForm extends BaseEntity {
     }
 
     public String getDelFlag() {
-        return delFlag;
+        return delFlag.isEmpty() ? "0" : delFlag;
     }
 
     public void setDelFlag(String delFlag) {

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/entity/DragTable.java

@@ -8,7 +8,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
 /**
  * 动态表格对象 drag_table
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 public class DragTable extends BaseEntity {
@@ -215,7 +215,7 @@ public class DragTable extends BaseEntity {
     }
 
     public String getDelFlag() {
-        return delFlag;
+        return delFlag.isEmpty() ? "0" : delFlag;
     }
 
     public void setDelFlag(String delFlag) {

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/entity/DragTableCondition.java

@@ -11,7 +11,7 @@ import java.util.Map;
 /**
  * 动态表格条件对象 drag_table_condition
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 public class DragTableCondition extends BaseEntity {
@@ -284,7 +284,7 @@ public class DragTableCondition extends BaseEntity {
     }
 
     public String getDelFlag() {
-        return delFlag;
+        return delFlag.isEmpty() ? "0" : delFlag;
     }
 
     public List<Map<String, Object>> getDropDownList() {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/DragTableForm.java

@@ -3,7 +3,7 @@ package com.ruoyi.system.entity;
 /**
  * 动态表格表达关联表 drag_table_form
  *
- * @author ruoyi
+ * @author hzh
  */
 public class DragTableForm {
 

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/entity/TableSql.java

@@ -8,7 +8,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
 /**
  * table 联合查询sql存储对象 table_sql
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-19
  */
 public class TableSql extends BaseEntity {
@@ -129,7 +129,7 @@ public class TableSql extends BaseEntity {
     }
 
     public String getDelFlag() {
-        return delFlag;
+        return delFlag.isEmpty() ? "0" : delFlag;
     }
 
     public void setDelFlag(String delFlag) {

+ 67 - 0
ruoyi-system/src/main/java/com/ruoyi/system/entity/runbpm/BpmUserScriptVo.java

@@ -0,0 +1,67 @@
+package com.ruoyi.system.entity.runbpm;
+
+import com.ruoyi.system.entity.BpmNodeHandleUser;
+import com.ruoyi.system.entity.BpmNodeScriptRelevance;
+
+import java.util.List;
+
+/**
+ * 当前节点的执行用户以及需要执行的脚本
+ *
+ * @author hanzihang
+ * @date 2023/11/2 4:38
+ */
+public class BpmUserScriptVo {
+
+    // 当前节点标识
+    private String nodeKey;
+
+    // 当前节点的执行用户
+    private List<BpmNodeHandleUser> bpmNodeHandleUserList;
+
+    // 当前节点绑定的脚本
+    private List<BpmNodeScriptRelevance> bpmNodeScriptRelevanceList;
+
+    public BpmUserScriptVo() {
+    }
+
+    public BpmUserScriptVo(String nodeKey, List<BpmNodeHandleUser> bpmNodeHandleUserList, List<BpmNodeScriptRelevance> bpmNodeScriptRelevanceList) {
+        this.nodeKey = nodeKey;
+        this.bpmNodeHandleUserList = bpmNodeHandleUserList;
+        this.bpmNodeScriptRelevanceList = bpmNodeScriptRelevanceList;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer("BpmUserScript{");
+        sb.append("nodeKey='").append(nodeKey).append('\'');
+        sb.append(", bpmNodeHandleUserList=").append(bpmNodeHandleUserList);
+        sb.append(", bpmNodeScriptRelevanceList=").append(bpmNodeScriptRelevanceList);
+        sb.append('}');
+        return sb.toString();
+    }
+
+    public String getNodeKey() {
+        return nodeKey;
+    }
+
+    public void setNodeKey(String nodeKey) {
+        this.nodeKey = nodeKey;
+    }
+
+    public List<BpmNodeHandleUser> getBpmNodeHandleUserList() {
+        return bpmNodeHandleUserList;
+    }
+
+    public void setBpmNodeHandleUserList(List<BpmNodeHandleUser> bpmNodeHandleUserList) {
+        this.bpmNodeHandleUserList = bpmNodeHandleUserList;
+    }
+
+    public List<BpmNodeScriptRelevance> getBpmNodeScriptRelevanceList() {
+        return bpmNodeScriptRelevanceList;
+    }
+
+    public void setBpmNodeScriptRelevanceList(List<BpmNodeScriptRelevance> bpmNodeScriptRelevanceList) {
+        this.bpmNodeScriptRelevanceList = bpmNodeScriptRelevanceList;
+    }
+}

+ 89 - 0
ruoyi-system/src/main/java/com/ruoyi/system/entity/runbpm/IntoProduction.java

@@ -0,0 +1,89 @@
+package com.ruoyi.system.entity.runbpm;
+
+
+/**
+ * 共通投产实体类
+ *
+ * @author hanzihang
+ * @date 2023/11/1
+ */
+public class IntoProduction {
+
+    // 流程别名
+    private String taskProcessKey;
+
+    // 投产表名
+    private String tableName;
+
+    // 默认 state
+    private String statusKey;
+
+    // 修改状态值
+    private String statusVal;
+
+    // 当前表主键值
+    private String guid;
+
+    public IntoProduction() {
+    }
+
+    public IntoProduction(String taskProcessKey, String tableName, String statusKey, String statusVal, String guid) {
+        this.taskProcessKey = taskProcessKey;
+        this.tableName = tableName;
+        this.statusKey = statusKey;
+        this.statusVal = statusVal;
+        this.guid = guid;
+    }
+
+    public String getTaskProcessKey() {
+        return taskProcessKey;
+    }
+
+    public void setTaskProcessKey(String taskProcessKey) {
+        this.taskProcessKey = taskProcessKey;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public String getStatusKey() {
+        return statusKey;
+    }
+
+    public void setStatusKey(String statusKey) {
+        this.statusKey = statusKey;
+    }
+
+    public String getStatusVal() {
+        return statusVal;
+    }
+
+    public void setStatusVal(String statusVal) {
+        this.statusVal = statusVal;
+    }
+
+    public String getGuid() {
+        return guid;
+    }
+
+    public void setGuid(String guid) {
+        this.guid = guid;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer("IntoProduction{");
+        sb.append("taskProcessKey='").append(taskProcessKey).append('\'');
+        sb.append(", tableName='").append(tableName).append('\'');
+        sb.append(", statusKey='").append(statusKey).append('\'');
+        sb.append(", statusVal='").append(statusVal).append('\'');
+        sb.append(", guid='").append(guid).append('\'');
+        sb.append('}');
+        return sb.toString();
+    }
+}

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/vo/DragTableVo.java

@@ -11,7 +11,7 @@ import java.util.Map;
 /**
  * 动态表格对象 drag_table
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 public class DragTableVo {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/vo/MetaVo.java

@@ -5,7 +5,7 @@ import com.ruoyi.common.utils.StringUtils;
 /**
  * 路由显示信息
  * 
- * @author ruoyi
+ * @author hzh
  */
 public class MetaVo
 {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/entity/vo/RouterVo.java

@@ -7,7 +7,7 @@ import java.util.List;
 /**
  * 路由配置信息
  * 
- * @author ruoyi
+ * @author hzh
  */
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
 public class RouterVo

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

@@ -6,7 +6,7 @@ import com.ruoyi.system.entity.BpmNodeHandleUser;
 /**
  * 节点处理用户Mapper接口
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 public interface BpmNodeHandleUserMapper 

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

@@ -6,7 +6,7 @@ import com.ruoyi.system.entity.BpmNodeScriptRelevance;
 /**
  * 流程节点脚本关联Mapper接口
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 public interface BpmNodeScriptRelevanceMapper 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/BpmProcessMapper.java

@@ -7,7 +7,7 @@ import java.util.List;
 /**
  * 流程定义Mapper接口
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-10
  */
 public interface BpmProcessMapper 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DragFormMapper.java

@@ -8,7 +8,7 @@ import java.util.List;
  * 动态表单
  * Mapper接口
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-12
  */
 public interface DragFormMapper {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DragTableConditionMapper.java

@@ -11,7 +11,7 @@ import java.util.Set;
 /**
  * 动态表格条件Mapper接口
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 public interface DragTableConditionMapper 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DragTableMapper.java

@@ -8,7 +8,7 @@ import java.util.List;
 /**
  * 动态表格Mapper接口
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 public interface DragTableMapper 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java

@@ -8,7 +8,7 @@ import java.util.List;
 /**
  * 字典表 数据层
  * 
- * @author ruoyi
+ * @author hzh
  */
 public interface SysDictDataMapper
 {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java

@@ -7,7 +7,7 @@ import java.util.List;
 /**
  * 字典表 数据层
  * 
- * @author ruoyi
+ * @author hzh
  */
 public interface SysDictTypeMapper
 {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TableSqlMapper.java

@@ -8,7 +8,7 @@ import java.util.List;
 /**
  * table 联合查询sql存储Mapper接口
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-19
  */
 public interface TableSqlMapper {

+ 0 - 16
ruoyi-system/src/main/java/com/ruoyi/system/netfservice/netfService.java

@@ -1,16 +0,0 @@
-package com.ruoyi.system.netfservice;
-
-import com.ruoyi.system.entity.BpmProcess;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author hanzihang
- * @date 2023/10/25 11:24 AM
- */
-public interface netfService {
-
-    List<BpmProcess> handleNodeException(Map<String, Object> map);
-
-}

+ 0 - 24
ruoyi-system/src/main/java/com/ruoyi/system/netfservice/netfServiceImpl.java

@@ -1,24 +0,0 @@
-package com.ruoyi.system.netfservice;
-
-import com.ruoyi.system.entity.BpmProcess;
-import com.ruoyi.system.mapper.BpmProcessConfigurationMapper;
-import com.ruoyi.system.mapper.BpmProcessMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Map;
- 
-@Service
-public class netfServiceImpl implements netfService {
-    @Autowired
-    private BpmProcessConfigurationMapper bpmProcessConfigurationMapper;
-
-    @Autowired
-    private BpmProcessMapper bpmProcessMapper;
-
-    public List<BpmProcess> handleNodeException(Map<String, Object> map) {
- 
-System.out.println("测试113");return bpmProcessMapper.selectBpmProcessList(null);    }
-}
- 

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

@@ -6,7 +6,7 @@ import com.ruoyi.system.entity.BpmNodeHandleUser;
 /**
  * 节点处理用户Service接口
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 public interface IBpmNodeHandleUserService 

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

@@ -7,7 +7,7 @@ import com.ruoyi.system.entity.BpmNodeScriptRelevance;
 /**
  * 流程节点脚本关联Service接口
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 public interface IBpmNodeScriptRelevanceService {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/IDragTableConditionService.java

@@ -8,7 +8,7 @@ import java.util.List;
 /**
  * 动态表格条件Service接口
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 public interface IDragTableConditionService 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/IDragTableService.java

@@ -9,7 +9,7 @@ import java.util.List;
 /**
  * 动态表格Service接口
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 public interface IDragTableService 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java

@@ -7,7 +7,7 @@ import java.util.List;
 /**
  * 字典 业务层
  * 
- * @author ruoyi
+ * @author hzh
  */
 public interface ISysDictDataService
 {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java

@@ -8,7 +8,7 @@ import java.util.List;
 /**
  * 字典 业务层
  * 
- * @author ruoyi
+ * @author hzh
  */
 public interface ISysDictTypeService
 {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/ITableSqlService.java

@@ -8,7 +8,7 @@ import java.util.List;
 /**
  * table 联合查询sql存储Service接口
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-19
  */
 public interface ITableSqlService {

+ 2 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmNodeHandleUserServiceImpl.java

@@ -12,11 +12,12 @@ import org.springframework.transaction.annotation.Transactional;
 /**
  * 节点处理用户Service业务层处理
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 @Service
 public class BpmNodeHandleUserServiceImpl implements IBpmNodeHandleUserService {
+
     @Autowired
     private BpmNodeHandleUserMapper bpmNodeHandleUserMapper;
 

+ 3 - 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BpmNodeScriptRelevanceServiceImpl.java

@@ -12,11 +12,12 @@ import org.springframework.transaction.annotation.Transactional;
 /**
  * 流程节点脚本关联Service业务层处理
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-10-26
  */
 @Service
 public class BpmNodeScriptRelevanceServiceImpl implements IBpmNodeScriptRelevanceService {
+
     @Autowired
     private BpmNodeScriptRelevanceMapper bpmNodeScriptRelevanceMapper;
 
@@ -62,7 +63,7 @@ public class BpmNodeScriptRelevanceServiceImpl implements IBpmNodeScriptRelevanc
      */
     @Override
     public int updateBpmNodeScriptRelevance(List<BpmNodeScriptRelevance> bpmNodeScriptRelevance) {
-        bpmNodeScriptRelevance.forEach(item->{
+        bpmNodeScriptRelevance.forEach(item -> {
             bpmNodeScriptRelevanceMapper.updateBpmNodeScriptRelevance(item);
         });
         return 1;

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DragFormServiceImpl.java

@@ -25,7 +25,7 @@ import java.util.UUID;
  * 动态表单
  * Service业务层处理
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-12
  */
 @Service

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DragTableConditionServiceImpl.java

@@ -15,7 +15,7 @@ import com.ruoyi.system.service.IDragTableConditionService;
 /**
  * 动态表格条件Service业务层处理
  * 
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 @Service

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DragTableServiceImpl.java

@@ -36,7 +36,7 @@ import javax.annotation.Resource;
 /**
  * 动态表格Service业务层处理
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-31
  */
 @Service

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java

@@ -12,7 +12,7 @@ import java.util.List;
 /**
  * 字典 业务层处理
  * 
- * @author ruoyi
+ * @author hzh
  */
 @Service
 public class SysDictDataServiceImpl implements ISysDictDataService

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java

@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
 /**
  * 字典 业务层处理
  * 
- * @author ruoyi
+ * @author hzh
  */
 @Service
 public class SysDictTypeServiceImpl implements ISysDictTypeService

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TableSqlServiceImpl.java

@@ -12,7 +12,7 @@ import com.ruoyi.system.service.ITableSqlService;
 /**
  * table 联合查询sql存储Service业务层处理
  *
- * @author ruoyi
+ * @author hzh
  * @date 2023-07-19
  */
 @Service

+ 0 - 0
ruoyi-system/src/main/resources/mapper/BpmNodeHandleUserMapper.xml → ruoyi-system/src/main/resources/mapper/bpm/BpmNodeHandleUserMapper.xml


+ 0 - 0
ruoyi-system/src/main/resources/mapper/BpmNodeScriptRelevanceMapper.xml → ruoyi-system/src/main/resources/mapper/bpm/BpmNodeScriptRelevanceMapper.xml


+ 0 - 0
ruoyi-system/src/main/resources/mapper/BpmProcessConfigurationMapper.xml → ruoyi-system/src/main/resources/mapper/bpm/BpmProcessConfigurationMapper.xml


+ 0 - 0
ruoyi-system/src/main/resources/mapper/BpmProcessMapper.xml → ruoyi-system/src/main/resources/mapper/bpm/BpmProcessMapper.xml