瀏覽代碼

【代码评审】BPM:Simple 设计器 - userTask 监听器

YunaiV 7 月之前
父節點
當前提交
b5f6545d5a

+ 1 - 0
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmListenerMapType.java

@@ -6,6 +6,7 @@ import lombok.Getter;
 
 import java.util.Arrays;
 
+// TODO @芋艿:枚举值的类名,在考虑下
 /**
  * BPM 任务监听器键值对类型
  *

+ 9 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java

@@ -96,15 +96,19 @@ public class BpmSimpleModelNodeVO {
      */
     private AssignEmptyHandler assignEmptyHandler;
 
+    // TODO @lesan:建议改成 taskCreateListener;
     /**
      * 创建任务监听器
      */
     private ListenerHandler createTaskListener;
 
     @Schema(description = "任务监听器")
+    @Valid
     @Data
     public static class ListenerHandler {
 
+        // TODO @lesan:参数校验,需要加下
+
         @Schema(description = "是否开启任务监听器", example = "false")
         private Boolean enable;
 
@@ -117,6 +121,8 @@ public class BpmSimpleModelNodeVO {
         @Schema(description = "请求体", example = "[]")
         private List<ListenerMap> body;
 
+        // TODO @芋艿:这里后续要不要复用;
+
         @Schema(description = "任务监听器键值对")
         @Data
         public static class ListenerMap {
@@ -125,11 +131,14 @@ public class BpmSimpleModelNodeVO {
             private String key;
 
             @Schema(description = "值类型", example = "1")
+            @InEnum(BpmListenerMapType.class)
             private Integer type;
 
             @Schema(description = "值", example = "xxx")
             private String value;
+
         }
+
     }
 
     @Schema(description = "审批节点拒绝处理策略")

+ 4 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java

@@ -431,11 +431,14 @@ public class SimpleModelUtils {
                 flowableListener.setEvent(TaskListener.EVENTNAME_CREATE);
                 flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
                 flowableListener.setImplementation(DELEGATE_EXPRESSION);
+                // TODO @lesan:可以加个 addExtensionElementJson() 方法;
+                // TODO @lesan:是不是不用带 "create" + EXTENSION_SUFFIX 这种,直接给个 "config" 就完事了!
                 addExtensionElement(userTask, "create" + EXTENSION_SUFFIX,
+                        // TODO @lesan:默认使用项目里的 JsonUtils 方法
                         JSONUtil.toJsonStr(node.getCreateTaskListener()));
                 flowableListeners.add(flowableListener);
             }
-            if (!flowableListeners.isEmpty()) {
+            if (CollUtil.isNotEmpty(flowableListeners)) {
                 userTask.setTaskListeners(flowableListeners);
             }
             return userTask;

+ 11 - 4
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java

@@ -46,20 +46,24 @@ public class BpmUserTaskListener implements TaskListener {
         HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId());
         BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId());
         FlowElement userTaskElement = BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey());
+        // TODO @lesan:可以写到 FlowableUtils 里,简化解析逻辑!
         BpmSimpleModelNodeVO.ListenerHandler listenerHandler = JSONUtil.toBean(
                 parseExtensionElement(userTaskElement, delegateTask.getEventName() + EXTENSION_SUFFIX),
                 BpmSimpleModelNodeVO.ListenerHandler.class);
-        Map<String, Object> processVariables = processInstance.getProcessVariables();
+
         // 2. 获取请求头和请求体
-        HashMap<String, String> headers = new HashMap<>();
-        HashMap<String, Object> body = new HashMap<>();
+        Map<String, Object> processVariables = processInstance.getProcessVariables();
+        Map<String, String> headers = new HashMap<>();
+        Map<String, Object> body = new HashMap<>();
         listenerHandler.getHeader().forEach(item -> {
+            // TODO @lesan:可以写个统一的方法,解析参数。然后非空,put 到 headers 或者 body 里!
             if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) {
                 headers.put(item.getKey(), item.getValue());
             } else if (item.getType().equals(BpmListenerMapType.FROM_FORM.getType())) {
                 headers.put(item.getKey(), processVariables.getOrDefault(item.getValue(), "").toString());
             }
         });
+        // TODO @lesan:header 里面,需要添加下 tenant-id!
         listenerHandler.getBody().forEach(item -> {
             if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) {
                 body.put(item.getKey(), item.getValue());
@@ -67,10 +71,13 @@ public class BpmUserTaskListener implements TaskListener {
                 body.put(item.getKey(), processVariables.getOrDefault(item.getValue(), ""));
             }
         });
+
         // 3. 异步发起请求
+        // TODO @lesan:最好打印下日志!
         HttpRequest.post(listenerHandler.getPath())
                 .addHeaders(headers).form(body).executeAsync();
-        // 4. 是否需要后续操作?
+
+        // 4. 是否需要后续操作?TODO 芋艿:待定!
     }
 
 }