| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public int insertArdCallHistory(ArdCallHistory ardCallHistory) { |
| | | |
| | | ardCallHistory.setId(IdUtils.simpleUUID()); |
| | | ardCallHistory.setCreateTime(DateUtils.getNowDate()); |
| | | ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId()); |
| | |
| | | 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(); |
| | |
| | | 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()); |
| | | |
| | | }); |
| | | |
| | | } |