瀏覽代碼

refactor: 优化ListenerHandler写入及解析

Lesan 7 月之前
父節點
當前提交
533e5c3bf5

+ 11 - 2
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 简单查找相关的方法 ==========
 
     /**

+ 3 - 3
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)) {

+ 2 - 8
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);
     }
 
 }