diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CaseAiChatApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CaseAiChatApi.java index 75431183..d117693d 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CaseAiChatApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CaseAiChatApi.java @@ -12,6 +12,7 @@ import com.xboe.module.boecase.service.ICaseAiPermissionService; import com.xboe.module.boecase.service.IElasticSearchIndexService; import com.xboe.module.boecase.vo.CaseAiMessageVo; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -46,6 +47,25 @@ public class CaseAiChatApi extends ApiBaseController { @Autowired private IElasticSearchIndexService elasticSearchIndexService; + /** + * 初始化会话 + * @return 会话id + */ + @GetMapping("/initChat") + public JsonResponse initChat() { + try { + String conversationId = caseAiChatService.initChat(getCurrent()); + if (StringUtils.isNotBlank(conversationId)) { + return success(conversationId, "初始化会话成功"); + } else { + return success(conversationId, "初始化会话失败"); + } + } catch (Exception e) { + log.error("初始化会话异常", e); + return error("初始化会话失败", e.getMessage()); + } + } + /** * 聊天 * @param caseAiChatDto diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICaseAiChatService.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICaseAiChatService.java index a9d32a97..c48ed308 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICaseAiChatService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICaseAiChatService.java @@ -17,6 +17,13 @@ import java.util.List; */ public interface ICaseAiChatService { + /** + * 初始化会话 + * + * @return {@link String } 会话id + */ + String initChat(CurrentUser currentUser); + /** * 聊天 * diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseAiChatServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseAiChatServiceImpl.java index cb6a19e3..567ae013 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseAiChatServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseAiChatServiceImpl.java @@ -1,5 +1,6 @@ package com.xboe.module.boecase.service.impl; +import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSON; @@ -112,6 +113,16 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService { // 用于存储会话ID与EventSource的映射关系,以便能够中断特定会话 private final Map conversationEventSourceMap = new ConcurrentHashMap<>(); + /** + * 初始化会话 + * + * @return {@link String } 会话id + */ + @Override + public String initChat(CurrentUser currentUser) { + return getOrCreateConversationId(new CaseAiChatDto(), currentUser); + } + @Override @Transactional public SseEmitter chat(CaseAiChatDto caseAiChatDto, CurrentUser currentUser) { @@ -385,7 +396,7 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService { if (StringUtils.isEmpty(conversationId)) { // 新会话,调用创建会话接口 String conversationName = "AI案例咨询-" + LocalDateTime.now().toString(); - CaseAiConversations newConversation = createNewConversation(currentUser.getCode(), conversationName); + CaseAiConversations newConversation = SpringUtil.getBean(ICaseAiChatService.class).createNewConversation(currentUser.getCode(), conversationName); return newConversation.getAiConversationId(); } else { // 已存在会话,从数据库查询