Commit 764a242d07e855ef3238323f1ddd310e264b407e
1 parent
8b93a71f
【代码优化】BPM:增加一个默认的发起人节点
Showing
4 changed files
with
15 additions
and
22 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmSimpleModelNodeType.java
| @@ -17,15 +17,13 @@ import java.util.Objects; | @@ -17,15 +17,13 @@ import java.util.Objects; | ||
| 17 | @AllArgsConstructor | 17 | @AllArgsConstructor |
| 18 | public enum BpmSimpleModelNodeType implements IntArrayValuable { | 18 | public enum BpmSimpleModelNodeType implements IntArrayValuable { |
| 19 | 19 | ||
| 20 | - // TODO @jaosn:-1、0、1、4、-2 是前端已经定义好的么?感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈;类似 usertask 用户审批; | ||
| 21 | - // @芋艿 感觉还是用 START_NODE . END_NODE 比较好. | ||
| 22 | - // 0 1 开始和结束 | 20 | + // 0 ~ 1 开始和结束 |
| 23 | START_NODE(0, "开始节点"), | 21 | START_NODE(0, "开始节点"), |
| 24 | - END_NODE(1, "结束节点"), // TODO @jaosn:挪到 START_EVENT_NODE 后; | 22 | + END_NODE(1, "结束节点"), |
| 25 | 23 | ||
| 26 | // 10 ~ 49 各种节点 | 24 | // 10 ~ 49 各种节点 |
| 27 | START_USER_NODE(10, "发起人节点"), // 发起人节点。前端的开始节点,Id 固定 | 25 | START_USER_NODE(10, "发起人节点"), // 发起人节点。前端的开始节点,Id 固定 |
| 28 | - APPROVE_NODE(11, "审批人节点"), // TODO @jaosn:是不是这里从 10 开始好点;相当于说,0-9 给开始和结束;10-19 给各种节点;20-29 给各种条件; TODO 后面改改 | 26 | + APPROVE_NODE(11, "审批人节点"), |
| 29 | COPY_NODE(12, "抄送人节点"), | 27 | COPY_NODE(12, "抄送人节点"), |
| 30 | 28 | ||
| 31 | // 50 ~ 条件分支 | 29 | // 50 ~ 条件分支 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java
| @@ -103,7 +103,6 @@ public interface BpmnModelConstants { | @@ -103,7 +103,6 @@ public interface BpmnModelConstants { | ||
| 103 | * BPMN Start Event Node Id | 103 | * BPMN Start Event Node Id |
| 104 | */ | 104 | */ |
| 105 | String START_EVENT_NODE_ID = "StartEvent"; | 105 | String START_EVENT_NODE_ID = "StartEvent"; |
| 106 | - | ||
| 107 | /** | 106 | /** |
| 108 | * BPMN Start Event Node Name | 107 | * BPMN Start Event Node Name |
| 109 | */ | 108 | */ |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnVariableConstants.java
| @@ -30,12 +30,14 @@ public class BpmnVariableConstants { | @@ -30,12 +30,14 @@ public class BpmnVariableConstants { | ||
| 30 | */ | 30 | */ |
| 31 | public static final String PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES = "PROCESS_START_USER_SELECT_ASSIGNEES"; | 31 | public static final String PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES = "PROCESS_START_USER_SELECT_ASSIGNEES"; |
| 32 | 32 | ||
| 33 | + // TODO @芋艿:用于处理,驳回到发起人时,如果被自动通过的逻辑 | ||
| 33 | /** | 34 | /** |
| 34 | * 流程实例的变量 - 用于判断流程实例变量节点是否驳回. 格式 RETURN_FLAG_{节点 id} | 35 | * 流程实例的变量 - 用于判断流程实例变量节点是否驳回. 格式 RETURN_FLAG_{节点 id} |
| 35 | * | 36 | * |
| 36 | * @see ProcessInstance#getProcessVariables() | 37 | * @see ProcessInstance#getProcessVariables() |
| 37 | */ | 38 | */ |
| 38 | - public static final String PROCESS_INSTANCE_VARIABLE_RETURN_FLAG = "RETURN_FLAG_%s"; | 39 | + public static final String PROCESS_INSTANCE_VARIABLE_RETURN_FLAG = "RETURN_FLAG_%s"; |
| 40 | + | ||
| 39 | /** | 41 | /** |
| 40 | * 任务的变量 - 状态 | 42 | * 任务的变量 - 状态 |
| 41 | * | 43 | * |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
| @@ -9,10 +9,7 @@ import cn.hutool.core.util.*; | @@ -9,10 +9,7 @@ import cn.hutool.core.util.*; | ||
| 9 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 9 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 10 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; |
| 11 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.RejectHandler; | 11 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.RejectHandler; |
| 12 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmBoundaryEventType; | ||
| 13 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModeConditionType; | ||
| 14 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType; | ||
| 15 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskApproveMethodEnum; | 12 | +import cn.iocoder.yudao.module.bpm.enums.definition.*; |
| 16 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants; | 13 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants; |
| 17 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.BpmCopyTaskDelegate; | 14 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.BpmCopyTaskDelegate; |
| 18 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.simplemodel.SimpleModelConditionGroups; | 15 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.simplemodel.SimpleModelConditionGroups; |
| @@ -28,7 +25,6 @@ import java.util.Objects; | @@ -28,7 +25,6 @@ import java.util.Objects; | ||
| 28 | import static cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.OperationButtonSetting; | 25 | import static cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.OperationButtonSetting; |
| 29 | import static cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.TimeoutHandler; | 26 | import static cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.TimeoutHandler; |
| 30 | import static cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType.*; | 27 | import static cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType.*; |
| 31 | -import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskApproveTypeEnum.USER; | ||
| 32 | import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskAssignStartUserHandlerTypeEnum.SKIP; | 28 | import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskAssignStartUserHandlerTypeEnum.SKIP; |
| 33 | import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutHandlerTypeEnum.REMINDER; | 29 | import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutHandlerTypeEnum.REMINDER; |
| 34 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum.START_USER; | 30 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum.START_USER; |
| @@ -85,7 +81,8 @@ public class SimpleModelUtils { | @@ -85,7 +81,8 @@ public class SimpleModelUtils { | ||
| 85 | process.setExecutable(Boolean.TRUE); // TODO @jason:这个是必须设置的么? | 81 | process.setExecutable(Boolean.TRUE); // TODO @jason:这个是必须设置的么? |
| 86 | bpmnModel.addProcess(process); | 82 | bpmnModel.addProcess(process); |
| 87 | 83 | ||
| 88 | - // 目前前端的第一个节点是 发起人节点。这里构建一个StartNode. 用于创建 Bpmn 的 StartEvent 节点 | 84 | + // TODO 芋艿:这里可能纠结下,到底前端传递,还是后端创建出来。 |
| 85 | + // 目前前端的第一个节点是“发起人节点”。这里构建一个 StartNode,用于创建 Bpmn 的 StartEvent 节点 | ||
| 89 | BpmSimpleModelNodeVO startNode = buildStartSimpleModelNode(); | 86 | BpmSimpleModelNodeVO startNode = buildStartSimpleModelNode(); |
| 90 | startNode.setChildNode(simpleModelNode); | 87 | startNode.setChildNode(simpleModelNode); |
| 91 | // 从 前端模型数据结构 SimpleModel 构建 FlowNode 并添加到 Main Process | 88 | // 从 前端模型数据结构 SimpleModel 构建 FlowNode 并添加到 Main Process |
| @@ -348,7 +345,6 @@ public class SimpleModelUtils { | @@ -348,7 +345,6 @@ public class SimpleModelUtils { | ||
| 348 | return buildBpmnStartUserTask(node); | 345 | return buildBpmnStartUserTask(node); |
| 349 | } | 346 | } |
| 350 | 347 | ||
| 351 | - | ||
| 352 | private static List<FlowElement> convertApproveNode(BpmSimpleModelNodeVO node) { | 348 | private static List<FlowElement> convertApproveNode(BpmSimpleModelNodeVO node) { |
| 353 | List<FlowElement> flowElements = new ArrayList<>(); | 349 | List<FlowElement> flowElements = new ArrayList<>(); |
| 354 | UserTask userTask = buildBpmnUserTask(node); | 350 | UserTask userTask = buildBpmnUserTask(node); |
| @@ -467,7 +463,7 @@ public class SimpleModelUtils { | @@ -467,7 +463,7 @@ public class SimpleModelUtils { | ||
| 467 | 463 | ||
| 468 | // 如果不是审批人节点,则直接返回 | 464 | // 如果不是审批人节点,则直接返回 |
| 469 | addExtensionElement(userTask, USER_TASK_APPROVE_TYPE, StrUtil.toStringOrNull(node.getApproveType())); | 465 | addExtensionElement(userTask, USER_TASK_APPROVE_TYPE, StrUtil.toStringOrNull(node.getApproveType())); |
| 470 | - if (ObjectUtil.notEqual(node.getApproveType(), USER.getType())) { | 466 | + if (ObjectUtil.notEqual(node.getApproveType(), BpmUserTaskApproveTypeEnum.USER.getType())) { |
| 471 | return userTask; | 467 | return userTask; |
| 472 | } | 468 | } |
| 473 | 469 | ||
| @@ -599,12 +595,10 @@ public class SimpleModelUtils { | @@ -599,12 +595,10 @@ public class SimpleModelUtils { | ||
| 599 | 595 | ||
| 600 | // ========== 各种 build 节点的方法 ========== | 596 | // ========== 各种 build 节点的方法 ========== |
| 601 | 597 | ||
| 602 | - private static StartEvent convertStartNode(BpmSimpleModelNodeVO node) { | 598 | + private static StartEvent convertStartNode(BpmSimpleModelNodeVO node) { |
| 603 | StartEvent startEvent = new StartEvent(); | 599 | StartEvent startEvent = new StartEvent(); |
| 604 | startEvent.setId(node.getId()); | 600 | startEvent.setId(node.getId()); |
| 605 | startEvent.setName(node.getName()); | 601 | startEvent.setName(node.getName()); |
| 606 | - // TODO 芋艿 + jason:要不要在开启节点后面,加一个“发起人”任务节点,然后自动审批通过 | ||
| 607 | - // @芋艿 这个是不是由前端来实现。 默认开始节点后面跟一个 “发起人”的审批节点(审批人是发起人自己)。 | ||
| 608 | return startEvent; | 602 | return startEvent; |
| 609 | } | 603 | } |
| 610 | 604 | ||
| @@ -613,18 +607,18 @@ public class SimpleModelUtils { | @@ -613,18 +607,18 @@ public class SimpleModelUtils { | ||
| 613 | userTask.setId(node.getId()); | 607 | userTask.setId(node.getId()); |
| 614 | userTask.setName(node.getName()); | 608 | userTask.setName(node.getName()); |
| 615 | // 人工审批 | 609 | // 人工审批 |
| 616 | - addExtensionElement(userTask, USER_TASK_APPROVE_TYPE, USER.getType().toString()); | 610 | + addExtensionElement(userTask, USER_TASK_APPROVE_TYPE, BpmUserTaskApproveTypeEnum.USER.getType().toString()); |
| 617 | // 候选人策略为发起人自己 | 611 | // 候选人策略为发起人自己 |
| 618 | addCandidateElements(START_USER.getStrategy(),null, userTask); | 612 | addCandidateElements(START_USER.getStrategy(),null, userTask); |
| 619 | // 添加表单字段权限属性元素 | 613 | // 添加表单字段权限属性元素 |
| 620 | addFormFieldsPermission(node.getFieldsPermission(), userTask); | 614 | addFormFieldsPermission(node.getFieldsPermission(), userTask); |
| 621 | - // 添加操作按钮配置属性元素. | 615 | + // 添加操作按钮配置属性元素 |
| 622 | addButtonsSetting(node.getButtonsSetting(), userTask); | 616 | addButtonsSetting(node.getButtonsSetting(), userTask); |
| 623 | - // 使用自动通过策略。TODO @芋艿 复用了SKIP, 是否需要新加一个策略 | 617 | + // 使用自动通过策略 TODO @芋艿 复用了SKIP, 是否需要新加一个策略;TODO @芋艿:【回复】是不是应该类似飞书,搞个草稿状态。待定;还有一种策略,不标记自动通过,而是首次发起后,第一个节点,自动通过; |
| 624 | addAssignStartUserHandlerType(SKIP.getType(), userTask); | 618 | addAssignStartUserHandlerType(SKIP.getType(), userTask); |
| 625 | - | ||
| 626 | return userTask; | 619 | return userTask; |
| 627 | } | 620 | } |
| 621 | + | ||
| 628 | private static EndEvent convertEndNode(BpmSimpleModelNodeVO node) { | 622 | private static EndEvent convertEndNode(BpmSimpleModelNodeVO node) { |
| 629 | EndEvent endEvent = new EndEvent(); | 623 | EndEvent endEvent = new EndEvent(); |
| 630 | endEvent.setId(node.getId()); | 624 | endEvent.setId(node.getId()); |