From 05c1b69b9a694cf99e9f07f12ebf034cb2450f5f Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 10 二月 2025 10:15:38 +0800
Subject: [PATCH] websocket改造

---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java       |   15 ++++++++++++++-
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java      |    9 ++++++---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java |   10 ++++++----
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java |   13 +++++++++++++
 4 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
index 8ca2c35..ba48a02 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
@@ -195,7 +195,8 @@
                         sysUser.setNickName("白金用户");
                         sysUser.setUserType("03");
                         sysUser.setPhonenumber(response.getOpenId());
-                        sysUser.setAvatar("https://jyzx-obs.obs.cn-sccd1.ctyun.cn/d41508d822cb4b7896aaa1bb56e6167f.png");
+                        sysUser.setAvatar(
+                                "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/ca8552a34fb64d4d846afa1b5b173cf9.png");
                         String password = "123456";
                         sysUser.setPassword(SecurityUtils.encryptPassword(password));
                         sysUser = sysUserService.registerUser(sysUser).getData();
@@ -207,7 +208,8 @@
                         member.setDelFlag(0);
                         member.setNickname("白酒用户");
                         member.setPhone(appMiniLoginDto.getPhone());
-                        member.setAvatar("https://jyzx-obs.obs.cn-sccd1.ctyun.cn/d41508d822cb4b7896aaa1bb56e6167f.png");
+                        member.setAvatar(
+                                "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/ca8552a34fb64d4d846afa1b5b173cf9.png");
                         member.setZfbOpenid(response.getOpenId());
                         this.save(member);
                         appMiniLoginVo.setZfbuserid(response.getUserId());
@@ -259,7 +261,7 @@
                     sysUser.setNickName("白金用户");
                     sysUser.setUserType("03");
                     sysUser.setAvatar(
-                            "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/d41508d822cb4b7896aaa1bb56e6167f.png");
+                            "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/ca8552a34fb64d4d846afa1b5b173cf9.png");
                     String password = "123456";
                     sysUser.setPassword(SecurityUtils.encryptPassword(password));
                     sysUser = sysUserService.registerUser(sysUser).getData();
@@ -271,7 +273,7 @@
                     member.setDelFlag(0);
                     member.setNickname("白酒用户");
                     member.setAvatar(
-                            "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/d41508d822cb4b7896aaa1bb56e6167f.png");
+                            "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/ca8552a34fb64d4d846afa1b5b173cf9.png");
                     member.setWxUnionid(unionid);
                     member.setPhone(appMiniLoginDto.getPhone());
                     member.setMiniOpenid(openid);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java
index 8a721a0..f2194cf 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java
@@ -40,4 +40,17 @@
         WebSocketUsers.sendMessageToUsersByText(message);
         return R.ok();
     }
+
+    /**
+     * 通过用户id推送消息
+     * @param type
+     * @param msg
+     * @return
+     */
+    @GetMapping("/push-by-user-id/{userId}/{msg}")
+    public R<?> pushByUserId(@PathVariable("userId") Long userId,
+            @PathVariable("msg") String msg) {
+        WebSocketUsers.sendMessageToUserById(userId, msg);
+        return R.ok();
+    }
 }
\ No newline at end of file
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java
index ee679e8..edd6125 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.websocket;
 
+import com.ruoyi.common.core.utils.JwtUtils;
 import java.util.concurrent.Semaphore;
 import javax.websocket.OnClose;
 import javax.websocket.OnError;
@@ -18,7 +19,7 @@
  * @作者 ruoyi
  */
 @Component
-@ServerEndpoint("/websocket/message/{clientType}")
+@ServerEndpoint("/websocket/message/{clientType}/{accessToken}")
 public class WebSocketServer {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketServer.class);
@@ -26,7 +27,8 @@
     private static Semaphore socketSemaphore = new Semaphore(socketMaxOnlineCount);
 
     @OnOpen
-    public void onOpen(Session session, @PathParam("clientType") Integer clientType)
+    public void onOpen(Session session, @PathParam("clientType") Integer clientType,
+            @PathParam("accessToken") String accessToken)
             throws Exception {
         boolean semaphoreFlag = false;
         semaphoreFlag = SemaphoreUtils.tryAcquire(socketSemaphore);
@@ -36,7 +38,8 @@
                     "当前在线人数超过限制数:" + socketMaxOnlineCount);
             session.close();
         } else {
-            WebSocketUsers.put(session.getId(), session, clientType);
+            String userId = JwtUtils.getUserId(accessToken);
+            WebSocketUsers.put(session.getId(), session, clientType, Long.parseLong(userId));
 
             if (clientType == 1) {
                 LOGGER.info("\n 用户端建立连接 - {}", session);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java
index 9b162c2..0b2f9cf 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java
@@ -20,11 +20,14 @@
 
     private static Map<String, Session> USERS = new ConcurrentHashMap<>();
     private static Map<String, Integer> USER_TYPES = new ConcurrentHashMap<>();
+    // 保存用户id与session映射
+    private static Map<String, Session> USER_ID_MAP = new ConcurrentHashMap<>();
 
-    public static void put(String key, Session session, Integer clientType)
+    public static void put(String key, Session session, Integer clientType, Long userId)
     {
         USERS.put(key, session);
         USER_TYPES.put(key, clientType);
+        USER_ID_MAP.put(userId.toString(), session);
     }
 
     public static boolean remove(Session session)
@@ -120,4 +123,14 @@
             }
         }
     }
+
+    /**
+     * 根据用户id进行点对点推送
+     * @param userId 用户id
+     * @param message 消息内容
+     */
+    public static void sendMessageToUserById(Long userId, String message) {
+        Session session = USER_ID_MAP.get(userId.toString());
+        sendMessageToUserByText(session, message);
+    }
 }

--
Gitblit v1.7.1