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 eb94833a45..042447d08d 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 @@ -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 简单查找相关的方法 ========== /** diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java index 174198ccd5..51452b3b7d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java @@ -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)) { 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 2eb9240564..fd6a24defd 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 @@ -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 @lesan:BpmnModelUtils 提供一个 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); } } \ No newline at end of file