Commit b2d81e076395290924018af7ce82e241ecf42cb9

Authored by LesanOuO
1 parent 71b86e62

fix: 通过FixedValue属性方式获取监听器扩展字段

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; @@ -23,6 +23,7 @@ import org.flowable.bpmn.model.Process;
23 import org.flowable.bpmn.model.*; 23 import org.flowable.bpmn.model.*;
24 import org.flowable.common.engine.api.FlowableException; 24 import org.flowable.common.engine.api.FlowableException;
25 import org.flowable.common.engine.impl.util.io.BytesStreamSource; 25 import org.flowable.common.engine.impl.util.io.BytesStreamSource;
  26 +import org.flowable.engine.impl.el.FixedValue;
26 27
27 import java.util.*; 28 import java.util.*;
28 29
@@ -370,12 +371,10 @@ public class BpmnModelUtils { @@ -370,12 +371,10 @@ public class BpmnModelUtils {
370 flowableListener.getFieldExtensions().add(fieldExtension); 371 flowableListener.getFieldExtensions().add(fieldExtension);
371 } 372 }
372 373
373 - public static BpmSimpleModelNodeVO.ListenerHandler parseListenerConfig(FlowableListener flowableListener) {  
374 - FieldExtension fieldExtension = flowableListener.getFieldExtensions().stream()  
375 - .filter(item -> item.getFieldName().equals("listenerConfig"))  
376 - .findFirst().orElse(null);  
377 - Assert.notNull(fieldExtension, "监听器扩展字段({})不能为空", fieldExtension);  
378 - return JsonUtils.parseObject(fieldExtension.getStringValue(), BpmSimpleModelNodeVO.ListenerHandler.class); 374 + public static BpmSimpleModelNodeVO.ListenerHandler parseListenerConfig(FixedValue fixedValue) {
  375 + String expressionText = fixedValue.getExpressionText();
  376 + Assert.notNull(expressionText, "监听器扩展字段({})不能为空", expressionText);
  377 + return JsonUtils.parseObject(expressionText, BpmSimpleModelNodeVO.ListenerHandler.class);
379 } 378 }
380 379
381 // ========== BPM 简单查找相关的方法 ========== 380 // ========== BPM 简单查找相关的方法 ==========
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/listener/BpmUserTaskListener.java
1 package cn.iocoder.yudao.module.bpm.service.task.listener; 1 package cn.iocoder.yudao.module.bpm.service.task.listener;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 -import cn.hutool.core.lang.Assert;  
5 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
6 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; 5 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
7 import cn.iocoder.yudao.module.bpm.enums.definition.BpmListenerParamTypeEnum; 6 import cn.iocoder.yudao.module.bpm.enums.definition.BpmListenerParamTypeEnum;
8 -import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;  
9 -import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService;  
10 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; 7 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
11 import jakarta.annotation.Resource; 8 import jakarta.annotation.Resource;
  9 +import lombok.Setter;
12 import lombok.extern.slf4j.Slf4j; 10 import lombok.extern.slf4j.Slf4j;
13 -import org.flowable.bpmn.model.BpmnModel;  
14 -import org.flowable.bpmn.model.FlowableListener;  
15 -import org.flowable.bpmn.model.UserTask;  
16 import org.flowable.engine.delegate.TaskListener; 11 import org.flowable.engine.delegate.TaskListener;
17 import org.flowable.engine.history.HistoricProcessInstance; 12 import org.flowable.engine.history.HistoricProcessInstance;
  13 +import org.flowable.engine.impl.el.FixedValue;
18 import org.flowable.task.service.delegate.DelegateTask; 14 import org.flowable.task.service.delegate.DelegateTask;
  15 +import org.springframework.context.annotation.Scope;
19 import org.springframework.http.HttpEntity; 16 import org.springframework.http.HttpEntity;
20 import org.springframework.http.HttpMethod; 17 import org.springframework.http.HttpMethod;
21 import org.springframework.http.ResponseEntity; 18 import org.springframework.http.ResponseEntity;
@@ -38,34 +35,32 @@ import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModel @@ -38,34 +35,32 @@ import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModel
38 */ 35 */
39 @Component 36 @Component
40 @Slf4j 37 @Slf4j
  38 +@Scope("prototype")
41 public class BpmUserTaskListener implements TaskListener { 39 public class BpmUserTaskListener implements TaskListener {
42 40
43 public static final String DELEGATE_EXPRESSION = "${bpmUserTaskListener}"; 41 public static final String DELEGATE_EXPRESSION = "${bpmUserTaskListener}";
44 42
45 @Resource 43 @Resource
46 - private BpmModelService modelService;  
47 -  
48 - @Resource  
49 private BpmProcessInstanceService processInstanceService; 44 private BpmProcessInstanceService processInstanceService;
50 45
51 @Resource 46 @Resource
52 private RestTemplate restTemplate; 47 private RestTemplate restTemplate;
53 48
  49 + @Setter
  50 + private FixedValue listenerConfig;
  51 +
54 @Override 52 @Override
55 public void notify(DelegateTask delegateTask) { 53 public void notify(DelegateTask delegateTask) {
56 // 1. 获取所需基础信息 54 // 1. 获取所需基础信息
57 HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId()); 55 HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId());
58 - BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId());  
59 - UserTask userTask = (UserTask) BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey());  
60 - BpmSimpleModelNodeVO.ListenerHandler listenerHandler = getListenerHandlerByEvent(delegateTask.getEventName(),  
61 - userTask.getTaskListeners()); 56 + BpmSimpleModelNodeVO.ListenerHandler listenerHandler = parseListenerConfig(listenerConfig);
62 57
63 // 2. 获取请求头和请求体 58 // 2. 获取请求头和请求体
64 Map<String, Object> processVariables = processInstance.getProcessVariables(); 59 Map<String, Object> processVariables = processInstance.getProcessVariables();
65 MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); 60 MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
66 MultiValueMap<String, String> body = new LinkedMultiValueMap<>(); 61 MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
67 - parseListenerMap(listenerHandler.getHeader(), processVariables, headers);  
68 - parseListenerMap(listenerHandler.getBody(), processVariables, body); 62 + parseListenerParam(listenerHandler.getHeader(), processVariables, headers);
  63 + parseListenerParam(listenerHandler.getBody(), processVariables, body);
69 // 2.1 请求头默认参数 64 // 2.1 请求头默认参数
70 if (StrUtil.isNotEmpty(delegateTask.getTenantId())) { 65 if (StrUtil.isNotEmpty(delegateTask.getTenantId())) {
71 headers.add(HEADER_TENANT_ID, delegateTask.getTenantId()); 66 headers.add(HEADER_TENANT_ID, delegateTask.getTenantId());
@@ -100,9 +95,9 @@ public class BpmUserTaskListener implements TaskListener { @@ -100,9 +95,9 @@ public class BpmUserTaskListener implements TaskListener {
100 // 4. 是否需要后续操作?TODO 芋艿:待定! 95 // 4. 是否需要后续操作?TODO 芋艿:待定!
101 } 96 }
102 97
103 - private void parseListenerMap(List<BpmSimpleModelNodeVO.ListenerHandler.ListenerParam> list,  
104 - Map<String, Object> processVariables,  
105 - MultiValueMap<String, String> to) { 98 + private void parseListenerParam(List<BpmSimpleModelNodeVO.ListenerHandler.ListenerParam> list,
  99 + Map<String, Object> processVariables,
  100 + MultiValueMap<String, String> to) {
106 if (CollUtil.isEmpty(list)) { 101 if (CollUtil.isEmpty(list)) {
107 return; 102 return;
108 } 103 }
@@ -115,12 +110,4 @@ public class BpmUserTaskListener implements TaskListener { @@ -115,12 +110,4 @@ public class BpmUserTaskListener implements TaskListener {
115 }); 110 });
116 } 111 }
117 112
118 - private BpmSimpleModelNodeVO.ListenerHandler getListenerHandlerByEvent(String eventName, List<FlowableListener> node) {  
119 - FlowableListener flowableListener = node.stream()  
120 - .filter(item -> item.getEvent().equals(eventName))  
121 - .findFirst().orElse(null);  
122 - Assert.notNull(flowableListener, "监听器({})不能为空", flowableListener);  
123 - return parseListenerConfig(flowableListener);  
124 - }  
125 -  
126 } 113 }
127 \ No newline at end of file 114 \ No newline at end of file