【代码优化】BPM:增加一个默认的发起人节点

This commit is contained in:
YunaiV 2024-08-21 22:16:19 +08:00
parent 8b93a71f56
commit 764a242d07
4 changed files with 15 additions and 22 deletions

View File

@ -17,15 +17,13 @@ import java.util.Objects;
@AllArgsConstructor
public enum BpmSimpleModelNodeType implements IntArrayValuable {
// TODO @jaosn-1014-2 是前端已经定义好的么感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈类似 usertask 用户审批
// @芋艿 感觉还是用 START_NODE . END_NODE 比较好.
// 0 1 开始和结束
// 0 ~ 1 开始和结束
START_NODE(0, "开始节点"),
END_NODE(1, "结束节点"), // TODO @jaosn挪到 START_EVENT_NODE
END_NODE(1, "结束节点"),
// 10 ~ 49 各种节点
START_USER_NODE(10, "发起人节点"), // 发起人节点前端的开始节点Id 固定
APPROVE_NODE(11, "审批人节点"), // TODO @jaosn是不是这里从 10 开始好点相当于说0-9 给开始和结束10-19 给各种节点20-29 给各种条件 TODO 后面改改
APPROVE_NODE(11, "审批人节点"),
COPY_NODE(12, "抄送人节点"),
// 50 ~ 条件分支

View File

@ -103,7 +103,6 @@ public interface BpmnModelConstants {
* BPMN Start Event Node Id
*/
String START_EVENT_NODE_ID = "StartEvent";
/**
* BPMN Start Event Node Name
*/

View File

@ -30,12 +30,14 @@ public class BpmnVariableConstants {
*/
public static final String PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES = "PROCESS_START_USER_SELECT_ASSIGNEES";
// TODO @芋艿用于处理驳回到发起人时如果被自动通过的逻辑
/**
* 流程实例的变量 - 用于判断流程实例变量节点是否驳回. 格式 RETURN_FLAG_{节点 id}
*
* @see ProcessInstance#getProcessVariables()
*/
public static final String PROCESS_INSTANCE_VARIABLE_RETURN_FLAG = "RETURN_FLAG_%s";
public static final String PROCESS_INSTANCE_VARIABLE_RETURN_FLAG = "RETURN_FLAG_%s";
/**
* 任务的变量 - 状态
*

View File

@ -9,10 +9,7 @@ import cn.hutool.core.util.*;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.RejectHandler;
import cn.iocoder.yudao.module.bpm.enums.definition.BpmBoundaryEventType;
import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModeConditionType;
import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType;
import cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskApproveMethodEnum;
import cn.iocoder.yudao.module.bpm.enums.definition.*;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.BpmCopyTaskDelegate;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.simplemodel.SimpleModelConditionGroups;
@ -28,7 +25,6 @@ import java.util.Objects;
import static cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.OperationButtonSetting;
import static cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.TimeoutHandler;
import static cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType.*;
import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskApproveTypeEnum.USER;
import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskAssignStartUserHandlerTypeEnum.SKIP;
import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutHandlerTypeEnum.REMINDER;
import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum.START_USER;
@ -85,7 +81,8 @@ public class SimpleModelUtils {
process.setExecutable(Boolean.TRUE); // TODO @jason这个是必须设置的么
bpmnModel.addProcess(process);
// 目前前端的第一个节点是 发起人节点这里构建一个StartNode. 用于创建 Bpmn StartEvent 节点
// TODO 芋艿这里可能纠结下到底前端传递还是后端创建出来
// 目前前端的第一个节点是发起人节点这里构建一个 StartNode用于创建 Bpmn StartEvent 节点
BpmSimpleModelNodeVO startNode = buildStartSimpleModelNode();
startNode.setChildNode(simpleModelNode);
// 前端模型数据结构 SimpleModel 构建 FlowNode 并添加到 Main Process
@ -348,7 +345,6 @@ public class SimpleModelUtils {
return buildBpmnStartUserTask(node);
}
private static List<FlowElement> convertApproveNode(BpmSimpleModelNodeVO node) {
List<FlowElement> flowElements = new ArrayList<>();
UserTask userTask = buildBpmnUserTask(node);
@ -467,7 +463,7 @@ public class SimpleModelUtils {
// 如果不是审批人节点则直接返回
addExtensionElement(userTask, USER_TASK_APPROVE_TYPE, StrUtil.toStringOrNull(node.getApproveType()));
if (ObjectUtil.notEqual(node.getApproveType(), USER.getType())) {
if (ObjectUtil.notEqual(node.getApproveType(), BpmUserTaskApproveTypeEnum.USER.getType())) {
return userTask;
}
@ -599,12 +595,10 @@ public class SimpleModelUtils {
// ========== 各种 build 节点的方法 ==========
private static StartEvent convertStartNode(BpmSimpleModelNodeVO node) {
private static StartEvent convertStartNode(BpmSimpleModelNodeVO node) {
StartEvent startEvent = new StartEvent();
startEvent.setId(node.getId());
startEvent.setName(node.getName());
// TODO 芋艿 + jason要不要在开启节点后面加一个发起人任务节点然后自动审批通过
// @芋艿 这个是不是由前端来实现 默认开始节点后面跟一个 发起人的审批节点(审批人是发起人自己
return startEvent;
}
@ -613,18 +607,18 @@ public class SimpleModelUtils {
userTask.setId(node.getId());
userTask.setName(node.getName());
// 人工审批
addExtensionElement(userTask, USER_TASK_APPROVE_TYPE, USER.getType().toString());
addExtensionElement(userTask, USER_TASK_APPROVE_TYPE, BpmUserTaskApproveTypeEnum.USER.getType().toString());
// 候选人策略为发起人自己
addCandidateElements(START_USER.getStrategy(),null, userTask);
// 添加表单字段权限属性元素
addFormFieldsPermission(node.getFieldsPermission(), userTask);
// 添加操作按钮配置属性元素.
// 添加操作按钮配置属性元素
addButtonsSetting(node.getButtonsSetting(), userTask);
// 使用自动通过策略TODO @芋艿 复用了SKIP 是否需要新加一个策略
// 使用自动通过策略 TODO @芋艿 复用了SKIP 是否需要新加一个策略TODO @芋艿回复是不是应该类似飞书搞个草稿状态待定还有一种策略不标记自动通过而是首次发起后第一个节点自动通过
addAssignStartUserHandlerType(SKIP.getType(), userTask);
return userTask;
}
private static EndEvent convertEndNode(BpmSimpleModelNodeVO node) {
EndEvent endEvent = new EndEvent();
endEvent.setId(node.getId());