对话逻辑修复
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# 重复消息问题修复测试
|
||||
|
||||
## 问题描述
|
||||
用户在聊天页面发送一条消息时,数据库中保存了两条相同内容的用户消息:
|
||||
1. 第一条:通过WebSocket处理器保存,包含完整的用户信息
|
||||
2. 第二条:通过REST API保存,缺少部分用户信息
|
||||
|
||||
## 根本原因
|
||||
前端`sendMessage`方法中存在双重保存机制:
|
||||
1. WebSocket发送 - 后端WebSocket处理器会保存消息
|
||||
2. REST API调用 - 前端额外调用`chatApi.createMessage`保存消息
|
||||
|
||||
## 修复方案
|
||||
1. **前端修复**:移除前端`chat.ts`中`sendMessage`方法里的`chatApi.createMessage`调用,只保留WebSocket发送
|
||||
2. **后端修复**:创建专门的WebSocket方法`sendChatMessageForWebSocket`,避免重复保存用户消息
|
||||
|
||||
## 修复内容
|
||||
### 前端修改
|
||||
文件:`web/src/stores/chat.ts`
|
||||
- 移除了第69-82行的REST API调用
|
||||
- 添加了注释说明修复原因
|
||||
- 保留WebSocket发送逻辑
|
||||
|
||||
### 后端修改
|
||||
文件:`backend-single/src/main/java/com/emotion/service/AiChatService.java`
|
||||
- 新增`sendChatMessageForWebSocket`方法接口
|
||||
|
||||
文件:`backend-single/src/main/java/com/emotion/service/impl/AiChatServiceImpl.java`
|
||||
- 实现`sendChatMessageForWebSocket`方法,只保存AI回复,不保存用户消息
|
||||
|
||||
文件:`backend-single/src/main/java/com/emotion/service/WebSocketService.java`
|
||||
- 修改WebSocket处理器调用新的`sendChatMessageForWebSocket`方法
|
||||
|
||||
## 测试步骤
|
||||
1. 启动后端服务
|
||||
2. 启动前端服务
|
||||
3. 登录用户账号
|
||||
4. 发送一条测试消息
|
||||
5. 检查数据库中是否只有一条用户消息记录
|
||||
|
||||
## 预期结果
|
||||
- 数据库中只保存一条用户消息
|
||||
- 消息包含完整的用户信息(user_id, user_type, coze_role等)
|
||||
- AI回复正常工作
|
||||
- 前端显示正常
|
||||
|
||||
## 验证SQL
|
||||
```sql
|
||||
-- 查看最新的消息记录
|
||||
SELECT id, conversation_id, content, sender, user_id, user_type, coze_role, create_by, create_time
|
||||
FROM message
|
||||
WHERE conversation_id = '你的会话ID'
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 10;
|
||||
|
||||
-- 检查是否还有重复消息
|
||||
SELECT content, COUNT(*) as count
|
||||
FROM message
|
||||
WHERE conversation_id = '你的会话ID'
|
||||
AND sender = 'user'
|
||||
AND create_time > '2025-07-25 16:00:00'
|
||||
GROUP BY content
|
||||
HAVING COUNT(*) > 1;
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
- 此修复只影响新发送的消息
|
||||
- 历史重复消息需要手动清理
|
||||
- 确保WebSocket连接正常工作
|
||||
Reference in New Issue
Block a user