refactor(oa): 重构 AI 聊天接口
- 新增 OaAiChatBo 类封装请求参数 - 修改 chat 方法签名,使用 OaAiChatBo作为参数 - 更新方法内部逻辑,使用 OaAiChatBo 中的属性
This commit is contained in:
@@ -3,6 +3,7 @@ package com.ruoyi.oa.controller;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import com.ruoyi.common.helper.LoginHelper;
|
import com.ruoyi.common.helper.LoginHelper;
|
||||||
|
import com.ruoyi.oa.domain.bo.OaAiChatBo;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
@@ -227,32 +228,32 @@ public class SysOaAiController extends BaseController {
|
|||||||
* 发送消息给AI
|
* 发送消息给AI
|
||||||
*/
|
*/
|
||||||
@PostMapping("/chat")
|
@PostMapping("/chat")
|
||||||
public R<Map<String, Object>> chat(@RequestParam Long conversationId, @RequestParam String message) {
|
public R<Map<String, Object>> chat(@RequestBody OaAiChatBo bo) {
|
||||||
try {
|
try {
|
||||||
// 1. 保存用户消息
|
// 1. 保存用户消息
|
||||||
messageService.addUserMessage(conversationId, message);
|
messageService.addUserMessage(bo.getConversationId(), bo.getMessage());
|
||||||
|
|
||||||
// 2. 获取对话历史(优先从Redis缓存获取)
|
// 2. 获取对话历史(优先从Redis缓存获取)
|
||||||
List<SysOaAiMessageVo> conversationHistory = aiServiceUtil.getCachedConversationHistory(conversationId);
|
List<SysOaAiMessageVo> conversationHistory = aiServiceUtil.getCachedConversationHistory(bo.getConversationId());
|
||||||
if (conversationHistory == null) {
|
if (conversationHistory == null) {
|
||||||
// 缓存中没有,从数据库获取
|
// 缓存中没有,从数据库获取
|
||||||
conversationHistory = messageService.queryByConversationId(conversationId);
|
conversationHistory = messageService.queryByConversationId(bo.getConversationId());
|
||||||
// 缓存对话历史
|
// 缓存对话历史
|
||||||
aiServiceUtil.cacheConversationHistory(conversationId, conversationHistory);
|
aiServiceUtil.cacheConversationHistory(bo.getConversationId(), conversationHistory);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 调用AI服务获取回复(传递对话历史)
|
// 3. 调用AI服务获取回复(传递对话历史)
|
||||||
String aiResponse = callAiServiceWithHistory(message, conversationHistory);
|
String aiResponse = callAiServiceWithHistory(bo.getMessage(), conversationHistory);
|
||||||
|
|
||||||
// 4. 保存AI回复
|
// 4. 保存AI回复
|
||||||
messageService.addAiMessage(conversationId, aiResponse, 0, java.math.BigDecimal.ZERO);
|
messageService.addAiMessage(bo. getConversationId(), aiResponse, 0, java.math.BigDecimal.ZERO);
|
||||||
|
|
||||||
// 5. 更新对话历史缓存
|
// 5. 更新对话历史缓存
|
||||||
List<SysOaAiMessageVo> updatedHistory = messageService.queryByConversationId(conversationId);
|
List<SysOaAiMessageVo> updatedHistory = messageService.queryByConversationId(bo.getConversationId());
|
||||||
aiServiceUtil.cacheConversationHistory(conversationId, updatedHistory);
|
aiServiceUtil.cacheConversationHistory(bo.getConversationId(), updatedHistory);
|
||||||
|
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
result.put("conversationId", conversationId);
|
result.put("conversationId", bo.getConversationId());
|
||||||
result.put("response", aiResponse);
|
result.put("response", aiResponse);
|
||||||
|
|
||||||
return R.ok(result);
|
return R.ok(result);
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.ruoyi.oa.domain.bo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class OaAiChatBo {
|
||||||
|
Long conversationId;
|
||||||
|
String message;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user