refactor: 优化ListenerHandler写入及解析

This commit is contained in:
Lesan 2025-01-09 09:33:16 +08:00
parent a85d51cc8c
commit 533e5c3bf5
3 changed files with 16 additions and 13 deletions

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.util;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
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;
@ -362,13 +363,21 @@ public class BpmnModelUtils {
return Convert.toBool(extensionElements.get(0).getElementText(), false);
}
public static void addListenerFieldExtension(FlowableListener flowableListener, Object obj) {
public static void addListenerConfig(FlowableListener flowableListener, BpmSimpleModelNodeVO.ListenerHandler handler) {
FieldExtension fieldExtension = new FieldExtension();
fieldExtension.setFieldName("listenerConfig");
fieldExtension.setStringValue(JsonUtils.toJsonString(obj));
fieldExtension.setStringValue(JsonUtils.toJsonString(handler));
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);
}
// ========== BPM 简单查找相关的方法 ==========
/**

View File

@ -452,7 +452,7 @@ public class SimpleModelUtils {
flowableListener.setEvent(TaskListener.EVENTNAME_CREATE);
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
flowableListener.setImplementation(DELEGATE_EXPRESSION);
addListenerFieldExtension(flowableListener, node.getTaskCreateListener());
addListenerConfig(flowableListener, node.getTaskCreateListener());
flowableListeners.add(flowableListener);
}
if (node.getTaskAssignListener() != null
@ -461,7 +461,7 @@ public class SimpleModelUtils {
flowableListener.setEvent(TaskListener.EVENTNAME_ASSIGNMENT);
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
flowableListener.setImplementation(DELEGATE_EXPRESSION);
addListenerFieldExtension(flowableListener, node.getTaskAssignListener());
addListenerConfig(flowableListener, node.getTaskAssignListener());
flowableListeners.add(flowableListener);
}
if (node.getTaskCompleteListener() != null
@ -470,7 +470,7 @@ public class SimpleModelUtils {
flowableListener.setEvent(TaskListener.EVENTNAME_COMPLETE);
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
flowableListener.setImplementation(DELEGATE_EXPRESSION);
addListenerFieldExtension(flowableListener, node.getTaskCompleteListener());
addListenerConfig(flowableListener, node.getTaskCompleteListener());
flowableListeners.add(flowableListener);
}
if (CollUtil.isNotEmpty(flowableListeners)) {

View File

@ -3,7 +3,6 @@ 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;
@ -12,7 +11,6 @@ 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.FieldExtension;
import org.flowable.bpmn.model.FlowableListener;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.delegate.TaskListener;
@ -30,6 +28,7 @@ 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.parseListenerConfig;
/**
* BPM 用户任务通用监听器
@ -112,12 +111,7 @@ public class BpmUserTaskListener implements TaskListener {
.filter(item -> item.getEvent().equals(eventName))
.findFirst().orElse(null);
Assert.notNull(flowableListener, "监听器({})不能为空", flowableListener);
// TODO @lesanBpmnModelUtils 提供一个 BpmSimpleModelNodeVO.ListenerHandler 解析方法尽量收敛掉
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);
return parseListenerConfig(flowableListener);
}
}