优化CozeAPI调用保存逻辑和前端图标修复

- 修复前端TrendingUpOutlined图标导入错误,改为LineChartOutlined
- 优化CozeAPI调用记录保存逻辑:
  * 正确保存创建人和更新人字段为当前用户ID
  * 正确传递和保存message_id字段
  * 新增带messageId的WebSocket聊天方法重载
- 修复WebSocket处理器中的用户消息保存逻辑
- 确保CozeApiCallService正确设置创建人和更新人字段
- 改进AI回复保存时的创建人设置逻辑
This commit is contained in:
2025-07-26 10:46:47 +08:00
parent 0dfabc35d7
commit 6903ac1c0d
8 changed files with 856 additions and 90 deletions
@@ -27,6 +27,16 @@ public interface AiChatService {
*/
String sendChatMessageForWebSocket(String conversationId, String message, String userId);
/**
* WebSocket方式发送聊天消息(只保存AI回复,带messageId
* @param conversationId 会话ID
* @param messageId 用户消息ID
* @param message 用户消息内容
* @param userId 用户ID
* @return AI回复内容
*/
String sendChatMessageForWebSocket(String conversationId, String messageId, String message, String userId);
/**
* 生成对话总结
* @param conversationId 会话ID
@@ -149,7 +149,7 @@ public class AiChatServiceImpl implements AiChatService {
log.info("WebSocket发送聊天消息: conversationId={}, userId={}, message={}", conversationId, userId, message);
try {
// 调用Coze API
// 调用Coze API(不带messageId
String aiReply = sendMessage(conversationId, message, userId);
// 注意:不保存用户消息,因为WebSocket处理器已经保存了
@@ -172,6 +172,38 @@ public class AiChatServiceImpl implements AiChatService {
}
}
@Override
public String sendChatMessageForWebSocket(String conversationId, String messageId, String message, String userId) {
log.info("WebSocket发送聊天消息(带messageId: conversationId={}, messageId={}, userId={}, message={}",
conversationId, messageId, userId, message);
try {
// 调用Coze API(带messageId
String aiReply = sendMessageWithMessageId(conversationId, messageId, message, userId);
// 注意:不保存用户消息,因为WebSocket处理器已经保存了
// 只保存AI回复
Message aiMessage = new Message();
aiMessage.setConversationId(conversationId);
aiMessage.setCreateBy(userId); // 设置创建人为当前用户
aiMessage.setContent(aiReply);
aiMessage.setType("text");
aiMessage.setSender("ai");
aiMessage.setCozeRole("assistant");
aiMessage.setCozeContentType("text");
aiMessage = messageService.createMessage(aiMessage);
log.info("WebSocket聊天消息处理完成(带messageId: userMessageId={}, aiMessageId={}",
messageId, aiMessage.getId());
return aiReply;
} catch (Exception e) {
log.error("WebSocket发送聊天消息失败(带messageId)", e);
return "抱歉,我暂时无法回复,请稍后再试。";
}
}
@Override
public String generateConversationSummary(String conversationId, String userId) {
log.info("生成对话总结: conversationId={}, userId={}", conversationId, userId);
@@ -233,7 +233,7 @@ public class CozeApiCallServiceImpl extends ServiceImpl<CozeApiCallMapper, CozeA
}
@Override
public CozeApiCall createApiCall(String conversationId, String messageId, String userId,
public CozeApiCall createApiCall(String conversationId, String messageId, String userId,
String requestType, String requestUrl, String requestBody) {
CozeApiCall apiCall = CozeApiCall.builder()
.conversationId(conversationId)
@@ -244,6 +244,8 @@ public class CozeApiCallServiceImpl extends ServiceImpl<CozeApiCallMapper, CozeA
.requestBody(requestBody)
.status("pending")
.startTime(LocalDateTime.now())
.createBy(userId) // 设置创建人为当前用户
.updateBy(userId) // 设置更新人为当前用户
.build();
this.save(apiCall);
return apiCall;
@@ -244,6 +244,7 @@ public class WebSocketServiceImpl implements WebSocketService {
Message userMessage = new Message();
userMessage.setConversationId(conversationId);
userMessage.setUserId(userId);
userMessage.setCreateBy(userId); // 设置创建人为当前用户
userMessage
.setUserType(request.getSenderType() == ChatRequest.SenderType.USER ? "registered" : "guest");
userMessage.setContent(request.getContent());
@@ -251,11 +252,12 @@ public class WebSocketServiceImpl implements WebSocketService {
userMessage.setSender("user");
userMessage.setCozeRole("user");
userMessage.setCozeContentType("text");
messageService.createMessage(userMessage);
userMessage = messageService.createMessage(userMessage);
// 调用AI服务(WebSocket专用方法,不重复保存用户消息
// 调用AI服务(WebSocket专用方法,传递messageId
String aiReply = aiChatService.sendChatMessageForWebSocket(
conversationId,
userMessage.getId(), // 传递用户消息ID
request.getContent(),
userId
);