update 聊天模块新增异常

This commit is contained in:
yyb
2025-08-25 13:39:55 +08:00
parent 80b15dcf5b
commit f8264b2df1
6 changed files with 223 additions and 63 deletions

View File

@@ -15,7 +15,9 @@ public enum ExceptionEnum {
SET_PRINCIPAL_FAIL(1022, "websocket链接异常,用户身份设置失败"),
GET_PRINCIPAL_FAIL(1023, "websocket链接异常,用户信息邮箱获取失败"),
ACCOUNT_HAS_CONNECTED(1024, "当前登录用户在其他地方链接"),
;
ROOM_NOT_EXIST(1025, "聊天室不存在,发送消息失败");
private final int code;
private final String description;

View File

@@ -3,6 +3,7 @@ package com.m2pool.chat.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.m2pool.chat.config.CustomWebSocketConfig;
import com.m2pool.chat.constant.Destination;
import com.m2pool.chat.constant.ExceptionEnum;
import com.m2pool.chat.dto.WebsocketMessageDto;
import com.m2pool.chat.entity.ChatMessage;
import com.m2pool.chat.entity.ChatRoom;
@@ -13,6 +14,7 @@ import com.m2pool.chat.service.StompService;
import com.m2pool.chat.vo.UserMessageVo;
import com.m2pool.common.core.web.Result.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageDeliveryException;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.messaging.simp.user.SimpUserRegistry;
import org.springframework.stereotype.Service;
@@ -64,24 +66,7 @@ public class StompServiceImpl implements StompService {
ChatRoom chatRoom = chatRoomMapper.selectOne(new LambdaQueryWrapper<ChatRoom>()
.eq(ChatRoom::getUserOneEmail,userMessageVo.getEmail())
.eq(ChatRoom::getUserTwoEmail,principal.getName()));
build.setRoomId(userMessageVo.getRoomId());
int serviceReadNum = chatRoom != null ? chatRoom.getClientReadNum() : 0;
build.setClientReadNum( serviceReadNum+ 1);
//分块传输,只有最后一个块拼接完成才能发送消息
//if (userMessageVo.getCurrentChunk() == userMessageVo.getTotalChunks()-1){
// build.setContent(handleImage(userMessageVo.getEmail()+principal.getName(),userMessageVo.getContent()));
// System.out.println("发送图片成功"+build.getContent());
// messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE_USER + "/" + userMessageVo.getEmail(),build);
// executeTran(principal, userMessageVo, chatRoom);
// imageContent.remove(userMessageVo.getEmail()+principal.getName());
//}else{
// handleImage(userMessageVo.getEmail()+principal.getName(),userMessageVo.getContent());
//}
Long id = executeTran(principal, userMessageVo, chatRoom);
System.out.println("发送消息聊天室id"+userMessageVo.getRoomId()+"发送者邮箱"+principal.getName()+"接受者邮箱"+userMessageVo.getEmail()+"消息id"+id);
//多端情况下,需要把消息发送给自己
build.setId(id);
build(chatRoom,userMessageVo,principal,build);
messagingTemplate.convertAndSendToUser(principal.getName(), Destination.QUEUE_CUSTOMER + "/" + principal.getName(),build);
messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE_USER + "/" + userMessageVo.getEmail(),build);
return AjaxResult.success("成功");
@@ -93,35 +78,28 @@ public class StompServiceImpl implements StompService {
ChatRoom chatRoom = chatRoomMapper.selectOne(new LambdaQueryWrapper<ChatRoom>()
.eq(ChatRoom::getUserOneEmail, principal.getName())
.eq(ChatRoom::getUserTwoEmail, userMessageVo.getEmail()));
build.setRoomId(userMessageVo.getRoomId());
int serviceReadNum = chatRoom != null ? chatRoom.getServiceReadNum() : 0;
build.setClientReadNum(serviceReadNum + 1);
//分块传输,只有最后一个块拼接完成才能发送消息
//if (userMessageVo.getCurrentChunk() == userMessageVo.getTotalChunks()-1){
// build.setContent(handleImage(userMessageVo.getEmail()+principal.getName(),userMessageVo.getContent()));
// messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE_CUSTOMER + "/" + userMessageVo.getEmail(),build);
// executeTran(principal, userMessageVo, chatRoom);
// imageContent.remove(userMessageVo.getEmail()+principal.getName());
//}else{
// handleImage(userMessageVo.getEmail()+principal.getName(),userMessageVo.getContent());
//}
Long id = executeTran(principal, userMessageVo, chatRoom);
System.out.println("发送消息聊天室id"+userMessageVo.getRoomId()+"发送者邮箱"+principal.getName()+"接受者邮箱"+userMessageVo.getEmail()+"消息id"+id);
// 多端情况下,需要把消息发送给
build.setId(id);
build(chatRoom,userMessageVo,principal,build);
messagingTemplate.convertAndSendToUser(principal.getName(), Destination.QUEUE_USER + "/" + principal.getName(),build);
messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE_CUSTOMER + "/" + userMessageVo.getEmail(),build);
return AjaxResult.success("成功");
}
/**
* 分片图片处理
* @return
*/
//private String handleImage(String key,String value){
// return imageContent.compute(key, (k, s) -> s + value);
//}
public void build(ChatRoom chatRoom,UserMessageVo userMessageVo,StompPrincipal principal,WebsocketMessageDto build){
if (chatRoom == null && userMessageVo.getRoomId() == null){
throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.ROOM_NOT_EXIST));
}
if(chatRoom != null && userMessageVo.getRoomId() == null){
userMessageVo.setRoomId(chatRoom.getId());
}
build.setRoomId(userMessageVo.getRoomId());
int serviceReadNum = chatRoom != null ? chatRoom.getServiceReadNum() : 0;
build.setClientReadNum(serviceReadNum + 1);
Long id = executeTran(principal, userMessageVo, chatRoom);
System.out.println("发送消息聊天室id"+userMessageVo.getRoomId()+"发送者邮箱"+principal.getName()+"接受者邮箱"+userMessageVo.getEmail()+"消息id"+id);
// 多端情况下,需要把消息发送给
build.setId(id);
}
/**
* 构建聊天实时返回信息