From 0b04ac79d0fec886d15683e84e76b2e811814054 Mon Sep 17 00:00:00 2001
From: gssong <1742057357@qq.com>
Date: 星期日, 02 六月 2024 14:42:05 +0800
Subject: [PATCH] update 优化调整自定义监听

---
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessTaskEvent.java         |   42 ++++++++
 /dev/null                                                                                                       |   23 ----
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java |   19 +--
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java          |   27 +++++
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java             |   49 +++++++++
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java   |   49 +++++++++
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java            |   40 +++----
 7 files changed, 191 insertions(+), 58 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java
new file mode 100644
index 0000000..4463423
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java
@@ -0,0 +1,49 @@
+package org.dromara.common.core.domain.event;
+
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 鎬讳綋娴佺▼鐩戝惉
+ *
+ * @author may
+ */
+
+@Data
+public class ProcessEvent implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+
+    /**
+     * 娴佺▼瀹氫箟key
+     */
+    private String key;
+
+    /**
+     * 涓氬姟id
+     */
+    private String businessKey;
+
+    /**
+     * 鐘舵��
+     */
+    private String status;
+
+    /**
+     * 褰撲负true鏃朵负鐢宠浜鸿妭鐐瑰姙鐞�
+     */
+    private boolean submit;
+
+    /**
+     * 璇锋眰浣�
+     */
+    private HttpServletRequest request;
+
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessTaskEvent.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessTaskEvent.java
new file mode 100644
index 0000000..e450840
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessTaskEvent.java
@@ -0,0 +1,42 @@
+package org.dromara.common.core.domain.event;
+
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 娴佺▼鍔炵悊鐩戝惉
+ *
+ * @author may
+ */
+
+@Data
+public class ProcessTaskEvent implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 娴佺▼瀹氫箟key涓庢祦绋嬭妭鐐规爣璇�(鎷兼帴鏂瑰紡锛氭祦绋嬪畾涔塳ey_娴佺▼鑺傜偣)
+     */
+    private String keyNode;
+
+    /**
+     * 浠诲姟id
+     */
+    private String taskId;
+
+    /**
+     * 涓氬姟id
+     */
+    private String businessKey;
+
+    /**
+     * 璇锋眰浣�
+     */
+    private HttpServletRequest request;
+
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java
deleted file mode 100644
index 5ea262d..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/annotation/FlowListenerAnnotation.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.dromara.workflow.annotation;
-
-
-import java.lang.annotation.*;
-
-/**
- * 娴佺▼浠诲姟鐩戝惉娉ㄨВ
- *
- * @author may
- * @date 2023-12-27
- */
-@Target({ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface FlowListenerAnnotation {
-
-    /**
-     * 娴佺▼瀹氫箟key
-     */
-    String processDefinitionKey();
-
-    /**
-     * 鑺傜偣id
-     */
-    String taskDefId() default "";
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java
new file mode 100644
index 0000000..92314ac
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/handler/FlowProcessEventHandler.java
@@ -0,0 +1,49 @@
+package org.dromara.workflow.flowable.handler;
+
+import org.dromara.common.core.domain.event.ProcessEvent;
+import org.dromara.common.core.domain.event.ProcessTaskEvent;
+import org.dromara.common.core.utils.ServletUtils;
+import org.dromara.common.core.utils.SpringUtils;
+import org.springframework.stereotype.Component;
+
+/**
+ * 娴佺▼鐩戝惉鏈嶅姟
+ *
+ * @author may
+ * @date 2024-06-02
+ */
+@Component
+public class FlowProcessEventHandler {
+
+    /**
+     * @param key         娴佺▼key
+     * @param businessKey 涓氬姟id
+     * @param status      鐘舵��
+     * @param submit      褰撲负true鏃朵负鐢宠浜鸿妭鐐瑰姙鐞�
+     */
+    public void processHandler(String key, String businessKey, String status, boolean submit) {
+        ProcessEvent processEvent = new ProcessEvent();
+        processEvent.setKey(key);
+        processEvent.setBusinessKey(businessKey);
+        processEvent.setStatus(status);
+        processEvent.setSubmit(submit);
+        processEvent.setRequest(ServletUtils.getRequest());
+        SpringUtils.context().publishEvent(processEvent);
+    }
+
+    /**
+     * 鎵ц鍔炵悊浠诲姟鐩戝惉
+     *
+     * @param keyNode     娴佺▼瀹氫箟key涓庢祦绋嬭妭鐐规爣璇�(鎷兼帴鏂瑰紡锛氭祦绋嬪畾涔塳ey_娴佺▼鑺傜偣)
+     * @param taskId      浠诲姟id
+     * @param businessKey 涓氬姟id
+     */
+    public void processTaskHandler(String keyNode, String taskId, String businessKey) {
+        ProcessTaskEvent processTaskEvent = new ProcessTaskEvent();
+        processTaskEvent.setKeyNode(keyNode);
+        processTaskEvent.setTaskId(taskId);
+        processTaskEvent.setBusinessKey(businessKey);
+        processTaskEvent.setRequest(ServletUtils.getRequest());
+        SpringUtils.context().publishEvent(processTaskEvent);
+    }
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowEventStrategy.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowEventStrategy.java
deleted file mode 100644
index 9da5776..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowEventStrategy.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.dromara.workflow.flowable.strategy;
-
-import org.dromara.common.core.utils.StringUtils;
-import org.dromara.workflow.annotation.FlowListenerAnnotation;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanPostProcessor;
-import org.springframework.stereotype.Component;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 娴佺▼浠诲姟鐩戝惉绛栫暐
- *
- * @author may
- * @date 2023-12-27
- */
-@Component
-public class FlowEventStrategy implements BeanPostProcessor {
-
-    private final Map<String, FlowTaskEventHandler> flowTaskEventHandlers = new HashMap<>();
-    private final Map<String, FlowProcessEventHandler> flowProcessEventHandlers = new HashMap<>();
-
-    @Override
-    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
-        if (bean instanceof FlowTaskEventHandler) {
-            FlowListenerAnnotation annotation = bean.getClass().getAnnotation(FlowListenerAnnotation.class);
-            if (null != annotation) {
-                if (StringUtils.isNotBlank(annotation.processDefinitionKey()) && StringUtils.isNotBlank(annotation.taskDefId())) {
-                    String id = annotation.processDefinitionKey() + "_" + annotation.taskDefId();
-                    if (!flowTaskEventHandlers.containsKey(id)) {
-                        flowTaskEventHandlers.put(id, (FlowTaskEventHandler) bean);
-                    }
-                }
-            }
-        }
-        if (bean instanceof FlowProcessEventHandler) {
-            FlowListenerAnnotation annotation = bean.getClass().getAnnotation(FlowListenerAnnotation.class);
-            if (null != annotation) {
-                if (StringUtils.isNotBlank(annotation.processDefinitionKey()) && StringUtils.isBlank(annotation.taskDefId())) {
-                    if (!flowProcessEventHandlers.containsKey(annotation.processDefinitionKey())) {
-                        flowProcessEventHandlers.put(annotation.processDefinitionKey(), (FlowProcessEventHandler) bean);
-                    }
-                }
-            }
-        }
-        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
-    }
-
-    /**
-     * 鑾峰彇鍙墽琛宐ean
-     *
-     * @param key key
-     */
-    public FlowTaskEventHandler getTaskHandler(String key) {
-        if (!flowTaskEventHandlers.containsKey(key)) {
-            return null;
-        }
-        return flowTaskEventHandlers.get(key);
-    }
-
-    /**
-     * 鑾峰彇鍙墽琛宐ean
-     *
-     * @param key key
-     */
-    public FlowProcessEventHandler getProcessHandler(String key) {
-        if (!flowProcessEventHandlers.containsKey(key)) {
-            return null;
-        }
-        return flowProcessEventHandlers.get(key);
-    }
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java
deleted file mode 100644
index 929e7d5..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.dromara.workflow.flowable.strategy;
-
-
-/**
- * 鎬讳綋娴佺▼鐩戝惉(渚嬪: 鎾ら攢 鎻愪氦 閫�鍥� 绛�)
- *
- * @author may
- * @date 2023-12-27
- */
-public interface FlowProcessEventHandler {
-
-    /**
-     * 鎵ц鍔炵悊浠诲姟鐩戝惉
-     *
-     * @param businessKey 涓氬姟id
-     * @param status      鐘舵��
-     * @param submit      褰撲负true鏃朵负鐢宠浜鸿妭鐐瑰姙鐞�
-     */
-    void handleProcess(String businessKey, String status, boolean submit);
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowTaskEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowTaskEventHandler.java
deleted file mode 100644
index d2b06a7..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowTaskEventHandler.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.dromara.workflow.flowable.strategy;
-
-
-/**
- * 娴佺▼浠诲姟鐩戝惉(渚嬪: 鑺傜偣鐨勫鎵圭瓑)
- *
- * @author may
- * @date 2023-12-27
- */
-public interface FlowTaskEventHandler {
-
-    /**
-     * 鎵ц鍔炵悊浠诲姟鐩戝惉
-     *
-     * @param taskId      浠诲姟ID
-     * @param businessKey 涓氬姟id
-     */
-    void handleTask(String taskId, String businessKey);
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomProcessHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomProcessHandler.java
deleted file mode 100644
index 29886d8..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomProcessHandler.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.dromara.workflow.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.workflow.annotation.FlowListenerAnnotation;
-import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler;
-import org.springframework.stereotype.Component;
-
-/**
- * 鑷畾涔夌洃鍚祴璇�
- *
- * @author may
- * @date 2023-12-27
- */
-@Slf4j
-@Component
-@FlowListenerAnnotation(processDefinitionKey = "leave1")
-public class TestCustomProcessHandler implements FlowProcessEventHandler {
-
-
-    /**
-     * 鎵ц鍔炵悊浠诲姟鐩戝惉
-     *
-     * @param businessKey 涓氬姟id
-     * @param status      鐘舵��
-     * @param submit      褰撲负true鏃朵负鐢宠浜鸿妭鐐瑰姙鐞�
-     */
-    @Override
-    public void handleProcess(String businessKey, String status, boolean submit) {
-        log.info("涓氬姟ID:" + businessKey + ",鐘舵��:" + status);
-    }
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomTaskHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomTaskHandler.java
deleted file mode 100644
index d85286d..0000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/TestCustomTaskHandler.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.dromara.workflow.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.workflow.annotation.FlowListenerAnnotation;
-import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
-import org.springframework.stereotype.Component;
-
-/**
- * 鑷畾涔夌洃鍚祴璇�
- *
- * @author may
- * @date 2023-12-27
- */
-@Slf4j
-@Component
-@FlowListenerAnnotation(processDefinitionKey = "leave1", taskDefId = "Activity_14633hx")
-public class TestCustomTaskHandler implements FlowTaskEventHandler {
-
-    @Override
-    public void handleTask(String taskId, String businessKey) {
-        log.info("浠诲姟ID:" + taskId + ",涓氬姟ID:" + businessKey);
-    }
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java
index f7a3db8..9937f7a 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java
@@ -26,8 +26,7 @@
 import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator;
 import org.dromara.workflow.flowable.cmd.DeleteExecutionCmd;
 import org.dromara.workflow.flowable.cmd.ExecutionChildByExecutionIdCmd;
-import org.dromara.workflow.flowable.strategy.FlowEventStrategy;
-import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler;
+import org.dromara.workflow.flowable.handler.FlowProcessEventHandler;
 import org.dromara.workflow.service.IActHiProcinstService;
 import org.dromara.workflow.service.IActProcessInstanceService;
 import org.dromara.workflow.service.IWfNodeConfigService;
@@ -75,9 +74,9 @@
     private final TaskService taskService;
     private final IActHiProcinstService actHiProcinstService;
     private final ManagementService managementService;
-    private final FlowEventStrategy flowEventStrategy;
     private final IWfTaskBackNodeService wfTaskBackNodeService;
     private final IWfNodeConfigService wfNodeConfigService;
+    private final FlowProcessEventHandler flowProcessEventHandler;
 
     @Value("${flowable.activity-font-name}")
     private String activityFontName;
@@ -460,10 +459,9 @@
             BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus());
             runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.INVALID.getStatus());
             runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
-            FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey());
-            if (processHandler != null) {
-                processHandler.handleProcess(historicProcessInstance.getBusinessKey(), BusinessStatusEnum.INVALID.getStatus(), false);
-            }
+            //娴佺▼浣滃簾鐩戝惉
+            flowProcessEventHandler.processHandler(historicProcessInstance.getProcessDefinitionKey(),
+                historicProcessInstance.getBusinessKey(), BusinessStatusEnum.INVALID.getStatus(), false);
             return true;
         } catch (Exception e) {
             e.printStackTrace();
@@ -570,10 +568,9 @@
                 managementService.executeCommand(deleteExecutionCmd);
             }
             runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus());
-            FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
-            if (processHandler != null) {
-                processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.CANCEL.getStatus(), false);
-            }
+            //娴佺▼浣滃簾鐩戝惉
+            flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(),
+                processInstance.getBusinessKey(), BusinessStatusEnum.CANCEL.getStatus(), false);
             return true;
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
index 84a3749..5e9a050 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
@@ -9,8 +9,10 @@
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.dto.RoleDTO;
 import org.dromara.common.core.domain.dto.UserDTO;
+import org.dromara.common.core.domain.event.ProcessTaskEvent;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.service.UserService;
+import org.dromara.common.core.utils.ServletUtils;
 import org.dromara.common.core.utils.StreamUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -25,9 +27,7 @@
 import org.dromara.workflow.domain.bo.*;
 import org.dromara.workflow.domain.vo.*;
 import org.dromara.workflow.flowable.cmd.*;
-import org.dromara.workflow.flowable.strategy.FlowEventStrategy;
-import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler;
-import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
+import org.dromara.workflow.flowable.handler.FlowProcessEventHandler;
 import org.dromara.workflow.mapper.ActHiTaskinstMapper;
 import org.dromara.workflow.mapper.ActTaskMapper;
 import org.dromara.workflow.service.IActTaskService;
@@ -75,13 +75,13 @@
     private final HistoryService historyService;
     private final IdentityService identityService;
     private final ManagementService managementService;
-    private final FlowEventStrategy flowEventStrategy;
     private final ActTaskMapper actTaskMapper;
     private final IWfTaskBackNodeService wfTaskBackNodeService;
     private final ActHiTaskinstMapper actHiTaskinstMapper;
     private final IWfNodeConfigService wfNodeConfigService;
     private final IWfDefinitionConfigService wfDefinitionConfigService;
     private final UserService userService;
+    private final FlowProcessEventHandler flowProcessEventHandler;
 
     /**
      * 鍚姩浠诲姟
@@ -179,19 +179,15 @@
             //闄勪欢涓婁紶
             AttachmentCmd attachmentCmd = new AttachmentCmd(completeTaskBo.getFileId(), task.getId(), task.getProcessInstanceId());
             managementService.executeCommand(attachmentCmd);
-            FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
             String businessStatus = WorkflowUtils.getBusinessStatus(processInstance.getBusinessKey());
+            //娴佺▼鎻愪氦鐩戝惉
             if (BusinessStatusEnum.DRAFT.getStatus().equals(businessStatus) || BusinessStatusEnum.BACK.getStatus().equals(businessStatus) || BusinessStatusEnum.CANCEL.getStatus().equals(businessStatus)) {
-                if (processHandler != null) {
-                    processHandler.handleProcess(processInstance.getBusinessKey(), businessStatus, true);
-                }
+                flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), processInstance.getBusinessKey(), businessStatus, true);
             }
             runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus());
-            String key = processInstance.getProcessDefinitionKey() + "_" + task.getTaskDefinitionKey();
-            FlowTaskEventHandler taskHandler = flowEventStrategy.getTaskHandler(key);
-            if (taskHandler != null) {
-                taskHandler.handleTask(task.getId(), processInstance.getBusinessKey());
-            }
+            //鍔炵悊鐩戝惉
+            String keyNode = processInstance.getProcessDefinitionKey() + "_" + task.getTaskDefinitionKey();
+            flowProcessEventHandler.processTaskHandler(keyNode, task.getId(), processInstance.getBusinessKey());
             //鍔炵悊鎰忚
             taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "鍚屾剰" : completeTaskBo.getMessage());
             //鍔炵悊浠诲姟
@@ -207,9 +203,8 @@
             if (pi == null) {
                 UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus());
                 managementService.executeCommand(updateBusinessStatusCmd);
-                if (processHandler != null) {
-                    processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.FINISH.getStatus(), false);
-                }
+                flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), processInstance.getBusinessKey(),
+                    BusinessStatusEnum.FINISH.getStatus(), false);
             } else {
                 List<Task> list = QueryUtils.taskQuery(task.getProcessInstanceId()).list();
                 for (Task t : list) {
@@ -520,10 +515,9 @@
                 runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus());
                 runtimeService.deleteProcessInstance(task.getProcessInstanceId(), StrUtil.EMPTY);
             }
-            FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey());
-            if (processHandler != null) {
-                processHandler.handleProcess(historicProcessInstance.getBusinessKey(), BusinessStatusEnum.TERMINATION.getStatus(), false);
-            }
+            //娴佺▼缁堟鐩戝惉
+            flowProcessEventHandler.processHandler(historicProcessInstance.getProcessDefinitionKey(),
+                historicProcessInstance.getBusinessKey(), BusinessStatusEnum.TERMINATION.getStatus(), false);
             return true;
         } catch (Exception e) {
             throw new ServiceException(e.getMessage());
@@ -721,10 +715,8 @@
             WfTaskBackNode wfTaskBackNode = wfTaskBackNodeService.getListByInstanceIdAndNodeId(task.getProcessInstanceId(), backProcessBo.getTargetActivityId());
             if (ObjectUtil.isNotNull(wfTaskBackNode) && wfTaskBackNode.getOrderNo() == 0) {
                 runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus());
-                FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
-                if (processHandler != null) {
-                    processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.BACK.getStatus(), false);
-                }
+                flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(),
+                    processInstance.getBusinessKey(), BusinessStatusEnum.BACK.getStatus(), false);
             }
             //鍒犻櫎椹冲洖鍚庣殑娴佺▼鑺傜偣
             wfTaskBackNodeService.deleteBackTaskNode(processInstanceId, backProcessBo.getTargetActivityId());
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java
index abb6473..d451b45 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java
@@ -5,6 +5,9 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.domain.event.ProcessEvent;
+import org.dromara.common.core.domain.event.ProcessTaskEvent;
 import org.dromara.common.core.service.WorkflowService;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StreamUtils;
@@ -17,6 +20,7 @@
 import org.dromara.workflow.domain.vo.TestLeaveVo;
 import org.dromara.workflow.mapper.TestLeaveMapper;
 import org.dromara.workflow.service.ITestLeaveService;
+import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -31,6 +35,7 @@
  */
 @RequiredArgsConstructor
 @Service
+@Slf4j
 public class TestLeaveServiceImpl implements ITestLeaveService {
 
     private final TestLeaveMapper baseMapper;
@@ -117,4 +122,26 @@
         workflowService.deleteRunAndHisInstance(idList);
         return baseMapper.deleteBatchIds(ids) > 0;
     }
+
+    /**
+     * 鎬讳綋娴佺▼鐩戝惉(渚嬪: 鎻愪氦 閫�鍥� 鎾ら攢 缁堟 浣滃簾绛�)
+     *
+     * @param processEvent 鍙傛暟
+     */
+    @EventListener(condition = "#processEvent.key=='leave1'")
+    public void processHandler(ProcessEvent processEvent) {
+        log.info("褰撳墠浠诲姟鎵ц浜唟}", processEvent.toString());
+    }
+
+    /**
+     * 鎵ц鍔炵悊浠诲姟鐩戝惉
+     *
+     * @param processTaskEvent 鍙傛暟
+     */
+    @EventListener(condition = "#processTaskEvent.keyNode=='leave1_Activity_14633hx'")
+    public void processTaskHandler(ProcessTaskEvent processTaskEvent) {
+        log.info("褰撳墠浠诲姟鎵ц浜唟}", processTaskEvent.toString());
+    }
+
+
 }

--
Gitblit v1.9.3