From 91b70d5ad2ada85cf00b25f7b9ecd9cf980bf138 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: 星期一, 12 八月 2024 16:42:44 +0800
Subject: [PATCH] 优化:websocket接收消息

---
 ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java |  110 ++++++++++++++++++++++++++-----------------------------
 1 files changed, 52 insertions(+), 58 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
index 82014e5..d442904 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
@@ -1,34 +1,23 @@
 package com.ruoyi.call.service.impl;
 
-import java.util.HashMap;
-import java.util.List;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.call.domain.*;
-import com.ruoyi.call.mapper.*;
+import com.ruoyi.call.dto.MessageEvent;
+import com.ruoyi.call.mapper.ArdCallGroupUserMapper;
+import com.ruoyi.call.mapper.ArdCallHistoryMapper;
+import com.ruoyi.call.mapper.ArdCallSessionMapper;
+import com.ruoyi.call.mapper.ArdCallUnreadMessagesMapper;
+import com.ruoyi.call.service.IArdCallGroupService;
+import com.ruoyi.call.service.IArdCallHistoryService;
 import com.ruoyi.common.utils.DateUtils;
-
-import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.utils.websocket.util.WebSocketUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.call.service.IArdCallHistoryService;
-
 import javax.annotation.Resource;
-import javax.websocket.Session;
-
-import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
+import java.util.List;
 
 /**
  * 浼氳瘽鍘嗗彶Service涓氬姟灞傚鐞�
@@ -37,6 +26,7 @@
  * @date 2024-07-03
  */
 @Service
+@Slf4j(topic = "msgListener")
 public class ArdCallHistoryServiceImpl implements IArdCallHistoryService {
     @Resource
     private ArdCallHistoryMapper ardCallHistoryMapper;
@@ -46,6 +36,10 @@
     private ArdCallUnreadMessagesMapper ardCallUnreadMessagesMapper;
     @Resource
     private ArdCallGroupUserMapper ardCallGroupUserMapper;
+    @Resource
+    private IArdCallGroupService ardCallGroupService;
+    @Autowired
+    private ApplicationEventPublisher eventPublisher;
 
     /**
      * 鏌ヨ浼氳瘽鍘嗗彶
@@ -55,7 +49,18 @@
      */
     @Override
     public ArdCallHistory selectArdCallHistoryById(String id) {
-        return ardCallHistoryMapper.selectArdCallHistoryById(id);
+        ArdCallHistory ardCallHistory = ardCallHistoryMapper.selectArdCallHistoryById(id);
+        if (ardCallHistory != null) {
+            //缇よ亰鍒欏皢targetNickName鏀逛负缇ゅ悕绉�
+            ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
+            if (ardCallSession != null && ardCallSession.getType().equals("1")) {
+                ArdCallGroup ardCallGroup = ardCallGroupService.selectArdCallGroupById(ardCallHistory.getTargetId());
+                if (ardCallGroup != null) {
+                    ardCallHistory.setTargetNickName(ardCallGroup.getName());
+                }
+            }
+        }
+        return ardCallHistory;
     }
 
     /**
@@ -66,7 +71,18 @@
      */
     @Override
     public List<ArdCallHistory> selectArdCallHistoryList(ArdCallHistory ardCallHistory) {
-        return ardCallHistoryMapper.selectArdCallHistoryList(ardCallHistory);
+        List<ArdCallHistory> ardCallHistories = ardCallHistoryMapper.selectArdCallHistoryList(ardCallHistory);
+        ardCallHistories.stream().forEach(aCallHistory -> {
+            //缇よ亰鍒欏皢targetNickName鏀逛负缇ゅ悕绉�
+            ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(aCallHistory.getSessionId());
+            if (ardCallSession != null && ardCallSession.getType().equals("1")) {
+                ArdCallGroup ardCallGroup = ardCallGroupService.selectArdCallGroupById(aCallHistory.getTargetId());
+                if (ardCallGroup != null) {
+                    aCallHistory.setTargetNickName(ardCallGroup.getName());
+                }
+            }
+        });
+        return ardCallHistories;
     }
 
     /**
@@ -77,8 +93,6 @@
      */
     @Override
     public int insertArdCallHistory(ArdCallHistory ardCallHistory) {
-
-
         ardCallHistory.setId(IdUtils.simpleUUID());
         ardCallHistory.setCreateTime(DateUtils.getNowDate());
         ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
@@ -90,26 +104,17 @@
                 ardCallUnreadMessages.setUserId(ardCallHistory.getTargetId());
                 ardCallUnreadMessages.setSessionId(ardCallHistory.getSessionId());
                 ardCallUnreadMessages.setUnreadCount(1);
-                ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
+                int rows = ardCallUnreadMessagesMapper.selectCountByUserIdAndSessionId(ardCallUnreadMessages.getUserId(), ardCallUnreadMessages.getSessionId());
+                if (rows == 0) {
+                    ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
+                }
             } else {
                 ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
                 ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
             }
             //websocket鍙戦�佺粰targetId
-            // 鏋勫缓姝e垯琛ㄨ揪寮忔ā寮�
-            String regex = "^" + Pattern.quote(ardCallHistory.getTargetId()) + "_\\d+$";
-            Pattern pattern = Pattern.compile(regex);
-            Map<String, Object> messageMap = new HashMap<>();
-            messageMap.put("type", "message");
-            messageMap.put("message", JSON.toJSONString(ardCallHistory));
-            ONLINE_USER_SESSIONS.entrySet().stream()
-                    .filter(entry -> {
-                        Matcher matcher = pattern.matcher(entry.getKey());
-                        return matcher.matches();
-                    })
-                    .map(Map.Entry::getValue)
-                    .forEach(session -> WebSocketUtils.sendMessage(session, messageMap));
-
+            MessageEvent messageEvent = new MessageEvent(ardCallHistory.getTargetId(), ardCallHistory);
+            eventPublisher.publishEvent(messageEvent);
         } else {
             //鏇存柊缇よ亰鐢ㄦ埛鏈娑堟伅璁℃暟
             ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
@@ -124,30 +129,19 @@
                         ardCallUnreadMessages.setUserId(groupUser.getUserId());
                         ardCallUnreadMessages.setSessionId(ardCallHistory.getSessionId());
                         ardCallUnreadMessages.setUnreadCount(1);
-                        ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
+                        int rows = ardCallUnreadMessagesMapper.selectCountByUserIdAndSessionId(ardCallUnreadMessages.getUserId(), ardCallUnreadMessages.getSessionId());
+                        if (rows == 0) {
+                            ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
+                        }
                     } else {
                         ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
                         ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
                     }
                     //websocket鍙戦�佺粰targetId
-                    // 鏋勫缓姝e垯琛ㄨ揪寮忔ā寮�
-                    String regex = "^" + Pattern.quote(groupUser.getUserId()) + "_\\d+$";
-                    Pattern pattern = Pattern.compile(regex);
-                    Map<String, Object> messageMap = new HashMap<>();
-                    messageMap.put("type", "message");
-                    messageMap.put("message", JSON.toJSONString(ardCallHistory));
-                    ONLINE_USER_SESSIONS.entrySet().stream()
-                            .filter(entry ->
-                            {
-                                Matcher matcher = pattern.matcher(entry.getKey());
-                                return matcher.matches();
-                            })
-                            .map(Map.Entry::getValue)
-                            .forEach(session -> WebSocketUtils.sendMessage(session, messageMap));
+                    MessageEvent messageEvent = new MessageEvent(groupUser.getUserId(), ardCallHistory);
+                    eventPublisher.publishEvent(messageEvent);
                 }
-
             });
-
         }
         return ardCallHistoryMapper.insertArdCallHistory(ardCallHistory);
     }

--
Gitblit v1.9.3