From 0207826a07414a23b67f1bbf0814cf2aebd7d91c Mon Sep 17 00:00:00 2001 From: "liu.zixi" Date: Thu, 9 Oct 2025 15:24:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=88=E4=BE=8B=E4=B8=93=E5=AE=B6=EF=BC=9A?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=91=8A=E8=AD=A6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../boecase/properties/CaseAiProperties.java | 7 +- .../impl/CaseKnowledgeServiceImpl.java | 84 +++++++++++++++---- .../src/main/resources/application-dev.yml | 2 + .../src/main/resources/application-pre.yml | 2 + .../src/main/resources/application-prod.yml | 2 + .../src/main/resources/application-test.yml | 2 + 6 files changed, 83 insertions(+), 16 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/properties/CaseAiProperties.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/properties/CaseAiProperties.java index 77ba2ee5..994cab18 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/properties/CaseAiProperties.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/properties/CaseAiProperties.java @@ -56,4 +56,9 @@ public class CaseAiProperties { * 白名单用户列表 */ private List whiteUserCodeList; -} + + /** + * AI处理失败告警邮件收件人列表 + */ + private List alertEmailRecipients; +} \ No newline at end of file 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 869ae7dc..de852862 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 @@ -12,6 +12,7 @@ import com.xboe.enums.CaseDocumentLogCaseStatusEnum; import com.xboe.enums.CaseDocumentLogOptStatusEnum; import com.xboe.enums.CaseDocumentLogOptTypeEnum; import com.xboe.enums.CaseDocumentLogRunStatusEnum; +import com.xboe.module.assistance.service.IEmailService; import com.xboe.module.boecase.dao.CaseDocumentLogDao; import com.xboe.module.boecase.dao.CasesDao; import com.xboe.module.boecase.entity.CaseDocumentLog; @@ -70,6 +71,9 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService { @Autowired private IAiAccessTokenService aiAccessTokenService; + @Autowired + private IEmailService emailService; + private static final String ACCESS_TOKEN_CACHE_KEY = "case:ai:access_token"; @Override @@ -897,26 +901,76 @@ public class CaseKnowledgeServiceImpl implements ICaseKnowledgeService { private void saveCaseDocumentLog(String caseId, String caseTitle, String optType, String requestUrl, String requestBody, String responseBody, Integer runStatus, Integer optStatus, Integer caseStatus, String taskId) { + CaseDocumentLog caseDocumentLog = new CaseDocumentLog(); + caseDocumentLog.setId(IDGenerator.generate()); + caseDocumentLog.setTaskId(taskId); + caseDocumentLog.setCaseId(caseId); + caseDocumentLog.setCaseTitle(caseTitle); + caseDocumentLog.setOptType(optType); + caseDocumentLog.setRequestUrl(requestUrl); + caseDocumentLog.setRequestBody(requestBody); + caseDocumentLog.setResponseBody(responseBody); + caseDocumentLog.setOptTime(LocalDateTime.now()); + caseDocumentLog.setRunStatus(runStatus); + caseDocumentLog.setOptStatus(optStatus); + caseDocumentLog.setCaseStatus(caseStatus); + caseDocumentLog.setExecuteDuration(0L); + try { - CaseDocumentLog caseDocumentLog = new CaseDocumentLog(); - caseDocumentLog.setId(IDGenerator.generate()); - caseDocumentLog.setTaskId(taskId); - caseDocumentLog.setCaseId(caseId); - caseDocumentLog.setCaseTitle(caseTitle); - caseDocumentLog.setOptType(optType); - caseDocumentLog.setRequestUrl(requestUrl); - caseDocumentLog.setRequestBody(requestBody); - caseDocumentLog.setResponseBody(responseBody); - caseDocumentLog.setOptTime(LocalDateTime.now()); - caseDocumentLog.setRunStatus(runStatus); - caseDocumentLog.setOptStatus(optStatus); - caseDocumentLog.setCaseStatus(caseStatus); - caseDocumentLog.setExecuteDuration(0L); - caseDocumentLogDao.save(caseDocumentLog); log.info("保存CaseDocumentLog成功,logId: {}", caseDocumentLog.getId()); } catch (Exception e) { log.error("保存CaseDocumentLog失败", e); } + + // 发送告警邮件逻辑 + try { + // 如果optStatus是失败(2),发送"接口调用失败"告警邮件 + if (optStatus != null && optStatus.equals(CaseDocumentLogOptStatusEnum.FAILED.getCode())) { + String subject = "【知识处理报警】知识处理失败-操作类型:【" + CaseDocumentLogOptTypeEnum.getDescByCode(optType) + "】"; + StringBuilder content = new StringBuilder(); + content.append("您好!知识处理流程中,AI接口调用经多次重试后仍失败,具体信息如下:

"); + content.append("案例标题:").append(caseTitle).append("
"); + content.append("操作类型:").append(CaseDocumentLogOptTypeEnum.getDescByCode(optType)).append("
"); + content.append("调用接口:").append(requestUrl).append("
"); + content.append("调用时间:").append(caseDocumentLog.getOptTime()).append("

"); + content.append("请及时排查接口可用性、文档信息有效性或AI平台状态,避免影响知识处理进度。"); + + // 使用配置的收件人列表 + List recipients = caseAiProperties.getAlertEmailRecipients(); + if (recipients != null && !recipients.isEmpty()) { + try { + String to = String.join(",", recipients); + emailService.sendMail(to, subject, content.toString(), null); + } catch (Exception e) { + log.error("发送接口调用失败告警邮件失败", e); + } + } + } + + // 如果caseStatus是失败(2),发送"业务处理失败"告警邮件 + if (caseStatus != null && caseStatus.equals(CaseDocumentLogCaseStatusEnum.FAILED.getCode())) { + String subject = "【知识处理报警】AI平台处理失败-操作类型:【" + CaseDocumentLogOptTypeEnum.getDescByCode(optType) + "】"; + StringBuilder content = new StringBuilder(); + content.append("您好!知识处理流程中,AI平台业务处理失败,具体信息如下:

"); + content.append("案例标题:").append(caseTitle).append("
"); + content.append("操作类型:").append(CaseDocumentLogOptTypeEnum.getDescByCode(optType)).append("
"); + content.append("调用时间:").append(caseDocumentLog.getOptTime()).append("

"); + content.append("请及时核查文档处理失败原因,或联系AI平台技术支持排查解析问题。"); + + // 使用配置的收件人列表 + List recipients = caseAiProperties.getAlertEmailRecipients(); + if (recipients != null && !recipients.isEmpty()) { + try { + String to = String.join(",", recipients); + emailService.sendMail(to, subject, content.toString(), null); + } catch (Exception e) { + log.error("发送业务处理失败告警邮件失败", e); + } + } + } + } catch (Exception e) { + log.error("发送告警邮件失败", e); + } } } \ No newline at end of file diff --git a/servers/boe-server-all/src/main/resources/application-dev.yml b/servers/boe-server-all/src/main/resources/application-dev.yml index c175e2f3..24835ca4 100644 --- a/servers/boe-server-all/src/main/resources/application-dev.yml +++ b/servers/boe-server-all/src/main/resources/application-dev.yml @@ -87,6 +87,8 @@ xboe: ai-api-code: 30800 case-knowledge-id: de2e006e-82fb-4ace-8813-f25c316be4ff file-upload-callback-url: http://192.168.0.253:9090/xboe/m/boe/caseDocumentLog/uploadCallback + alert-email-recipients: + - liu.zixi@ebiz-digits.com xxl: job: accessToken: 65ddc683-22f5-83b4-de3a-3c97a0a29af0 diff --git a/servers/boe-server-all/src/main/resources/application-pre.yml b/servers/boe-server-all/src/main/resources/application-pre.yml index b99772ab..152ee066 100644 --- a/servers/boe-server-all/src/main/resources/application-pre.yml +++ b/servers/boe-server-all/src/main/resources/application-pre.yml @@ -119,6 +119,8 @@ xboe: ai-api-code: 30800 case-knowledge-id: de2e006e-82fb-4ace-8813-f25c316be4ff file-upload-callback-url: http://10.251.132.75:9090/xboe/m/boe/caseDocumentLog/uploadCallback + alert-email-recipients: + - liu.zixi@ebiz-digits.com jasypt: encryptor: algorithm: PBEWithMD5AndDES diff --git a/servers/boe-server-all/src/main/resources/application-prod.yml b/servers/boe-server-all/src/main/resources/application-prod.yml index ea9be127..cdbd166b 100644 --- a/servers/boe-server-all/src/main/resources/application-prod.yml +++ b/servers/boe-server-all/src/main/resources/application-prod.yml @@ -85,6 +85,8 @@ xboe: ai-api-code: 30800 case-knowledge-id: de2e006e-82fb-4ace-8813-f25c316be4ff file-upload-callback-url: http://10.251.113.95:9090/xboe/m/boe/caseDocumentLog/uploadCallback + alert-email-recipients: + - liu.zixi@ebiz-digits.com xxl: job: accessToken: 65ddc683-22f5-83b4-de3a-3c97a0a29af0 diff --git a/servers/boe-server-all/src/main/resources/application-test.yml b/servers/boe-server-all/src/main/resources/application-test.yml index 8f58426f..604d33ba 100644 --- a/servers/boe-server-all/src/main/resources/application-test.yml +++ b/servers/boe-server-all/src/main/resources/application-test.yml @@ -121,6 +121,8 @@ xboe: file-upload-callback-url: http://10.251.186.27:9090/xboe/m/boe/caseDocumentLog/uploadCallback use-white-list: true white-user-code-list: 00004409 + alert-email-recipients: + - liu.zixi@ebiz-digits.com jasypt: encryptor: algorithm: PBEWithMD5AndDES