|
@@ -5,12 +5,14 @@ import com.ruoyi.common.constant.HttpStatus;
|
|
|
import com.ruoyi.common.utils.bpm.XmlDataParserUtils;
|
|
|
import com.ruoyi.common.utils.uuid.IdUtils;
|
|
|
import com.ruoyi.execution.produce.dispersed.entity.BpmExecuteNode;
|
|
|
+import com.ruoyi.execution.produce.dispersed.entity.BpmExecuteNodeForm;
|
|
|
import com.ruoyi.execution.produce.dispersed.entity.BpmExecuteNodeMiddle;
|
|
|
import com.ruoyi.execution.produce.dispersed.entity.BpmExecuteProcess;
|
|
|
import com.ruoyi.execution.produce.dispersed.entity.runbpm.*;
|
|
|
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.IBpmExecuteNodeFormService;
|
|
|
import com.ruoyi.execution.produce.dispersed.service.impl.utils.VerifyExecutionProcess;
|
|
|
import com.ruoyi.system.entity.*;
|
|
|
import com.ruoyi.system.mapper.BpmNodeHandleUserMapper;
|
|
@@ -18,10 +20,13 @@ import com.ruoyi.system.mapper.BpmNodeScriptRelevanceMapper;
|
|
|
import com.ruoyi.system.mapper.BpmProcessConfigurationMapper;
|
|
|
import com.ruoyi.system.mapper.BpmProcessMapper;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
+import org.springframework.scheduling.annotation.EnableAsync;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
|
|
/**
|
|
|
* 预备执行流程工具类
|
|
@@ -30,6 +35,7 @@ import java.util.*;
|
|
|
* @date 2023/11/15
|
|
|
*/
|
|
|
@Component
|
|
|
+@EnableAsync // 异步
|
|
|
public class PreExecutionToolClass<R> {
|
|
|
|
|
|
@Autowired // 执行流程
|
|
@@ -59,6 +65,9 @@ public class PreExecutionToolClass<R> {
|
|
|
@Autowired // 校验执行流程的数据
|
|
|
private VerifyExecutionProcess iVerifyExecutionProcess;
|
|
|
|
|
|
+ @Autowired // 节点脚本表单中间表
|
|
|
+ private IBpmExecuteNodeFormService iBpmExecuteNodeFormService;
|
|
|
+
|
|
|
/**
|
|
|
* 预执行流程自动执行开始节点
|
|
|
*
|
|
@@ -86,13 +95,17 @@ public class PreExecutionToolClass<R> {
|
|
|
bpmProcessConfigurationList.forEach(item -> nodekeyList.add(item.getNodeKey()));
|
|
|
// 当前流程的所有节点详细信息
|
|
|
List<BpmUserScriptVo> bpmUserScriptVoList = new ArrayList<>();
|
|
|
+ // 得到当前流程所有脚本数据
|
|
|
+ List<BpmNodeScriptRelevance> bpmNodeScriptRelevanceList = new ArrayList<>();
|
|
|
bpmProcessConfigurationList.forEach(item -> {
|
|
|
BpmUserScriptVo bpmUserScriptVo = new BpmUserScriptVo();
|
|
|
bpmUserScriptVo.setNodeKey(item.getNodeKey());
|
|
|
bpmUserScriptVo.setBpmNodeHandleUserList(bpmNodeHandleUserMapper.selectBpmNodeHandleUserList(new BpmNodeHandleUser(item.getNodeRolePermission())));
|
|
|
bpmUserScriptVo.setBpmNodeScriptRelevanceList(bpmNodeScriptRelevanceMapper.selectBpmNodeScriptRelevanceList(new BpmNodeScriptRelevance(item.getNodeKey())));
|
|
|
+ bpmNodeScriptRelevanceList.addAll(bpmUserScriptVo.getBpmNodeScriptRelevanceList());
|
|
|
bpmUserScriptVoList.add(bpmUserScriptVo);
|
|
|
});
|
|
|
+
|
|
|
Map<String, String> shunxu = XmlDataParserUtils.getStartNodeAndNextNode(bpmProcess.getProcessXmlContent());
|
|
|
/**2️⃣2️⃣2️⃣ 新增执行流程表数据*/
|
|
|
BpmExecuteProcess runBpmExecuteProcess = new BpmExecuteProcess();
|
|
@@ -180,6 +193,43 @@ public class PreExecutionToolClass<R> {
|
|
|
runBpmExecuteNodeMiddleList.add(bpmExecuteNodeMiddle);
|
|
|
});
|
|
|
runBpmExecuteNodeMiddleMapper.insertBpmExecuteNodeMiddleList(runBpmExecuteNodeMiddleList);
|
|
|
+ /**3️⃣⚡️5️⃣ 流程任务当中的所有节点关联的表单信息
|
|
|
+ * 得到当前流程的所有节点以及当前节点脚本绑定的异常脚本-》处理当前节点脚本、异常脚本绑定的表单到中间表信息 */
|
|
|
+
|
|
|
+
|
|
|
+ List<BpmExecuteNodeForm> bpmExecuteNodeFormList = new ArrayList<>();
|
|
|
+ Map<String, BpmProcessConfiguration> nodeInfo = new HashMap<>();
|
|
|
+ bpmProcessConfigurationList.forEach(item -> {
|
|
|
+ nodeInfo.put(item.getNodeKey(), item);
|
|
|
+ });
|
|
|
+ bpmNodeScriptRelevanceList.forEach(item -> {
|
|
|
+ // 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, Object> nodeFrom = new HashMap<>(); // 当前流程所需的表单
|
|
|
+ bpmExecuteNodeFormList.forEach(item -> {
|
|
|
+ nodeFrom.put(item.getTaskNodeFormKey(), item.getTaskNodeFromType());
|
|
|
+ });
|
|
|
+ ///未完待续。。。
|
|
|
+
|
|
|
+
|
|
|
+ // iBpmExecuteNodeFormService
|
|
|
/**4️⃣4️⃣4️⃣ 调用执行节点接口 预执行当前投产流程的开始节点,执行开始节点*/
|
|
|
// bpmUserScriptVoList 节点key对应的脚本
|
|
|
// 根据节点类型startEvent 筛选得到当前流程的开始节点,进行自动执行 // startEvent 开始节点类型
|
|
@@ -209,6 +259,7 @@ public class PreExecutionToolClass<R> {
|
|
|
|
|
|
// 执行流程节点共通接口
|
|
|
@Transactional
|
|
|
+ @Async
|
|
|
public int executionNode(BpmRunNodeVo bpmRunNodeVo) {
|
|
|
System.err.println(bpmRunNodeVo.getTaskNodeKey());
|
|
|
System.err.println(bpmRunNodeVo.getNextNodeKey());
|
|
@@ -346,6 +397,19 @@ public class PreExecutionToolClass<R> {
|
|
|
return intoProduction;
|
|
|
}
|
|
|
|
|
|
+ public Map<String, Object> getNodeFormInfos(Map<String, String> nodeForm) {
|
|
|
+ Set<String> nodeKey = nodeForm.keySet();
|
|
|
+ nodeKey.forEach(item -> {
|
|
|
+ if (nodeForm.get(item).equals("dragForm")) { // 拖拽类型的表单
|
|
|
+
|
|
|
+ } else if (nodeForm.get(item).equals("composeForm")) { // 组合类型的表单
|
|
|
+
|
|
|
+ } else if (nodeForm.get(item).equals("designForm")) { // 自定义类型表单
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
// 弃用保留
|
|
|
public int updateNodeState(String taskProcessKey, String taskNodeKey, CommonEntity commonEntity) {
|