AI调用日志 重试功能补完

This commit is contained in:
liu.zixi
2025-09-24 09:19:34 +08:00
parent d09d55d77b
commit 57dd8b14fb
2 changed files with 55 additions and 56 deletions

View File

@@ -11,6 +11,7 @@ import com.xboe.module.boecase.dao.CaseDocumentLogDao;
import com.xboe.module.boecase.dto.CaseDocumentLogQueryDto;
import com.xboe.module.boecase.entity.CaseDocumentLog;
import com.xboe.module.boecase.service.ICaseDocumentLogService;
import com.xboe.module.boecase.service.ICaseKnowledgeService;
import com.xboe.module.boecase.vo.CaseDocumentLogVo;
import com.xboe.enums.CaseDocumentLogOptTypeEnum;
import lombok.extern.slf4j.Slf4j;
@@ -35,6 +36,9 @@ public class CaseDocumentLogServiceImpl implements ICaseDocumentLogService {
@Resource
private CaseDocumentLogDao caseDocumentLogDao;
@Resource
private ICaseKnowledgeService caseKnowledgeService;
@Override
public PageList<CaseDocumentLogVo> pageQuery(int pageIndex, int pageSize, CaseDocumentLogQueryDto queryDto) {
// 构建查询条件
@@ -43,6 +47,13 @@ public class CaseDocumentLogServiceImpl implements ICaseDocumentLogService {
// 删除标识过滤
filters.add(FieldFilters.eq("deleted", false));
// 接口调用状态
if (queryDto.getOptStatus() != null) {
filters.add(FieldFilters.eq("optStatus", queryDto.getOptStatus()));
} else {
filters.add(FieldFilters.ge("optStatus", 1));
}
// 案例标题模糊查询
if (StringUtil.isNotBlank(queryDto.getCaseTitle())) {
filters.add(FieldFilters.like("caseTitle", LikeMatchMode.ANYWHERE, queryDto.getCaseTitle()));
@@ -61,11 +72,6 @@ public class CaseDocumentLogServiceImpl implements ICaseDocumentLogService {
filters.add(FieldFilters.le("optTime", queryDto.getOptTimeEnd()));
}
// 接口调用状态
if (queryDto.getOptStatus() != null) {
filters.add(FieldFilters.eq("optStatus", queryDto.getOptStatus()));
}
// 业务处理状态
if (queryDto.getCaseStatus() != null) {
filters.add(FieldFilters.eq("caseStatus", queryDto.getCaseStatus()));
@@ -100,6 +106,13 @@ public class CaseDocumentLogServiceImpl implements ICaseDocumentLogService {
// 删除标识过滤
filters.add(FieldFilters.eq("deleted", false));
// 接口调用状态
if (queryDto.getOptStatus() != null) {
filters.add(FieldFilters.eq("optStatus", queryDto.getOptStatus()));
} else {
filters.add(FieldFilters.ge("optStatus", 1));
}
// 案例标题模糊查询
if (StringUtil.isNotBlank(queryDto.getCaseTitle())) {
filters.add(FieldFilters.like("caseTitle", LikeMatchMode.ANYWHERE, queryDto.getCaseTitle()));
@@ -118,11 +131,6 @@ public class CaseDocumentLogServiceImpl implements ICaseDocumentLogService {
filters.add(FieldFilters.le("optTime", queryDto.getOptTimeEnd()));
}
// 接口调用状态
if (queryDto.getOptStatus() != null) {
filters.add(FieldFilters.eq("optStatus", queryDto.getOptStatus()));
}
// 业务处理状态
if (queryDto.getCaseStatus() != null) {
filters.add(FieldFilters.eq("caseStatus", queryDto.getCaseStatus()));
@@ -144,7 +152,7 @@ public class CaseDocumentLogServiceImpl implements ICaseDocumentLogService {
deletedCount++;
}
log.info("清空日志操作完成,共删除{}\u6761记录", deletedCount);
log.info("清空日志操作完成,共删除{}记录", deletedCount);
return deletedCount;
}
@@ -165,59 +173,50 @@ public class CaseDocumentLogServiceImpl implements ICaseDocumentLogService {
log.info("开始重试AI调用原始日志ID: {}, 案例标题: {}, 操作类型: {}",
logId, originalLog.getCaseTitle(), originalLog.getOptType());
// 2. 创建新的日志记录
CaseDocumentLog newLog = new CaseDocumentLog();
newLog.setId(IDGenerator.generate());
newLog.setTaskId(originalLog.getTaskId());
newLog.setCaseId(originalLog.getCaseId());
newLog.setCaseTitle(originalLog.getCaseTitle());
newLog.setOptType(originalLog.getOptType());
newLog.setRequestUrl(originalLog.getRequestUrl());
newLog.setRequestBody(originalLog.getRequestBody());
newLog.setOptTime(LocalDateTime.now());
// 3. 执行AI调用重试逻辑
// 2. 执行AI调用重试逻辑
boolean retrySuccess = false;
long startTime = System.currentTimeMillis();
try {
// TODO: 在这里实现具体的AI调用重试逻辑
// 模拟执行结果实际开发时需要替换为真实的AI调用逻辑
log.info("正在执行AI调用重试...");
// 根据操作类型调用对应的接口方法
String optType = originalLog.getOptType();
String caseId = originalLog.getCaseId();
// 这里应该有真实的AI调用逻辑
// 例如:
// String response = aiService.callAI(originalLog.getRequestBody());
// newLog.setResponseBody(response);
if (StringUtil.isBlank(caseId)) {
throw new IllegalArgumentException("案例ID不能为空");
}
// 模拟成功的响应
newLog.setResponseBody("{\"success\": true, \"message\": \"重试成功\"}");
newLog.setOptStatus(1); // 1-调用成功
newLog.setCaseStatus(1); // 1-处理成功
retrySuccess = true;
log.info("正在执行AI调用重试操作类型: {}, caseId: {}", optType, caseId);
log.info("AI调用重试成功");
// 根据操作类型执行对应的方法(这些方法内部会自动创建日志记录)
if (CaseDocumentLogOptTypeEnum.CREATE.getCode().equals(optType)) {
// 上传案例文档
retrySuccess = caseKnowledgeService.uploadCaseDocument(caseId);
log.info("执行上传案例文档重试caseId: {}, 结果: {}", caseId, retrySuccess);
} else if (CaseDocumentLogOptTypeEnum.DELETE.getCode().equals(optType)) {
// 删除案例文档
retrySuccess = caseKnowledgeService.deleteCaseDocument(caseId);
log.info("执行删除案例文档重试caseId: {}, 结果: {}", caseId, retrySuccess);
} else if (CaseDocumentLogOptTypeEnum.UPDATE.getCode().equals(optType)) {
// 更新案例文档
retrySuccess = caseKnowledgeService.updateCaseDocument(caseId);
log.info("执行更新案例文档重试caseId: {}, 结果: {}", caseId, retrySuccess);
} else {
throw new IllegalArgumentException("不支持的操作类型: " + optType);
}
if (retrySuccess) {
log.info("AI调用重试成功操作类型: {}, caseId: {}", optType, caseId);
} else {
log.warn("AI调用重试失败操作类型: {}, caseId: {}", optType, caseId);
}
} catch (Exception e) {
log.error("AI调用重试失败", e);
newLog.setResponseBody("{\"success\": false, \"error\": \"" + e.getMessage() + "\"}");
newLog.setOptStatus(2); // 2-调用失败
newLog.setCaseStatus(2); // 2-处理失败
log.error("AI调用重试异常,操作类型: {}, caseId: {}",
originalLog.getOptType(), originalLog.getCaseId(), e);
retrySuccess = false;
} finally {
// 4. 记录执行时间
long endTime = System.currentTimeMillis();
newLog.setExecuteDuration(endTime - startTime);
// 5. 保存新的日志记录
try {
caseDocumentLogDao.save(newLog);
log.info("重试日志记录保存成功新日志ID: {}, 执行状态: {}",
newLog.getId(), retrySuccess ? "成功" : "失败");
} catch (Exception e) {
log.error("保存重试日志记录失败", e);
return false;
}
}
return retrySuccess;

View File

@@ -34,7 +34,7 @@ public class CaseDocumentLogVo {
/**
* 调用时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime optTime;
/**