mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-18 23:36:52 +08:00
fix: 密级高于内部的案例处理
This commit is contained in:
@@ -765,186 +765,191 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
||||
}
|
||||
}
|
||||
|
||||
JSONObject requestBody = new JSONObject();
|
||||
String userId = getCurrentUserId();
|
||||
requestBody.put("userId", userId);
|
||||
requestBody.put("kId", caseAiProperties.getCaseKnowledgeId());
|
||||
requestBody.put("parseType", "AUTO");
|
||||
// 2. 检查文件路径
|
||||
if (StringUtil.isBlank(cases.getFilePath())) {
|
||||
log.error("上传案例文档失败,案例文件路径为空,caseId: {}", caseId);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), "上传案例文档失败,案例文件路径为空",
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), null, null);
|
||||
return false;
|
||||
}
|
||||
if (StringUtils.equals(cases.getConfidentialityLevel(), "内部")) {
|
||||
JSONObject requestBody = new JSONObject();
|
||||
String userId = getCurrentUserId();
|
||||
requestBody.put("userId", userId);
|
||||
requestBody.put("kId", caseAiProperties.getCaseKnowledgeId());
|
||||
requestBody.put("parseType", "AUTO");
|
||||
// 2. 检查文件路径
|
||||
if (StringUtil.isBlank(cases.getFilePath())) {
|
||||
log.error("上传案例文档失败,案例文件路径为空,caseId: {}", caseId);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), "上传案例文档失败,案例文件路径为空",
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), null, null);
|
||||
return false;
|
||||
}
|
||||
|
||||
String savePath = fileUploader.getSavePath();
|
||||
String filePath = savePath + cases.getFilePath();
|
||||
File file = new File(filePath);
|
||||
if (!file.exists()) {
|
||||
log.error("上传案例文档失败,案例文件不存在,filePath: {}", filePath);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), "上传案例文档失败,案例文件不存在,filePath: " + filePath,
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), null, null);
|
||||
return false;
|
||||
}
|
||||
String savePath = fileUploader.getSavePath();
|
||||
String filePath = savePath + cases.getFilePath();
|
||||
File file = new File(filePath);
|
||||
if (!file.exists()) {
|
||||
log.error("上传案例文档失败,案例文件不存在,filePath: {}", filePath);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), "上传案例文档失败,案例文件不存在,filePath: " + filePath,
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), null, null);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 4. 构建上传参数
|
||||
String fileName = file.getName();
|
||||
// 4. 构建上传参数
|
||||
String fileName = file.getName();
|
||||
|
||||
String fileType = getFileType(fileName);
|
||||
String fileType = getFileType(fileName);
|
||||
|
||||
// 5. 重试逻辑:最多3次机会
|
||||
int uploadMaxRetries = 3;
|
||||
// 5. 重试逻辑:最多3次机会
|
||||
int uploadMaxRetries = 3;
|
||||
|
||||
// 构建multipart/form-data请求体
|
||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
||||
builder.addBinaryBody("file", file);
|
||||
builder.addTextBody("userId", userId, ContentType.TEXT_PLAIN);
|
||||
builder.addTextBody("kId", caseAiProperties.getCaseKnowledgeId(), ContentType.TEXT_PLAIN);
|
||||
builder.addTextBody("fileName", fileName, ContentType.TEXT_PLAIN);
|
||||
requestBody.put("fileName", fileName);
|
||||
builder.addTextBody("fileType", fileType, ContentType.TEXT_PLAIN);
|
||||
requestBody.put("fileType", fileType);
|
||||
builder.addTextBody("parseType", "AUTO", ContentType.TEXT_PLAIN);
|
||||
// 构建multipart/form-data请求体
|
||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
||||
builder.addBinaryBody("file", file);
|
||||
builder.addTextBody("userId", userId, ContentType.TEXT_PLAIN);
|
||||
builder.addTextBody("kId", caseAiProperties.getCaseKnowledgeId(), ContentType.TEXT_PLAIN);
|
||||
builder.addTextBody("fileName", fileName, ContentType.TEXT_PLAIN);
|
||||
requestBody.put("fileName", fileName);
|
||||
builder.addTextBody("fileType", fileType, ContentType.TEXT_PLAIN);
|
||||
requestBody.put("fileType", fileType);
|
||||
builder.addTextBody("parseType", "AUTO", ContentType.TEXT_PLAIN);
|
||||
|
||||
String url = caseAiProperties.getCaseDetailUrlBase() + caseId;
|
||||
requestBody.put("url", url);
|
||||
String downloadUrl = fileUploader.getHttpPath() + cases.getFilePath();
|
||||
requestBody.put("downloadUrl", downloadUrl);
|
||||
builder.addTextBody("url", url, ContentType.TEXT_PLAIN);
|
||||
builder.addTextBody("downloadUrl", downloadUrl, ContentType.TEXT_PLAIN);
|
||||
// metadata
|
||||
JSONObject fileMetaData = new JSONObject();
|
||||
fileMetaData.put("标题", cases.getTitle());
|
||||
fileMetaData.put("作者", cases.getAuthorName());
|
||||
fileMetaData.put("年份", String.valueOf(cases.getSysCreateTime().getYear()));
|
||||
fileMetaData.put("摘要", cases.getSummary());
|
||||
// 组织领域:orgDomainParent
|
||||
String orgDomainParent = cases.getOrgDomainParent();
|
||||
List<DictItem> orgDomainParentItems = sysDictionaryService.findByKey("org_domain");
|
||||
Optional<DictItem> orgDomainParentItem = orgDomainParentItems.stream()
|
||||
.filter(item -> StringUtils.equals(orgDomainParent, item.getCode()))
|
||||
.findFirst();
|
||||
if (orgDomainParentItem.isPresent()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(orgDomainParentItem.get().getName());
|
||||
if (StringUtils.isNotBlank(cases.getOrgDomainParent2())) {
|
||||
Optional<DictItem> orgDomainParent2Item = orgDomainParentItems.stream()
|
||||
.filter(item -> StringUtils.equals(cases.getOrgDomainParent2(), item.getCode()))
|
||||
.findFirst();
|
||||
orgDomainParent2Item.ifPresent(dictItem -> sb.append(" - ").append(dictItem.getName()));
|
||||
if (StringUtils.isNotBlank(cases.getOrgDomainParent3())) {
|
||||
Optional<DictItem> orgDomainParent3Item = orgDomainParentItems.stream()
|
||||
.filter(item -> StringUtils.equals(cases.getOrgDomainParent3(), item.getCode()))
|
||||
String url = caseAiProperties.getCaseDetailUrlBase() + caseId;
|
||||
requestBody.put("url", url);
|
||||
String downloadUrl = fileUploader.getHttpPath() + cases.getFilePath();
|
||||
requestBody.put("downloadUrl", downloadUrl);
|
||||
builder.addTextBody("url", url, ContentType.TEXT_PLAIN);
|
||||
builder.addTextBody("downloadUrl", downloadUrl, ContentType.TEXT_PLAIN);
|
||||
// metadata
|
||||
JSONObject fileMetaData = new JSONObject();
|
||||
fileMetaData.put("标题", cases.getTitle());
|
||||
fileMetaData.put("作者", cases.getAuthorName());
|
||||
fileMetaData.put("年份", String.valueOf(cases.getSysCreateTime().getYear()));
|
||||
fileMetaData.put("摘要", cases.getSummary());
|
||||
// 组织领域:orgDomainParent
|
||||
String orgDomainParent = cases.getOrgDomainParent();
|
||||
List<DictItem> orgDomainParentItems = sysDictionaryService.findByKey("org_domain");
|
||||
Optional<DictItem> orgDomainParentItem = orgDomainParentItems.stream()
|
||||
.filter(item -> StringUtils.equals(orgDomainParent, item.getCode()))
|
||||
.findFirst();
|
||||
if (orgDomainParentItem.isPresent()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(orgDomainParentItem.get().getName());
|
||||
if (StringUtils.isNotBlank(cases.getOrgDomainParent2())) {
|
||||
Optional<DictItem> orgDomainParent2Item = orgDomainParentItems.stream()
|
||||
.filter(item -> StringUtils.equals(cases.getOrgDomainParent2(), item.getCode()))
|
||||
.findFirst();
|
||||
orgDomainParent3Item.ifPresent(dictItem -> sb.append(" - ").append(dictItem.getName()));
|
||||
orgDomainParent2Item.ifPresent(dictItem -> sb.append(" - ").append(dictItem.getName()));
|
||||
if (StringUtils.isNotBlank(cases.getOrgDomainParent3())) {
|
||||
Optional<DictItem> orgDomainParent3Item = orgDomainParentItems.stream()
|
||||
.filter(item -> StringUtils.equals(cases.getOrgDomainParent3(), item.getCode()))
|
||||
.findFirst();
|
||||
orgDomainParent3Item.ifPresent(dictItem -> sb.append(" - ").append(dictItem.getName()));
|
||||
}
|
||||
}
|
||||
fileMetaData.put("组织领域", sb.toString());
|
||||
}
|
||||
// 分类:majorIds
|
||||
List<CasesMajorType> cmtList = casesMajorTypeDao.findList(FieldFilters.eq("caseId", cases.getId()));
|
||||
if (cmtList != null && !cmtList.isEmpty()) {
|
||||
List<String> majorIds = cmtList.stream().map(CasesMajorType::getMajorId).collect(Collectors.toList());
|
||||
|
||||
List<DictItem> majorItems = sysDictionaryService.findByKey("major_type");
|
||||
if (majorItems != null && !majorItems.isEmpty()) {
|
||||
List<String> majorNames = majorItems.stream()
|
||||
.filter(item -> majorIds.contains(item.getCode()))
|
||||
.map(DictItem::getName)
|
||||
.collect(Collectors.toList());
|
||||
fileMetaData.put("组织领域", String.join(", ", majorNames));
|
||||
}
|
||||
}
|
||||
fileMetaData.put("组织领域", sb.toString());
|
||||
}
|
||||
// 分类:majorIds
|
||||
List<CasesMajorType> cmtList = casesMajorTypeDao.findList(FieldFilters.eq("caseId", cases.getId()));
|
||||
if (cmtList != null && !cmtList.isEmpty()) {
|
||||
List<String> majorIds = cmtList.stream().map(CasesMajorType::getMajorId).collect(Collectors.toList());
|
||||
|
||||
List<DictItem> majorItems = sysDictionaryService.findByKey("major_type");
|
||||
if (majorItems != null && !majorItems.isEmpty()) {
|
||||
List<String> majorNames = majorItems.stream()
|
||||
.filter(item -> majorIds.contains(item.getCode()))
|
||||
.map(DictItem::getName)
|
||||
.collect(Collectors.toList());
|
||||
fileMetaData.put("组织领域", String.join(", ", majorNames));
|
||||
ContentType contentType = ContentType.create("text/plain", StandardCharsets.UTF_8);
|
||||
builder.addTextBody("fileMetaData", fileMetaData.toJSONString(), contentType);
|
||||
requestBody.put("fileMetaData", fileMetaData);
|
||||
// 由于接口权限,目前采用不回调,而是通过批处理的方式,处理文件状态
|
||||
if (caseAiProperties.isFileUploadUseCallback()) {
|
||||
builder.addTextBody("callbackUrl", caseAiProperties.getFileUploadCallbackUrl(), ContentType.TEXT_PLAIN);
|
||||
requestBody.put("callbackUrl", caseAiProperties.getFileUploadCallbackUrl());
|
||||
}
|
||||
}
|
||||
|
||||
ContentType contentType = ContentType.create("text/plain", StandardCharsets.UTF_8);
|
||||
builder.addTextBody("fileMetaData", fileMetaData.toJSONString(), contentType);
|
||||
requestBody.put("fileMetaData", fileMetaData);
|
||||
// 由于接口权限,目前采用不回调,而是通过批处理的方式,处理文件状态
|
||||
if (caseAiProperties.isFileUploadUseCallback()) {
|
||||
builder.addTextBody("callbackUrl", caseAiProperties.getFileUploadCallbackUrl(), ContentType.TEXT_PLAIN);
|
||||
requestBody.put("callbackUrl", caseAiProperties.getFileUploadCallbackUrl());
|
||||
}
|
||||
String uploadUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/upload";
|
||||
|
||||
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(), null, null);
|
||||
return false;
|
||||
}
|
||||
for (int attempt = 1; attempt <= uploadMaxRetries; attempt++) {
|
||||
log.info("上传案例文档第{}次尝试,caseId: {}", attempt, caseId);
|
||||
|
||||
// 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(), null, null);
|
||||
return false;
|
||||
}
|
||||
for (int attempt = 1; attempt <= uploadMaxRetries; attempt++) {
|
||||
log.info("上传案例文档第{}次尝试,caseId: {}", attempt, caseId);
|
||||
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
|
||||
HttpPost httpPost = new HttpPost(uploadUrl);
|
||||
httpPost.setHeader("X-AI-ApiCode", caseAiProperties.getAiApiCode());
|
||||
httpPost.setHeader("access_token", accessToken);
|
||||
|
||||
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
|
||||
HttpPost httpPost = new HttpPost(uploadUrl);
|
||||
httpPost.setHeader("X-AI-ApiCode", caseAiProperties.getAiApiCode());
|
||||
httpPost.setHeader("access_token", accessToken);
|
||||
HttpEntity multipart = builder.build();
|
||||
httpPost.setEntity(multipart);
|
||||
|
||||
HttpEntity multipart = builder.build();
|
||||
httpPost.setEntity(multipart);
|
||||
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
|
||||
int statusCode = response.getStatusLine().getStatusCode();
|
||||
String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
|
||||
|
||||
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
|
||||
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");
|
||||
String taskId = data.getString("taskId");
|
||||
|
||||
if (statusCode == 200) {
|
||||
JSONObject result = JSON.parseObject(responseBody);
|
||||
if (result.getBooleanValue("success")) {
|
||||
// 业务处理成功
|
||||
JSONObject data = result.getJSONObject("data");
|
||||
String taskId = data.getString("taskId");
|
||||
|
||||
// 保存成功的CaseDocumentLog记录
|
||||
// 保存成功的CaseDocumentLog记录
|
||||
// saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
// requestBody.toJSONString(), responseBody,
|
||||
// CaseDocumentLogRunStatusEnum.RUNNING.getCode(), null, null, taskId);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), responseBody,
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), taskId);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), responseBody,
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), taskId);
|
||||
|
||||
log.info("上传案例文档成功,等待文档状态变更. caseId: {}, taskId: {}, 尝试次数: {}", caseId, taskId, attempt);
|
||||
return true;
|
||||
log.info("上传案例文档成功,等待文档状态变更. caseId: {}, taskId: {}, 尝试次数: {}", caseId, taskId, attempt);
|
||||
return true;
|
||||
} else {
|
||||
// 业务处理失败,不重试
|
||||
log.error("上传案例文档业务处理失败,不重试,response: {}", responseBody);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), 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_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), responseBody,
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.SUCCESS.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||
return false;
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), null, null);
|
||||
if (attempt == uploadMaxRetries) {
|
||||
// 最后一次尝试仍然失败
|
||||
return false;
|
||||
}
|
||||
// 继续下一次重试
|
||||
}
|
||||
} else {
|
||||
// 接口调用失败
|
||||
log.error("上传案例文档接口调用失败,第{}次尝试,status: {}, response: {}", attempt, statusCode, responseBody);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), responseBody,
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), null, null);
|
||||
if (attempt == uploadMaxRetries) {
|
||||
// 最后一次尝试仍然失败
|
||||
return false;
|
||||
}
|
||||
// 继续下一次重试
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 接口调用异常
|
||||
log.error("上传案例文档接口调用异常,第{}次尝试", attempt, e);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), "接口调用异常: " + e.getMessage(),
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), null, null);
|
||||
if (attempt == uploadMaxRetries) {
|
||||
// 最后一次尝试仍然异常
|
||||
log.error("上传案例文档最终失败,已重试{}次", uploadMaxRetries);
|
||||
return false;
|
||||
}
|
||||
// 继续下一次重试
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 接口调用异常
|
||||
log.error("上传案例文档接口调用异常,第{}次尝试", attempt, e);
|
||||
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), CaseAiConstants.CASE_DOC_UPLOAD_INTERFACE_NAME,
|
||||
requestBody.toJSONString(), "接口调用异常: " + e.getMessage(),
|
||||
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), null, null);
|
||||
if (attempt == uploadMaxRetries) {
|
||||
// 最后一次尝试仍然异常
|
||||
log.error("上传案例文档最终失败,已重试{}次", uploadMaxRetries);
|
||||
return false;
|
||||
}
|
||||
// 继续下一次重试
|
||||
}
|
||||
} else {
|
||||
log.info("非【内部】密级案例,不进行上传");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user