Commit 95dbf4f8aa8a49439f6bb2f32b04036b766b6931

Authored by YunaiV
1 parent df936dee

bpm:code review 钉钉流程设计器

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 }