bug修复

This commit is contained in:
pengjie 2024-12-16 10:59:39 +08:00
parent 38dca48323
commit 14b3c88d57

View File

@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.wflow.workflow.bean.process.ProcessNode;
import com.wflow.workflow.bean.process.enums.ApprovalModeEnum;
import com.wflow.workflow.bean.process.enums.ApprovalTypeEnum;
import com.wflow.workflow.bean.process.enums.ConditionModeEnum;
import com.wflow.workflow.bean.process.enums.NodeTypeEnum;
@ -29,6 +30,7 @@ import java.util.stream.Collectors;
/**
* json -> bpmn核心转换器
*
* @author : willian fu
* @date : 2022/8/19
*/
@ -54,6 +56,7 @@ public class WFlowToBpmnCreator {
private boolean isSub;
private final static List<FlowableListener> taskListeners = new ArrayList<>();
static {
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
FlowableListener taskListener = new FlowableListener();
@ -65,6 +68,7 @@ public class WFlowToBpmnCreator {
/**
* wflow -> bpmnModel 转换
*
* @param id 表单流程模型id
* @param name 流程名
* @param root 根节点
@ -130,6 +134,7 @@ public class WFlowToBpmnCreator {
/**
* 节点props属性强制转换
*
* @param node 节点
*/
public synchronized static void coverProps(ProcessNode<?> node) {
@ -145,6 +150,7 @@ public class WFlowToBpmnCreator {
/**
* 判断并加载分支末端所有的节点
*
* @param node 当前节点
*/
private void loadBranchEndNodes(ProcessNode<?> node) {
@ -179,6 +185,7 @@ public class WFlowToBpmnCreator {
/**
* 校验是否存在后续子节点
*
* @param node 当前节点
* @return 1/0
*/
@ -188,6 +195,7 @@ public class WFlowToBpmnCreator {
/**
* 递归加载所有流程树
*
* @param node 起始节点
*/
public void loadProcess(ProcessNode<?> node) {
@ -520,6 +528,33 @@ public class WFlowToBpmnCreator {
return null;
}
//多人签署设置-会签/或签
// private MultiInstanceLoopCharacteristics createAndOrMode(String nodeId, ApprovalProps props) {
// MultiInstanceLoopCharacteristics loopCharacteristics = new MultiInstanceLoopCharacteristics();
// loopCharacteristics.setId(IdUtil.randomUUID());
// loopCharacteristics.setElementVariable("assignee");
// loopCharacteristics.setInputDataItem("${processTaskService.getNodeApprovalUsers(execution)}");
// //设置完成条件先判断会签还是或签
// String completionCondition = "";
// switch (props.getMode()) {
// case OR: //有任意一个人处理过就结束
// completionCondition = "nrOfCompletedInstances >= 1";
// loopCharacteristics.setSequential(false);
// break;
// case AND: //所有任务都结束
// completionCondition = "nrOfActiveInstances == 0";
// loopCharacteristics.setSequential(false);
// break;
// case NEXT:
// completionCondition = "nrOfActiveInstances == 0";
// loopCharacteristics.setSequential(true);
// break;
// }
// loopCharacteristics.setCompletionCondition("${" + completionCondition + "}");
// return loopCharacteristics;
// }
//多人签署设置-会签/或签
private MultiInstanceLoopCharacteristics createAndOrMode(String nodeId, ApprovalProps props) {
MultiInstanceLoopCharacteristics loopCharacteristics = new MultiInstanceLoopCharacteristics();
@ -527,42 +562,33 @@ public class WFlowToBpmnCreator {
loopCharacteristics.setElementVariable("assignee");
loopCharacteristics.setInputDataItem("${processTaskService.getNodeApprovalUsers(execution)}");
//设置完成条件先判断会签还是或签
String completionCondition = "";
switch (props.getMode()) {
case OR: //有任意一个人处理过就结束
completionCondition = "nrOfCompletedInstances >= 1";
loopCharacteristics.setSequential(false);
break;
case AND: //所有任务都结束
completionCondition = "nrOfActiveInstances == 0";
loopCharacteristics.setSequential(false);
break;
case NEXT:
completionCondition = "nrOfActiveInstances == 0";
loopCharacteristics.setSequential(true);
break;
}
loopCharacteristics.setCompletionCondition("${" + completionCondition + "}");
loopCharacteristics.setSequential(ApprovalModeEnum.NEXT.equals(props.getMode()));
loopCharacteristics.setCompletionCondition("${uelTools.nodeIsComplete(execution, '" + props.getMode().toString() + "')}");
return loopCharacteristics;
}
/**
* 获取ISO8601时间
*
* @param time
* @param unit 单位
* @return 格式化时间
*/
private String getISO8601Time(Integer time, String unit) {
switch (unit) {
case "D": return "P" + time + unit;
case "H": return "PT" + time + unit;
case "M": return "PT" + time + unit;
case "D":
return "P" + time + unit;
case "H":
return "PT" + time + unit;
case "M":
return "PT" + time + unit;
}
return null;
}
/**
* 构造主子流程变量传递参数
*
* @param vars 参数
* @param reverse 是否为逆向传递
* @return 参数列表