Эх сурвалжийг харах

feat:重构下发接口传参逻辑,修改流程执行节点调用逻辑,优化管道执行查询接口,节点表单新增共通接口

韩帛霖 1 жил өмнө
parent
commit
d6796099fd
13 өөрчлөгдсөн 403 нэмэгдсэн , 122 устгасан
  1. 52 33
      zkqy-common/src/main/java/com/zkqy/common/utils/http/Sending.java
  2. 16 0
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/controller/BpmRunController.java
  3. 67 0
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/entity/runbpm/BpmRunNodeFormDateVo.java
  4. 16 4
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/entity/runbpm/BpmRunNodeFormFilterConditionsVo.java
  5. 51 51
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/runbpm/PreExecutionToolClass.java
  6. 9 6
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/runbpm/RunImplementationClass.java
  7. 4 0
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/IRunBPMService.java
  8. 39 11
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/BpmExecuteProcessServiceImpl.java
  9. 2 1
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/runbpm/hangye1/testNode/CaiGou.java
  10. 7 0
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/runbpm/hangye1/testNode/SandProductionImpl.java
  11. 42 7
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/utils/EchoNodeFormData.java
  12. 8 8
      zkqy-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteProcessMapper.xml
  13. 90 1
      zkqy-system/src/main/java/com/zkqy/system/entity/CommonEntity.java

+ 52 - 33
zkqy-common/src/main/java/com/zkqy/common/utils/http/Sending.java

@@ -8,7 +8,10 @@ import org.springframework.http.*;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Array;
 import java.lang.reflect.Field;
+import java.net.URLEncoder;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -26,50 +29,66 @@ public class Sending<T> {
     /**
      * get请求拼接参数使用
      *
-     * @param url
-     * @param obj  map类型或实体类型
-     * @return
+     * @param url 请求接口地址
+     * @param obj map类型、实体类型、单个字符作为参数、数组等等
+     * @return 拼接参数后的URL
      */
     private String appendParamsToUrl(String url, T obj) {
-        Map<String, Object> params = new HashMap<>();
-        Field[] fields = obj.getClass().getDeclaredFields();
+        if (obj == null) {
+            return url;
+        }
 
-        for (Field field : fields) {
-            field.setAccessible(true);
-            try {
+        if (obj.getClass().isArray()) {
+            // 如果是数组类型,处理数组参数
+            int length = Array.getLength(obj);
+            for (int i = 0; i < length; i++) {
+                Object arrayElement = Array.get(obj, i);
+                url = appendParamToUrl(url, "param" + i, arrayElement);
+            }
+        } else if (obj instanceof Map) {
+            // 如果是Map类型,处理Map参数
+            Map<String, Object> paramMap = (Map<String, Object>) obj;
+            for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
+                String key = entry.getKey();
+                Object value = entry.getValue();
+                url = appendParamToUrl(url, key, value);
+            }
+        } else {
+            // 如果是其他类型,假设是实体类型,处理实体参数
+            Class<?> clazz = obj.getClass();
+            Field[] fields = clazz.getDeclaredFields();
+            for (Field field : fields) {
+                field.setAccessible(true);
                 String fieldName = field.getName();
-                Object fieldValue = field.get(obj);
-
-                if (fieldValue != null) {
-                    if (field.getType() == Map.class) {
-                        // 如果字段是 Map 类型,将其拼接到 URL
-                        Map<String, Object> mapFieldValue = (Map<String, Object>) fieldValue;
-                        for (Map.Entry<String, Object> entry : mapFieldValue.entrySet()) {
-                            params.put(fieldName + "[" + entry.getKey() + "]", entry.getValue());
-                        }
-                    } else {
-                        // 处理其他类型的字段
-                        params.put(fieldName, fieldValue);
-                    }
+                try {
+                    Object value = field.get(obj);
+                    url = appendParamToUrl(url, fieldName, value);
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
                 }
-            } catch (IllegalAccessException e) {
-                e.printStackTrace();
             }
         }
 
-        if (!params.isEmpty()) {
-            StringBuilder urlBuilder = new StringBuilder(url);
-            urlBuilder.append("?");
-            for (Map.Entry<String, Object> entry : params.entrySet()) {
-                if (entry.getValue() instanceof Collection && ((Collection<?>) entry.getValue()).isEmpty()) {
-                    // 如果值是集合且为空,跳过拼接
-                    continue;
+        return url;
+    }
+
+    private String appendParamToUrl(String url, String key, Object value) {
+        if (value != null) {
+            try {
+                // 对参数进行URL编码
+                String encodedKey = URLEncoder.encode(key, "UTF-8");
+                String encodedValue = URLEncoder.encode(value.toString(), "UTF-8");
+
+                // 检查URL是否已经包含参数
+                if (url.contains("?")) {
+                    url += "&" + encodedKey + "=" + encodedValue;
+                } else {
+                    url += "?" + encodedKey + "=" + encodedValue;
                 }
-                urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
             }
-            url = urlBuilder.toString();
         }
-
         return url;
     }
 

+ 16 - 0
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/controller/BpmRunController.java

@@ -4,11 +4,13 @@ import com.zkqy.common.annotation.Log;
 import com.zkqy.common.core.controller.BaseController;
 import com.zkqy.common.core.domain.AjaxResult;
 import com.zkqy.common.enums.BusinessType;
+import com.zkqy.execution.produce.dispersed.entity.runbpm.BpmRunNodeFormDateVo;
 import com.zkqy.execution.produce.dispersed.entity.runbpm.BpmRunNodeFromVo;
 import com.zkqy.execution.produce.dispersed.entity.runbpm.BpmRunNodeVo;
 import com.zkqy.execution.produce.dispersed.entity.runbpm.TriggerExceptionVO;
 import com.zkqy.execution.produce.dispersed.runbpm.PreExecutionToolClass;
 import com.zkqy.execution.produce.dispersed.service.IBpmExecuteNodeService;
+import com.zkqy.execution.produce.utils.EchoNodeFormData;
 import com.zkqy.system.entity.CommonEntity;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -32,6 +34,9 @@ public class BpmRunController extends BaseController {
     @Autowired
     private IBpmExecuteNodeService bpmExecuteNodeService;
 
+    @Autowired
+    private EchoNodeFormData echoNodeFormData;
+
     /**
      * 共通投产流程接口
      */
@@ -69,6 +74,17 @@ public class BpmRunController extends BaseController {
         return AjaxResult.success(ipreExecutionToolClass.processNodeFormInfoData(bpmRunNodeFromVo));
     }
 
+    /**
+     * handleSubmitForm
+     *
+     * @param bpmRunNodeFormDateVo
+     * @return
+     */
+    @PostMapping("/submitNodeForm")
+    public AjaxResult handleSubmitFormData(@RequestBody BpmRunNodeFormDateVo bpmRunNodeFormDateVo) {
+        return AjaxResult.success(echoNodeFormData.handleSubmitForm(bpmRunNodeFormDateVo));
+    }
+
 
     /**
      * 触发异常节点

+ 67 - 0
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/entity/runbpm/BpmRunNodeFormDateVo.java

@@ -0,0 +1,67 @@
+package com.zkqy.execution.produce.dispersed.entity.runbpm;
+
+import com.zkqy.system.entity.CommonEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 处理提交表单数据
+ *
+ * @author hanzihang
+ * @date 2023/12/15 1:58 PM
+ */
+public class BpmRunNodeFormDateVo {
+    /**
+     * insertCommonEntityList 新增
+     * updateCommonEntityList 修改
+     * deleteCommonEntityList 删除
+     */
+    private List<CommonEntity> insertCommonEntityList, updateCommonEntityList, deleteCommonEntityList;
+
+    public BpmRunNodeFormDateVo() {
+        this.insertCommonEntityList = new ArrayList<>();
+        this.updateCommonEntityList = new ArrayList<>();
+        this.deleteCommonEntityList = new ArrayList<>();
+    }
+
+    public BpmRunNodeFormDateVo(List<CommonEntity> insertCommonEntityList, List<CommonEntity> updateCommonEntityList, List<CommonEntity> deleteCommonEntityList) {
+        this.insertCommonEntityList = insertCommonEntityList;
+        this.updateCommonEntityList = updateCommonEntityList;
+        this.deleteCommonEntityList = deleteCommonEntityList;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("BpmRunNodeFormDateVo{");
+        sb.append("insertCommonEntityList=").append(insertCommonEntityList);
+        sb.append(", updateCommonEntityList=").append(updateCommonEntityList);
+        sb.append(", deleteCommonEntityList=").append(deleteCommonEntityList);
+        sb.append('}');
+        return sb.toString();
+    }
+
+    public List<CommonEntity> getInsertCommonEntityList() {
+        return insertCommonEntityList;
+    }
+
+    public void setInsertCommonEntityList(List<CommonEntity> insertCommonEntityList) {
+        this.insertCommonEntityList = insertCommonEntityList;
+    }
+
+    public List<CommonEntity> getUpdateCommonEntityList() {
+        return updateCommonEntityList;
+    }
+
+    public void setUpdateCommonEntityList(List<CommonEntity> updateCommonEntityList) {
+        this.updateCommonEntityList = updateCommonEntityList;
+    }
+
+    public List<CommonEntity> getDeleteCommonEntityList() {
+        return deleteCommonEntityList;
+    }
+
+    public void setDeleteCommonEntityList(List<CommonEntity> deleteCommonEntityList) {
+        this.deleteCommonEntityList = deleteCommonEntityList;
+    }
+}

+ 16 - 4
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/entity/runbpm/BpmRunNodeFormFilterConditionsVo.java

@@ -29,7 +29,12 @@ public class BpmRunNodeFormFilterConditionsVo {
 
 
     /**
-     * 如果是数组,那么这就是 key
+     * 如果是数组,那么这就是返回数据的key
+     * <p>
+     * key:[
+     * {label:value},
+     * {label:value}
+     * ]
      */
     private String listKey;
 
@@ -52,16 +57,19 @@ public class BpmRunNodeFormFilterConditionsVo {
         this.tableName = tableName;
         this.condition = condition;
     }
-    public BpmRunNodeFormFilterConditionsVo(String tableName, Map<String, Object> condition,String listKey ) {
+
+    public BpmRunNodeFormFilterConditionsVo(String tableName, Map<String, Object> condition, String listKey) {
         this.tableName = tableName;
         this.condition = condition;
         this.listKey = listKey;
     }
+
     public BpmRunNodeFormFilterConditionsVo(String tableName, Map<String, Object> condition, boolean isNodeOnlyData) {
         this.tableName = tableName;
         this.condition = condition;
         this.isNodeOnlyData = isNodeOnlyData;
     }
+
     public BpmRunNodeFormFilterConditionsVo(String tableName, Map<String, Object> condition, boolean isNodeOnlyData, String listKey) {
         this.tableName = tableName;
         this.condition = condition;
@@ -93,8 +101,12 @@ public class BpmRunNodeFormFilterConditionsVo {
         isNodeOnlyData = nodeOnlyData;
     }
 
-    public String getListKey() {return listKey;}
+    public String getListKey() {
+        return listKey;
+    }
 
-    public void setListKey(String listKey) {this.listKey = listKey;}
+    public void setListKey(String listKey) {
+        this.listKey = listKey;
+    }
 
 }

+ 51 - 51
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/runbpm/PreExecutionToolClass.java

@@ -5,7 +5,6 @@ import com.zkqy.common.core.domain.AjaxResult;
 import com.zkqy.common.utils.bpm.XmlDataParserUtils;
 import com.zkqy.common.utils.uuid.IdUtils;
 import com.zkqy.execution.produce.dispersed.entity.BpmExecuteNode;
-import com.zkqy.execution.produce.dispersed.entity.BpmExecuteNodeForm;
 import com.zkqy.execution.produce.dispersed.entity.BpmExecuteNodeMiddle;
 import com.zkqy.execution.produce.dispersed.entity.BpmExecuteProcess;
 import com.zkqy.execution.produce.dispersed.entity.runbpm.*;
@@ -204,54 +203,54 @@ public class PreExecutionToolClass<R> {
         });
         runBpmExecuteNodeMiddleMapper.insertBpmExecuteNodeMiddleList(runBpmExecuteNodeMiddleList);
         //**3️⃣⚡️5️⃣ 流程任务当中的所有节点关联的表单信息 得到当前流程的所有节点以及当前节点脚本绑定的异常脚本-》处理当前节点脚本、异常脚本绑定的表单到中间表信息 */
-        List<BpmExecuteNodeForm> bpmExecuteNodeFormList = new ArrayList<>();
-        // 当前流程的正常节点、异常节点(理论上无论什么节点都会绑定一个表单)
-        Map<String, String> nodeMap = new HashMap<>();
-        Map<String, BpmProcessConfiguration> nodeInfo = new HashMap<>();
-        bpmProcessConfigurationList.forEach(item -> {
-            if (item.getNodeType().equals("startEvent")) {
-                nodeMap.put("startNodeKey", item.getNodeKey());
-            } else if (item.getNodeType().equals("endEvent")) {
-                nodeMap.put("endNodeKey", item.getNodeKey());
-            }
-            nodeInfo.put(item.getNodeKey(), item);
-        });
-        bpmNodeScriptRelevanceList.forEach(item -> {
-
-            if (item.getNodeKey().equals(nodeMap.get("startNodeKey")) || item.getNodeKey().equals(nodeMap.get("endNodeKey"))) {
-                //  开始结束节点不做记录
-            } else
-
-                // 0=:异常脚本;1:正常脚本 2:节点前后自动  节点前后执行的脚本是没有表单的
-                if (item.getScriptTriggerType() != 2L) {
-                    BpmExecuteNodeForm bpmExecuteNodeForm = new BpmExecuteNodeForm();
-                    bpmExecuteNodeForm.setTaskProcessKey(intoProduction.getTaskProcessKey());
-                    bpmExecuteNodeForm.setTaskNodeKey(item.getNodeKey());
-                    bpmExecuteNodeForm.setTaskScriptKey(item.getScriptKey());
-                    if (item.getScriptTriggerType() == 1L) { // 正常节点脚本
-                        // bpmProcessConfigurationList
-                        bpmExecuteNodeForm.setTaskNodeFormKey(nodeInfo.get(item.getNodeKey()).getNodeFormKey());
-                        bpmExecuteNodeForm.setTaskNodeFromType(nodeInfo.get(item.getNodeKey()).getNodeFormType());
-                        // bpmExecuteNodeForm.setTaskNodeFromContent();
-                    } else if (item.getScriptTriggerType() == 0L) { // 异常脚本
-                        bpmExecuteNodeForm.setTaskNodeFormKey(item.getFormKey());
-                        bpmExecuteNodeForm.setTaskNodeFromType(item.getScriptNodeFormType());
-                        // bpmExecuteNodeForm.setTaskNodeFromContent();
-                    }
-                    bpmExecuteNodeFormList.add(bpmExecuteNodeForm);
-                }
-        });
-        // 得到当前流程所有的表单类型
-        Map<String, String> nodeFrom = iBpmExecuteNodeFormService.selectNodeFromInfos(commonEntity.getCommMap().get("process_key").toString());
-        // 得到当前表单的所有信息
-        Map<String, Object> nodeFromInfoMap = this.getNodeFormInfos(nodeFrom);
-        bpmExecuteNodeFormList.forEach(item -> {
-            item.setTaskNodeFromContent(nodeFromInfoMap.get(item.getTaskNodeFormKey()).toString());
-        });
-        // 最终提交新增 bpmExecuteNodeFormList
-        bpmExecuteNodeFormList.forEach(item -> {
-            iBpmExecuteNodeFormService.insertBpmExecuteNodeForm(item);
-        });
+//        List<BpmExecuteNodeForm> bpmExecuteNodeFormList = new ArrayList<>();
+//        // 当前流程的正常节点、异常节点(理论上无论什么节点都会绑定一个表单)
+//        Map<String, String> nodeMap = new HashMap<>();
+//        Map<String, BpmProcessConfiguration> nodeInfo = new HashMap<>();
+//        bpmProcessConfigurationList.forEach(item -> {
+//            if (item.getNodeType().equals("startEvent")) {
+//                nodeMap.put("startNodeKey", item.getNodeKey());
+//            } else if (item.getNodeType().equals("endEvent")) {
+//                nodeMap.put("endNodeKey", item.getNodeKey());
+//            }
+//            nodeInfo.put(item.getNodeKey(), item);
+//        });
+//        bpmNodeScriptRelevanceList.forEach(item -> {
+//
+//            if (item.getNodeKey().equals(nodeMap.get("startNodeKey")) || item.getNodeKey().equals(nodeMap.get("endNodeKey"))) {
+//                //  开始结束节点不做记录
+//            } else
+//
+//                // 0=:异常脚本;1:正常脚本 2:节点前后自动  节点前后执行的脚本是没有表单的
+//                if (item.getScriptTriggerType() != 2L) {
+//                    BpmExecuteNodeForm bpmExecuteNodeForm = new BpmExecuteNodeForm();
+//                    bpmExecuteNodeForm.setTaskProcessKey(intoProduction.getTaskProcessKey());
+//                    bpmExecuteNodeForm.setTaskNodeKey(item.getNodeKey());
+//                    bpmExecuteNodeForm.setTaskScriptKey(item.getScriptKey());
+//                    if (item.getScriptTriggerType() == 1L) { // 正常节点脚本
+//                        // bpmProcessConfigurationList
+//                        bpmExecuteNodeForm.setTaskNodeFormKey(nodeInfo.get(item.getNodeKey()).getNodeFormKey());
+//                        bpmExecuteNodeForm.setTaskNodeFromType(nodeInfo.get(item.getNodeKey()).getNodeFormType());
+//                        // bpmExecuteNodeForm.setTaskNodeFromContent();
+//                    } else if (item.getScriptTriggerType() == 0L) { // 异常脚本
+//                        bpmExecuteNodeForm.setTaskNodeFormKey(item.getFormKey());
+//                        bpmExecuteNodeForm.setTaskNodeFromType(item.getScriptNodeFormType());
+//                        // bpmExecuteNodeForm.setTaskNodeFromContent();
+//                    }
+//                    bpmExecuteNodeFormList.add(bpmExecuteNodeForm);
+//                }
+//        });
+//        // 得到当前流程所有的表单类型
+//        Map<String, String> nodeFrom = iBpmExecuteNodeFormService.selectNodeFromInfos(commonEntity.getCommMap().get("process_key").toString());
+//        // 得到当前表单的所有信息
+//        Map<String, Object> nodeFromInfoMap = this.getNodeFormInfos(nodeFrom);
+//        bpmExecuteNodeFormList.forEach(item -> {
+//            item.setTaskNodeFromContent(nodeFromInfoMap.get(item.getTaskNodeFormKey()).toString());
+//        });
+//        // 最终提交新增 bpmExecuteNodeFormList
+//        bpmExecuteNodeFormList.forEach(item -> {
+//            iBpmExecuteNodeFormService.insertBpmExecuteNodeForm(item);
+//        });
         // iBpmExecuteNodeFormService
         /**4️⃣4️⃣4️⃣ 调用执行节点接口 预执行当前投产流程的开始节点,执行开始节点*/
         // bpmUserScriptVoList  节点key对应的脚本
@@ -287,7 +286,6 @@ public class PreExecutionToolClass<R> {
      * @return
      */
     @Transactional
-    @Async
     public AjaxResult executionNode(BpmRunNodeVo bpmRunNodeVo) {
         System.err.println(bpmRunNodeVo.getTaskNodeKey());
         System.err.println(bpmRunNodeVo.getNextNodeKey());
@@ -326,7 +324,7 @@ public class PreExecutionToolClass<R> {
         iRunBPMEntity.setExecutionMap(bpmRunNodeVo.getFormDataMap());
         iRunBPMEntity.setTableName(bpmRunNodeVo.getTableName());
         AjaxResult ajaxResult = iRunImplementationClass.RunBPMImplementationClassLogicCode(iRunBPMEntity);  //  调用节点绑定逻辑代码
-        if (!ajaxResult.get("code").equals("200")) {
+        if (!ajaxResult.get("code").toString().equals("200")) {
             return ajaxResult;
         }
         //--- 2️⃣⚡️5️⃣ 当节点执行完成后修改节点的状态
@@ -444,6 +442,8 @@ public class PreExecutionToolClass<R> {
         return iRunImplementationClass.getNodeFormData(bpmRunNodeFromVo);
     }
 
+
+
     /**
      * 查询节点对应的表单信息
      *

+ 9 - 6
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/runbpm/RunImplementationClass.java

@@ -48,12 +48,15 @@ public class RunImplementationClass<J> {
             // 校验当前需要执行的脚本是否存在
             if (iRunBPMService.isVerificationMethod()) {
                 // 脚本执行前验证
-                if (iRunBPMService.preValidation(iRunBPMEntity).get("code").toString().equals("200")) {
-                    ajaxResult = iRunBPMService.executeNode(iRunBPMEntity);
-                    if (ajaxResult.get("code").equals("200")) {
-                        // 节点后置验证
-                        ajaxResult = iRunBPMService.afterValidation(iRunBPMEntity);
-                    }
+                AjaxResult preValidationAjaxResult = iRunBPMService.preValidation(iRunBPMEntity);
+                if (preValidationAjaxResult.get("code").toString().equals("200")) {
+                    iRunBPMService.executeNode(iRunBPMEntity);
+                    // 节点后置验证
+                    ajaxResult = iRunBPMService.afterValidation(iRunBPMEntity);
+                } else {
+                    // 执行清理操作
+                    iRunBPMService.preDestroy();
+                    return preValidationAjaxResult;
                 }
                 // 执行清理操作
                 iRunBPMService.preDestroy();

+ 4 - 0
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/IRunBPMService.java

@@ -22,6 +22,10 @@ public interface IRunBPMService {
      */
     CommonEntity getNodeFormData(BpmRunNodeFromVo bpmRunNodeFromVo);
 
+
+//    AjaxResult submitNodeForm(CommonEntity commonEntity);
+
+
     /**
      * 前置验证节点
      *

+ 39 - 11
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/BpmExecuteProcessServiceImpl.java

@@ -21,6 +21,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * 流程执行任务Service业务层处理
  *
@@ -83,6 +87,7 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
             objectMap.put("userId", SecurityUtils.getUserId());
             // 得到当前发起请求的用户角色列表
             objectMap.put("taskRealRoleList", roles);
+            objectMap.putAll(convertEntityToMap(bpmExecuteProcess));
             // 首先根据当前登陆用户得到他可以执行的所有节点
             List<CommonEntity> commonEntities = runBpmExecuteProcessMapper.queryExecuteProcess(objectMap);
             // 查询异常脚本信息
@@ -142,7 +147,7 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
      * @return
      */
     @Override
-    public AjaxResult productionScheduling(CommonEntity commonEntity)   {
+    public AjaxResult productionScheduling(CommonEntity commonEntity) {
         // 得到流程key 和 投产数据条的id  (做关联查询)
         // intoProduction.getTaskProcessKey();
         return AjaxResult.success(ipreExecutionToolClass.ReadyToExecute(commonEntity));
@@ -150,6 +155,7 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
 
     /**
      * 根据FormId查询表单结构信息
+     *
      * @param fid
      * @return
      */
@@ -162,13 +168,14 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
 
     /**
      * 根据groupKey查询表格组对应的表格信息
+     *
      * @param groupKey
      * @return
      */
     @Override
     public String getGroupTableInfo(String groupKey) {
         //存tableInfo信息的Arraylist数组
-        List<HashMap> mapList=new ArrayList<>();
+        List<HashMap> mapList = new ArrayList<>();
         //查询表格组信息
         Map<String, String> groupInfo = runBpmExecuteProcessMapper.getGroupInfo(groupKey);
         //拿到表格组的TableInfo信息
@@ -176,11 +183,11 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
         //json字符传转数组
         JSONArray jsonArray = JSON.parseArray(groupTableInfo);
         //循环表格组里的tableInfo信息
-        jsonArray.forEach(item->{
+        jsonArray.forEach(item -> {
             JSONObject jsonObject = JSONObject.parseObject(item.toString());
-            HashMap hashMap =new HashMap();
-            jsonObject.forEach((k,v)->{
-                hashMap.put(k,v);
+            HashMap hashMap = new HashMap();
+            jsonObject.forEach((k, v) -> {
+                hashMap.put(k, v);
             });
             String tableKey = jsonObject.get("tableKey").toString();
             //根据TableKey查询tableInfo
@@ -194,22 +201,43 @@ public class BpmExecuteProcessServiceImpl implements IBpmExecuteProcessService {
             //拿到动态表格编号
             String tId = String.valueOf(tableInfo.get("tId"));
             List<Map<String, String>> tableConditionMap = runBpmExecuteProcessMapper.getTableCondition(tId);
-            List<String> tableConditionList=new ArrayList<>();
-            tableConditionMap.forEach(e->{
+            List<String> tableConditionList = new ArrayList<>();
+            tableConditionMap.forEach(e -> {
                 System.out.println(e);
                 tableConditionList.add(e.get("conditionDefaultValue"));
             });
             //根据动态表格编号查询这个表格的条件信息
             //tableInfo转JSON
-            hashMap.put("tableInfo",JSONObject.toJSONString(tableInfo));
-            hashMap.put("tableSql",tableSql+" where "+tableCondition);
-            hashMap.put("condition",JSONObject.toJSONString(tableConditionList));
+            hashMap.put("tableInfo", JSONObject.toJSONString(tableInfo));
+            hashMap.put("tableSql", tableSql + " where " + tableCondition);
+            hashMap.put("condition", JSONObject.toJSONString(tableConditionList));
             //添加到集合里
             mapList.add(hashMap);
         });
         return JSONObject.toJSONString(mapList);
     }
 
+    // 将实体对象转换为Map的方法
+    public static Map<String, Object> convertEntityToMap(Object entity) {
+        Map<String, Object> map = new HashMap<>();
+
+        // 获取实体对象的所有字段
+        Field[] fields = entity.getClass().getDeclaredFields();
+
+        // 遍历字段并将字段名和对应的值放入Map中
+        for (Field field : fields) {
+            try {
+                field.setAccessible(true); // 设置字段为可访问
+                Object value = field.get(entity);
+                map.put(field.getName(), value);
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return map;
+    }
+
 
 }
 

+ 2 - 1
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/runbpm/hangye1/testNode/CaiGou.java

@@ -28,7 +28,8 @@ public class CaiGou implements IRunBPMService {
         Map<String, Object> map = new HashMap<>();
         map.put("del_flag", 0);
         bpmRunNodeFromVo.getFormDataVoList().add(new BpmRunNodeFormFilterConditionsVo("goods", map, false, "goodsList"));
-        return echoNodeFormData.getEchoNodeFormData(bpmRunNodeFromVo1);
+        bpmRunNodeFromVo.getFormDataVoList().add(new BpmRunNodeFormFilterConditionsVo("caigou", map, true));
+        return echoNodeFormData.getEchoNodeFormData(bpmRunNodeFromVo);
     }
 
     @Override

+ 7 - 0
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/runbpm/hangye1/testNode/SandProductionImpl.java

@@ -54,6 +54,13 @@ public class SandProductionImpl implements IRunBPMService {
         return echoNodeFormData.getEchoNodeFormData(bpmRunNodeFromVo);
     }
 
+
+
+
+
+
+
+
     @Override
     public AjaxResult preValidation(IRunBPMEntity iRunBPMEntity) {
         return AjaxResult.success();

+ 42 - 7
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/utils/EchoNodeFormData.java

@@ -1,12 +1,14 @@
 package com.zkqy.execution.produce.utils;
 
 import com.zkqy.execution.produce.dispersed.entity.BpmExecuteNode;
+import com.zkqy.execution.produce.dispersed.entity.runbpm.BpmRunNodeFormDateVo;
 import com.zkqy.execution.produce.dispersed.entity.runbpm.BpmRunNodeFormFilterConditionsVo;
 import com.zkqy.execution.produce.dispersed.entity.runbpm.BpmRunNodeFromVo;
 import com.zkqy.execution.produce.dispersed.mapper.BpmExecuteNodeFormMapper;
 import com.zkqy.execution.produce.dispersed.mapper.BpmExecuteNodeMapper;
 import com.zkqy.system.entity.CommonEntity;
 import com.zkqy.system.mapper.CommonMapper;
+import com.zkqy.system.service.ICommonService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -14,7 +16,7 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * 离散型流程回显表单数据
+ * 离散型流程表单相关处理
  *
  * @author hmc
  * @date 2023-12-12 12:29
@@ -32,6 +34,9 @@ public class EchoNodeFormData {
     @Autowired
     private CommonMapper commonMapper;
 
+    @Autowired  // 共同处理表接口
+    private ICommonService iCommonService;
+
     /**
      * 返回弹窗数据的通用工具类
      * <p>
@@ -47,22 +52,24 @@ public class EchoNodeFormData {
                 .queryBpmExecuteNodeBytaskNodeKey(bpmRunNodeFromVo.getTaskProcessKey(), bpmRunNodeFromVo.getTaskNodeKey());
         //到时候默认回显的数据
         HashMap<String, String> bpmExecuteNodeMap = new HashMap();
-        bpmExecuteNodeMap.put("taskNodeNumber", bpmExecuteNode.getTaskNodeNumber());
-        bpmExecuteNodeMap.put("taskNodeWeight", bpmExecuteNode.getTaskNodeWeight());
+        if (bpmExecuteNode != null) {
+            bpmExecuteNodeMap.put("taskNodeNumber", bpmExecuteNode.getTaskNodeNumber());
+            bpmExecuteNodeMap.put("taskNodeWeight", bpmExecuteNode.getTaskNodeWeight());
+        }
         commonEntity.get().getResultMap().put("bpmExecuteNode", bpmExecuteNodeMap);
         //查询表名、条件封装的集合
         List<BpmRunNodeFormFilterConditionsVo> formDataVoList = bpmRunNodeFromVo.getFormDataVoList();
         formDataVoList.forEach(item -> {
             //表单回填数据查询
             if (item.isNodeOnlyData()) {//默认是带这个流程条件信息的
-                item.getCondition().put("taskProcessKey", bpmRunNodeFromVo.getTaskProcessKey());
-                item.getCondition().put("taskNodeKey", bpmRunNodeFromVo.getTaskNodeKey());
+                item.getCondition().put("task_key", bpmRunNodeFromVo.getTaskProcessKey());
+                item.getCondition().put("task_node_key", bpmRunNodeFromVo.getTaskNodeKey());
             }
             //是否是节点回填数据(默认是true)
             String listKey = item.getListKey();
-            if (listKey != null) {
+            if (listKey != null && !listKey.isEmpty()) {
                 //下拉框数据、或者表格多条数据
-                List<Map<String, Object>> maps = commonMapper.selectListMap(item.getTableName(),item.getCondition());
+                List<Map<String, Object>> maps = commonMapper.selectListMap(item.getTableName(), item.getCondition());
                 commonEntity.get().getResultMap().put(item.getListKey(), maps);
             } else {
                 //单条数据的回显逻辑
@@ -72,4 +79,32 @@ public class EchoNodeFormData {
         });
         return commonEntity.get();
     }
+
+    /**
+     * 节点表单中的新增方法
+     *
+     * @param bpmRunNodeFormDateVo
+     * @return
+     */
+    public int handleSubmitForm(BpmRunNodeFormDateVo bpmRunNodeFormDateVo) {
+        // 处理新增
+        if (bpmRunNodeFormDateVo.getInsertCommonEntityList().size() != 0) {
+            bpmRunNodeFormDateVo.getInsertCommonEntityList().forEach(item -> {
+                iCommonService.batchInsert(item);
+            });
+        }
+        // 处理修改
+        if (bpmRunNodeFormDateVo.getUpdateCommonEntityList().size() != 0) {
+            bpmRunNodeFormDateVo.getUpdateCommonEntityList().forEach(item -> {
+                iCommonService.edit(item);
+            });
+        }
+        // 删除
+        if (bpmRunNodeFormDateVo.getDeleteCommonEntityList().size() != 0) {
+            bpmRunNodeFormDateVo.getDeleteCommonEntityList().forEach(item -> {
+                iCommonService.batchDelete(item);
+            });
+        }
+        return 1;
+    }
 }

+ 8 - 8
zkqy-process-execution/src/main/resources/mapper/bpm/dispersed/BpmExecuteProcessMapper.xml

@@ -203,16 +203,16 @@
             </foreach>
         </if>
         )
-        <if test="taskKey != null  and taskKey != ''">and bep.task_key = #{bpmExecuteProcessTaskKey}</if>
-        <if test="taskName != null  and taskName != ''">and bep.task_name like concat('%', #{bepTaskName}, '%')</if>
-        <if test="taskNodeKey != null  and taskNodeKey != ''">and bep.task_node_key = #{bepTaskNodeKey}</if>
-        <if test="taskNodeNextKey != null  and taskNodeNextKey != ''">and bep.task_node_next_key = #{bpmExecuteProcessTaskNodeNextKey}
+        <if test="taskKey != null  and taskKey != ''">and bep.task_key = #{taskKey}</if>
+        <if test="taskName != null  and taskName != ''">and bep.task_name like concat('%', #{taskName}, '%')</if>
+        <if test="taskNodeKey != null  and taskNodeKey != ''">and bep.task_node_key = #{taskNodeKey}</if>
+        <if test="taskNodeNextKey != null  and taskNodeNextKey != ''">and bep.task_node_next_key = #{executeProcessTaskNodeNextKey}
         </if>
-        <if test="taskProcessKey != null  and taskProcessKey != ''">and bep.task_process_key = #{bepTaskProcessKey}</if>
-        <if test="taskProcessState != null ">and bep.task_process_state = #{bepTaskProcessState}</if>
-        <if test="taskProcessNote != null  and taskProcessNote != ''">and bep.task_process_note = #{bepTaskProcessNote}
+        <if test="taskProcessKey != null  and taskProcessKey != ''">and bep.task_process_key = #{taskProcessKey}</if>
+        <if test="taskProcessState != null ">and bep.task_process_state = #{taskProcessState}</if>
+        <if test="taskProcessNote != null  and taskProcessNote != ''">and bep.task_process_note = #{taskProcessNote}
         </if>
-        <if test="taskProcessType != null  and taskProcessType != ''">and bep.task_process_type = #{bepTaskProcessType}
+        <if test="taskProcessType != null  and taskProcessType != ''">and bep.task_process_type = #{taskProcessType}
         </if>
         order by ben.create_time desc
     </select>

+ 90 - 1
zkqy-system/src/main/java/com/zkqy/system/entity/CommonEntity.java

@@ -161,4 +161,93 @@ public class CommonEntity extends BaseEntity implements Serializable {
         this.execlMap = execlMap;
     }
 
-}
+}
+/*
+
+insertCommonEntitylist:[
+        {
+            "basicMap": {
+                "tableName": "student"
+            },
+            "addListMap": [
+                {
+                    "sSex": "2",
+                    "sName": "名字2",
+                    "sAge": "18",
+                    "sInsTime": ""
+                }
+            ]
+        },
+        {
+            "basicMap": {
+                "tableName": "student"
+            },
+            "addListMap": [
+                {
+                    "sSex": "2",
+                    "sName": "名字2",
+                    "sAge": "18",
+                    "sInsTime": ""
+                }
+            ]
+        }
+
+]
+
+
+          //  新增
+        let add = {
+            "basicMap": {
+                "tableName": "student"
+            },
+            "addListMap": [
+                {
+                    "sSex": "2",
+                    "sName": "名字2",
+                    "sAge": "18",
+                    "sInsTime": ""
+                }
+            ]
+        }
+       // 修改穿传参
+      let updateData = {
+        // 基本参数
+        basicMap: {
+          // 表名
+          tableName: this.tableName,
+        },
+        // 条件参数(可多个参数做条件,基本是唯一标识做条件)
+        conditionMap: {
+          k: "v",
+          ...
+        },
+        // 需要修改表的数据-》不可传输唯一标识主键等
+        commMap: {
+          k: "v",
+          ...
+        }
+      }
+    // 查询传参
+    queryParams: {
+        pageNum: 1,                  // 第几页
+        pageSize: 10,                // 每页大小
+        orderByColumn: "",  // 根据某列排序
+        isAsc: this.sortState ? "DESC" : "ASC", // desc(降序)或 asc(升序)
+        // 基本查询参数
+        basicMap: {
+          tableName: "drag_form"
+        },
+        // 当前表字段筛选参数
+        queryMap: {                   // 当前查询基本参数
+          // ... key : value         当前页面的筛选条件
+          // 超级查询的唯一值
+          queryCriteriaValue: ""
+        }
+      },
+
+
+
+
+
+
+ */