ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
@@ -1,7 +1,10 @@
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.common.utils.DateUtils;
@@ -13,12 +16,17 @@
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;
@@ -69,6 +77,7 @@
     */
    @Override
    public int insertArdCallHistory(ArdCallHistory ardCallHistory) {
        ardCallHistory.setId(IdUtils.simpleUUID());
        ardCallHistory.setCreateTime(DateUtils.getNowDate());
        ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
@@ -80,13 +89,29 @@
                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
            WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(ardCallHistory.getTargetId()),ardCallHistory.getContent());
            // 构建正则表达式模式
            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));
        } else {
            //更新群聊用户未读消息计数
            ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
@@ -101,14 +126,31 @@
                        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
                    // 构建正则表达式模式
                    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));
                }
                //websocket发送给targetId
                WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(groupUser.getUserId()),ardCallHistory.getContent());
            });
        }