Browse Source

bpm:code review 钉钉流程设计器

YunaiV 1 year ago
parent
commit
95dbf4f8aa

+ 11 - 6
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;
 public enum BpmSimpleModelNodeType implements IntArrayValuable {
 
     // TODO @jaosn:-1、0、1、4、-2 是前端已经定义好的么?感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈;类似 usertask 用户审批;
+    // TODO @jason:_NODE 都删除掉哈;
     START_EVENT_NODE(0, "开始节点"),
-    APPROVE_USER_NODE(1, "审批人节点"),
-    // 抄送人节点、对应 BPMN 的 ScriptTask. 使用ScriptTask 原因。好像 ServiceTask 自定义属性不能写入 XML
-    SCRIPT_TASK_NODE(2, "抄送人节点"),
-    EXCLUSIVE_GATEWAY_NODE(4, "排他网关"),
-    PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"),
+    END_EVENT_NODE(-2, "结束节点"), // TODO @jaosn:挪到 START_EVENT_NODE 后;
+
+    APPROVE_USER_NODE(1, "审批人节点"), // TODO @jaosn:是不是这里从 10 开始好点;相当于说,0-9 给开始和结束;10-19 给各种节点;20-29 给各种条件;TODO @jason:改成 USER_TASK 是不是好点呀
+    // 抄送人节点、对应 BPMN 的 ScriptTask. 使用ScriptTask 原因。好像 ServiceTask 自定义属性不能写入 XML;
+    // TODO @jason:ServiceTask 自定义 xml,有没啥报错信息;
+    SCRIPT_TASK_NODE(2, "抄送人节点"), // TODO @jason:是不是改成 COPY_TASK 好一点哈;
+
+    EXCLUSIVE_GATEWAY_NODE(4, "排他网关"), // TODO @jason:是不是改成叫 条件分支?
+    PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"), // TODO @jason:是不是一个 并行分支 ?就可以啦?
     PARALLEL_GATEWAY_JOIN_NODE(6, "并行网关聚合节点"),
-    END_EVENT_NODE(-2, "结束节点");
+    ;
 
     public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmSimpleModelNodeType::getType).toArray();
 

+ 4 - 1
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 {
         return userTaskList;
     }
 
-    // ========== TODO 芋艿:这里得捉摸下; ==========
+    // ========== TODO @jason:单独出一个 SimpleModelUtils;定位上,它是 BPMN 的精简模式 ==========
 
     /**
      * 仿钉钉流程设计模型数据结构(json) 转换成 Bpmn Model (待完善)
@@ -382,6 +382,7 @@ public class BpmnModelUtils {
         }
         BpmSimpleModelNodeType nodeType = BpmSimpleModelNodeType.valueOf(node.getType());
         Assert.notNull(nodeType, "模型节点类型不支持");
+        // TODO @jason:建议是,addXXX 都改成 buildXXX,构建出一个什么;然后返回之后,让这个方法添加到自己的结果里;
         switch (nodeType) {
             case START_EVENT_NODE:
             case APPROVE_USER_NODE:
@@ -488,9 +489,11 @@ public class BpmnModelUtils {
         ScriptTask scriptTask = new ScriptTask();
         scriptTask.setId(node.getId());
         scriptTask.setName(node.getName());
+        // TODO @jason:建议使用 ServiceTask,通过 executionListeners 实现;
         scriptTask.setScriptFormat(ScriptingEngines.DEFAULT_SCRIPTING_LANGUAGE);
         scriptTask.setScript(BPMN_SIMPLE_COPY_EXECUTION_SCRIPT);
         // 添加自定义属性
+        // TODO @jason:可以使用 ServiceTask 搞 ExtensionAttribute 么?
         addExtensionAttributes(node, scriptTask);
         mainProcess.addFlowElement(scriptTask);
     }

+ 1 - 1
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 {
      * @param id 编号
      * @param xmlBytes BPMN XML bytes
      */
-    // TODO @芋艿:可能要关注下
+    // TODO @芋艿:感觉可以不修改这个方法,而是额外加一个方法;传入 id,bpmn,json
     void saveModelBpmnXml(String id, byte[] xmlBytes);
 
     /**

+ 1 - 0
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
 import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.USER_TASK_CANDIDATE_PARAM;
 import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY;
 
+// TODO @jason:这块可以讨论下,是不是合并成一个 BpmnModelServiceImpl
 /**
  * 仿钉钉流程设计 Service 实现类
  *

+ 2 - 1
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
     @Lazy // 延迟加载,避免循环依赖
     private BpmProcessDefinitionService processDefinitionService;
 
+    // TODO @芋艿:这里多加了一个 name;
     @Override
     public void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String taskId, String taskName) {
-        // 1.1 校验任务存在 暂时去掉这个校验. 因为任务可能仿钉钉快搭的抄送节点(ScriptTask)
+        // 1.1 校验任务存在 暂时去掉这个校验. 因为任务可能仿钉钉快搭的抄送节点(ScriptTask) TODO jason:抄送节点,会没有来源的 taskId 么?
 //        Task task = taskService.getTask(taskId);
 //        if (ObjectUtil.isNull(task)) {
 //            throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);

+ 4 - 2
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;
 import java.util.Set;
 
 /**
- * 仿钉钉快搭各个节点 Service
+ * 仿钉钉快搭各个节点 Service TODO @jason:注释要有空行哈;
  * @author jason
  */
 @Service
@@ -21,14 +21,16 @@ public class BpmSimpleNodeService {
     private BpmProcessInstanceCopyService processInstanceCopyService;
 
     /**
-     * 仿钉钉快搭抄送
+     * 仿钉钉快搭抄送 TODO @jason:注释要有空行哈;
      * @param execution 执行的任务(ScriptTask)
      */
     public Boolean copy(DelegateExecution execution) {
+        // TODO @芋艿:可能要考虑,系统抄送,没有 taskId 的情况。
         Set<Long> userIds = taskCandidateInvoker.calculateUsers(execution);
         FlowElement currentFlowElement = execution.getCurrentFlowElement();
         processInstanceCopyService.createProcessInstanceCopy(userIds, execution.getProcessInstanceId(),
                 currentFlowElement.getId(), currentFlowElement.getName());
         return Boolean.TRUE;
     }
+
 }