fix: 通过FixedValue属性方式获取监听器扩展字段
This commit is contained in:
parent
71b86e6207
commit
b2d81e0763
|
@ -23,6 +23,7 @@ import org.flowable.bpmn.model.Process;
|
||||||
import org.flowable.bpmn.model.*;
|
import org.flowable.bpmn.model.*;
|
||||||
import org.flowable.common.engine.api.FlowableException;
|
import org.flowable.common.engine.api.FlowableException;
|
||||||
import org.flowable.common.engine.impl.util.io.BytesStreamSource;
|
import org.flowable.common.engine.impl.util.io.BytesStreamSource;
|
||||||
|
import org.flowable.engine.impl.el.FixedValue;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
@ -370,12 +371,10 @@ public class BpmnModelUtils {
|
||||||
flowableListener.getFieldExtensions().add(fieldExtension);
|
flowableListener.getFieldExtensions().add(fieldExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BpmSimpleModelNodeVO.ListenerHandler parseListenerConfig(FlowableListener flowableListener) {
|
public static BpmSimpleModelNodeVO.ListenerHandler parseListenerConfig(FixedValue fixedValue) {
|
||||||
FieldExtension fieldExtension = flowableListener.getFieldExtensions().stream()
|
String expressionText = fixedValue.getExpressionText();
|
||||||
.filter(item -> item.getFieldName().equals("listenerConfig"))
|
Assert.notNull(expressionText, "监听器扩展字段({})不能为空", expressionText);
|
||||||
.findFirst().orElse(null);
|
return JsonUtils.parseObject(expressionText, BpmSimpleModelNodeVO.ListenerHandler.class);
|
||||||
Assert.notNull(fieldExtension, "监听器扩展字段({})不能为空", fieldExtension);
|
|
||||||
return JsonUtils.parseObject(fieldExtension.getStringValue(), BpmSimpleModelNodeVO.ListenerHandler.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ========== BPM 简单查找相关的方法 ==========
|
// ========== BPM 简单查找相关的方法 ==========
|
||||||
|
|
|
@ -1,21 +1,18 @@
|
||||||
package cn.iocoder.yudao.module.bpm.service.task.listener;
|
package cn.iocoder.yudao.module.bpm.service.task.listener;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
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.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
|
||||||
import cn.iocoder.yudao.module.bpm.enums.definition.BpmListenerParamTypeEnum;
|
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 cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.delegate.TaskListener;
|
||||||
import org.flowable.engine.history.HistoricProcessInstance;
|
import org.flowable.engine.history.HistoricProcessInstance;
|
||||||
|
import org.flowable.engine.impl.el.FixedValue;
|
||||||
import org.flowable.task.service.delegate.DelegateTask;
|
import org.flowable.task.service.delegate.DelegateTask;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpEntity;
|
||||||
import org.springframework.http.HttpMethod;
|
import org.springframework.http.HttpMethod;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
|
@ -38,34 +35,32 @@ import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModel
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@Scope("prototype")
|
||||||
public class BpmUserTaskListener implements TaskListener {
|
public class BpmUserTaskListener implements TaskListener {
|
||||||
|
|
||||||
public static final String DELEGATE_EXPRESSION = "${bpmUserTaskListener}";
|
public static final String DELEGATE_EXPRESSION = "${bpmUserTaskListener}";
|
||||||
|
|
||||||
@Resource
|
|
||||||
private BpmModelService modelService;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private BpmProcessInstanceService processInstanceService;
|
private BpmProcessInstanceService processInstanceService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RestTemplate restTemplate;
|
private RestTemplate restTemplate;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private FixedValue listenerConfig;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notify(DelegateTask delegateTask) {
|
public void notify(DelegateTask delegateTask) {
|
||||||
// 1. 获取所需基础信息
|
// 1. 获取所需基础信息
|
||||||
HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId());
|
HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId());
|
||||||
BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId());
|
BpmSimpleModelNodeVO.ListenerHandler listenerHandler = parseListenerConfig(listenerConfig);
|
||||||
UserTask userTask = (UserTask) BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey());
|
|
||||||
BpmSimpleModelNodeVO.ListenerHandler listenerHandler = getListenerHandlerByEvent(delegateTask.getEventName(),
|
|
||||||
userTask.getTaskListeners());
|
|
||||||
|
|
||||||
// 2. 获取请求头和请求体
|
// 2. 获取请求头和请求体
|
||||||
Map<String, Object> processVariables = processInstance.getProcessVariables();
|
Map<String, Object> processVariables = processInstance.getProcessVariables();
|
||||||
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||||
MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
|
MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
|
||||||
parseListenerMap(listenerHandler.getHeader(), processVariables, headers);
|
parseListenerParam(listenerHandler.getHeader(), processVariables, headers);
|
||||||
parseListenerMap(listenerHandler.getBody(), processVariables, body);
|
parseListenerParam(listenerHandler.getBody(), processVariables, body);
|
||||||
// 2.1 请求头默认参数
|
// 2.1 请求头默认参数
|
||||||
if (StrUtil.isNotEmpty(delegateTask.getTenantId())) {
|
if (StrUtil.isNotEmpty(delegateTask.getTenantId())) {
|
||||||
headers.add(HEADER_TENANT_ID, delegateTask.getTenantId());
|
headers.add(HEADER_TENANT_ID, delegateTask.getTenantId());
|
||||||
|
@ -100,9 +95,9 @@ public class BpmUserTaskListener implements TaskListener {
|
||||||
// 4. 是否需要后续操作?TODO 芋艿:待定!
|
// 4. 是否需要后续操作?TODO 芋艿:待定!
|
||||||
}
|
}
|
||||||
|
|
||||||
private void parseListenerMap(List<BpmSimpleModelNodeVO.ListenerHandler.ListenerParam> list,
|
private void parseListenerParam(List<BpmSimpleModelNodeVO.ListenerHandler.ListenerParam> list,
|
||||||
Map<String, Object> processVariables,
|
Map<String, Object> processVariables,
|
||||||
MultiValueMap<String, String> to) {
|
MultiValueMap<String, String> to) {
|
||||||
if (CollUtil.isEmpty(list)) {
|
if (CollUtil.isEmpty(list)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -115,12 +110,4 @@ public class BpmUserTaskListener implements TaskListener {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private BpmSimpleModelNodeVO.ListenerHandler getListenerHandlerByEvent(String eventName, List<FlowableListener> node) {
|
|
||||||
FlowableListener flowableListener = node.stream()
|
|
||||||
.filter(item -> item.getEvent().equals(eventName))
|
|
||||||
.findFirst().orElse(null);
|
|
||||||
Assert.notNull(flowableListener, "监听器({})不能为空", flowableListener);
|
|
||||||
return parseListenerConfig(flowableListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue