diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmListenerMapType.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmListenerMapType.java index 4afd9ea3c3..e07675d578 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmListenerMapType.java +++ b/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 任务监听器键值对类型 * diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java index 45c5db3a00..46c755e14d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java +++ b/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 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 = "审批节点拒绝处理策略") diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java index 2f1d966f6b..f4464ef2b4 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java +++ b/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; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java index 18360241ef..d77b820aad 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java +++ b/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 processVariables = processInstance.getProcessVariables(); + // 2. 获取请求头和请求体 - HashMap headers = new HashMap<>(); - HashMap body = new HashMap<>(); + Map processVariables = processInstance.getProcessVariables(); + Map headers = new HashMap<>(); + Map 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 芋艿:待定! } } \ No newline at end of file