From a22dc9537f1bc3896af38ab4bb572a56fb9611be Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期三, 22 一月 2025 11:13:24 +0800
Subject: [PATCH] update 优化 业务事件监听器增加流程审批参数传递 更方便的对接业务数据

---
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java   |    5 ++++-
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java |    9 +++++++++
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java    |    6 ++++++
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java   |    2 +-
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java   |   11 ++++++++++-
 5 files changed, 30 insertions(+), 3 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
index 21bfbef..6329b9c 100644
--- 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
@@ -4,6 +4,7 @@
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.util.Map;
 
 /**
  * 鎬讳綋娴佺▼鐩戝惉
@@ -37,6 +38,11 @@
     private String status;
 
     /**
+     * 鍔炵悊鍙傛暟
+     */
+    private Map<String, Object> params;
+
+    /**
      * 褰撲负true鏃朵负鐢宠浜鸿妭鐐瑰姙鐞�
      */
     private boolean submit;
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java
index 656e013..4b215ef 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java
@@ -9,6 +9,8 @@
 import org.dromara.workflow.common.ConditionalOnEnable;
 import org.springframework.stereotype.Component;
 
+import java.util.Map;
+
 /**
  * 娴佺▼鐩戝惉鏈嶅姟
  *
@@ -28,7 +30,7 @@
      * @param status     鐘舵��
      * @param submit     褰撲负true鏃朵负鐢宠浜鸿妭鐐瑰姙鐞�
      */
-    public void processHandler(String flowCode, String businessId, String status, boolean submit) {
+    public void processHandler(String flowCode, String businessId, String status, Map<String, Object> params, boolean submit) {
         String tenantId = TenantHelper.getTenantId();
         log.info("鍙戝竷娴佺▼浜嬩欢锛岀鎴稩D: {}, 娴佺▼鐘舵��: {}, 娴佺▼缂栫爜: {}, 涓氬姟ID: {}, 鏄惁鐢宠浜鸿妭鐐瑰姙鐞�: {}", tenantId, status, flowCode, businessId, submit);
         ProcessEvent processEvent = new ProcessEvent();
@@ -36,6 +38,7 @@
         processEvent.setFlowCode(flowCode);
         processEvent.setBusinessId(businessId);
         processEvent.setStatus(status);
+        processEvent.setParams(params);
         processEvent.setSubmit(submit);
         SpringUtils.context().publishEvent(processEvent);
     }
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java
index 097d74c..e79fc3b 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java
@@ -17,7 +17,9 @@
 import org.dromara.workflow.service.IFlwTaskService;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鍏ㄥ眬浠诲姟鍔炵悊鐩戝惉
@@ -81,10 +83,17 @@
         Definition definition = listenerVariable.getDefinition();
         String businessId = instance.getBusinessId();
         String flowStatus = instance.getFlowStatus();
+        Map<String, Object> params = new HashMap<>();
+        // 鍘嗗彶浠诲姟鎵╁睍(閫氬父涓洪檮浠�)
+        params.put("hisTaskExt", listenerVariable.getFlowParams().getHisTaskExt());
+        // 鍔炵悊浜�
+        params.put("handler", listenerVariable.getFlowParams().getHandler());
+        // 鍔炵悊鎰忚
+        params.put("message", listenerVariable.getFlowParams().getMessage());
         // 鍒ゆ柇娴佺▼鐘舵�侊紙鍙戝竷锛氭挙閿�锛岄��鍥烇紝浣滃簾锛岀粓姝紝宸插畬鎴愪簨浠讹級
         String status = determineFlowStatus(instance, flowStatus);
         if (StringUtils.isNotBlank(status)) {
-            flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, false);
+            flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, params, false);
         }
     }
 
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
index 0122126..2df51bb 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
@@ -153,7 +153,7 @@
             Definition definition = defService.getById(flowTask.getDefinitionId());
             // 妫�鏌ユ祦绋嬬姸鎬佹槸鍚︿负鑽夌銆佸凡鎾ら攢鎴栧凡閫�鍥炵姸鎬侊紝鑻ユ槸鍒欐墽琛屾祦绋嬫彁浜ょ洃鍚�
             if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
-                flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), true);
+                flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), null, true);
             }
             // 鏋勫缓娴佺▼鍙傛暟锛屽寘鎷彉閲忋�佽烦杞被鍨嬨�佹秷鎭�佸鐞嗕汉銆佹潈闄愮瓑淇℃伅
             FlowParams flowParams = new FlowParams();
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 a11e6c1..a7be927 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
@@ -28,6 +28,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 璇峰亣Service涓氬姟灞傚鐞�
@@ -131,6 +132,14 @@
         log.info("褰撳墠浠诲姟鎵ц浜唟}", processEvent.toString());
         TestLeave testLeave = baseMapper.selectById(Long.valueOf(processEvent.getBusinessId()));
         testLeave.setStatus(processEvent.getStatus());
+        // 鐢ㄤ簬渚嬪瀹℃壒闄勪欢 瀹℃壒鎰忚绛� 瀛樺偍鍒颁笟鍔¤〃鍐� 鑷鏍规嵁涓氬姟瀹炵幇瀛樺偍娴佺▼
+        Map<String, Object> params = processEvent.getParams();
+        // 鍘嗗彶浠诲姟鎵╁睍(閫氬父涓洪檮浠�)
+        String hisTaskExt = params.getOrDefault("hisTaskExt", "").toString();
+        // 鍔炵悊浜�
+        String handler = params.getOrDefault("handler", "").toString();
+        // 鍔炵悊鎰忚
+        String message = params.getOrDefault("message", "").toString();
         if (processEvent.isSubmit()) {
             testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus());
         }

--
Gitblit v1.9.3