Commit b5f6545d5a1909e8bb750c36939ded2f9a8d2320

Authored by YunaiV
1 parent fdc6f6ed

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

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; @@ -6,6 +6,7 @@ import lombok.Getter;
6 6
7 import java.util.Arrays; 7 import java.util.Arrays;
8 8
  9 +// TODO @芋艿:枚举值的类名,在考虑下
9 /** 10 /**
10 * BPM 任务监听器键值对类型 11 * BPM 任务监听器键值对类型
11 * 12 *
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 { @@ -96,15 +96,19 @@ public class BpmSimpleModelNodeVO {
96 */ 96 */
97 private AssignEmptyHandler assignEmptyHandler; 97 private AssignEmptyHandler assignEmptyHandler;
98 98
  99 + // TODO @lesan:建议改成 taskCreateListener;
99 /** 100 /**
100 * 创建任务监听器 101 * 创建任务监听器
101 */ 102 */
102 private ListenerHandler createTaskListener; 103 private ListenerHandler createTaskListener;
103 104
104 @Schema(description = "任务监听器") 105 @Schema(description = "任务监听器")
  106 + @Valid
105 @Data 107 @Data
106 public static class ListenerHandler { 108 public static class ListenerHandler {
107 109
  110 + // TODO @lesan:参数校验,需要加下
  111 +
108 @Schema(description = "是否开启任务监听器", example = "false") 112 @Schema(description = "是否开启任务监听器", example = "false")
109 private Boolean enable; 113 private Boolean enable;
110 114
@@ -117,6 +121,8 @@ public class BpmSimpleModelNodeVO { @@ -117,6 +121,8 @@ public class BpmSimpleModelNodeVO {
117 @Schema(description = "请求体", example = "[]") 121 @Schema(description = "请求体", example = "[]")
118 private List<ListenerMap> body; 122 private List<ListenerMap> body;
119 123
  124 + // TODO @芋艿:这里后续要不要复用;
  125 +
120 @Schema(description = "任务监听器键值对") 126 @Schema(description = "任务监听器键值对")
121 @Data 127 @Data
122 public static class ListenerMap { 128 public static class ListenerMap {
@@ -125,11 +131,14 @@ public class BpmSimpleModelNodeVO { @@ -125,11 +131,14 @@ public class BpmSimpleModelNodeVO {
125 private String key; 131 private String key;
126 132
127 @Schema(description = "值类型", example = "1") 133 @Schema(description = "值类型", example = "1")
  134 + @InEnum(BpmListenerMapType.class)
128 private Integer type; 135 private Integer type;
129 136
130 @Schema(description = "值", example = "xxx") 137 @Schema(description = "值", example = "xxx")
131 private String value; 138 private String value;
  139 +
132 } 140 }
  141 +
133 } 142 }
134 143
135 @Schema(description = "审批节点拒绝处理策略") 144 @Schema(description = "审批节点拒绝处理策略")
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 { @@ -431,11 +431,14 @@ public class SimpleModelUtils {
431 flowableListener.setEvent(TaskListener.EVENTNAME_CREATE); 431 flowableListener.setEvent(TaskListener.EVENTNAME_CREATE);
432 flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); 432 flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
433 flowableListener.setImplementation(DELEGATE_EXPRESSION); 433 flowableListener.setImplementation(DELEGATE_EXPRESSION);
  434 + // TODO @lesan:可以加个 addExtensionElementJson() 方法;
  435 + // TODO @lesan:是不是不用带 "create" + EXTENSION_SUFFIX 这种,直接给个 "config" 就完事了!
434 addExtensionElement(userTask, "create" + EXTENSION_SUFFIX, 436 addExtensionElement(userTask, "create" + EXTENSION_SUFFIX,
  437 + // TODO @lesan:默认使用项目里的 JsonUtils 方法
435 JSONUtil.toJsonStr(node.getCreateTaskListener())); 438 JSONUtil.toJsonStr(node.getCreateTaskListener()));
436 flowableListeners.add(flowableListener); 439 flowableListeners.add(flowableListener);
437 } 440 }
438 - if (!flowableListeners.isEmpty()) { 441 + if (CollUtil.isNotEmpty(flowableListeners)) {
439 userTask.setTaskListeners(flowableListeners); 442 userTask.setTaskListeners(flowableListeners);
440 } 443 }
441 return userTask; 444 return userTask;
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 { @@ -46,20 +46,24 @@ public class BpmUserTaskListener implements TaskListener {
46 HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId()); 46 HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId());
47 BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId()); 47 BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId());
48 FlowElement userTaskElement = BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey()); 48 FlowElement userTaskElement = BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey());
  49 + // TODO @lesan:可以写到 FlowableUtils 里,简化解析逻辑!
49 BpmSimpleModelNodeVO.ListenerHandler listenerHandler = JSONUtil.toBean( 50 BpmSimpleModelNodeVO.ListenerHandler listenerHandler = JSONUtil.toBean(
50 parseExtensionElement(userTaskElement, delegateTask.getEventName() + EXTENSION_SUFFIX), 51 parseExtensionElement(userTaskElement, delegateTask.getEventName() + EXTENSION_SUFFIX),
51 BpmSimpleModelNodeVO.ListenerHandler.class); 52 BpmSimpleModelNodeVO.ListenerHandler.class);
52 - Map<String, Object> processVariables = processInstance.getProcessVariables(); 53 +
53 // 2. 获取请求头和请求体 54 // 2. 获取请求头和请求体
54 - HashMap<String, String> headers = new HashMap<>();  
55 - HashMap<String, Object> body = new HashMap<>(); 55 + Map<String, Object> processVariables = processInstance.getProcessVariables();
  56 + Map<String, String> headers = new HashMap<>();
  57 + Map<String, Object> body = new HashMap<>();
56 listenerHandler.getHeader().forEach(item -> { 58 listenerHandler.getHeader().forEach(item -> {
  59 + // TODO @lesan:可以写个统一的方法,解析参数。然后非空,put 到 headers 或者 body 里!
57 if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) { 60 if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) {
58 headers.put(item.getKey(), item.getValue()); 61 headers.put(item.getKey(), item.getValue());
59 } else if (item.getType().equals(BpmListenerMapType.FROM_FORM.getType())) { 62 } else if (item.getType().equals(BpmListenerMapType.FROM_FORM.getType())) {
60 headers.put(item.getKey(), processVariables.getOrDefault(item.getValue(), "").toString()); 63 headers.put(item.getKey(), processVariables.getOrDefault(item.getValue(), "").toString());
61 } 64 }
62 }); 65 });
  66 + // TODO @lesan:header 里面,需要添加下 tenant-id!
63 listenerHandler.getBody().forEach(item -> { 67 listenerHandler.getBody().forEach(item -> {
64 if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) { 68 if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) {
65 body.put(item.getKey(), item.getValue()); 69 body.put(item.getKey(), item.getValue());
@@ -67,10 +71,13 @@ public class BpmUserTaskListener implements TaskListener { @@ -67,10 +71,13 @@ public class BpmUserTaskListener implements TaskListener {
67 body.put(item.getKey(), processVariables.getOrDefault(item.getValue(), "")); 71 body.put(item.getKey(), processVariables.getOrDefault(item.getValue(), ""));
68 } 72 }
69 }); 73 });
  74 +
70 // 3. 异步发起请求 75 // 3. 异步发起请求
  76 + // TODO @lesan:最好打印下日志!
71 HttpRequest.post(listenerHandler.getPath()) 77 HttpRequest.post(listenerHandler.getPath())
72 .addHeaders(headers).form(body).executeAsync(); 78 .addHeaders(headers).form(body).executeAsync();
73 - // 4. 是否需要后续操作? 79 +
  80 + // 4. 是否需要后续操作?TODO 芋艿:待定!
74 } 81 }
75 82
76 } 83 }
77 \ No newline at end of file 84 \ No newline at end of file