From c55aca77e84607238c3354168a8642176c575ca1 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 10 十一月 2026 11:42:16 +0800
Subject: [PATCH] feat(bpm): 待办任务站内信实时推送

---
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImpl.java |   32 +++++++++++++++++++++++++++++++-
 1 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImpl.java
index a47d7fe..501f2f9 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImpl.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/notify/NotifySendServiceImpl.java
@@ -2,7 +2,9 @@
 
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
+import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi;
 import cn.iocoder.yudao.module.system.dal.dataobject.notify.NotifyTemplateDO;
+import cn.iocoder.yudao.module.system.service.notify.dto.NotifyMessagePushDTO;
 import com.google.common.annotations.VisibleForTesting;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -31,6 +33,9 @@
     @Resource
     private NotifyMessageService notifyMessageService;
 
+    @Resource
+    private WebSocketSenderApi webSocketSenderApi;
+
     @Override
     public Long sendSingleNotifyToAdmin(Long userId, String templateCode, Map<String, Object> templateParams) {
         return sendSingleNotify(userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParams);
@@ -54,7 +59,32 @@
 
         // 鍙戦�佺珯鍐呬俊
         String content = notifyTemplateService.formatNotifyTemplateContent(template.getContent(), templateParams);
-        return notifyMessageService.createNotifyMessage(userId, userType, template, content, templateParams);
+        Long messageId = notifyMessageService.createNotifyMessage(userId, userType, template, content, templateParams);
+        // 瀹炴椂鎺ㄩ�侊細鍓嶇閾冮摏鏀跺埌鍚庣珛鍗冲埛鏂版湭璇绘暟锛岄伩鍏嶅彧鑳界瓑寰呰疆璇�
+        pushToWebSocket(userId, userType, messageId, template, content);
+        return messageId;
+    }
+
+    /**
+     * 閫氳繃 WebSocket 鎶婄珯鍐呬俊瀹炴椂鎺ㄩ�佺粰鐢ㄦ埛锛堣鐢ㄦ埛鎵�鏈夊湪绾块〉闈㈤兘浼氭敹鍒帮級
+     *
+     * 璇存槑锛氭帹閫佸彧鏄�滄彁鍓嶉�氱煡鍓嶇鍒锋柊鈥濓紝鎺ㄩ�佸け璐ヤ笉褰卞搷绔欏唴淇℃湰韬紝鍥犳杩欓噷鍚炴帀寮傚父浠呰褰曟棩蹇椼��
+     */
+    private void pushToWebSocket(Long userId, Integer userType, Long messageId,
+                                 NotifyTemplateDO template, String content) {
+        if (messageId == null) {
+            return;
+        }
+        NotifyMessagePushDTO message = new NotifyMessagePushDTO();
+        message.setMessageId(messageId);
+        message.setTemplateCode(template.getCode());
+        message.setTemplateNickname(template.getNickname());
+        message.setTemplateContent(content);
+        try {
+            webSocketSenderApi.sendObject(userType, userId, NotifyMessagePushDTO.MESSAGE_TYPE, message);
+        } catch (Exception ex) {
+            log.warn("[pushToWebSocket][鍚戠敤鎴�({}/{})鎺ㄩ�佺珯鍐呬俊({})澶辫触]", userId, userType, messageId, ex);
+        }
     }
 
     @VisibleForTesting

--
Gitblit v1.9.3