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.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 简单查找相关的方法 ==========
|
||||
|
|
|
@ -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<String, Object> processVariables = processInstance.getProcessVariables();
|
||||
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
MultiValueMap<String, String> 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,7 +95,7 @@ public class BpmUserTaskListener implements TaskListener {
|
|||
// 4. 是否需要后续操作?TODO 芋艿:待定!
|
||||
}
|
||||
|
||||
private void parseListenerMap(List<BpmSimpleModelNodeVO.ListenerHandler.ListenerParam> list,
|
||||
private void parseListenerParam(List<BpmSimpleModelNodeVO.ListenerHandler.ListenerParam> list,
|
||||
Map<String, Object> processVariables,
|
||||
MultiValueMap<String, String> to) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
|
@ -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