案例专家:修正调用逻辑

This commit is contained in:
liu.zixi
2025-10-15 13:26:50 +08:00
parent d143ceeb4c
commit 7b08d26da6
3 changed files with 90 additions and 47 deletions

View File

@@ -49,14 +49,14 @@ public class CaseAiDocumentAsyncHandler {
try { try {
switch (optTypeEnum) { switch (optTypeEnum) {
case UPDATE: case UPDATE:
caseKnowledgeService.updateCaseDocument(cases.getId()); caseKnowledgeService.updateCaseDocument(cases);
break; break;
case DELETE: case DELETE:
caseKnowledgeService.deleteCaseDocument(cases.getId()); caseKnowledgeService.deleteCaseDocument(cases);
break; break;
case CREATE: case CREATE:
default: default:
caseKnowledgeService.uploadCaseDocument(cases.getId()); caseKnowledgeService.uploadCaseDocument(cases);
break; break;
} }
log.info("处理案例成功caseId: {}, 操作类型: {}", cases.getId(), optTypeEnum.getDesc()); log.info("处理案例成功caseId: {}, 操作类型: {}", cases.getId(), optTypeEnum.getDesc());

View File

@@ -1,5 +1,6 @@
package com.xboe.module.boecase.service; package com.xboe.module.boecase.service;
import com.xboe.module.boecase.entity.Cases;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
/** /**
@@ -15,6 +16,14 @@ public interface ICaseKnowledgeService {
*/ */
boolean uploadCaseDocument(String caseId); boolean uploadCaseDocument(String caseId);
/**
* 上传案例文档
*
* @param cases 案例
* @return 是否成功
*/
boolean uploadCaseDocument(Cases cases);
/** /**
* 删除案例文档 * 删除案例文档
* *
@@ -23,6 +32,14 @@ public interface ICaseKnowledgeService {
*/ */
boolean deleteCaseDocument(String caseId); boolean deleteCaseDocument(String caseId);
/**
* 删除案例文档
*
* @param cases 案例
* @return 是否成功
*/
boolean deleteCaseDocument(Cases cases);
/** /**
* 更新案例文档 * 更新案例文档
* *
@@ -31,6 +48,14 @@ public interface ICaseKnowledgeService {
*/ */
boolean updateCaseDocument(String caseId); boolean updateCaseDocument(String caseId);
/**
* 更新案例文档
*
* @param cases 案例
* @return 是否成功
*/
boolean updateCaseDocument(Cases cases);
/** /**
* 处理文档上传回调 * 处理文档上传回调
* *

View File

@@ -85,19 +85,25 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
// 1. 查询案例信息 // 1. 查询案例信息
Cases caseEntity = casesDao.findOne(FieldFilters.eq("id", caseId)); Cases caseEntity = casesDao.findOne(FieldFilters.eq("id", caseId));
if (caseEntity == null || caseEntity.getDeleted()) { return uploadCaseDocument(caseEntity);
}
@Override
public boolean uploadCaseDocument(Cases cases) {
String caseId = cases.getId();
if (cases == null || cases.getDeleted()) {
log.error("上传案例文档失败未找到有效的案例记录caseId: {}", caseId); log.error("上传案例文档失败未找到有效的案例记录caseId: {}", caseId);
return false; return false;
} }
// 2. 检查文件路径 // 2. 检查文件路径
if (StringUtil.isBlank(caseEntity.getFilePath())) { if (StringUtil.isBlank(cases.getFilePath())) {
log.error("上传案例文档失败案例文件路径为空caseId: {}", caseId); log.error("上传案例文档失败案例文件路径为空caseId: {}", caseId);
return false; return false;
} }
String savePath = fileUploader.getSavePath(); String savePath = fileUploader.getSavePath();
String filePath = savePath + caseEntity.getFilePath(); String filePath = savePath + cases.getFilePath();
File file = new File(filePath); File file = new File(filePath);
if (!file.exists()) { if (!file.exists()) {
log.error("上传案例文档失败案例文件不存在filePath: {}", filePath); log.error("上传案例文档失败案例文件不存在filePath: {}", filePath);
@@ -112,7 +118,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
} }
// 4. 构建上传参数 // 4. 构建上传参数
String fileName = caseEntity.getFileName(); String fileName = cases.getFileName();
if (StringUtil.isBlank(fileName)) { if (StringUtil.isBlank(fileName)) {
fileName = file.getName(); fileName = file.getName();
} }
@@ -166,7 +172,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
String taskId = data.getString("taskId"); String taskId = data.getString("taskId");
// 保存成功的CaseDocumentLog记录 // 保存成功的CaseDocumentLog记录
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl,
requestBody.toJSONString(), responseBody, requestBody.toJSONString(), responseBody,
CaseDocumentLogRunStatusEnum.RUNNING.getCode(), null, null, taskId); CaseDocumentLogRunStatusEnum.RUNNING.getCode(), null, null, taskId);
@@ -175,7 +181,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
} else { } else {
// 业务处理失败,不重试 // 业务处理失败,不重试
log.error("上传案例文档业务处理失败不重试response: {}", responseBody); log.error("上传案例文档业务处理失败不重试response: {}", responseBody);
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl,
requestBody.toJSONString(), responseBody, requestBody.toJSONString(), responseBody,
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
return false; return false;
@@ -185,7 +191,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
log.error("上传案例文档接口调用失败,第{}次尝试status: {}, response: {}", attempt, statusCode, responseBody); log.error("上传案例文档接口调用失败,第{}次尝试status: {}, response: {}", attempt, statusCode, responseBody);
if (attempt == maxRetries) { if (attempt == maxRetries) {
// 最后一次尝试仍然失败 // 最后一次尝试仍然失败
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl,
requestBody.toJSONString(), responseBody, requestBody.toJSONString(), responseBody,
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
return false; return false;
@@ -199,7 +205,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
if (attempt == maxRetries) { if (attempt == maxRetries) {
// 最后一次尝试仍然异常 // 最后一次尝试仍然异常
log.error("上传案例文档最终失败,已重试{}次", maxRetries); log.error("上传案例文档最终失败,已重试{}次", maxRetries);
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl,
requestBody.toJSONString(), "接口调用异常: " + e.getMessage(), requestBody.toJSONString(), "接口调用异常: " + e.getMessage(),
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
return false; return false;
@@ -220,7 +226,13 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
// 1. 查询案例信息 // 1. 查询案例信息
Cases caseEntity = casesDao.findOne(FieldFilters.eq("id", caseId)); Cases caseEntity = casesDao.findOne(FieldFilters.eq("id", caseId));
if (caseEntity == null) { return deleteCaseDocument(caseEntity);
}
@Override
public boolean deleteCaseDocument(Cases cases) {
String caseId = cases.getId();
if (cases == null) {
log.error("删除案例文档失败未找到案例记录caseId: {}", caseId); log.error("删除案例文档失败未找到案例记录caseId: {}", caseId);
return false; return false;
} }
@@ -286,7 +298,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
int caseStatus = (deleteSuccess != null && deleteSuccess) ? int caseStatus = (deleteSuccess != null && deleteSuccess) ?
CaseDocumentLogCaseStatusEnum.SUCCESS.getCode() : CaseDocumentLogCaseStatusEnum.FAILED.getCode(); CaseDocumentLogCaseStatusEnum.SUCCESS.getCode() : CaseDocumentLogCaseStatusEnum.FAILED.getCode();
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl,
params, responseBody, params, responseBody,
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), optStatus, caseStatus, null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), optStatus, caseStatus, null);
@@ -301,7 +313,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
} else { } else {
// 业务处理失败,不重试 // 业务处理失败,不重试
log.error("删除案例文档业务处理失败不重试response: {}", responseBody); log.error("删除案例文档业务处理失败不重试response: {}", responseBody);
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl,
params, responseBody, params, responseBody,
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
return false; return false;
@@ -311,7 +323,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
log.error("删除案例文档接口调用失败,第{}次尝试status: {}, response: {}", attempt, statusCode, responseBody); log.error("删除案例文档接口调用失败,第{}次尝试status: {}, response: {}", attempt, statusCode, responseBody);
if (attempt == maxRetries) { if (attempt == maxRetries) {
// 最后一次尝试仍然失败 // 最后一次尝试仍然失败
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl,
params, responseBody, params, responseBody,
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
return false; return false;
@@ -325,7 +337,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
if (attempt == maxRetries) { if (attempt == maxRetries) {
// 最后一次尝试仍然异常 // 最后一次尝试仍然异常
log.error("删除案例文档最终失败,已重试{}次", maxRetries); log.error("删除案例文档最终失败,已重试{}次", maxRetries);
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl,
params, "接口调用异常: " + e.getMessage(), params, "接口调用异常: " + e.getMessage(),
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
return false; return false;
@@ -346,7 +358,13 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
// 1. 查询案例信息 // 1. 查询案例信息
Cases caseEntity = casesDao.findOne(FieldFilters.eq("id", caseId)); Cases caseEntity = casesDao.findOne(FieldFilters.eq("id", caseId));
if (caseEntity == null) { return updateCaseDocument(caseEntity);
}
@Override
public boolean updateCaseDocument(Cases cases) {
String caseId = cases.getId();
if (cases == null) {
log.error("更新案例文档失败未找到案例记录caseId: {}", caseId); log.error("更新案例文档失败未找到案例记录caseId: {}", caseId);
return false; return false;
} }
@@ -387,10 +405,10 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
String deleteParam = "kId=" + caseAiProperties.getCaseKnowledgeId() + "taskId=" + oldTaskId; String deleteParam = "kId=" + caseAiProperties.getCaseKnowledgeId() + "taskId=" + oldTaskId;
requestUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/delete?" + deleteParam; requestUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/delete?" + deleteParam;
requestBody = deleteParam; requestBody = deleteParam;
boolean deleteSuccess = callDeleteInterface(caseId, caseEntity, accessToken); boolean deleteSuccess = callDeleteInterface(caseId, cases, accessToken);
if (!deleteSuccess) { if (!deleteSuccess) {
log.error("更新案例文档失败删除接口调用失败不继续执行上传操作caseId: {}", caseId); log.error("更新案例文档失败删除接口调用失败不继续执行上传操作caseId: {}", caseId);
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
deleteParam, "删除接口:失败,上传接口:未执行", deleteParam, "删除接口:失败,上传接口:未执行",
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
return false; return false;
@@ -399,13 +417,13 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
// 3. 删除成功后,再调用上传接口 // 3. 删除成功后,再调用上传接口
requestUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/upload"; requestUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/upload";
// 1. 检查文件路径 // 1. 检查文件路径
if (StringUtil.isBlank(caseEntity.getFilePath())) { if (StringUtil.isBlank(cases.getFilePath())) {
log.error("调用上传接口失败案例文件路径为空caseId: {}", caseId); log.error("调用上传接口失败案例文件路径为空caseId: {}", caseId);
return false; return false;
} }
String savePath = fileUploader.getSavePath(); String savePath = fileUploader.getSavePath();
String filePath = savePath + caseEntity.getFilePath(); String filePath = savePath + cases.getFilePath();
File file = new File(filePath); File file = new File(filePath);
if (!file.exists()) { if (!file.exists()) {
log.error("调用上传接口失败案例文件不存在filePath: {}", filePath); log.error("调用上传接口失败案例文件不存在filePath: {}", filePath);
@@ -413,7 +431,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
} }
// 2. 构建上传参数 // 2. 构建上传参数
String fileName = caseEntity.getFileName(); String fileName = cases.getFileName();
if (StringUtil.isBlank(fileName)) { if (StringUtil.isBlank(fileName)) {
fileName = file.getName(); fileName = file.getName();
} }
@@ -441,7 +459,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
String result = String.format("删除接口:成功,上传接口:%s", String result = String.format("删除接口:成功,上传接口:%s",
uploadSuccess ? "成功" : "失败"); uploadSuccess ? "成功" : "失败");
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
requestBody, result, requestBody, result,
runStatus, optStatus, caseStatus, taskId); runStatus, optStatus, caseStatus, taskId);
@@ -455,7 +473,7 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
} catch (Exception e) { } catch (Exception e) {
log.error("更新案例文档异常", e); log.error("更新案例文档异常", e);
saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl, saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
requestBody, "更新异常: " + e.getMessage(), requestBody, "更新异常: " + e.getMessage(),
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
return false; return false;