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

fix:优化校验流程方法,修改触发异常接口

xuezizhuo 1 жил өмнө
parent
commit
1106d9370a

+ 20 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/Sending.java

@@ -86,4 +86,24 @@ public class Sending<T> {
         return this.sendCommon(bpmProperties.getTenantDictValIp, "GET", param);
     }
 
+    /**
+     * 根据scriptKey获取节点脚本详情接口
+     */
+    public ResponseEntity sendGetNodeScript(T param){
+        return this.sendCommon(bpmProperties.getNodeScriptIp,"GET",param);
+    }
+
+    /**
+     * 查看角色下是否存在真实用户接口
+     */
+    public ResponseEntity sendQueryUserExistsByRoleKey(T param){
+        return this.sendCommon(bpmProperties.queryUserExistsByRoleKeyIp,"GET",param);
+    }
+
+    /**
+     * 查看一组用户下是否存在真实用户接口
+     */
+    public ResponseEntity sendQueryUserExistsByUserIds(T param){
+        return this.sendCommon(bpmProperties.queryUserExistsByUserIdsIp,"GET",param);
+    }
 }

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

@@ -7,7 +7,7 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.common.config.bpm.BpmProperties;
-import com.ruoyi.common.utils.http.sending;
+import com.ruoyi.common.utils.http.Sending;
 import com.ruoyi.execution.produce.dispersed.entity.BpmExecuteNodeMiddle;
 import com.ruoyi.execution.produce.dispersed.entity.runbpm.SysBpmNodeScriptVO;
 import com.ruoyi.system.entity.CommonEntity;
@@ -33,7 +33,7 @@ public class BpmExecuteNodeMiddleServiceImpl implements IBpmExecuteNodeMiddleSer
     @Autowired
     private BpmProperties bpmProperties;
     @Autowired
-    private sending sending;
+    private Sending sending;
     // 创建RestTemplate实例
     RestTemplate restTemplate = new RestTemplate();
 

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

@@ -126,6 +126,9 @@ public class BpmExecuteNodeServiceImpl implements IBpmExecuteNodeService {
         bpmExecuteProcess.setTaskNodeKey(newUserTaskTagId);
         bpmExecuteProcess.setTaskNodeNextKey(bpmExecuteProcess.getTaskNodeKey());
         bpmExecuteProcessMapper.updateBpmExecuteProcess(bpmExecuteProcess);
+        //生成虚拟角色编码
+        String taskNodeRolePermission = IdUtils.fastSimpleUUID();
+
         //得到当前节点信息,添加异常节点信息
         BpmExecuteNode bpmExecuteNode = bpmExecuteNodeMapper.queryBpmExecuteNodeBytaskNodeKey(vo.getTaskProcessKey(), vo.getTaskNodeKey());
         bpmExecuteNode.setId(null);
@@ -136,12 +139,16 @@ public class BpmExecuteNodeServiceImpl implements IBpmExecuteNodeService {
         bpmExecuteNode.setTaskNodeState("0");
         bpmExecuteNode.setTaskNodeNumber("");
         bpmExecuteNode.setTaskNodeWeight("");
+        bpmExecuteNode.setTaskNodeFormKey("");
+        bpmExecuteNode.setTaskNodeFormType("");
+        bpmExecuteNode.setTaskNodeRolePermission(taskNodeRolePermission);
         bpmExecuteNodeMapper.insertBpmExecuteNode(bpmExecuteNode);
         //得到当前节点用户关联表信息,添加异常节点用户关联表信息
         BpmExecuteNodeMiddle bpmExecuteNodeMiddle = bpmExecuteNodeMiddleMapper.queryBpmExecuteNodeMiddleByTaskNodeKey(vo.getTaskProcessKey(), vo.getTaskNodeKey());
         bpmExecuteNodeMiddle.setId(null);
         bpmExecuteNodeMiddle.setTaskNodeKey(newUserTaskTagId);
         bpmExecuteNodeMiddle.setTaskAutomaticScriptTriggerType(sysBpmNodeScriptVO.getScriptKey());
+        bpmExecuteNodeMiddle.setTaskVirtuallyRole(taskNodeRolePermission);
         return bpmExecuteNodeMiddleMapper.insertBpmExecuteNodeMiddle(bpmExecuteNodeMiddle);
     }
 }

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

@@ -1,6 +1,6 @@
 package com.ruoyi.execution.produce.dispersed.service.impl.script.common;
 
-import com.ruoyi.common.utils.http.sending;
+import com.ruoyi.common.utils.http.Sending;
 import com.ruoyi.execution.produce.dispersed.entity.BpmExecuteNode;
 import com.ruoyi.execution.produce.dispersed.service.IBpmExecuteNodeService;
 import com.ruoyi.execution.produce.dispersed.service.IScriptService;
@@ -28,7 +28,7 @@ public class CommonProductionSchedulingServiceImpl implements IScriptService {
     private IBpmExecuteNodeService iBpmExecuteNodeService;
 
     @Autowired
-    private sending sending;
+    private Sending sending;
 
     @Override
     public Object preExecutionScript(Object parameter) {

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

@@ -1,8 +1,10 @@
 package com.ruoyi.execution.produce.dispersed.service.impl.utils;
 
+import com.alibaba.fastjson2.JSON;
 import com.ruoyi.common.config.bpm.BpmProperties;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.http.Sending;
 import com.ruoyi.execution.produce.dispersed.runbpm.RunImplementationClass;
 import com.ruoyi.system.entity.BpmNodeHandleUser;
 import com.ruoyi.system.entity.BpmNodeScriptRelevance;
@@ -11,9 +13,12 @@ import com.ruoyi.system.service.IBpmNodeHandleUserService;
 import com.ruoyi.system.service.IBpmNodeScriptRelevanceService;
 import com.ruoyi.system.service.IBpmProcessConfigurationService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -40,12 +45,14 @@ public class VerifyExecutionProcess {
     @Autowired
     private BpmProperties bpmProperties;
 
+    @Autowired
+    private Sending sending;
+
     /*
       判断是否有开始结束节点,有,循环判断每一个节点是否包含自动执行脚本,并且脚本是否存在,
       节点是否绑定角色权限,真实角色下是否存在可处理用户,虚拟角色下用户是否都真实存在
     */
     public boolean VerifyProcessData(String processKey) {
-        RestTemplate restTemplate = new RestTemplate();
         // 根据流程编号(node_process_key)查询流程配置表(bpm_process_configuration)得到该流程所有节点信息
         BpmProcessConfiguration bpmProcessConfiguration = new BpmProcessConfiguration();
         bpmProcessConfiguration.setNodeProcessKey(processKey);
@@ -60,12 +67,18 @@ public class VerifyExecutionProcess {
                 BpmNodeScriptRelevance bpmNodeScriptRelevance = bpmNodeScriptRelevanceService.selectAutoScriptByNodeKey(b.getNodeKey());
                  if (bpmNodeScriptRelevance != null) {
                      // 获取执行脚本名称,判断脚本是否存在
-                     AjaxResult ajaxResult = restTemplate.getForObject(bpmProperties.getNodeScriptIp + bpmNodeScriptRelevance.getScriptKey(), AjaxResult.class);
-                     if(Long.valueOf(ajaxResult.get("code").toString()) != 200L){
+                     Map<String,Object> paramMap = new HashMap<>();
+                     paramMap.put("scriptKey",bpmNodeScriptRelevance.getScriptKey());
+                     ResponseEntity responseEntity = sending.sendGetNodeScript(paramMap);
+                     if(responseEntity.getStatusCodeValue() != 200L){
                          return false;
                      }
-                     Map<String,Object> map = (Map<String,Object>)ajaxResult.get("data");
-                     runImplementationClass.isVerificationMethod(map.get("scriptFunctionName").toString());
+                     Map<String,Object> map = JSON.parseObject(responseEntity.getBody().toString());
+                    if(Long.valueOf(map.get("code").toString()) != 200L){
+                        return false;
+                    }
+                     Map<String,Object> dataMap = (Map<String,Object>)map.get("data");
+                     runImplementationClass.isVerificationMethod(dataMap.get("scriptFunctionName").toString());
                  }else {
                      return false;
                  }
@@ -77,17 +90,33 @@ public class VerifyExecutionProcess {
                 BpmNodeHandleUser bpmNodeHandleUser = bpmNodeHandleUserService.selectBpmNodeHandleUserByVirtuallyRole(b.getNodeRolePermission());
                 // 真实角色不为空查询真实角色下是否存在可处理用户
                 if (StringUtils.isNotEmpty(bpmNodeHandleUser.getRealRole())) {
-                    AjaxResult ajaxResult = restTemplate.getForObject(bpmProperties.queryUserExistsByRoleKeyIp + bpmNodeHandleUser.getRealRole(),AjaxResult.class);
-                    Long count = Long.valueOf(ajaxResult.get("data").toString());
-                    if (count <= 0) {
+                    Map<String,Object> paramMap = new HashMap<>();
+                    paramMap.put("userIds",Arrays.asList(bpmNodeHandleUser.getRealRole().split(",")));
+                    ResponseEntity responseEntity = sending.sendQueryUserExistsByRoleKey(paramMap);
+                    if (responseEntity.getStatusCodeValue() != 200){
+                        return false;
+                    }
+                    Map<String,Object> map = JSON.parseObject(responseEntity.getBody().toString());
+                    if(Long.valueOf(map.get("code").toString()) != 200L){
+                        return false;
+                    }
+                    if (Long.valueOf(map.get("data").toString()) <= 0L){
                         return false;
                     }
                 }
                 // 虚拟角色下用户是否都真实存在
                 if(StringUtils.isNotEmpty(bpmNodeHandleUser.getExecuteUserNo())){
-                    AjaxResult ajaxResult = restTemplate.getForObject(bpmProperties.queryUserExistsByUserIdsIp + bpmNodeHandleUser.getExecuteUserNo(),AjaxResult.class);
-                    Long count = Long.valueOf(ajaxResult.get("data").toString());
-                    if (count <= 0) {
+                    Map<String,Object> paramMap = new HashMap<>();
+                    paramMap.put("userIds",Arrays.asList(bpmNodeHandleUser.getExecuteUserNo().split(",")));
+                    ResponseEntity responseEntity = sending.sendQueryUserExistsByUserIds(paramMap);
+                    if (responseEntity.getStatusCodeValue() != 200){
+                        return false;
+                    }
+                    Map<String,Object> map = JSON.parseObject(responseEntity.getBody().toString());
+                    if(Long.valueOf(map.get("code").toString()) != 200L){
+                        return false;
+                    }
+                    if (Long.valueOf(map.get("data").toString()) <= 0L){
                         return false;
                     }
                 }
@@ -97,6 +126,9 @@ public class VerifyExecutionProcess {
             if (b.getNodeType().equals("startEvent")) startNode++;
             if (b.getNodeType().equals("endEvent")) endNode++;
         }
+        if(startNode <= 0 || endNode <= 0){
+            return false;
+        }
         return true;
     }