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 042447d08d..46097c28a0 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 @@ -23,6 +23,7 @@ import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.*; import org.flowable.common.engine.api.FlowableException; import org.flowable.common.engine.impl.util.io.BytesStreamSource; +import org.flowable.engine.impl.el.FixedValue; import java.util.*; @@ -370,12 +371,10 @@ public class BpmnModelUtils { flowableListener.getFieldExtensions().add(fieldExtension); } - public static BpmSimpleModelNodeVO.ListenerHandler parseListenerConfig(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); + public static BpmSimpleModelNodeVO.ListenerHandler parseListenerConfig(FixedValue fixedValue) { + String expressionText = fixedValue.getExpressionText(); + Assert.notNull(expressionText, "监听器扩展字段({})不能为空", expressionText); + return JsonUtils.parseObject(expressionText, BpmSimpleModelNodeVO.ListenerHandler.class); } // ========== BPM 简单查找相关的方法 ========== 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 057fa98571..ffe91f277f 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,21 +1,18 @@ 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.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; -import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import jakarta.annotation.Resource; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.flowable.bpmn.model.BpmnModel; -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.engine.impl.el.FixedValue; import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.context.annotation.Scope; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; @@ -38,34 +35,32 @@ import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModel */ @Component @Slf4j +@Scope("prototype") public class BpmUserTaskListener implements TaskListener { public static final String DELEGATE_EXPRESSION = "${bpmUserTaskListener}"; - @Resource - private BpmModelService modelService; - @Resource private BpmProcessInstanceService processInstanceService; @Resource private RestTemplate restTemplate; + @Setter + private FixedValue listenerConfig; + @Override public void notify(DelegateTask delegateTask) { // 1. 获取所需基础信息 HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId()); - BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId()); - UserTask userTask = (UserTask) BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey()); - BpmSimpleModelNodeVO.ListenerHandler listenerHandler = getListenerHandlerByEvent(delegateTask.getEventName(), - userTask.getTaskListeners()); + BpmSimpleModelNodeVO.ListenerHandler listenerHandler = parseListenerConfig(listenerConfig); // 2. 获取请求头和请求体 Map processVariables = processInstance.getProcessVariables(); MultiValueMap headers = new LinkedMultiValueMap<>(); MultiValueMap body = new LinkedMultiValueMap<>(); - parseListenerMap(listenerHandler.getHeader(), processVariables, headers); - parseListenerMap(listenerHandler.getBody(), processVariables, body); + parseListenerParam(listenerHandler.getHeader(), processVariables, headers); + parseListenerParam(listenerHandler.getBody(), processVariables, body); // 2.1 请求头默认参数 if (StrUtil.isNotEmpty(delegateTask.getTenantId())) { headers.add(HEADER_TENANT_ID, delegateTask.getTenantId()); @@ -100,9 +95,9 @@ public class BpmUserTaskListener implements TaskListener { // 4. 是否需要后续操作?TODO 芋艿:待定! } - private void parseListenerMap(List list, - Map processVariables, - MultiValueMap to) { + private void parseListenerParam(List list, + Map processVariables, + MultiValueMap to) { if (CollUtil.isEmpty(list)) { return; } @@ -115,12 +110,4 @@ public class BpmUserTaskListener implements TaskListener { }); } - 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); - return parseListenerConfig(flowableListener); - } - } \ No newline at end of file