Commit 1fb8c9238a7e2d773855c10ed12a2e34ae6ca799
1 parent
60d1f119
feat: Simple设计器-监听器完善
Showing
3 changed files
with
37 additions
and
37 deletions
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java
| ... | ... | @@ -115,25 +115,6 @@ public class BpmnModelUtils { |
| 115 | 115 | } |
| 116 | 116 | |
| 117 | 117 | /** |
| 118 | - * 给节点添加Simple设计器配置Json | |
| 119 | - * | |
| 120 | - * @param userTask 节点 | |
| 121 | - * @param node 节点对象 | |
| 122 | - */ | |
| 123 | - public static void addSimpleConfigInfo(FlowElement userTask, Object node) { | |
| 124 | - addExtensionElementJson(userTask, "config", node); | |
| 125 | - } | |
| 126 | - | |
| 127 | - /** | |
| 128 | - * 解析Simple设计器配置Json | |
| 129 | - * | |
| 130 | - * @param userTask 节点 | |
| 131 | - */ | |
| 132 | - public static BpmSimpleModelNodeVO parseSimpleConfigInfo(FlowElement userTask) { | |
| 133 | - return parseExtensionElementJson(userTask, "config", BpmSimpleModelNodeVO.class); | |
| 134 | - } | |
| 135 | - | |
| 136 | - /** | |
| 137 | 118 | * 给节点添加候选人元素 |
| 138 | 119 | * |
| 139 | 120 | * @param candidateStrategy 候选人策略 | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
| ... | ... | @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert; |
| 5 | 5 | import cn.hutool.core.map.MapUtil; |
| 6 | 6 | import cn.hutool.core.util.*; |
| 7 | 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 8 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | |
| 8 | 9 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; |
| 9 | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.ConditionGroups; |
| 10 | 11 | import cn.iocoder.yudao.module.bpm.enums.definition.*; |
| ... | ... | @@ -439,9 +440,6 @@ public class SimpleModelUtils { |
| 439 | 440 | } |
| 440 | 441 | // 设置监听器 |
| 441 | 442 | addUserTaskListener(node, userTask); |
| 442 | - // 设置 Simple 设计器节点配置 | |
| 443 | - // TODO @lesan:只设置到 flowableListener 里面,整个 node 太大了!因为很多都保存过啦。 | |
| 444 | - addSimpleConfigInfo(userTask, node); | |
| 445 | 443 | return userTask; |
| 446 | 444 | } |
| 447 | 445 | |
| ... | ... | @@ -453,6 +451,10 @@ public class SimpleModelUtils { |
| 453 | 451 | flowableListener.setEvent(TaskListener.EVENTNAME_CREATE); |
| 454 | 452 | flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); |
| 455 | 453 | flowableListener.setImplementation(DELEGATE_EXPRESSION); |
| 454 | + FieldExtension fieldExtension = new FieldExtension(); | |
| 455 | + fieldExtension.setFieldName("listenerConfig"); | |
| 456 | + fieldExtension.setStringValue(JsonUtils.toJsonString(node.getTaskCreateListener())); | |
| 457 | + flowableListener.getFieldExtensions().add(fieldExtension); | |
| 456 | 458 | flowableListeners.add(flowableListener); |
| 457 | 459 | } |
| 458 | 460 | if (node.getTaskAssignListener() != null |
| ... | ... | @@ -461,6 +463,10 @@ public class SimpleModelUtils { |
| 461 | 463 | flowableListener.setEvent(TaskListener.EVENTNAME_ASSIGNMENT); |
| 462 | 464 | flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); |
| 463 | 465 | flowableListener.setImplementation(DELEGATE_EXPRESSION); |
| 466 | + FieldExtension fieldExtension = new FieldExtension(); | |
| 467 | + fieldExtension.setFieldName("listenerConfig"); | |
| 468 | + fieldExtension.setStringValue(JsonUtils.toJsonString(node.getTaskAssignListener())); | |
| 469 | + flowableListener.getFieldExtensions().add(fieldExtension); | |
| 464 | 470 | flowableListeners.add(flowableListener); |
| 465 | 471 | } |
| 466 | 472 | if (node.getTaskCompleteListener() != null |
| ... | ... | @@ -469,6 +475,10 @@ public class SimpleModelUtils { |
| 469 | 475 | flowableListener.setEvent(TaskListener.EVENTNAME_COMPLETE); |
| 470 | 476 | flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); |
| 471 | 477 | flowableListener.setImplementation(DELEGATE_EXPRESSION); |
| 478 | + FieldExtension fieldExtension = new FieldExtension(); | |
| 479 | + fieldExtension.setFieldName("listenerConfig"); | |
| 480 | + fieldExtension.setStringValue(JsonUtils.toJsonString(node.getTaskCompleteListener())); | |
| 481 | + flowableListener.getFieldExtensions().add(fieldExtension); | |
| 472 | 482 | flowableListeners.add(flowableListener); |
| 473 | 483 | } |
| 474 | 484 | if (CollUtil.isNotEmpty(flowableListeners)) { | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java
| 1 | 1 | package cn.iocoder.yudao.module.bpm.service.task.listener; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.hutool.core.lang.Assert; | |
| 4 | 5 | import cn.hutool.core.util.StrUtil; |
| 6 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | |
| 5 | 7 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; |
| 6 | 8 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmListenerParamTypeEnum; |
| 7 | 9 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; |
| ... | ... | @@ -10,7 +12,9 @@ import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
| 10 | 12 | import jakarta.annotation.Resource; |
| 11 | 13 | import lombok.extern.slf4j.Slf4j; |
| 12 | 14 | import org.flowable.bpmn.model.BpmnModel; |
| 13 | -import org.flowable.bpmn.model.FlowElement; | |
| 15 | +import org.flowable.bpmn.model.FieldExtension; | |
| 16 | +import org.flowable.bpmn.model.FlowableListener; | |
| 17 | +import org.flowable.bpmn.model.UserTask; | |
| 14 | 18 | import org.flowable.engine.delegate.TaskListener; |
| 15 | 19 | import org.flowable.engine.history.HistoricProcessInstance; |
| 16 | 20 | import org.flowable.task.service.delegate.DelegateTask; |
| ... | ... | @@ -26,7 +30,6 @@ import java.util.List; |
| 26 | 30 | import java.util.Map; |
| 27 | 31 | |
| 28 | 32 | import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; |
| 29 | -import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.parseSimpleConfigInfo; | |
| 30 | 33 | |
| 31 | 34 | /** |
| 32 | 35 | * BPM 用户任务通用监听器 |
| ... | ... | @@ -53,9 +56,9 @@ public class BpmUserTaskListener implements TaskListener { |
| 53 | 56 | // 1. 获取所需基础信息 |
| 54 | 57 | HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId()); |
| 55 | 58 | BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId()); |
| 56 | - FlowElement userTask = BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey()); | |
| 57 | - BpmSimpleModelNodeVO node = parseSimpleConfigInfo(userTask); | |
| 58 | - BpmSimpleModelNodeVO.ListenerHandler listenerHandler = getListenerHandlerByEvent(delegateTask.getEventName(), node); | |
| 59 | + UserTask userTask = (UserTask) BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey()); | |
| 60 | + BpmSimpleModelNodeVO.ListenerHandler listenerHandler = getListenerHandlerByEvent(delegateTask.getEventName(), | |
| 61 | + userTask.getTaskListeners()); | |
| 59 | 62 | |
| 60 | 63 | // 2. 获取请求头和请求体 |
| 61 | 64 | Map<String, Object> processVariables = processInstance.getProcessVariables(); |
| ... | ... | @@ -79,8 +82,12 @@ public class BpmUserTaskListener implements TaskListener { |
| 79 | 82 | HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(body, headers); |
| 80 | 83 | ResponseEntity<String> responseEntity = restTemplate.exchange(listenerHandler.getPath(), HttpMethod.POST, |
| 81 | 84 | requestEntity, String.class); |
| 82 | - // TODO @lesan:日志打印,可以更全哈,例如说,请求参数、对应的 task id,哪个 listener | |
| 83 | - log.info("[notify][的响应结果({})]", responseEntity); | |
| 85 | + log.info("[notify][监听器:{},事件类型:{},请求头:{},请求体:{},响应结果:{}]", | |
| 86 | + DELEGATE_EXPRESSION, | |
| 87 | + delegateTask.getEventName(), | |
| 88 | + headers, | |
| 89 | + body, | |
| 90 | + responseEntity); | |
| 84 | 91 | // 4. 是否需要后续操作?TODO 芋艿:待定! |
| 85 | 92 | } |
| 86 | 93 | |
| ... | ... | @@ -99,14 +106,16 @@ public class BpmUserTaskListener implements TaskListener { |
| 99 | 106 | }); |
| 100 | 107 | } |
| 101 | 108 | |
| 102 | - // TODO @lesan:改成 jdk8 写法哈。主要考虑好兼容! | |
| 103 | - private BpmSimpleModelNodeVO.ListenerHandler getListenerHandlerByEvent(String eventName, BpmSimpleModelNodeVO node) { | |
| 104 | - return switch (eventName) { | |
| 105 | - case TaskListener.EVENTNAME_CREATE -> node.getTaskCreateListener(); | |
| 106 | - case TaskListener.EVENTNAME_ASSIGNMENT -> node.getTaskAssignListener(); | |
| 107 | - case TaskListener.EVENTNAME_COMPLETE -> node.getTaskCompleteListener(); | |
| 108 | - default -> null; // TODO @lesan:这个抛出异常,可控一点 | |
| 109 | - }; | |
| 109 | + private BpmSimpleModelNodeVO.ListenerHandler getListenerHandlerByEvent(String eventName, List<FlowableListener> node) { | |
| 110 | + FlowableListener flowableListener = node.stream() | |
| 111 | + .filter(item -> item.getEvent().equals(eventName)) | |
| 112 | + .findFirst().orElse(null); | |
| 113 | + Assert.notNull(flowableListener, "监听器({})不能为空", flowableListener); | |
| 114 | + FieldExtension fieldExtension = flowableListener.getFieldExtensions().stream() | |
| 115 | + .filter(item -> item.getFieldName().equals("listenerConfig")) | |
| 116 | + .findFirst().orElse(null); | |
| 117 | + Assert.notNull(fieldExtension, "监听器扩展字段({})不能为空", fieldExtension); | |
| 118 | + return JsonUtils.parseObject(fieldExtension.getStringValue(), BpmSimpleModelNodeVO.ListenerHandler.class); | |
| 110 | 119 | } |
| 111 | 120 | |
| 112 | 121 | } |
| 113 | 122 | \ No newline at end of file | ... | ... |