聊天页bug修复
This commit is contained in:
@@ -10,6 +10,7 @@ import com.emotion.service.WebSocketService;
|
||||
import com.emotion.service.AiChatService;
|
||||
import com.emotion.service.MessageService;
|
||||
import com.emotion.service.ConversationService;
|
||||
import com.emotion.util.SnowflakeIdGenerator;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
@@ -42,7 +43,10 @@ public class WebSocketServiceImpl implements WebSocketService {
|
||||
|
||||
@Autowired
|
||||
private ConversationService conversationService;
|
||||
|
||||
|
||||
@Autowired
|
||||
private SnowflakeIdGenerator snowflakeIdGenerator;
|
||||
|
||||
// 在线用户管理
|
||||
private final ConcurrentHashMap<String, String> onlineUsers = new ConcurrentHashMap<>();
|
||||
|
||||
@@ -464,24 +468,46 @@ public class WebSocketServiceImpl implements WebSocketService {
|
||||
* @param content 消息内容
|
||||
*/
|
||||
private void sendSingleAiMessage(String userId, String conversationId, String content) {
|
||||
// 构建AI回复消息
|
||||
WebSocketMessage aiMessage = WebSocketMessage.builder()
|
||||
.messageId(UUID.randomUUID().toString())
|
||||
.conversationId(conversationId)
|
||||
.type("TEXT")
|
||||
.content(content)
|
||||
.senderId("ai")
|
||||
.senderType("AI")
|
||||
.status("SENT")
|
||||
.createTime(LocalDateTime.now())
|
||||
.build();
|
||||
try {
|
||||
// 保存AI消息到数据库
|
||||
Message aiMessage = new Message();
|
||||
aiMessage.setId(snowflakeIdGenerator.nextIdAsString());
|
||||
aiMessage.setConversationId(conversationId);
|
||||
aiMessage.setUserId(userId);
|
||||
aiMessage.setCreateBy("ai");
|
||||
aiMessage.setContent(content);
|
||||
aiMessage.setType("text");
|
||||
aiMessage.setSender("ai");
|
||||
aiMessage.setCozeRole("assistant");
|
||||
aiMessage.setCozeContentType("text");
|
||||
aiMessage.setTimestamp(LocalDateTime.now());
|
||||
messageService.createMessage(aiMessage);
|
||||
|
||||
// 发送给用户私有队列
|
||||
messagingTemplate.convertAndSendToUser(userId, "/queue/messages", aiMessage);
|
||||
log.info("AI消息已保存到数据库: messageId={}, conversationId={}, contentLength={}",
|
||||
aiMessage.getId(), conversationId, content.length());
|
||||
|
||||
// 发送到会话公共频道
|
||||
if (conversationId != null) {
|
||||
messagingTemplate.convertAndSend("/topic/conversation/" + conversationId, aiMessage);
|
||||
// 构建WebSocket消息
|
||||
WebSocketMessage wsMessage = WebSocketMessage.builder()
|
||||
.messageId(aiMessage.getId())
|
||||
.conversationId(conversationId)
|
||||
.type("TEXT")
|
||||
.content(content)
|
||||
.senderId("ai")
|
||||
.senderType("AI")
|
||||
.status("SENT")
|
||||
.createTime(LocalDateTime.now())
|
||||
.build();
|
||||
|
||||
// 发送给用户私有队列
|
||||
messagingTemplate.convertAndSendToUser(userId, "/queue/messages", wsMessage);
|
||||
|
||||
// 发送到会话公共频道
|
||||
if (conversationId != null) {
|
||||
messagingTemplate.convertAndSend("/topic/conversation/" + conversationId, wsMessage);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("发送单条AI消息失败: userId={}, conversationId={}", userId, conversationId, e);
|
||||
sendErrorMessage(userId, "消息发送失败,请稍后重试");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user