From cc25bc0eec2d50da39d62f9896ed4d5e66805366 Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期五, 11 七月 2025 18:04:05 +0800
Subject: [PATCH] zjh20250711

---
 ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java |   55 +++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 43 insertions(+), 12 deletions(-)

diff --git a/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java b/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java
index e1efb33..b929174 100644
--- a/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java
+++ b/ltkj-admin/src/main/java/com/ltkj/web/websocket/WebSockerManager.java
@@ -1,7 +1,14 @@
 package com.ltkj.web.websocket;
 
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ltkj.common.core.domain.model.LoginUser;
+import com.ltkj.hosp.domain.SysNoticeUser;
+import com.ltkj.hosp.service.SysNoticeUserService;
+import com.ltkj.system.domain.SysNotice;
+import com.ltkj.system.service.ISysNoticeService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.socket.CloseStatus;
 import org.springframework.web.socket.TextMessage;
@@ -9,7 +16,11 @@
 import org.springframework.web.socket.handler.TextWebSocketHandler;
 import redis.clients.jedis.util.SafeEncoder;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 /**
  * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃
@@ -20,20 +31,24 @@
 @Component
 public class WebSockerManager extends TextWebSocketHandler {
 
-    private static final ConcurrentHashMap<Long, ClientSessionInfo> userSessions = new ConcurrentHashMap<>();
+    @Autowired
+    private SysNoticeUserService noticeUserService;
+    @Autowired
+    private ISysNoticeService noticeService;
+
+    public final ConcurrentHashMap<String, ClientSessionInfo> userSessions = new ConcurrentHashMap<>();
     private static final ConcurrentHashMap<String, WebSocketClientInfo> sessions = new ConcurrentHashMap<>();
 
     private WebSocketClientInfo getUser(WebSocketSession session) {
-//        long uid = Long.parseLong(session.getAttributes().get("uid").toString());
-//        String hospId = session.getAttributes().get("hospId").toString();
-//        WebSocketClientInfo info = new WebSocketClientInfo();
-//        info.setUid(uid);
-//        info.setHospId(hospId);
-//        return info;
-        WebSocketClientInfo clientInfo = new WebSocketClientInfo();
-        clientInfo.setUid(123L);
-        clientInfo.setHospId("hosp");
-        return clientInfo;
+        LoginUser loginUser = (LoginUser) session.getAttributes().get("user");
+        WebSocketClientInfo info = new WebSocketClientInfo();
+        info.setUid(Long.parseLong(loginUser.getUserId()));
+        info.setHospId(loginUser.getHospName());
+        return info;
+//        WebSocketClientInfo clientInfo = new WebSocketClientInfo();
+//        clientInfo.setUid(123L);
+//        clientInfo.setHospId("hosp");
+//        return clientInfo;
     }
 
     @Override
@@ -41,8 +56,22 @@
         WebSocketClientInfo clientInfo = getUser(session);
 //        userSessions.put(clientInfo.getUid(), new ClientSessionInfo(session, clientInfo.getHospId()));
         sessions.put(session.getId(),clientInfo);
-        log.info(JSONUtil.toJsonStr(sessions));
+        ClientSessionInfo sessionInfo = new ClientSessionInfo();
+        sessionInfo.setSession(session);
+        sessionInfo.setCode(clientInfo.getHospId());
+        userSessions.put(String.valueOf(clientInfo.getUid()), sessionInfo);
         session.sendMessage(new TextMessage("杩炴帴鎴愬姛"));
+        log.info("[WebSocket] 鍦ㄧ嚎鍒楄〃UserIds\n{}",JSONUtil.toJsonStr(new ArrayList<>(userSessions.keySet())));
+        LambdaQueryWrapper<SysNoticeUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysNoticeUser::getUserId,clientInfo.getUid());
+        wrapper.eq(SysNoticeUser::getIsRead,0);
+        List<SysNoticeUser> list = noticeUserService.list(wrapper);
+        if (list != null && !list.isEmpty()){
+            List<Long> noticeIds = list.stream().map(SysNoticeUser::getNoticeId).collect(Collectors.toList());
+            for (Long noticeId : noticeIds) {
+                session.sendMessage(new TextMessage(JSONUtil.toJsonStr(noticeService.getById(noticeId))));
+            }
+        }
     }
 
     @Override
@@ -62,5 +91,7 @@
     @Override
     public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
         log.info("[WebSocket] 杩炴帴鍏抽棴: " + status);
+        WebSocketClientInfo clientInfo = sessions.get(session.getId());
+        userSessions.remove(String.valueOf(clientInfo.getUid()));
     }
 }

--
Gitblit v1.8.0