mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-12 20:36:50 +08:00
feat: chat接口会话结束时, 发送docId给前端
This commit is contained in:
@@ -230,7 +230,7 @@ public class CaseAiChatApi extends ApiBaseController {
|
||||
aiChatConversationData.setCaseRefers(caseAiMessageVo.getCaseRefer());
|
||||
aiChatConversationData.setSuggestions(caseAiMessageVo.getSuggestions());
|
||||
aiChatConversationData.setUserId(userId);
|
||||
if (elasticSearchIndexService.createData(aiChatConversationData)) {
|
||||
if (elasticSearchIndexService.createData(aiChatConversationData) != null) {
|
||||
return success("创建成功");
|
||||
}
|
||||
return error("创建失败");
|
||||
|
||||
@@ -41,7 +41,7 @@ public interface IElasticSearchIndexService {
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
boolean createData(AiChatConversationData data);
|
||||
String createData(AiChatConversationData data);
|
||||
|
||||
/**
|
||||
* 查询数据
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.xboe.module.boecase.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.xboe.constants.CaseAiConstants;
|
||||
import com.xboe.core.CurrentUser;
|
||||
import com.xboe.core.orm.FieldFilters;
|
||||
@@ -175,22 +176,22 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService {
|
||||
if (org.apache.commons.lang3.StringUtils.isBlank(accessToken)) {
|
||||
errMessage(sseEmitter, conversationId, CaseAiConstants.CHAT_SYS_ERR_MSG);
|
||||
// 先响应给前端
|
||||
sseEmitter.complete();
|
||||
conversationData.setStatus(CaseAiChatErrCodeEnum.AIOT_ERROR.getCode());
|
||||
conversationData.setErrorMsg("获取AccessToken时发生异常");
|
||||
conversationData.appendAnswer(CaseAiConstants.CHAT_SYS_ERR_MSG);
|
||||
saveConversationData(conversationData);
|
||||
saveConversationData(sseEmitter, conversationData);
|
||||
sseEmitter.complete();
|
||||
return sseEmitter;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("获取access_token失败", e);
|
||||
errMessage(sseEmitter, conversationId, CaseAiConstants.CHAT_SYS_ERR_MSG);
|
||||
// 先响应给前端
|
||||
sseEmitter.complete();
|
||||
conversationData.setStatus(CaseAiChatErrCodeEnum.AIOT_ERROR.getCode());
|
||||
conversationData.setErrorMsg("获取AccessToken时发生异常" + e.getMessage());
|
||||
conversationData.appendAnswer(CaseAiConstants.CHAT_SYS_ERR_MSG);
|
||||
saveConversationData(conversationData);
|
||||
saveConversationData(sseEmitter, conversationData);
|
||||
sseEmitter.complete();
|
||||
return sseEmitter;
|
||||
}
|
||||
String apiCode = caseAiProperties.getChatApiCode();
|
||||
@@ -239,11 +240,11 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService {
|
||||
}
|
||||
|
||||
errMessage(sseEmitter, conversationId, sseContent);
|
||||
sseEmitter.complete();
|
||||
conversationData.setStatus(CaseAiChatErrCodeEnum.AIOT_ERROR.getCode());
|
||||
conversationData.setErrorMsg(sseContent);
|
||||
conversationData.appendAnswer(sseContent);
|
||||
saveConversationData(conversationData);
|
||||
saveConversationData(sseEmitter, conversationData);
|
||||
sseEmitter.complete();
|
||||
// 关闭eventSource
|
||||
eventSource.cancel();
|
||||
return;
|
||||
@@ -256,7 +257,7 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService {
|
||||
public void onClosed(@NotNull EventSource eventSource) {
|
||||
log.info("调用接口 [{}] 接口关闭", request.url());
|
||||
// 对话完成,保存到ES
|
||||
saveConversationData(conversationData);
|
||||
saveConversationData(sseEmitter, conversationData);
|
||||
// 从Map中移除已完成的会话
|
||||
conversationEventSourceMap.remove(conversationId);
|
||||
sseEmitter.complete();
|
||||
@@ -352,14 +353,14 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService {
|
||||
}
|
||||
|
||||
errMessage(sseEmitter, conversationId, errorMessage);
|
||||
sseEmitter.complete();
|
||||
// 从Map中移除失败的会话
|
||||
conversationEventSourceMap.remove(conversationId);
|
||||
// 即使失败,也要将已有的对话数据保存到ES
|
||||
conversationData.setStatus(CaseAiChatErrCodeEnum.AIOT_ERROR.getCode());
|
||||
conversationData.setErrorMsg(errorMessage);
|
||||
conversationData.appendAnswer(errorMessage);
|
||||
saveConversationData(conversationData);
|
||||
saveConversationData(sseEmitter, conversationData);
|
||||
sseEmitter.complete();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1006,7 +1007,14 @@ public class CaseAiChatServiceImpl implements ICaseAiChatService {
|
||||
* 异步存储会话数据
|
||||
* @param conversationData
|
||||
*/
|
||||
private void saveConversationData(AiChatConversationData conversationData) {
|
||||
esChatExecutor.execute(() -> elasticSearchIndexService.createData(conversationData));
|
||||
private void saveConversationData(SseEmitter sseEmitter, AiChatConversationData conversationData) {
|
||||
try {
|
||||
String docId = elasticSearchIndexService.createData(conversationData);
|
||||
if (docId != null) {
|
||||
sseEmitter.send(JSON.toJSONString(Collections.singletonMap("docId", docId)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("docId消息发送失败", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,10 +163,10 @@ public class ElasticSearchIndexServiceImpl implements IElasticSearchIndexService
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean createData(AiChatConversationData conversationData) {
|
||||
public String createData(AiChatConversationData conversationData) {
|
||||
if (elasticsearchClient == null) {
|
||||
log.error("未配置Elasticsearch客户端,无法保存对话记录");
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -209,10 +209,10 @@ public class ElasticSearchIndexServiceImpl implements IElasticSearchIndexService
|
||||
|
||||
IndexResponse indexResponse = elasticsearchClient.index(indexRequest, RequestOptions.DEFAULT);
|
||||
log.info("保存对话记录到ES成功,文档ID: {}", indexResponse.getId());
|
||||
return true;
|
||||
return indexResponse.getId();
|
||||
} catch (Exception e) {
|
||||
log.error("保存对话记录到ES异常", e);
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user