【代码优化】工作流:移除多余的 attachNodeId 字段,因为不需要 UserTask 后面跟 ServiceTask 实现审批通过、不通过

This commit is contained in:
YunaiV 2024-10-19 15:42:22 +08:00
parent c0140a41f4
commit 23b011b6f9
2 changed files with 8 additions and 42 deletions

View File

@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple;
import cn.iocoder.yudao.framework.common.validation.InEnum;
import cn.iocoder.yudao.module.bpm.enums.definition.*;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
@ -79,12 +78,6 @@ public class BpmSimpleModelNodeVO {
@Schema(description = "操作按钮设置", example = "[]")
private List<OperationButtonSetting> buttonsSetting; // 用于审批节点
// TODO @jason看看是不是可以简化@芋艿 暂时先放着不知道后面是否会用到
/**
* 附加节点 Id, 该节点不从前端传入 由程序生成. 由于当个节点无法完成功能 需要附加节点来完成
*/
@JsonIgnore
private String attachNodeId;
/**
* 审批节点拒绝处理
*/

View File

@ -68,7 +68,7 @@ public class SimpleModelUtils {
EndEvent endEvent = BpmnModelUtils.getEndEvent(bpmnModel);
traverseNodeToBuildSequenceFlow(process, startNode, endEvent.getId());
// 3. 自动布局
// 4. 自动布局
new BpmnAutoLayout(bpmnModel).execute();
return bpmnModel;
}
@ -146,30 +146,16 @@ public class SimpleModelUtils {
*/
private static void traverseNormalNodeToBuildSequenceFlow(Process process, BpmSimpleModelNodeVO node, String targetNodeId) {
BpmSimpleModelNodeVO childNode = node.getChildNode();
boolean isChildNodeValid = isValidNode(childNode);
// 情况一节点则建立连线
if (isValidNode(childNode)) {
// TODO @jasonattachNodeId 是不是可以删除啦
if (StrUtil.isNotEmpty(node.getAttachNodeId())) {
// 2.1.1.2 如果有附加节点. 需要先建立和附加节点的连线再建立附加节点和目标节点的连线
List<SequenceFlow> sequenceFlows = buildAttachNodeSequenceFlow(node.getId(), node.getAttachNodeId(), childNode.getId());
sequenceFlows.forEach(process::addFlowElement);
} else {
SequenceFlow sequenceFlow = buildBpmnSequenceFlow(node.getId(), childNode.getId());
process.addFlowElement(sequenceFlow);
}
// 情况二没有子节点则直接跟 targetNodeId 建立连线例如说结束节点条件分支分支节点的孩子节点或聚合节点的最后一个节点
String finalTargetNodeId = isChildNodeValid? childNode.getId() : targetNodeId;
SequenceFlow sequenceFlow = buildBpmnSequenceFlow(node.getId(), finalTargetNodeId);
process.addFlowElement(sequenceFlow);
// 因为有子节点递归调用后续子节点
// 因为有子节点递归调用后续子节点
if (isChildNodeValid) {
traverseNodeToBuildSequenceFlow(process, childNode, targetNodeId);
} else {
// 情况二没有子节点则直接跟 targetNodeId 建立连线例如说结束节点条件分支分支节点的孩子节点或聚合节点的最后一个节点
// TODO @jasonattachNodeId 是不是可以删除啦
if (StrUtil.isNotEmpty(node.getAttachNodeId())) {
List<SequenceFlow> sequenceFlows = buildAttachNodeSequenceFlow(node.getId(), node.getAttachNodeId(), targetNodeId);
sequenceFlows.forEach(process::addFlowElement);
} else {
SequenceFlow sequenceFlow = buildBpmnSequenceFlow(node.getId(), targetNodeId);
process.addFlowElement(sequenceFlow);
}
}
}
@ -230,19 +216,6 @@ public class SimpleModelUtils {
traverseNodeToBuildSequenceFlow(process, childNode, targetNodeId);
}
/**
* 构建有附加节点的连线
*
* @param nodeId 当前节点 Id
* @param attachNodeId 附属节点 Id
* @param targetNodeId 目标节点 Id
*/
private static List<SequenceFlow> buildAttachNodeSequenceFlow(String nodeId, String attachNodeId, String targetNodeId) {
SequenceFlow sequenceFlow = buildBpmnSequenceFlow(nodeId, attachNodeId, null, null, null);
SequenceFlow attachSequenceFlow = buildBpmnSequenceFlow(attachNodeId, targetNodeId, null, null, null);
return CollUtil.newArrayList(sequenceFlow, attachSequenceFlow);
}
private static SequenceFlow buildBpmnSequenceFlow(String sourceId, String targetId) {
return buildBpmnSequenceFlow(sourceId, targetId, null, null, null);
}