mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-09 02:46:50 +08:00
案例专家:增加部分情况下的日志记录
This commit is contained in:
@@ -90,15 +90,28 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean uploadCaseDocument(Cases cases) {
|
public boolean uploadCaseDocument(Cases cases) {
|
||||||
|
String uploadUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/upload";
|
||||||
|
JSONObject requestBody = new JSONObject();
|
||||||
|
String userId = getCurrentUserId();
|
||||||
|
requestBody.put("userId", userId);
|
||||||
|
requestBody.put("kId", caseAiProperties.getCaseKnowledgeId());
|
||||||
|
requestBody.put("parseType", "AUTO");
|
||||||
|
|
||||||
String caseId = cases.getId();
|
String caseId = cases.getId();
|
||||||
if (cases == null || cases.getDeleted()) {
|
if (cases == null || cases.getDeleted()) {
|
||||||
log.error("上传案例文档失败,未找到有效的案例记录,caseId: {}", caseId);
|
log.error("上传案例文档失败,未找到有效的案例记录,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl,
|
||||||
|
requestBody.toJSONString(), "上传案例文档失败,未找到有效的案例记录",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 检查文件路径
|
// 2. 检查文件路径
|
||||||
if (StringUtil.isBlank(cases.getFilePath())) {
|
if (StringUtil.isBlank(cases.getFilePath())) {
|
||||||
log.error("上传案例文档失败,案例文件路径为空,caseId: {}", caseId);
|
log.error("上传案例文档失败,案例文件路径为空,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl,
|
||||||
|
requestBody.toJSONString(), "上传案例文档失败,案例文件路径为空",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,13 +120,9 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
File file = new File(filePath);
|
File file = new File(filePath);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
log.error("上传案例文档失败,案例文件不存在,filePath: {}", filePath);
|
log.error("上传案例文档失败,案例文件不存在,filePath: {}", filePath);
|
||||||
return false;
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl,
|
||||||
}
|
requestBody.toJSONString(), "上传案例文档失败,案例文件不存在,filePath: " + filePath,
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
// 3. 获取access_token
|
|
||||||
String accessToken = aiAccessTokenService.getAccessToken();
|
|
||||||
if (StringUtil.isBlank(accessToken)) {
|
|
||||||
log.error("上传案例文档失败,获取access_token失败");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,12 +133,35 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String fileType = getFileType(fileName);
|
String fileType = getFileType(fileName);
|
||||||
String userId = getCurrentUserId();
|
|
||||||
String uploadUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/upload";
|
|
||||||
|
|
||||||
// 5. 重试逻辑:最多3次机会
|
// 5. 重试逻辑:最多3次机会
|
||||||
int maxRetries = 3;
|
int maxRetries = 3;
|
||||||
JSONObject requestBody = new JSONObject();
|
|
||||||
|
// 构建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);
|
||||||
|
// 由于接口权限,目前采用不回调,而是通过批处理的方式,处理文件状态
|
||||||
|
if (caseAiProperties.isFileUploadUseCallback()) {
|
||||||
|
builder.addTextBody("callbackUrl", caseAiProperties.getFileUploadCallbackUrl(), ContentType.TEXT_PLAIN);
|
||||||
|
requestBody.put("callbackUrl", caseAiProperties.getFileUploadCallbackUrl());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 获取access_token
|
||||||
|
String accessToken = aiAccessTokenService.getAccessToken();
|
||||||
|
if (StringUtil.isBlank(accessToken)) {
|
||||||
|
log.error("上传案例文档失败,获取access_token失败");
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.CREATE.getCode(), uploadUrl,
|
||||||
|
requestBody.toJSONString(), "上传案例文档失败,获取access_token失败",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
for (int attempt = 1; attempt <= maxRetries; attempt++) {
|
for (int attempt = 1; attempt <= maxRetries; attempt++) {
|
||||||
log.info("上传案例文档第{}次尝试,caseId: {}", attempt, caseId);
|
log.info("上传案例文档第{}次尝试,caseId: {}", attempt, caseId);
|
||||||
|
|
||||||
@@ -138,25 +170,6 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
httpPost.setHeader("X-AI-ApiCode", caseAiProperties.getAiApiCode());
|
httpPost.setHeader("X-AI-ApiCode", caseAiProperties.getAiApiCode());
|
||||||
httpPost.setHeader("access_token", accessToken);
|
httpPost.setHeader("access_token", accessToken);
|
||||||
|
|
||||||
// 构建multipart/form-data请求体
|
|
||||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
|
||||||
builder.addBinaryBody("file", file);
|
|
||||||
builder.addTextBody("userId", userId, ContentType.TEXT_PLAIN);
|
|
||||||
requestBody.put("userId", userId);
|
|
||||||
builder.addTextBody("kId", caseAiProperties.getCaseKnowledgeId(), ContentType.TEXT_PLAIN);
|
|
||||||
requestBody.put("kId", caseAiProperties.getCaseKnowledgeId());
|
|
||||||
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);
|
|
||||||
requestBody.put("parseType", "AUTO");
|
|
||||||
// 由于接口权限,目前采用不回调,而是通过批处理的方式,处理文件状态
|
|
||||||
if (caseAiProperties.isFileUploadUseCallback()) {
|
|
||||||
builder.addTextBody("callbackUrl", caseAiProperties.getFileUploadCallbackUrl(), ContentType.TEXT_PLAIN);
|
|
||||||
requestBody.put("callbackUrl", caseAiProperties.getFileUploadCallbackUrl());
|
|
||||||
}
|
|
||||||
|
|
||||||
HttpEntity multipart = builder.build();
|
HttpEntity multipart = builder.build();
|
||||||
httpPost.setEntity(multipart);
|
httpPost.setEntity(multipart);
|
||||||
|
|
||||||
@@ -231,9 +244,14 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteCaseDocument(Cases cases) {
|
public boolean deleteCaseDocument(Cases cases) {
|
||||||
|
String deleteUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/delete";
|
||||||
|
|
||||||
String caseId = cases.getId();
|
String caseId = cases.getId();
|
||||||
if (cases == null) {
|
if (cases == null) {
|
||||||
log.error("删除案例文档失败,未找到案例记录,caseId: {}", caseId);
|
log.error("删除案例文档失败,未找到案例记录,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl,
|
||||||
|
"", "删除案例文档失败,未找到案例记录",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,6 +263,9 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
|
|
||||||
if (logList.isEmpty()) {
|
if (logList.isEmpty()) {
|
||||||
log.error("删除案例文档失败,未找到相关的日志记录,caseId: {}", caseId);
|
log.error("删除案例文档失败,未找到相关的日志记录,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl,
|
||||||
|
"", "删除案例文档失败,未找到相关的日志记录",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,26 +273,31 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
String taskId = latestLog.getTaskId();
|
String taskId = latestLog.getTaskId();
|
||||||
if (StringUtil.isBlank(taskId)) {
|
if (StringUtil.isBlank(taskId)) {
|
||||||
log.error("删除案例文档失败,日志记录中taskId为空,caseId: {}", caseId);
|
log.error("删除案例文档失败,日志记录中taskId为空,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl,
|
||||||
|
"kId=" + caseAiProperties.getCaseKnowledgeId() +
|
||||||
|
"&taskIds=", "删除案例文档失败,日志记录中taskId为空",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
// 构建请求参数
|
||||||
|
String params = "kId=" + caseAiProperties.getCaseKnowledgeId() +
|
||||||
|
"&taskIds=" + taskId;
|
||||||
|
|
||||||
// 3. 获取access_token
|
// 3. 获取access_token
|
||||||
String accessToken = aiAccessTokenService.getAccessToken();
|
String accessToken = aiAccessTokenService.getAccessToken();
|
||||||
if (StringUtil.isBlank(accessToken)) {
|
if (StringUtil.isBlank(accessToken)) {
|
||||||
log.error("删除案例文档失败,获取access_token失败");
|
log.error("删除案例文档失败,获取access_token失败");
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.DELETE.getCode(), deleteUrl,
|
||||||
|
params, "删除案例文档失败,获取access_token失败",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String deleteUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/delete";
|
|
||||||
|
|
||||||
// 4. 重试逻辑:最多3次机会
|
// 4. 重试逻辑:最多3次机会
|
||||||
int maxRetries = 3;
|
int maxRetries = 3;
|
||||||
for (int attempt = 1; attempt <= maxRetries; attempt++) {
|
for (int attempt = 1; attempt <= maxRetries; attempt++) {
|
||||||
log.info("删除案例文档第{}次尝试,caseId: {}, taskId: {}", attempt, caseId, taskId);
|
log.info("删除案例文档第{}次尝试,caseId: {}, taskId: {}", attempt, caseId, taskId);
|
||||||
|
|
||||||
// 构建请求参数
|
|
||||||
String params = "kId=" + caseAiProperties.getCaseKnowledgeId() +
|
|
||||||
"&taskIds=" + taskId;
|
|
||||||
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
|
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
|
||||||
HttpDelete httpDelete = new HttpDelete(deleteUrl + "?" + params);
|
HttpDelete httpDelete = new HttpDelete(deleteUrl + "?" + params);
|
||||||
httpDelete.setHeader("X-AI-ApiCode", caseAiProperties.getAiApiCode());
|
httpDelete.setHeader("X-AI-ApiCode", caseAiProperties.getAiApiCode());
|
||||||
@@ -363,9 +389,15 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean updateCaseDocument(Cases cases) {
|
public boolean updateCaseDocument(Cases cases) {
|
||||||
|
String requestBody = "";
|
||||||
|
String requestUrl = caseAiProperties.getBaseUrl() + "/apigateway/knowledge/v1/file/delete";
|
||||||
|
|
||||||
String caseId = cases.getId();
|
String caseId = cases.getId();
|
||||||
if (cases == null) {
|
if (cases == null) {
|
||||||
log.error("更新案例文档失败,未找到案例记录,caseId: {}", caseId);
|
log.error("更新案例文档失败,未找到案例记录,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
|
||||||
|
requestBody, "更新案例文档失败,未找到案例记录",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -375,8 +407,9 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
String accessToken = aiAccessTokenService.getAccessToken();
|
String accessToken = aiAccessTokenService.getAccessToken();
|
||||||
if (StringUtil.isBlank(accessToken)) {
|
if (StringUtil.isBlank(accessToken)) {
|
||||||
log.error("更新案例文档失败,获取access_token失败");
|
log.error("更新案例文档失败,获取access_token失败");
|
||||||
// saveCaseDocumentLog(caseId, caseEntity.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), "",
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
|
||||||
// "更新案例文档", "获取access_token失败", CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
requestBody, "更新案例文档失败,获取access_token失败",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,6 +421,9 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
|
|
||||||
if (logList.isEmpty()) {
|
if (logList.isEmpty()) {
|
||||||
log.error("调用删除接口时未找到相关的日志记录,caseId: {}", caseId);
|
log.error("调用删除接口时未找到相关的日志记录,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
|
||||||
|
requestBody, "调用删除接口时未找到相关的日志记录",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,10 +431,11 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
String oldTaskId = latestLog.getTaskId();
|
String oldTaskId = latestLog.getTaskId();
|
||||||
if (StringUtil.isBlank(oldTaskId)) {
|
if (StringUtil.isBlank(oldTaskId)) {
|
||||||
log.error("调用删除接口时日志记录中taskId为空,caseId: {}", caseId);
|
log.error("调用删除接口时日志记录中taskId为空,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
|
||||||
|
requestBody, "调用删除接口时日志记录中taskId为空",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String requestBody = "";
|
|
||||||
String requestUrl = "";
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 2. 先调用删除接口
|
// 2. 先调用删除接口
|
||||||
@@ -419,6 +456,9 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
// 1. 检查文件路径
|
// 1. 检查文件路径
|
||||||
if (StringUtil.isBlank(cases.getFilePath())) {
|
if (StringUtil.isBlank(cases.getFilePath())) {
|
||||||
log.error("调用上传接口失败,案例文件路径为空,caseId: {}", caseId);
|
log.error("调用上传接口失败,案例文件路径为空,caseId: {}", caseId);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
|
||||||
|
requestBody, "调用上传接口失败,案例文件路径为空",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,6 +467,9 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService {
|
|||||||
File file = new File(filePath);
|
File file = new File(filePath);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
log.error("调用上传接口失败,案例文件不存在,filePath: {}", filePath);
|
log.error("调用上传接口失败,案例文件不存在,filePath: {}", filePath);
|
||||||
|
saveCaseDocumentLog(caseId, cases.getTitle(), CaseDocumentLogOptTypeEnum.UPDATE.getCode(), requestUrl,
|
||||||
|
requestBody, "调用上传接口失败,案例文件不存在",
|
||||||
|
CaseDocumentLogRunStatusEnum.COMPLETED.getCode(), CaseDocumentLogOptStatusEnum.FAILED.getCode(), CaseDocumentLogCaseStatusEnum.FAILED.getCode(), null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user