Commit b5f6545d5a1909e8bb750c36939ded2f9a8d2320
1 parent
fdc6f6ed
【代码评审】BPM:Simple 设计器 - userTask 监听器
Showing
4 changed files
with
25 additions
and
5 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmListenerMapType.java
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 |