From 1fb8c9238a7e2d773855c10ed12a2e34ae6ca799 Mon Sep 17 00:00:00 2001 From: Lesan <1960681385@qq.com> Date: Wed, 8 Jan 2025 14:22:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20Simple=E8=AE=BE=E8=AE=A1=E5=99=A8-?= =?UTF-8?q?=E7=9B=91=E5=90=AC=E5=99=A8=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flowable/core/util/BpmnModelUtils.java | 19 --------- .../flowable/core/util/SimpleModelUtils.java | 16 ++++++-- .../task/listener/BpmUserTaskListener.java | 39 ++++++++++++------- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java index f2f3017ec9..fc4e68e21a 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java @@ -114,25 +114,6 @@ public class BpmnModelUtils { return element != null ? JsonUtils.parseObject(element.getElementText(), clazz) : null; } - /** - * 给节点添加Simple设计器配置Json - * - * @param userTask 节点 - * @param node 节点对象 - */ - public static void addSimpleConfigInfo(FlowElement userTask, Object node) { - addExtensionElementJson(userTask, "config", node); - } - - /** - * 解析Simple设计器配置Json - * - * @param userTask 节点 - */ - public static BpmSimpleModelNodeVO parseSimpleConfigInfo(FlowElement userTask) { - return parseExtensionElementJson(userTask, "config", BpmSimpleModelNodeVO.class); - } - /** * 给节点添加候选人元素 * 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 fddfc37147..deee7a0f46 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 @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.*; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.ConditionGroups; import cn.iocoder.yudao.module.bpm.enums.definition.*; @@ -439,9 +440,6 @@ public class SimpleModelUtils { } // 设置监听器 addUserTaskListener(node, userTask); - // 设置 Simple 设计器节点配置 - // TODO @lesan:只设置到 flowableListener 里面,整个 node 太大了!因为很多都保存过啦。 - addSimpleConfigInfo(userTask, node); return userTask; } @@ -453,6 +451,10 @@ public class SimpleModelUtils { flowableListener.setEvent(TaskListener.EVENTNAME_CREATE); flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); flowableListener.setImplementation(DELEGATE_EXPRESSION); + FieldExtension fieldExtension = new FieldExtension(); + fieldExtension.setFieldName("listenerConfig"); + fieldExtension.setStringValue(JsonUtils.toJsonString(node.getTaskCreateListener())); + flowableListener.getFieldExtensions().add(fieldExtension); flowableListeners.add(flowableListener); } if (node.getTaskAssignListener() != null @@ -461,6 +463,10 @@ public class SimpleModelUtils { flowableListener.setEvent(TaskListener.EVENTNAME_ASSIGNMENT); flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); flowableListener.setImplementation(DELEGATE_EXPRESSION); + FieldExtension fieldExtension = new FieldExtension(); + fieldExtension.setFieldName("listenerConfig"); + fieldExtension.setStringValue(JsonUtils.toJsonString(node.getTaskAssignListener())); + flowableListener.getFieldExtensions().add(fieldExtension); flowableListeners.add(flowableListener); } if (node.getTaskCompleteListener() != null @@ -469,6 +475,10 @@ public class SimpleModelUtils { flowableListener.setEvent(TaskListener.EVENTNAME_COMPLETE); flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); flowableListener.setImplementation(DELEGATE_EXPRESSION); + FieldExtension fieldExtension = new FieldExtension(); + fieldExtension.setFieldName("listenerConfig"); + fieldExtension.setStringValue(JsonUtils.toJsonString(node.getTaskCompleteListener())); + flowableListener.getFieldExtensions().add(fieldExtension); flowableListeners.add(flowableListener); } if (CollUtil.isNotEmpty(flowableListeners)) { 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 ac61b33ae8..4fce01df3a 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 @@ -1,7 +1,9 @@ package cn.iocoder.yudao.module.bpm.service.task.listener; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; import cn.iocoder.yudao.module.bpm.enums.definition.BpmListenerParamTypeEnum; import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; @@ -10,7 +12,9 @@ import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; -import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.FieldExtension; +import org.flowable.bpmn.model.FlowableListener; +import org.flowable.bpmn.model.UserTask; import org.flowable.engine.delegate.TaskListener; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.task.service.delegate.DelegateTask; @@ -26,7 +30,6 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; -import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.parseSimpleConfigInfo; /** * BPM 用户任务通用监听器 @@ -53,9 +56,9 @@ public class BpmUserTaskListener implements TaskListener { // 1. 获取所需基础信息 HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId()); BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId()); - FlowElement userTask = BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey()); - BpmSimpleModelNodeVO node = parseSimpleConfigInfo(userTask); - BpmSimpleModelNodeVO.ListenerHandler listenerHandler = getListenerHandlerByEvent(delegateTask.getEventName(), node); + UserTask userTask = (UserTask) BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey()); + BpmSimpleModelNodeVO.ListenerHandler listenerHandler = getListenerHandlerByEvent(delegateTask.getEventName(), + userTask.getTaskListeners()); // 2. 获取请求头和请求体 Map processVariables = processInstance.getProcessVariables(); @@ -79,8 +82,12 @@ public class BpmUserTaskListener implements TaskListener { HttpEntity> requestEntity = new HttpEntity<>(body, headers); ResponseEntity responseEntity = restTemplate.exchange(listenerHandler.getPath(), HttpMethod.POST, requestEntity, String.class); - // TODO @lesan:日志打印,可以更全哈,例如说,请求参数、对应的 task id,哪个 listener - log.info("[notify][的响应结果({})]", responseEntity); + log.info("[notify][监听器:{},事件类型:{},请求头:{},请求体:{},响应结果:{}]", + DELEGATE_EXPRESSION, + delegateTask.getEventName(), + headers, + body, + responseEntity); // 4. 是否需要后续操作?TODO 芋艿:待定! } @@ -99,14 +106,16 @@ public class BpmUserTaskListener implements TaskListener { }); } - // TODO @lesan:改成 jdk8 写法哈。主要考虑好兼容! - private BpmSimpleModelNodeVO.ListenerHandler getListenerHandlerByEvent(String eventName, BpmSimpleModelNodeVO node) { - return switch (eventName) { - case TaskListener.EVENTNAME_CREATE -> node.getTaskCreateListener(); - case TaskListener.EVENTNAME_ASSIGNMENT -> node.getTaskAssignListener(); - case TaskListener.EVENTNAME_COMPLETE -> node.getTaskCompleteListener(); - default -> null; // TODO @lesan:这个抛出异常,可控一点 - }; + private BpmSimpleModelNodeVO.ListenerHandler getListenerHandlerByEvent(String eventName, List node) { + FlowableListener flowableListener = node.stream() + .filter(item -> item.getEvent().equals(eventName)) + .findFirst().orElse(null); + Assert.notNull(flowableListener, "监听器({})不能为空", flowableListener); + FieldExtension fieldExtension = flowableListener.getFieldExtensions().stream() + .filter(item -> item.getFieldName().equals("listenerConfig")) + .findFirst().orElse(null); + Assert.notNull(fieldExtension, "监听器扩展字段({})不能为空", fieldExtension); + return JsonUtils.parseObject(fieldExtension.getStringValue(), BpmSimpleModelNodeVO.ListenerHandler.class); } } \ No newline at end of file