Commit 95dbf4f8aa8a49439f6bb2f32b04036b766b6931
1 parent
df936dee
bpm:code review 钉钉流程设计器
Showing
6 changed files
with
23 additions
and
11 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmSimpleModelNodeType.java
| @@ -18,14 +18,19 @@ import java.util.Objects; | @@ -18,14 +18,19 @@ import java.util.Objects; | ||
| 18 | public enum BpmSimpleModelNodeType implements IntArrayValuable { | 18 | public enum BpmSimpleModelNodeType implements IntArrayValuable { |
| 19 | 19 | ||
| 20 | // TODO @jaosn:-1、0、1、4、-2 是前端已经定义好的么?感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈;类似 usertask 用户审批; | 20 | // TODO @jaosn:-1、0、1、4、-2 是前端已经定义好的么?感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈;类似 usertask 用户审批; |
| 21 | + // TODO @jason:_NODE 都删除掉哈; | ||
| 21 | START_EVENT_NODE(0, "开始节点"), | 22 | START_EVENT_NODE(0, "开始节点"), |
| 22 | - APPROVE_USER_NODE(1, "审批人节点"), | ||
| 23 | - // 抄送人节点、对应 BPMN 的 ScriptTask. 使用ScriptTask 原因。好像 ServiceTask 自定义属性不能写入 XML | ||
| 24 | - SCRIPT_TASK_NODE(2, "抄送人节点"), | ||
| 25 | - EXCLUSIVE_GATEWAY_NODE(4, "排他网关"), | ||
| 26 | - PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"), | 23 | + END_EVENT_NODE(-2, "结束节点"), // TODO @jaosn:挪到 START_EVENT_NODE 后; |
| 24 | + | ||
| 25 | + APPROVE_USER_NODE(1, "审批人节点"), // TODO @jaosn:是不是这里从 10 开始好点;相当于说,0-9 给开始和结束;10-19 给各种节点;20-29 给各种条件;TODO @jason:改成 USER_TASK 是不是好点呀 | ||
| 26 | + // 抄送人节点、对应 BPMN 的 ScriptTask. 使用ScriptTask 原因。好像 ServiceTask 自定义属性不能写入 XML; | ||
| 27 | + // TODO @jason:ServiceTask 自定义 xml,有没啥报错信息; | ||
| 28 | + SCRIPT_TASK_NODE(2, "抄送人节点"), // TODO @jason:是不是改成 COPY_TASK 好一点哈; | ||
| 29 | + | ||
| 30 | + EXCLUSIVE_GATEWAY_NODE(4, "排他网关"), // TODO @jason:是不是改成叫 条件分支? | ||
| 31 | + PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"), // TODO @jason:是不是一个 并行分支 ?就可以啦? | ||
| 27 | PARALLEL_GATEWAY_JOIN_NODE(6, "并行网关聚合节点"), | 32 | PARALLEL_GATEWAY_JOIN_NODE(6, "并行网关聚合节点"), |
| 28 | - END_EVENT_NODE(-2, "结束节点"); | 33 | + ; |
| 29 | 34 | ||
| 30 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmSimpleModelNodeType::getType).toArray(); | 35 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmSimpleModelNodeType::getType).toArray(); |
| 31 | 36 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java
| @@ -340,7 +340,7 @@ public class BpmnModelUtils { | @@ -340,7 +340,7 @@ public class BpmnModelUtils { | ||
| 340 | return userTaskList; | 340 | return userTaskList; |
| 341 | } | 341 | } |
| 342 | 342 | ||
| 343 | - // ========== TODO 芋艿:这里得捉摸下; ========== | 343 | + // ========== TODO @jason:单独出一个 SimpleModelUtils;定位上,它是 BPMN 的精简模式 ========== |
| 344 | 344 | ||
| 345 | /** | 345 | /** |
| 346 | * 仿钉钉流程设计模型数据结构(json) 转换成 Bpmn Model (待完善) | 346 | * 仿钉钉流程设计模型数据结构(json) 转换成 Bpmn Model (待完善) |
| @@ -382,6 +382,7 @@ public class BpmnModelUtils { | @@ -382,6 +382,7 @@ public class BpmnModelUtils { | ||
| 382 | } | 382 | } |
| 383 | BpmSimpleModelNodeType nodeType = BpmSimpleModelNodeType.valueOf(node.getType()); | 383 | BpmSimpleModelNodeType nodeType = BpmSimpleModelNodeType.valueOf(node.getType()); |
| 384 | Assert.notNull(nodeType, "模型节点类型不支持"); | 384 | Assert.notNull(nodeType, "模型节点类型不支持"); |
| 385 | + // TODO @jason:建议是,addXXX 都改成 buildXXX,构建出一个什么;然后返回之后,让这个方法添加到自己的结果里; | ||
| 385 | switch (nodeType) { | 386 | switch (nodeType) { |
| 386 | case START_EVENT_NODE: | 387 | case START_EVENT_NODE: |
| 387 | case APPROVE_USER_NODE: | 388 | case APPROVE_USER_NODE: |
| @@ -488,9 +489,11 @@ public class BpmnModelUtils { | @@ -488,9 +489,11 @@ public class BpmnModelUtils { | ||
| 488 | ScriptTask scriptTask = new ScriptTask(); | 489 | ScriptTask scriptTask = new ScriptTask(); |
| 489 | scriptTask.setId(node.getId()); | 490 | scriptTask.setId(node.getId()); |
| 490 | scriptTask.setName(node.getName()); | 491 | scriptTask.setName(node.getName()); |
| 492 | + // TODO @jason:建议使用 ServiceTask,通过 executionListeners 实现; | ||
| 491 | scriptTask.setScriptFormat(ScriptingEngines.DEFAULT_SCRIPTING_LANGUAGE); | 493 | scriptTask.setScriptFormat(ScriptingEngines.DEFAULT_SCRIPTING_LANGUAGE); |
| 492 | scriptTask.setScript(BPMN_SIMPLE_COPY_EXECUTION_SCRIPT); | 494 | scriptTask.setScript(BPMN_SIMPLE_COPY_EXECUTION_SCRIPT); |
| 493 | // 添加自定义属性 | 495 | // 添加自定义属性 |
| 496 | + // TODO @jason:可以使用 ServiceTask 搞 ExtensionAttribute 么? | ||
| 494 | addExtensionAttributes(node, scriptTask); | 497 | addExtensionAttributes(node, scriptTask); |
| 495 | mainProcess.addFlowElement(scriptTask); | 498 | mainProcess.addFlowElement(scriptTask); |
| 496 | } | 499 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelService.java
| @@ -53,7 +53,7 @@ public interface BpmModelService { | @@ -53,7 +53,7 @@ public interface BpmModelService { | ||
| 53 | * @param id 编号 | 53 | * @param id 编号 |
| 54 | * @param xmlBytes BPMN XML bytes | 54 | * @param xmlBytes BPMN XML bytes |
| 55 | */ | 55 | */ |
| 56 | - // TODO @芋艿:可能要关注下; | 56 | + // TODO @芋艿:感觉可以不修改这个方法,而是额外加一个方法;传入 id,bpmn,json; |
| 57 | void saveModelBpmnXml(String id, byte[] xmlBytes); | 57 | void saveModelBpmnXml(String id, byte[] xmlBytes); |
| 58 | 58 | ||
| 59 | /** | 59 | /** |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmSimpleModelServiceImpl.java
| @@ -26,6 +26,7 @@ import static cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeTyp | @@ -26,6 +26,7 @@ import static cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeTyp | ||
| 26 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.USER_TASK_CANDIDATE_PARAM; | 26 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.USER_TASK_CANDIDATE_PARAM; |
| 27 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY; | 27 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY; |
| 28 | 28 | ||
| 29 | +// TODO @jason:这块可以讨论下,是不是合并成一个 BpmnModelServiceImpl | ||
| 29 | /** | 30 | /** |
| 30 | * 仿钉钉流程设计 Service 实现类 | 31 | * 仿钉钉流程设计 Service 实现类 |
| 31 | * | 32 | * |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java
| @@ -44,9 +44,10 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | @@ -44,9 +44,10 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | ||
| 44 | @Lazy // 延迟加载,避免循环依赖 | 44 | @Lazy // 延迟加载,避免循环依赖 |
| 45 | private BpmProcessDefinitionService processDefinitionService; | 45 | private BpmProcessDefinitionService processDefinitionService; |
| 46 | 46 | ||
| 47 | + // TODO @芋艿:这里多加了一个 name; | ||
| 47 | @Override | 48 | @Override |
| 48 | public void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String taskId, String taskName) { | 49 | public void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String taskId, String taskName) { |
| 49 | - // 1.1 校验任务存在 暂时去掉这个校验. 因为任务可能仿钉钉快搭的抄送节点(ScriptTask) | 50 | + // 1.1 校验任务存在 暂时去掉这个校验. 因为任务可能仿钉钉快搭的抄送节点(ScriptTask) TODO jason:抄送节点,会没有来源的 taskId 么? |
| 50 | // Task task = taskService.getTask(taskId); | 51 | // Task task = taskService.getTask(taskId); |
| 51 | // if (ObjectUtil.isNull(task)) { | 52 | // if (ObjectUtil.isNull(task)) { |
| 52 | // throw exception(ErrorCodeConstants.TASK_NOT_EXISTS); | 53 | // throw exception(ErrorCodeConstants.TASK_NOT_EXISTS); |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmSimpleNodeService.java
| @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; | @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; | ||
| 9 | import java.util.Set; | 9 | import java.util.Set; |
| 10 | 10 | ||
| 11 | /** | 11 | /** |
| 12 | - * 仿钉钉快搭各个节点 Service | 12 | + * 仿钉钉快搭各个节点 Service TODO @jason:注释要有空行哈; |
| 13 | * @author jason | 13 | * @author jason |
| 14 | */ | 14 | */ |
| 15 | @Service | 15 | @Service |
| @@ -21,14 +21,16 @@ public class BpmSimpleNodeService { | @@ -21,14 +21,16 @@ public class BpmSimpleNodeService { | ||
| 21 | private BpmProcessInstanceCopyService processInstanceCopyService; | 21 | private BpmProcessInstanceCopyService processInstanceCopyService; |
| 22 | 22 | ||
| 23 | /** | 23 | /** |
| 24 | - * 仿钉钉快搭抄送 | 24 | + * 仿钉钉快搭抄送 TODO @jason:注释要有空行哈; |
| 25 | * @param execution 执行的任务(ScriptTask) | 25 | * @param execution 执行的任务(ScriptTask) |
| 26 | */ | 26 | */ |
| 27 | public Boolean copy(DelegateExecution execution) { | 27 | public Boolean copy(DelegateExecution execution) { |
| 28 | + // TODO @芋艿:可能要考虑,系统抄送,没有 taskId 的情况。 | ||
| 28 | Set<Long> userIds = taskCandidateInvoker.calculateUsers(execution); | 29 | Set<Long> userIds = taskCandidateInvoker.calculateUsers(execution); |
| 29 | FlowElement currentFlowElement = execution.getCurrentFlowElement(); | 30 | FlowElement currentFlowElement = execution.getCurrentFlowElement(); |
| 30 | processInstanceCopyService.createProcessInstanceCopy(userIds, execution.getProcessInstanceId(), | 31 | processInstanceCopyService.createProcessInstanceCopy(userIds, execution.getProcessInstanceId(), |
| 31 | currentFlowElement.getId(), currentFlowElement.getName()); | 32 | currentFlowElement.getId(), currentFlowElement.getName()); |
| 32 | return Boolean.TRUE; | 33 | return Boolean.TRUE; |
| 33 | } | 34 | } |
| 35 | + | ||
| 34 | } | 36 | } |