From e704930bca64c881c5b905aa23f26dd411861a29 Mon Sep 17 00:00:00 2001 From: "liu.zixi" Date: Tue, 21 Oct 2025 10:35:50 +0800 Subject: [PATCH] =?UTF-8?q?[DAT]=20=E4=BF=AE=E6=94=B9update=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CaseKnowledgeServiceImpl.java | 178 ++++++++++-------- 1 file changed, 95 insertions(+), 83 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseKnowledgeServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseKnowledgeServiceImpl.java index 403fd4b5..06f46580 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseKnowledgeServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CaseKnowledgeServiceImpl.java @@ -414,112 +414,114 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService { FieldFilters.eq("requestUrl", CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME)); if (logList.isEmpty()) { - log.error("删除案例文档失败,未找到相关的日志记录,caseId: {}", caseId); - saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, - "", "删除案例文档失败,未找到相关的日志记录", - CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); - return false; - } + log.info("删除案例文档失败,未找到相关的日志记录,caseId: {}", caseId); + log.info("直接进行上传操作,caseId: {}", caseId); +// saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, +// "", "删除案例文档失败,未找到相关的日志记录", +// CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); +// return false; + } else { + CaseDocumentLog latestLog = logList.get(0); + String deleteTaskId = latestLog.getTaskId(); + if (StringUtil.isBlank(deleteTaskId)) { + log.error("删除案例文档失败,日志记录中taskId为空,caseId: {}", caseId); + saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, + "kId=" + caseAiProperties.getCaseKnowledgeId() + + "&taskIds=", "删除案例文档失败,日志记录中taskId为空", + CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); + return false; + } + // 构建请求参数 + String params = "kId=" + caseAiProperties.getCaseKnowledgeId() + + "&taskIds=" + deleteTaskId; - CaseDocumentLog latestLog = logList.get(0); - String deleteTaskId = latestLog.getTaskId(); - if (StringUtil.isBlank(deleteTaskId)) { - log.error("删除案例文档失败,日志记录中taskId为空,caseId: {}", caseId); - saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, - "kId=" + caseAiProperties.getCaseKnowledgeId() + - "&taskIds=", "删除案例文档失败,日志记录中taskId为空", - CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); - return false; - } - // 构建请求参数 - String params = "kId=" + caseAiProperties.getCaseKnowledgeId() + - "&taskIds=" + deleteTaskId; + // 3. 获取access_token + String accessToken = aiAccessTokenService.getAccessToken(); + if (StringUtil.isBlank(accessToken)) { + log.error("删除案例文档失败,获取access_token失败"); + saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, + params, "删除案例文档失败,获取access_token失败", + CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); + return false; + } - // 3. 获取access_token - String accessToken = aiAccessTokenService.getAccessToken(); - if (StringUtil.isBlank(accessToken)) { - log.error("删除案例文档失败,获取access_token失败"); - saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, - params, "删除案例文档失败,获取access_token失败", - CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); - return false; - } + // 4. 重试逻辑:最多3次机会 + int deleteMaxRetries = 3; + for (int attempt = 1; attempt <= deleteMaxRetries; attempt++) { + log.info("删除案例文档第{}次尝试,caseId: {}, taskId: {}", attempt, caseId, deleteTaskId); - // 4. 重试逻辑:最多3次机会 - int deleteMaxRetries = 3; - for (int attempt = 1; attempt <= deleteMaxRetries; attempt++) { - log.info("删除案例文档第{}次尝试,caseId: {}, taskId: {}", attempt, caseId, deleteTaskId); - - try (CloseableHttpClient httpClient = HttpClients.createDefault()) { - HttpDelete httpDelete = new HttpDelete(deleteUrl + "?" + params); - httpDelete.setHeader("X-AI-ApiCode", caseAiProperties.getAiApiCode()); - httpDelete.setHeader("access_token", accessToken); - httpDelete.setHeader("Content-Type", "application/x-www-form-urlencoded"); + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpDelete httpDelete = new HttpDelete(deleteUrl + "?" + params); + httpDelete.setHeader("X-AI-ApiCode", caseAiProperties.getAiApiCode()); + httpDelete.setHeader("access_token", accessToken); + httpDelete.setHeader("Content-Type", "application/x-www-form-urlencoded"); // StringEntity entity = new StringEntity(params, StandardCharsets.UTF_8); // entity.setContentType("application/x-www-form-urlencoded"); // httpDelete.setEntity(entity); - try (CloseableHttpResponse response = httpClient.execute(httpDelete)) { - int statusCode = response.getStatusLine().getStatusCode(); - String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + try (CloseableHttpResponse response = httpClient.execute(httpDelete)) { + int statusCode = response.getStatusLine().getStatusCode(); + String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); - if (statusCode == 200) { - JSONObject result = JSON.parseObject(responseBody); - if (result.getBooleanValue("success")) { - // 接口调用成功,检查业务处理结果 - JSONObject data = result.getJSONObject("data"); - Boolean deleteSuccess = data.getBoolean(deleteTaskId); + if (statusCode == 200) { + JSONObject result = JSON.parseObject(responseBody); + if (result.getBooleanValue("success")) { + // 接口调用成功,检查业务处理结果 + JSONObject data = result.getJSONObject("data"); + Boolean deleteSuccess = data.getBoolean(deleteTaskId); - int optStatus = CaseDocumentLogOptStatusEnum.SUCCESS.getCode(); - int caseStatus = (deleteSuccess != null && deleteSuccess) ? - CaseDocumentLogCaseStatusEnum.SUCCESS.getCode() : CaseDocumentLogCaseStatusEnum.FAILED.getCode(); + int optStatus = CaseDocumentLogOptStatusEnum.SUCCESS.getCode(); + int caseStatus = (deleteSuccess != null && deleteSuccess) ? + CaseDocumentLogCaseStatusEnum.SUCCESS.getCode() : CaseDocumentLogCaseStatusEnum.FAILED.getCode(); - saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, - params, responseBody, - CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), optStatus, caseStatus, null); + saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, + params, responseBody, + CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), optStatus, caseStatus, null); - if (deleteSuccess != null && deleteSuccess) { - log.info("删除案例文档成功,caseId: {}, taskId: {}, 尝试次数: {}", caseId, deleteTaskId, attempt); + if (deleteSuccess != null && deleteSuccess) { + log.info("删除案例文档成功,caseId: {}, taskId: {}, 尝试次数: {}", caseId, deleteTaskId, attempt); + break; // 删除成功,跳出重试循环 + } else { + // 业务处理失败,不重试 + log.error("删除案例文档业务处理失败,不重试,caseId: {}, taskId: {}", caseId, deleteTaskId); + return false; + } } else { // 业务处理失败,不重试 - log.error("删除案例文档业务处理失败,不重试,caseId: {}, taskId: {}", caseId, deleteTaskId); + log.error("删除案例文档业务处理失败,不重试,response: {}", responseBody); + saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, + params, responseBody, + CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); return false; } } else { - // 业务处理失败,不重试 - log.error("删除案例文档业务处理失败,不重试,response: {}", responseBody); + // 接口调用失败 + log.error("删除案例文档接口调用失败,第{}次尝试,status: {}, response: {}", attempt, statusCode, responseBody); saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, params, responseBody, - CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); - return false; + CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); + if (attempt == deleteMaxRetries) { + // 最后一次尝试仍然失败 + return false; + } + // 继续下一次重试 } - } else { - // 接口调用失败 - log.error("删除案例文档接口调用失败,第{}次尝试,status: {}, response: {}", attempt, statusCode, responseBody); - saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, - params, responseBody, - CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); - if (attempt == deleteMaxRetries) { - // 最后一次尝试仍然失败 - return false; - } - // 继续下一次重试 } + } catch (Exception e) { + // 接口调用异常 + log.error("删除案例文档接口调用异常,第{}次尝试", attempt, e); + saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, + params, "接口调用异常: " + e.getMessage(), + CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); + if (attempt == deleteMaxRetries) { + // 最后一次尝试仍然异常 + log.error("删除案例文档最终失败,已重试{}次", deleteMaxRetries); + return false; + } + // 继续下一次重试 } - } catch (Exception e) { - // 接口调用异常 - log.error("删除案例文档接口调用异常,第{}次尝试", attempt, e); - saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_DELETE_INTERFACE_NAME, - params, "接口调用异常: " + e.getMessage(), - CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); - if (attempt == deleteMaxRetries) { - // 最后一次尝试仍然异常 - log.error("删除案例文档最终失败,已重试{}次", deleteMaxRetries); - return false; - } - // 继续下一次重试 } } @@ -576,6 +578,16 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService { } String uploadUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/upload"; + + // 3. 获取access_token + String accessToken = aiAccessTokenService.getAccessToken(); + if (StringUtil.isBlank(accessToken)) { + log.error("上传案例文档失败,获取access_token失败"); + saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME, + requestBody.toJSONString(), "上传案例文档失败,获取access_token失败", + CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null); + return false; + } for (int attempt = 1; attempt <= uploadMaxRetries; attempt++) { log.info("上传案例文档第{}次尝试,caseId: {}", attempt, caseId);