diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/constant/ClaimVerificationConstant.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/constant/ClaimVerificationConstant.java new file mode 100644 index 0000000..3388951 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/constant/ClaimVerificationConstant.java @@ -0,0 +1,11 @@ +package com.volvo.ai.analytic.center.constant; + +public class ClaimVerificationConstant { + + public static final String ID = "id"; + public static final String EXTENSION = "extension"; + public static final String TYPE = "type"; + public static final String UPLOAD_FILE_ID = "upload_file_id"; + public static final String TRANSFER_METHOD = "transfer_method"; + public static final String LOCAL_FILE = "local_file"; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/constant/Constant.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/constant/Constant.java index 057677a..e256aa2 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/constant/Constant.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/constant/Constant.java @@ -5,4 +5,6 @@ public class Constant { public static final String CHANNEL_DCC = "Channel_Dcc"; public static final String DISPLAY_STATUS = "FINISHED"; + + public static final String INTELLIGENT_CUSTOMER_4IN1 = "INTELLIGENT_CUSTOMER_4IN1"; } diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/ClaimVerificationFileDTO.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/ClaimVerificationFileDTO.java new file mode 100644 index 0000000..aa95c33 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/ClaimVerificationFileDTO.java @@ -0,0 +1,36 @@ +package com.volvo.ai.analytic.center.dto.req; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ClaimVerificationFileDTO { + + @NotBlank(message = "售后ID不能为空") + private String newBieAfterSalesId; + + @NotBlank(message = "业务类型不能为空, 99001:文件分析,99002:审计报告") + private String businessType; + + //文件类型 dtc,诊断报告 + private String fileType; + + //obs文件路径集合 + private List fileObsPath; + + //DTC报告 + private JSONObject dtcReport; + + //环检报告 + private JSONObject preCheckReport; + + //诊断报告 + private JSONObject diagnosticReport; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/FourInOneRequestDTO.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/FourInOneRequestDTO.java new file mode 100644 index 0000000..4754fb2 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/FourInOneRequestDTO.java @@ -0,0 +1,32 @@ +package com.volvo.ai.analytic.center.dto.req; + +import lombok.Data; + +/** + * + * @ClassName: FourRequestDTO + * @author: renzhen + * @Description: 四合一请求参数 + * @date: 2025-04-02 10:36 + */ +@Data +public class FourInOneRequestDTO { + + // 语料唯一Id + private String workOrderId; + + //【语料内容】不可为空" + private String workOrderContent; + + // 消息来源 + private String workOrderSource; + + // 关联语料内容 + private String relationCorpusContent; + + + private String aiAnalysisRequestId; + + + +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ComplainDTO.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ComplainDTO.java new file mode 100644 index 0000000..54dbfe4 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ComplainDTO.java @@ -0,0 +1,22 @@ +package com.volvo.ai.analytic.center.dto.resp; + +import lombok.Data; + +/** + * @ClassName ComplainDTO + * @Description 四合一 投诉 + * @Author renzhen + * @Date 2025-04-02 11:20 + * @Version 1.0 + **/ +@Data +public class ComplainDTO { + + private String orderType; + private String complainType; + private String complainTitle; + private String problemDescription; + private String contactTelephone; + private String contactName; + private String contactSex; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ConsultDTO.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ConsultDTO.java new file mode 100644 index 0000000..da574dc --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ConsultDTO.java @@ -0,0 +1,20 @@ +package com.volvo.ai.analytic.center.dto.resp; + +import lombok.Data; + +/** + * @ClassName ComplainDTO + * @Description 四合一 咨询 + * @Author renzhen + * @Date 2025-04-02 11:20 + * @Version 1.0 + **/ +@Data +public class ConsultDTO { + + private String orderType; + private String problemDescription; + private String contactTelephone; + private String contactName; + private String contactSex; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/FourInOneResponseDTO.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/FourInOneResponseDTO.java new file mode 100644 index 0000000..ba1cc1b --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/FourInOneResponseDTO.java @@ -0,0 +1,29 @@ +package com.volvo.ai.analytic.center.dto.resp; + +import lombok.Data; + +/** + * + * @ClassName: FourRequestDTO + * @author: renzhen + * @Description: 四合一请求参数 + * @date: 2025-04-02 10:36 + */ +@Data +public class FourInOneResponseDTO { + + // 语料唯一Id + private String workOrderId; + + //投诉 + private ComplainDTO complain; + + // 咨询 + private ConsultDTO consult; + + + private String aiAnalysisRequestId; + + + +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalyticBusinessConfig.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalyticBusinessConfig.java new file mode 100644 index 0000000..a7a8a15 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalyticBusinessConfig.java @@ -0,0 +1,99 @@ +package com.volvo.ai.analytic.center.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName("tt_ai_analytic_business_config") +public class AiAnalyticBusinessConfig { + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务线标识(如:A业务/B业务/C业务) + */ + @TableField(value = "business_line") + private String businessLine; + + /** + * 检核方式 AI检核 : 9911 人工复核: 9912) + */ + @TableField(value = "verification_method") + private String verificationMethod; + + /** + * 配置类型:FileDescription,AnalysisRequirement,ReportRequirements,ReportTemplate,AnalysisRules + */ + @TableField(value = "config_type") + private String configType; + + /** + * 配置内容 + */ + @TableField(value = "config_data") + private String configData; + + /** + * 配置版本 + */ + @TableField(value = "config_version") + private Integer configVersion; + + /** + * 文件配置分类 + */ + @TableField(value = "file_config_category") + private String fileConfigCategory; + + /** + * 删除标识(0-未删除,1-已删除) + */ + @TableField(value = "is_deleted") + private Integer isDeleted; + + /** + * 创建时间 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建人 + */ + @TableField(value = "create_by") + private String createBy; + + /** + * 更新人 + */ + @TableField(value = "update_by") + private String updateBy; + + /** + * 乐观锁 + */ + @TableField(value = "versions") + private Integer versions; + +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalyticWarrantyAudit.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalyticWarrantyAudit.java new file mode 100644 index 0000000..57a13d3 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalyticWarrantyAudit.java @@ -0,0 +1,70 @@ +package com.volvo.ai.analytic.center.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName("tt_ai_analytic_warranty_audit") +public class AiAnalyticWarrantyAudit { + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 配置版本 + */ + @TableField(value = "audit_count") + private Integer auditCount; + + @TableField(value = "new_bie_after_sales_id") + private String newBieAfterSalesId; + /** + * 删除标识(0-未删除,1-已删除) + */ + @TableField(value = "is_deleted") + private Integer isDeleted; + + /** + * 创建时间 + */ + @TableField(value = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @TableField(value = "update_time") + private Date updateTime; + + /** + * 创建人 + */ + @TableField(value = "create_by") + private String createBy; + + /** + * 更新人 + */ + @TableField(value = "update_by") + private String updateBy; + + /** + * 乐观锁 + */ + @TableField(value = "versions") + private Integer versions; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/TcIntelligentCustomer.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/TcIntelligentCustomer.java new file mode 100644 index 0000000..f2221dc --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/TcIntelligentCustomer.java @@ -0,0 +1,66 @@ +package com.volvo.ai.analytic.center.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName("tc_intelligent_customer") +public class TcIntelligentCustomer { + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + // 咨询类【201】/投诉类【202】/投诉类型【203】 + @TableField("intelligent_customer_type") + private String intelligentCustomerType; + + @TableField("type_one") + private String typeOne; + + @TableField("type_two") + private String typeTwo; // JSON 字符串 + + @TableField("type_three") + private String typeThree; + + + @TableField("is_deleted") + @TableLogic + private Integer isDeleted; + + @TableField("versions") + @Version + private Integer versions; + + /** + * 创建者 + */ + @TableField("create_by") + private String createBy; + + /** + * 创建时间 + */ + @TableField("create_time") + private Date createTime; + + /** + * 更新者 + */ + @TableField("update_by") + private String updateBy; + + /** + * 更新时间 + */ + @TableField("update_time") + private Date updateTime; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java index 50c552a..a0ed9dc 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java @@ -6,7 +6,19 @@ import lombok.Getter; public enum BusinessTypeEnum { COMMUNITYTARGET("CommunityTarget", "社区舆情分析"), - SMART_ASSISTANT("SMART_ASSISTANT", "智能助手"), + SMART_ASSISTANT("SMART_ASSISTANT", "智能助手-DCC"), + SMART_ASSISTANT_QIWEI("SMART_ASSISTANT_QIWEI", "智能助手-企微"), + INTELLIGENT_CUSTOMER("INTELLIGENT_CUSTOMER_4IN1", "智能客服-4合一"), + + //索赔检核 + CLAIM_VERIFICATION("CLAIM_VERIFICATION", "索赔检核流程"), + CLAIM_VERIFICATION_FILE_ANALYSIS("99001", "索赔检核文件分析"), + CLAIM_VERIFICATION_AUDIT("99002", "索赔检核审计报告"), + CLAIM_VERIFICATION_DTC("DTC", "DTC报告"), + CLAIM_VERIFICATION_DIAGNOSTIC("DIAGNOSTIC", "诊断报告"), + + //索赔检核配置类型 + AUDITRULES("AuditRules", "审计规则配置"), SMART_ASSISTANT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-铭牌") ; diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/ClaimVerificationFileTypeEnums.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/ClaimVerificationFileTypeEnums.java new file mode 100644 index 0000000..0ccdeee --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/ClaimVerificationFileTypeEnums.java @@ -0,0 +1,59 @@ +package com.volvo.ai.analytic.center.enums; + +import lombok.Getter; + +@Getter +public enum ClaimVerificationFileTypeEnums { + + //image + jpg("jpg", "image"), + jpeg("jpeg", "image"), + png("png", "image"), + gif("gif", "image"), + webp("webp", "image"), + svg("svg", "image"), + + //document + txt("txt", "document"), + md("md", "document"), + markdown("markdown", "document"), + pdf("pdf", "document"), + html("html", "document"), + xlsx("xlsx", "document"), + xls("xls", "document"), + docx("docx", "document"), + csv("csv", "document"), + eml("eml", "document"), + msg("msg", "document"), + pptx("pptx", "document"), + ppt("ppt", "document"), + xml("xml", "document"), + epub("epub", "document"), + + ; + + private String code; + private String message; + + public static String getMessageByCode(String code) { + for (ClaimVerificationFileTypeEnums enums : ClaimVerificationFileTypeEnums.values()) { + if (enums.getCode().equals(code)) { + return enums.getMessage(); + } + } + return null; + } + public static ClaimVerificationFileTypeEnums getByCode(String code) { + for (ClaimVerificationFileTypeEnums enums : ClaimVerificationFileTypeEnums.values()) { + if (enums.getCode().equals(code)) { + return enums; + } + } + return null; + } + + ClaimVerificationFileTypeEnums(String code, String message) { + this.code = code; + this.message = message; + } +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/IntelligentCustomerTypeEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/IntelligentCustomerTypeEnum.java new file mode 100644 index 0000000..3f82c52 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/IntelligentCustomerTypeEnum.java @@ -0,0 +1,19 @@ +package com.volvo.ai.analytic.center.enums; + +import lombok.Getter; + +@Getter +public enum IntelligentCustomerTypeEnum { + CONSULT("201", "咨询类"), + COMPLAIN("202", "投诉类"), + CONSULT_TYPE("203", "投诉类型") + ; + + private String code; + private String message; + + IntelligentCustomerTypeEnum(String code, String message) { + this.code = code; + this.message = message; + } +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/StatusEnums.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/StatusEnums.java new file mode 100644 index 0000000..375ccf9 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/StatusEnums.java @@ -0,0 +1,23 @@ +package com.volvo.ai.analytic.center.enums; + +public enum StatusEnums { + + success(200, "分析完成"), + error(500, "系统异常,请稍后重试"), + ; + private Integer code; + private String message; + + StatusEnums(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return this.code; + } + + public String getMessage() { + return this.message; + } +} diff --git a/ai-analytic-center-biz/pom.xml b/ai-analytic-center-biz/pom.xml index a4007da..1a1a413 100644 --- a/ai-analytic-center-biz/pom.xml +++ b/ai-analytic-center-biz/pom.xml @@ -19,6 +19,12 @@ + + org.apache.commons + commons-text + 1.9 + + cn.hutool hutool-all @@ -227,6 +233,12 @@ + + org.apache.commons + commons-text + 1.9 + + diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/controller/AiDifyResultController.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/controller/AiDifyResultController.java new file mode 100644 index 0000000..afde080 --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/controller/AiDifyResultController.java @@ -0,0 +1,48 @@ +package com.volvo.ai.analytic.center.controller; + + +import com.alibaba.fastjson.JSONObject; +import com.volvo.ai.analytic.center.entity.AiAnalysisRequestLogs; +import com.volvo.ai.analytic.center.service.AiAnalysisRequestLogsService; +import com.volvo.common.core.util.ResultMsg; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@Api(tags = "AiDifyResult") +@RequestMapping("") +@Slf4j +@RefreshScope +public class AiDifyResultController { + + @Autowired + private RocketMQTemplate rocketMQTemplate; + + @Autowired + private AiAnalysisRequestLogsService aiAnalysisRequestLogsService; + + + + @PostMapping("/updateByAiId") + @ApiOperation(value = "更新dify结果") + public ResultMsg updateByAiId(@RequestBody String message) { + JSONObject messageJson = JSONObject.parseObject(message); + AiAnalysisRequestLogs aiAnalysisRequestLogs = new AiAnalysisRequestLogs(); + aiAnalysisRequestLogs.setAiAnalysisRequestId(messageJson.getString("aiAnalysisRequestId")); + aiAnalysisRequestLogs.setDifyResponse(messageJson.getString("difyResponse")); + aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(aiAnalysisRequestLogs); + return ResultMsg.ok("ok"); + } + + +} + diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/controller/TestController.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/controller/TestController.java index c558670..64c7396 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/controller/TestController.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/controller/TestController.java @@ -1,6 +1,10 @@ package com.volvo.ai.analytic.center.controller; +import com.alibaba.fastjson.JSONObject; +import com.volvo.ai.analytic.center.entity.AiAnalysisRequestLogs; +import com.volvo.ai.analytic.center.service.AiAnalysisRequestLogsService; +import com.alibaba.fastjson.JSONObject; import com.volvo.common.core.util.ResultMsg; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -24,12 +28,16 @@ public class TestController { @Autowired private RocketMQTemplate rocketMQTemplate; + @Autowired + private AiAnalysisRequestLogsService aiAnalysisRequestLogsService; + @PostMapping("/mockMq") @ApiOperation(value = "补偿处理消息") public ResultMsg mockMq(@RequestBody String message) { - rocketMQTemplate.syncSend("COMMUNITY_POST_TO_AI_TOPIC", message); + JSONObject messageJson = JSONObject.parseObject(message); + rocketMQTemplate.syncSend(messageJson.getString("topic"), messageJson.getString("message")); return ResultMsg.ok("ok"); } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/job/CorpusFailJob.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/job/CorpusFailJob.java index da786ce..4e90b9d 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/job/CorpusFailJob.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/job/CorpusFailJob.java @@ -67,7 +67,8 @@ public class CorpusFailJob { @Value("${rocketmq.producer.corpus.dcctopic}") private String dccMqTipic; - + @Value("${rocketmq.consumer.intelligentCustomer.topic}") + private String intelligentCustomerTipic; @Autowired private TmTelephoneCorpusMapper tmTelephoneCorpusMapper; @@ -79,17 +80,17 @@ public class CorpusFailJob { @PostMapping("corpusFailTask") public void corpusFailTask() { - log.info(" 解析失败重试处理"); - Integer total = aiAnalysisErrorsService.queryCountAnalysisErrorList(BusinessTypeEnum.SMART_ASSISTANT.getCode()); - log.info("语料解析失败重试处理数据量:{}", total); + log.info(" corpusFailTask解析失败重试处理"); + Integer total = aiAnalysisErrorsService.queryCountAnalysisErrorList(Arrays.asList(BusinessTypeEnum.SMART_ASSISTANT.getCode(),BusinessTypeEnum.SMART_ASSISTANT_QIWEI.getCode())); + log.info("corpusFailTask语料解析失败重试处理数据量:{}", total); int totalPages = PageDto.getTotalPages(total, pageSize); - log.info("语料解析失败重试处理数据量:{},总页数:{}", total, totalPages); + log.info("corpusFailTask 语料解析失败重试处理数据量:{},总页数:{}", total, totalPages); for (int i = 1; i <= totalPages; i++) { int offset = (i - 1) * pageSize; - List aiAnalysisErrorsListlist = aiAnalysisErrorsService.queryAnalysisErrorList(BusinessTypeEnum.SMART_ASSISTANT.getCode(),offset, pageSize); + List aiAnalysisErrorsListlist = aiAnalysisErrorsService.queryAnalysisErrorList(Arrays.asList(BusinessTypeEnum.SMART_ASSISTANT.getCode(),BusinessTypeEnum.SMART_ASSISTANT_QIWEI.getCode()),offset, pageSize); if(CollectionUtils.isNotEmpty(aiAnalysisErrorsListlist)) { - log.info("语料解析失败重试处理 size:{}", aiAnalysisErrorsListlist.size()); + log.info("corpusFailTask语料解析失败重试处理 size:{}", aiAnalysisErrorsListlist.size()); aiAnalysisErrorsListlist.stream().forEach(aiAnalysisErrors -> { @@ -169,9 +170,6 @@ public class CorpusFailJob { }); } } - - - } @@ -183,4 +181,58 @@ public class CorpusFailJob { aiAnalysisErrorsService.update(aiAnalysisErrors, new LambdaQueryWrapper().eq(AiAnalysisErrors::getAiAnalysisRequestId, aiAnalysisRequestId)); } + + + + /** + * 智能客服-四合一 + */ + @XxlJob("intelligentCustomer4in1FailTask") + @PostMapping("intelligentCustomer4in1FailTask") + public void intelligentCustomer4in1() { + + log.info(" intelligentCustomer4in1FailTask 解析失败重试处理"); + Integer total = aiAnalysisErrorsService.queryCountAnalysisErrorList(Arrays.asList(BusinessTypeEnum.INTELLIGENT_CUSTOMER.getCode())); + log.info("intelligentCustomer4in1FailTask 语料解析失败重试处理数据量:{}", total); + int totalPages = PageDto.getTotalPages(total, pageSize); + log.info("intelligentCustomer4in1FailTask 语料解析失败重试处理数据量:{},总页数:{}", total, totalPages); + for (int i = 1; i <= totalPages; i++) { + int offset = (i - 1) * pageSize; + + List aiAnalysisErrorsListlist = aiAnalysisErrorsService.queryAnalysisErrorList(Arrays.asList(BusinessTypeEnum.INTELLIGENT_CUSTOMER.getCode()),offset, pageSize); + if(CollectionUtils.isNotEmpty(aiAnalysisErrorsListlist)) { + log.info("intelligentCustomer4in1FailTask语料解析失败重试处理 size:{}", aiAnalysisErrorsListlist.size()); + aiAnalysisErrorsListlist.stream().forEach(aiAnalysisErrors -> { + try { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AiAnalysisRequestLogs::getAiAnalysisRequestId, aiAnalysisErrors.getAiAnalysisRequestId()); + AiAnalysisRequestLogs oldAiAnalysisRequestLogs = aiAnalysisRequestLogsMapper.selectOne(queryWrapper); + + if (null != oldAiAnalysisRequestLogs) { + JSONObject businessRequest = JSONObject.parseObject(oldAiAnalysisRequestLogs.getBusinessRequest()); + businessRequest.put("aiAnalysisRequestId", oldAiAnalysisRequestLogs.getAiAnalysisRequestId()); + String message = businessRequest.toJSONString(); + rocketMqTemplate.asyncSend(intelligentCustomerTipic, MessageBuilder.withPayload(message).build(), + new SendCallback() { + @Override + public void onSuccess(SendResult sendResult) { + log.info(" intelligentCustomer4in1FailTask 失败补偿 发送MQ成功 消息体:{}", message); + } + @Override + public void onException(Throwable e) { + log.error("intelligentCustomer4in1FailTask 失败补偿 送MQ异常 消息体:{}, 异常:", message, e); + } + }, 10000); + + } + } catch (Exception e) { + log.info("INTELLIGENT_CUSTOMER_4IN1 语料解析失败补偿异常:{}", e); + aiAnalysisErrors.setAiAnalysisErrorHandlingStatus("0"); + aiAnalysisErrors.setRetryCount(aiAnalysisErrors.getRetryCount() + 1); + updateAiAnalysisErrors(aiAnalysisErrors, aiAnalysisErrors.getAiAnalysisRequestId()); + } + }); + } + } + } } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalysisErrorsMapper.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalysisErrorsMapper.java index c4c684f..9b5fdf7 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalysisErrorsMapper.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalysisErrorsMapper.java @@ -11,6 +11,6 @@ import java.util.List; public interface AiAnalysisErrorsMapper extends BaseMapper { - int queryCountAnalysisErrorList(@Param("businessType") String businessType); - List queryAnalysisErrorList( @Param("businessType") String businessType, @Param("offset") int offset, @Param("pageSize") int pageSize); + int queryCountAnalysisErrorList(@Param("businessType") List businessType); + List queryAnalysisErrorList( @Param("businessType") List businessType, @Param("offset") int offset, @Param("pageSize") int pageSize); } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalyticBusinessConfigMapper.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalyticBusinessConfigMapper.java new file mode 100644 index 0000000..6d147ef --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalyticBusinessConfigMapper.java @@ -0,0 +1,9 @@ +package com.volvo.ai.analytic.center.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.volvo.ai.analytic.center.entity.AiAnalyticBusinessConfig; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AiAnalyticBusinessConfigMapper extends BaseMapper { +} diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalyticWarrantyAuditMapper.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalyticWarrantyAuditMapper.java new file mode 100644 index 0000000..fc68261 --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/AiAnalyticWarrantyAuditMapper.java @@ -0,0 +1,9 @@ +package com.volvo.ai.analytic.center.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.volvo.ai.analytic.center.entity.AiAnalyticWarrantyAudit; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AiAnalyticWarrantyAuditMapper extends BaseMapper { +} diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/TcIntelligentCustomerMapper.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/TcIntelligentCustomerMapper.java new file mode 100644 index 0000000..aad8ca5 --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mapper/TcIntelligentCustomerMapper.java @@ -0,0 +1,11 @@ +package com.volvo.ai.analytic.center.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.volvo.ai.analytic.center.entity.TcIntelligentCustomer; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TcIntelligentCustomerMapper extends BaseMapper { + + +} diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/ClaimVerificationConsumer.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/ClaimVerificationConsumer.java new file mode 100644 index 0000000..04252f8 --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/ClaimVerificationConsumer.java @@ -0,0 +1,26 @@ +package com.volvo.ai.analytic.center.mq; + +import com.volvo.ai.analytic.center.service.ClaimVerificationService; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RocketMQMessageListener(consumerGroup = "${rocketmq.consumer.claimVerification.group}", + topic = "${rocketmq.consumer.claimVerification.topic}", + enableMsgTrace = true) +public class ClaimVerificationConsumer implements RocketMQListener{ + + @Autowired + private ClaimVerificationService claimVerificationService; + + @Override + public void onMessage(MessageExt messageExt) { + log.info("Received 索赔检核 message: " + messageExt); + claimVerificationService.consumerMessageByMQ(new String(messageExt.getBody())); + } +} diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusDccMqConsumer.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusDccMqConsumer.java index 06855ef..4c0d351 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusDccMqConsumer.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusDccMqConsumer.java @@ -11,7 +11,6 @@ import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RestController; @@ -41,10 +40,6 @@ public class CorpusDccMqConsumer implements RocketMQListener { @Autowired private AiAnalysisRequestLogsService aiAnalysisRequestLogsService; - @Value("${dify.corpus.checkDccRepeat}") - private String checkDccRepeat; - - private final ObjectMapper objectMapper = new ObjectMapper(); @Override diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpushIsLikeConsumer.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpushIsLikeConsumer.java index c9ad5bb..1ac1fb0 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpushIsLikeConsumer.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpushIsLikeConsumer.java @@ -2,7 +2,7 @@ package com.volvo.ai.analytic.center.mq; import com.alibaba.fastjson.JSONObject; import com.volvo.ai.analytic.center.entity.TmAnalysisResult; -import com.volvo.ai.analytic.center.enums.BusinessTypeEnum; +import com.volvo.ai.analytic.center.mapper.AiAnalysisRequestLogsMapper; import com.volvo.ai.analytic.center.service.TmAnalysisResultService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -23,6 +23,9 @@ public class CorpushIsLikeConsumer implements RocketMQListener{ @Autowired private TmAnalysisResultService tmAnalysisResultService; + + @Autowired + private AiAnalysisRequestLogsMapper aiAnalysisRequestLogsMapper; @Override public void onMessage(MessageExt messageExt) { @@ -36,16 +39,22 @@ public class CorpushIsLikeConsumer implements RocketMQListener{ log.info(" 回调的aiAnalysisRequestId 为空:{} ", execDifyFlow); return; } + String aiAnalysisRequestType = analysisRecordId.substring(0,analysisRecordId.indexOf("-")); + if(StringUtils.isEmpty(aiAnalysisRequestType) ){ + log.info(" 回调的aiAnalysisRequestType为空:{} ", aiAnalysisRequestType); + return; + } + //   "isLike": "1" // 1:点赞,2:点踩 tmAnalysisResultService.saveTmCorpusReport(TmAnalysisResult.builder() .aiAnalysisRequestId(execDifyFlow.getString("analysisRecordId")) .analysisResult(execDifyFlow.toJSONString()) - .analysisType(BusinessTypeEnum.SMART_ASSISTANT.getCode()) - .updateBy("LTO") + .analysisType(aiAnalysisRequestType) .updateTime(new Date()) .build()); } catch (Exception e) { - log.info(" 电话语料处理保存报告异常processItem:{} ", e); + log.info(" corpushIsLikeConsumer AI结果回传处理异常:{} ", e); } } + } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/IntelligentCustomerMqConsumer.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/IntelligentCustomerMqConsumer.java new file mode 100644 index 0000000..1288ed5 --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/IntelligentCustomerMqConsumer.java @@ -0,0 +1,62 @@ + +package com.volvo.ai.analytic.center.mq; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.volvo.ai.analytic.center.dto.req.FourInOneRequestDTO; +import com.volvo.ai.analytic.center.service.AiAnalysisRequestLogsService; +import com.volvo.ai.analytic.center.service.IntelligentCustomerService; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName CorpusProcessKafkaConsumer + * @Description 智能客服 语料解析 四合一 + * @Author renzhen + * @Date 2025-03-04 10:18 + * @Version 1.0 + **/ + +@Slf4j +@Component +@RefreshScope +@RestController +@RocketMQMessageListener(consumerGroup = "${rocketmq.consumer.intelligentCustomer.group}", + topic = "${rocketmq.consumer.intelligentCustomer.topic}", + instanceName = "intelligentCustomerMq", + consumeThreadNumber = 5, + enableMsgTrace = true) +public class IntelligentCustomerMqConsumer implements RocketMQListener { + + @Autowired + private IntelligentCustomerService intelligentCustomerService; + + @Autowired + private AiAnalysisRequestLogsService aiAnalysisRequestLogsService; + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public void onMessage(MessageExt messageExt) { + long startTime = System.currentTimeMillis(); + try { + log.info("intelligentCustomerMqConsumer 当前线程: {}, 线程ID: {}", Thread.currentThread().getName(), Thread.currentThread().getId()); + String message = new String(messageExt.getBody()); + log.info("IntelligentCustomerMqConsumer message: " + message); + FourInOneRequestDTO fourRequestDTO = objectMapper.readValue(message, FourInOneRequestDTO.class); + intelligentCustomerService.fourInOneMqService(fourRequestDTO); + log.info("FourInOneRequestDTO处理完成,耗时:{}", System.currentTimeMillis() - startTime); + } catch (JsonProcessingException e) { + log.info("intelligentCustomerMqConsumer mq 处理失败:{}", e.getMessage()); + } + } + + + +} + diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/AiAnalysisErrorsService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/AiAnalysisErrorsService.java index d0d09b0..8328cd0 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/AiAnalysisErrorsService.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/AiAnalysisErrorsService.java @@ -9,6 +9,6 @@ public interface AiAnalysisErrorsService extends IService { boolean saveAiAnalysisErrors(AiAnalysisErrors entity); boolean updateAiAnalysisErrors(AiAnalysisErrors entity); - int queryCountAnalysisErrorList(String businessType); - List queryAnalysisErrorList( String businessType, int offset,int pageSize); + int queryCountAnalysisErrorList(List businessType); + List queryAnalysisErrorList( List businessType, int offset,int pageSize); } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/ClaimVerificationService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/ClaimVerificationService.java new file mode 100644 index 0000000..e3566db --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/ClaimVerificationService.java @@ -0,0 +1,8 @@ +package com.volvo.ai.analytic.center.service; + +public interface ClaimVerificationService { + + + void consumerMessageByMQ(String message); + +} diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/IntelligentCustomerService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/IntelligentCustomerService.java new file mode 100644 index 0000000..d423bf9 --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/IntelligentCustomerService.java @@ -0,0 +1,18 @@ +package com.volvo.ai.analytic.center.service; + +import com.volvo.ai.analytic.center.dto.req.FourInOneRequestDTO; + +/** + * @description 电话语料表-同步表 + * @author BEJSON + * @date 2025-03-04 + */ +public interface IntelligentCustomerService{ + + + void fourInOneMqService(FourInOneRequestDTO fourInOneRequestDTO); + + + void sendMq( Object message); + +} \ No newline at end of file diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/AiAnalysisErrorsServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/AiAnalysisErrorsServiceImpl.java index bb37955..6b0152e 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/AiAnalysisErrorsServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/AiAnalysisErrorsServiceImpl.java @@ -26,7 +26,7 @@ public class AiAnalysisErrorsServiceImpl extends ServiceImpl 0; } else { - oldAiAnalysisErrors.setRetryCount(oldAiAnalysisErrors.getRetryCount() + 1); + entity.setRetryCount(oldAiAnalysisErrors.getRetryCount() + 1); return aiAnalysisErrorsMapper.update(entity, queryWrapper) > 0; } } @@ -37,18 +37,18 @@ public class AiAnalysisErrorsServiceImpl extends ServiceImpl 0; } return false; } @Override - public int queryCountAnalysisErrorList(String businessType) { + public int queryCountAnalysisErrorList(List businessType) { return aiAnalysisErrorsMapper.queryCountAnalysisErrorList(businessType); } - public List queryAnalysisErrorList( String businessType, int offset,int pageSize) { + public List queryAnalysisErrorList( List businessType, int offset,int pageSize) { //捞取异常表中属于社区的异常数据 return aiAnalysisErrorsMapper.queryAnalysisErrorList(businessType, offset, pageSize); } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/ClaimVerificationServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/ClaimVerificationServiceImpl.java new file mode 100644 index 0000000..98a8333 --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/ClaimVerificationServiceImpl.java @@ -0,0 +1,374 @@ +package com.volvo.ai.analytic.center.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.obs.services.model.ObsObject; +import com.volvo.ai.analytic.center.constant.ClaimVerificationConstant; +import com.volvo.ai.analytic.center.constant.Constant; +import com.volvo.ai.analytic.center.dto.req.ClaimVerificationFileDTO; +import com.volvo.ai.analytic.center.dto.req.DiFyReq; +import com.volvo.ai.analytic.center.dto.req.RunMaskingRuleInput; +import com.volvo.ai.analytic.center.entity.*; +import com.volvo.ai.analytic.center.enums.BusinessTypeEnum; +import com.volvo.ai.analytic.center.enums.ClaimVerificationFileTypeEnums; +import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper; +import com.volvo.ai.analytic.center.mapper.AiAnalyticWarrantyAuditMapper; +import com.volvo.ai.analytic.center.service.DataMaskingRuleService; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.text.StringEscapeUtils; +import com.volvo.ai.analytic.center.feign.DiFyFeign; +import com.volvo.ai.analytic.center.mapper.AiAnalysisRequestLogsMapper; +import com.volvo.ai.analytic.center.mapper.AiAnalyticBusinessConfigMapper; +import com.volvo.ai.analytic.center.service.ClaimVerificationService; +import com.volvo.ai.analytic.center.service.DiFyService; +import com.volvo.ai.analytic.center.utils.AiAnalysisUtils; +import com.volvo.ai.analytic.center.utils.ObsUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class ClaimVerificationServiceImpl implements ClaimVerificationService { + + @Autowired + private AiAnalysisRequestLogsMapper aiAnalysisRequestLogsMapper; + + @Autowired + private AiAnalyticBusinessConfigMapper aiAnalyticBusinessConfigMapper; + + @Autowired + private DiFyFeign diFyFeign; + + @Autowired + private DiFyService diFyService; + + @Value("${dify.claimVerification.fileToken}") + private String fileToken; + + @Value("${dify.claimVerification.verificationToken}") + private String verificationToken; + + @Value("${rocketmq.producer.claimVerification}") + private String topic; + + @Value("${claimVerification.methodList}") + private List methodList; + + @Autowired + private RocketMQTemplate rocketMQTemplate; + + @Autowired + private DataMaskingRuleService dataMaskingRuleService; + + @Autowired + private AiAnalyticWarrantyAuditMapper aiAnalyticWarrantyAuditMapper; + + @Autowired + private AiAnalysisErrorsMapper aiAnalysisErrorsMapper; + + @Override + public void consumerMessageByMQ(String message) { + // 生成ai分析请求id + String aiAnalysisRequestId = AiAnalysisUtils.getAiAnalysisRequestId(BusinessTypeEnum.CLAIM_VERIFICATION.getCode()); + log.info("售后索赔检核MQ message: {}", message); + ClaimVerificationFileDTO claimVerificationFileAnalysisDTO = JSON.parseObject(message, ClaimVerificationFileDTO.class); + if (claimVerificationFileAnalysisDTO == null) { + log.error("售后索赔检核文件入参为空: {}", claimVerificationFileAnalysisDTO.toString()); + saveException("售后索赔检核文件分析入参为空", aiAnalysisRequestId, null); + } + JSONObject diFyObject = new JSONObject(); + try { + // 异步保存请求日志 + syncSaveRequestLogs(message, aiAnalysisRequestId); + if (claimVerificationFileAnalysisDTO.getBusinessType().equals(BusinessTypeEnum.CLAIM_VERIFICATION_FILE_ANALYSIS.getCode())) { + //文件分析 + List fileObsPath = claimVerificationFileAnalysisDTO.getFileObsPath(); + List> fileIds = new ArrayList<>(); + log.info("文件分析文件ID:{}", fileObsPath); + //上传所有文件到dify + uploadFileToObs(fileObsPath, fileIds); + //根据业务线标识和文件配置分类查询配置 + List aiAnalyticBusinessConfigs = aiAnalyticBusinessConfigMapper.selectList( + Wrappers.lambdaQuery() + .eq(AiAnalyticBusinessConfig::getBusinessLine, BusinessTypeEnum.CLAIM_VERIFICATION.getCode()) + .eq(AiAnalyticBusinessConfig::getFileConfigCategory, claimVerificationFileAnalysisDTO.getFileType()) + .eq(AiAnalyticBusinessConfig::getIsDeleted, 0) + .eq(AiAnalyticBusinessConfig::getConfigVersion, 1) + ); + + //组装文件分析workflow入参 + JSONArray files = new JSONArray(); + for (HashMap fileToDifyDTO : fileIds) { + JSONObject object = new JSONObject(); + object.put(ClaimVerificationConstant.UPLOAD_FILE_ID, fileToDifyDTO.get(ClaimVerificationConstant.ID)); + object.put(ClaimVerificationConstant.TYPE, fileToDifyDTO.get(ClaimVerificationConstant.TYPE)); + object.put(ClaimVerificationConstant.TRANSFER_METHOD, ClaimVerificationConstant.LOCAL_FILE); + files.add(object); + } + //构建入参 + JSONObject fileToDifyDTO = buildFileToDifyParameter(files, claimVerificationFileAnalysisDTO, aiAnalyticBusinessConfigs); + //根据aiAnalysisRequestId更新请求日志表的difyRequest字段 + syncUpdateDiFyRequest(fileToDifyDTO.toString(), aiAnalysisRequestId); + DiFyReq diFyReq = new DiFyReq(); + diFyReq.setUser(BusinessTypeEnum.CLAIM_VERIFICATION.getCode()); + diFyReq.setFlowId(fileToken); + diFyReq.setInputs(fileToDifyDTO); + //调用dify 工作流 + diFyObject = (JSONObject) diFyService.getDiFyObject(diFyReq); + //处理结果并推送MQ + if (diFyObject == null) { + log.error(" 售后索赔检核文件分析dify返回结果为空"); + saveException("售后索赔检核文件分析dify返回结果为空", aiAnalysisRequestId, null); + } else { + //解析dify返回结果 + JSONObject data = analyzeParameters(diFyObject, claimVerificationFileAnalysisDTO, aiAnalysisRequestId); + //返回结果推送到Newbie的MQ + rocketMQTemplate.syncSend(topic, data); + log.info("索赔检核文件分析发送回调MQ完成: {}", data); + } + //异步更新请求日志表的difyResponse字段 + syncUpdateDiFyResponse(diFyObject, aiAnalysisRequestId); + } else if (claimVerificationFileAnalysisDTO.getBusinessType().equals(BusinessTypeEnum.CLAIM_VERIFICATION_AUDIT.getCode())) { + //审计报告 + //加载审计规则配置 + List aiAnalyticBusinessConfigs = aiAnalyticBusinessConfigMapper.selectList( + Wrappers.lambdaQuery() + .eq(AiAnalyticBusinessConfig::getBusinessLine, BusinessTypeEnum.CLAIM_VERIFICATION.getCode()) + .eq(AiAnalyticBusinessConfig::getConfigType, BusinessTypeEnum.AUDITRULES.getCode()) + .eq(AiAnalyticBusinessConfig::getIsDeleted, 0) + .in(AiAnalyticBusinessConfig::getVerificationMethod, methodList) + ); + String configDataString = aiAnalyticBusinessConfigs.stream() + .map(AiAnalyticBusinessConfig::getConfigData) + .collect(Collectors.joining(" ")); + //组装审计报告workflow入参 + JSONObject parsedAudit = buildAuditToDify(configDataString, claimVerificationFileAnalysisDTO); + //根据aiAnalysisRequestId更新请求日志表的difyRequest字段 + syncUpdateDiFyRequest(parsedAudit.toString(), aiAnalysisRequestId); + DiFyReq diFyReq = new DiFyReq(); + diFyReq.setUser(BusinessTypeEnum.CLAIM_VERIFICATION.getCode()); + diFyReq.setFlowId(verificationToken); + diFyReq.setInputs(parsedAudit); + //调用dify 工作流 + diFyObject = (JSONObject) diFyService.getDiFyObject(diFyReq); + //处理结果并推送MQ + if (diFyObject == null) { + log.error("售后索赔检核审计报告dify返回结果为空"); + saveException("售后索赔检核审计报告dify返回结果为空", aiAnalysisRequestId, null); + } else { + JSONObject data = getJsonObjectToNewBie(diFyObject, claimVerificationFileAnalysisDTO, aiAnalysisRequestId); + //返回结果推送到Newbie的MQ + rocketMQTemplate.syncSend(topic, data); + log.info("索赔检核审计报告发送回调MQ完成: {}", data); + //异步更新请求日志表的difyResponse字段 + syncUpdateDiFyResponse(diFyObject, aiAnalysisRequestId); + //审核次数记录 + saveAuditCount(claimVerificationFileAnalysisDTO); + } + } else { + saveException("售后索赔检核业务类型错误", aiAnalysisRequestId, null); + } + } catch (Exception e) { + log.error("售后索赔检核异常:{}", e.getMessage()); + //推送空的回调MQ + sendErrorCallBack(claimVerificationFileAnalysisDTO, aiAnalysisRequestId); + //保存错误日志 + saveException(e.getMessage(), aiAnalysisRequestId, diFyObject); + } + } + + private void sendErrorCallBack(ClaimVerificationFileDTO claimVerificationFileAnalysisDTO, String aiAnalysisRequestId) { + JSONObject data = new JSONObject(); + data.put("newBieAfterSalesId", claimVerificationFileAnalysisDTO.getNewBieAfterSalesId()); + data.put("businessType", claimVerificationFileAnalysisDTO.getBusinessType()); + data.put("aiAnalysisRequestId", aiAnalysisRequestId); + data.put("fileType", claimVerificationFileAnalysisDTO.getFileType()); + log.info("索赔检核发送异常空MQMQ: {}", data.toString()); + rocketMQTemplate.syncSend(topic, data); + } + + @Async + protected void syncUpdateDiFyRequest(String difyQuery, String aiAnalysisRequestId) { + aiAnalysisRequestLogsMapper.update(new AiAnalysisRequestLogs(), + new UpdateWrapper().set("dify_request", difyQuery) + .eq("ai_analysis_request_id", aiAnalysisRequestId)); + } + + /** + * 保存异常日志 + * @param errorMessage + * @param aiAnalysisRequestId + * @param diFyObject + */ + private void saveException(String errorMessage, String aiAnalysisRequestId, JSONObject diFyObject) { + aiAnalysisErrorsMapper.insert(AiAnalysisErrors.builder() + .aiAnalysisRequestId(aiAnalysisRequestId) + .difyResponse(diFyObject == null ? null : diFyObject.toJSONString()) + .aiAnalysisErrorMessage(errorMessage) + .aiAnalysisRequestType(BusinessTypeEnum.CLAIM_VERIFICATION.getCode()) + .build()); + } + + private JSONObject buildAuditToDify(String configDataString, ClaimVerificationFileDTO claimVerificationFileAnalysisDTO) { + JSONObject audit = new JSONObject(); + audit.put("analysisRules", configDataString); + audit.put("diagnosticReport", claimVerificationFileAnalysisDTO.getDiagnosticReport() == null ? " " :claimVerificationFileAnalysisDTO.getDiagnosticReport().toString()); + audit.put("preCheckReport", claimVerificationFileAnalysisDTO.getPreCheckReport() == null ? " " :claimVerificationFileAnalysisDTO.getPreCheckReport().toString()); + audit.put("dtcReport", claimVerificationFileAnalysisDTO.getDtcReport() == null ? " " :claimVerificationFileAnalysisDTO.getDtcReport().toString()); + + //脱敏处理 + List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(Constant.CHANNEL_DCC); + RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); + runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); + runMaskingRuleInput.setOldStr(audit.toString()); + String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput); + JSONObject parsedAudit = JSON.parseObject(corpusChat); + return parsedAudit; + } + + @NotNull + private static JSONObject getJsonObjectToNewBie(JSONObject diFyObject, ClaimVerificationFileDTO claimVerificationFileAnalysisDTO, String aiAnalysisRequestId) { + if (diFyObject.containsKey("answer") && !diFyObject.getJSONObject("answer").isEmpty()) { + diFyObject = diFyObject.getJSONObject("answer"); + } + String warrantyAuditReport = diFyObject.getString("warrantyAuditReport"); + warrantyAuditReport = StringEscapeUtils.unescapeJava(warrantyAuditReport); + JSONObject audiResToAfter = JSON.parseObject(warrantyAuditReport); + JSONObject data = new JSONObject(); + data.put("newBieAfterSalesId", claimVerificationFileAnalysisDTO.getNewBieAfterSalesId()); + data.put("businessType", claimVerificationFileAnalysisDTO.getBusinessType()); + data.put("warrantyAuditReport", audiResToAfter); + data.put("aiAnalysisRequestId", aiAnalysisRequestId); + return data; + } + + @NotNull + private static JSONObject analyzeParameters(JSONObject diFyObject, ClaimVerificationFileDTO claimVerificationFileAnalysisDTO, String aiAnalysisRequestId) { + String toAfter = ""; + String textDoc = diFyObject.getString("textDoc"); + String textImage = diFyObject.getString("textImage"); + //判断字符串那个是不为空的然后进行处理 + if (StringUtils.isNotBlank(textDoc)) { + toAfter = StringEscapeUtils.unescapeJava(textDoc); + } else if (StringUtils.isNotBlank(textImage)) { + toAfter = StringEscapeUtils.unescapeJava(textImage); + } else { + throw new RuntimeException(" 售后索赔检核文件分析dify返回结果为空"); + } + JSONObject difyToAfter = JSONObject.parseObject(toAfter); + if (difyToAfter.containsKey("answer") && !difyToAfter.getJSONObject("answer").isEmpty()) { + difyToAfter = diFyObject.getJSONObject("answer"); + } + + JSONObject data = new JSONObject(); + data.put("newBieAfterSalesId", claimVerificationFileAnalysisDTO.getNewBieAfterSalesId()); + data.put("businessType", claimVerificationFileAnalysisDTO.getBusinessType()); + data.put("fileType", claimVerificationFileAnalysisDTO.getFileType()); + data.put("fileData", difyToAfter); + data.put("aiAnalysisRequestId", aiAnalysisRequestId); + return data; + } + + @NotNull + private static JSONObject buildFileToDifyParameter(JSONArray files, ClaimVerificationFileDTO claimVerificationFileAnalysisDTO, List aiAnalyticBusinessConfigs) { + JSONObject fileToDifyDTO = new JSONObject(); + fileToDifyDTO.put("files", files); + //根据类型获取配置内容 + fileToDifyDTO.put("FileBusinessType", claimVerificationFileAnalysisDTO.getFileType()); + fileToDifyDTO.put("FileDescription", aiAnalyticBusinessConfigs + .stream() + .filter(config -> config.getConfigType().equals("FileDescription")) + .map(AiAnalyticBusinessConfig::getConfigData) + .findFirst() + .orElse(null)); + fileToDifyDTO.put("AnalysisRequirements", aiAnalyticBusinessConfigs + .stream() + .filter(config -> config.getConfigType().equals("AnalysisRequirements")) + .map(AiAnalyticBusinessConfig::getConfigData) + .findFirst() + .orElse(null)); + fileToDifyDTO.put("ReportRequirements", aiAnalyticBusinessConfigs + .stream() + .filter(config -> config.getConfigType().equals("ReportRequirements")) + .map(AiAnalyticBusinessConfig::getConfigData) + .findFirst() + .orElse(null)); + fileToDifyDTO.put("ReportTemplate", aiAnalyticBusinessConfigs + .stream() + .filter(config -> config.getConfigType().equals("ReportTemplate")) + .map(AiAnalyticBusinessConfig::getConfigData) + .findFirst() + .orElse(null)); + return fileToDifyDTO; + } + + //异步保存审核次数 + @Async + protected void saveAuditCount(ClaimVerificationFileDTO claimVerificationFileAnalysisDTO) { + AiAnalyticWarrantyAudit warrantyAudit = aiAnalyticWarrantyAuditMapper.selectOne( + Wrappers.lambdaQuery() + .eq(AiAnalyticWarrantyAudit::getNewBieAfterSalesId, claimVerificationFileAnalysisDTO.getNewBieAfterSalesId()) + .eq(AiAnalyticWarrantyAudit::getIsDeleted, 0) + .last("for update") // 添加悲观锁 + ); + if (warrantyAudit != null) { + //存在则auditCount+1 + warrantyAudit.setAuditCount(warrantyAudit.getAuditCount() + 1); + aiAnalyticWarrantyAuditMapper.updateById(warrantyAudit); + } else { + //不存在则新增一条记录 + AiAnalyticWarrantyAudit warrantyAuditNew = new AiAnalyticWarrantyAudit(); + warrantyAuditNew.setNewBieAfterSalesId(claimVerificationFileAnalysisDTO.getNewBieAfterSalesId()); + warrantyAuditNew.setAuditCount(1); + aiAnalyticWarrantyAuditMapper.insert(warrantyAuditNew); + } + } + + private void uploadFileToObs(List fileObsPath, List> fileIds) { + if (fileObsPath != null && fileObsPath.size() > 0) { + for (String filePath : fileObsPath) { + HashMap fileToDifyDTO = new HashMap<>(); + ObsObject obsObject = ObsUtil.downloadFile(filePath); + InputStream inputStream = obsObject.getObjectContent(); + MultipartFile file = ObsUtil.getMultipartFile(inputStream, ObsUtil.getFilenameByUrl(filePath)); + log.info("索赔检核文件上传dify请求参数:{},token:{}", file, fileToken); + JSONObject fileUploadRes = diFyFeign.fileUpload("Bearer " + fileToken, file); + log.info("索赔检核文件上传dify响应结果:{}", fileUploadRes); + String uploadFileId = fileUploadRes.getString(ClaimVerificationConstant.ID); + String extension = fileUploadRes.getString(ClaimVerificationConstant.EXTENSION); + fileToDifyDTO.put(ClaimVerificationConstant.ID, uploadFileId); + fileToDifyDTO.put(ClaimVerificationConstant.TYPE, ClaimVerificationFileTypeEnums.getMessageByCode(extension)); + fileIds.add(fileToDifyDTO); + } + } + } + + @Async + protected void syncUpdateDiFyResponse(JSONObject difResult, String aiAnalysisRequestId) { + aiAnalysisRequestLogsMapper.update(new AiAnalysisRequestLogs(), + new UpdateWrapper().set("dify_response", difResult.toJSONString()) + .eq("ai_analysis_request_id", aiAnalysisRequestId)); + } + + @Async + protected void syncSaveRequestLogs(String message, String aiAnalysisRequestId) { + aiAnalysisRequestLogsMapper.insert(AiAnalysisRequestLogs.builder() + .aiAnalysisRequestId(aiAnalysisRequestId) + .businessRequest(message) + .aiAnalysisRequestType(BusinessTypeEnum.CLAIM_VERIFICATION.getCode()) + .build()); + } +} diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DataMaskingRuleServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DataMaskingRuleServiceImpl.java index 4673128..71e65ac 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DataMaskingRuleServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DataMaskingRuleServiceImpl.java @@ -23,7 +23,8 @@ public class DataMaskingRuleServiceImpl extends ServiceImpl dataMaskingRuleList = this.lambdaQuery() -// .eq(DataMaskingRule::getApplicationChannel, applicationChannel) + .like(DataMaskingRule::getApplicationChannel, applicationChannel) + .eq(DataMaskingRule::getApplicationChannel, applicationChannel) .eq(DataMaskingRule::getRuleStatus, YesOrNoConstants.YES) .eq(DataMaskingRule::getIsDeleted, YesOrNoConstants.NO) .list(); diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/IntelligentCustomerServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/IntelligentCustomerServiceImpl.java new file mode 100644 index 0000000..a2c4d7c --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/IntelligentCustomerServiceImpl.java @@ -0,0 +1,186 @@ +package com.volvo.ai.analytic.center.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.volvo.ai.analytic.center.constant.Constant; +import com.volvo.ai.analytic.center.dto.req.DiFyReq; +import com.volvo.ai.analytic.center.dto.req.FourInOneRequestDTO; +import com.volvo.ai.analytic.center.dto.req.RunMaskingRuleInput; +import com.volvo.ai.analytic.center.entity.AiAnalysisErrors; +import com.volvo.ai.analytic.center.entity.AiAnalysisRequestLogs; +import com.volvo.ai.analytic.center.entity.DataMaskingRule; +import com.volvo.ai.analytic.center.enums.BusinessTypeEnum; +import com.volvo.ai.analytic.center.feign.RemoteCarModelClient; +import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper; +import com.volvo.ai.analytic.center.mapper.TcIntelligentCustomerMapper; +import com.volvo.ai.analytic.center.service.*; +import com.volvo.ai.analytic.center.utils.AiAnalysisUtils; +import com.volvo.ai.analytic.center.utils.ConstantStr; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.rocketmq.client.producer.SendCallback; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @description 智能助手 + * @author rz + * @date 2025-03-04 + */ +@RefreshScope +@Slf4j +@Service +public class IntelligentCustomerServiceImpl implements IntelligentCustomerService { + + + @Autowired + private DiFyService diFyService; + + @Resource + private RocketMQTemplate rocketMqTemplate; + + @Value("${rocketmq.producer.intelligentCustomer.topic}") + private String topic; + @Value("${dify.intelligentCustomer.fourInOneToken}") + private String fourInOneToken; + @Autowired + private RemoteCarModelClient remoteCarModelClient; + + @Autowired + private DataMaskingRuleService dataMaskingRuleService; + + @Autowired + private AiAnalysisRequestLogsService aiAnalysisRequestLogsService; + + @Autowired + private AiAnalysisErrorsService aiAnalysisErrorsService; + + @Autowired + private AiAnalysisErrorsMapper aiAnalysisErrorsMapper; + + @Autowired + private TcIntelligentCustomerMapper tcIntelligentCustomerMapper; + + private Map> tcIntelligentCustomer = Collections.EMPTY_MAP; + + @Override + public void fourInOneMqService(FourInOneRequestDTO fourInOneRequestDTO) { + + if(null != fourInOneRequestDTO){ + String aiAnalysisRequestId = StringUtils.isEmpty(fourInOneRequestDTO.getAiAnalysisRequestId())? AiAnalysisUtils.getAiAnalysisRequestId(BusinessTypeEnum.INTELLIGENT_CUSTOMER.getCode()):fourInOneRequestDTO.getAiAnalysisRequestId(); + if (StringUtils.isEmpty(fourInOneRequestDTO.getWorkOrderSource()) || StringUtils.isEmpty(fourInOneRequestDTO.getWorkOrderContent())){ + log.info("IntelligentCustomerMqConsumer WorkOrderSource or WorkOrderContent 为空不处理 "); + return ; + } + List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(Constant.INTELLIGENT_CUSTOMER_4IN1); + + RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); + runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); + + + Map inputMap = new HashMap(); + DiFyReq diFyImageReq = new DiFyReq(); + diFyImageReq.setUser(ConstantStr.INTELLIGENT_CUSTOMER_4IN1); + diFyImageReq.setFlowId(fourInOneToken); + runMaskingRuleInput.setOldStr(fourInOneRequestDTO.getWorkOrderContent()); + String corkOrderContent = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput); + inputMap.put("workOrderContent", corkOrderContent); + + runMaskingRuleInput.setOldStr(fourInOneRequestDTO.getRelationCorpusContent()); + String relationCorpusContent = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput); + inputMap.put("relationCorpusContent", relationCorpusContent); + + inputMap.put("laiyuan",fourInOneRequestDTO.getWorkOrderSource()); + inputMap.put("workOrderId",fourInOneRequestDTO.getWorkOrderId()); + inputMap.put("aiAnalysisRequestId", aiAnalysisRequestId); + diFyImageReq.setInputs(inputMap); + + + // 获取配置 + JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.INTELLIGENT_CUSTOMER.getCode(), JSONObject.toJSONString(fourInOneRequestDTO), aiAnalysisRequestId); + log.info("runDify execDifyFlow {}",execDifyFlow); + if(null != execDifyFlow && execDifyFlow.get("status").equals("succeeded")){ + try { + JSONObject outputsJson = execDifyFlow.getJSONObject("outputs"); + String message = JSONObject.toJSONString(outputsJson); + log.info("send mq {}",message); + sendMq(message); + if(StringUtils.isNotEmpty(fourInOneRequestDTO.getAiAnalysisRequestId())){ + AiAnalysisErrors aiAnalysisErrors = new AiAnalysisErrors(); + aiAnalysisErrors.setAiAnalysisRequestId(aiAnalysisRequestId); + aiAnalysisErrors.setAiAnalysisErrorHandlingStatus("1"); + aiAnalysisErrorsService.updateAiAnalysisErrors(aiAnalysisErrors); + } + aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder().aiAnalysisRequestId(execDifyFlow.getString("aiAnalysisRequestId")).businessResponse(message).build()); + + } catch (Exception e) { + log.error("四合一语料解析返回数据JSON格式化异常 {}", e); + } + } + } + } + + + + @Override + public void sendMq(Object message) { + rocketMqTemplate.asyncSend(topic, MessageBuilder.withPayload(message).build(), + new SendCallback() { + @Override + public void onSuccess(SendResult sendResult) { + log.info("发送MQ成功 消息体:{}", message); + } + @Override + public void onException(Throwable e) { + log.error("送MQ异常 消息体:{}, 异常:", message, e); + } + }, 10000); + } + + // 咨询类【201】/投诉类【202】/投诉类型【203】 过滤 + /** private String fourInOneMqServiceFilter(String customerType,String customerValue){ + if(tcIntelligentCustomer.isEmpty()){ + queryTcIntelligentCustomer(); + } + List typeValues = tcIntelligentCustomer.get(customerType); + if(!typeValues.contains(customerValue)){ + return ""; + } + return customerValue; + } + + + public Map> queryTcIntelligentCustomer() { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TcIntelligentCustomer::getIsDeleted, "0"); + List tcIntelligentCustomerList =tcIntelligentCustomerMapper.selectList(queryWrapper); + tcIntelligentCustomer = tcIntelligentCustomerList.stream() + .collect(Collectors.groupingBy( + TcIntelligentCustomer::getIntelligentCustomerType, // 按照 IntelligentCustomerType 分组 + Collectors.mapping( + customer -> { + if (customer.getIntelligentCustomerType().equals(IntelligentCustomerTypeEnum.CONSULT_TYPE.getCode())) { + return customer.getTypeOne(); // 如果是咨询类型,返回 TypeOne + } else { + return customer.getTypeOne().concat("#").concat(customer.getTypeTwo()).concat("#").concat(customer.getTypeThree()); // 其他类型,拼接 TypeOne、TypeTwo、TypeThree + } + }, + Collectors.toList() + ) + )); + return tcIntelligentCustomer; + } +**/ + +} \ No newline at end of file diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java index c375b6d..16f85da 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java @@ -5,7 +5,6 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.volvo.ai.analytic.center.constant.Constant; import com.volvo.ai.analytic.center.dto.PageDto; import com.volvo.ai.analytic.center.dto.corpus.CorpusReportDTO; import com.volvo.ai.analytic.center.dto.corpus.OdsVdqwMessageOTD; @@ -33,7 +32,10 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDate; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -119,7 +121,7 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(Constant.CHANNEL_DCC); + List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.SMART_ASSISTANT_QIWEI.getCode()); RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); StringBuffer chatList = new StringBuffer(); @@ -203,7 +205,7 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(Constant.CHANNEL_DCC); + List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.SMART_ASSISTANT.getCode()); RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/utils/ConstantStr.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/utils/ConstantStr.java index a200176..3c799d8 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/utils/ConstantStr.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/utils/ConstantStr.java @@ -13,4 +13,8 @@ public class ConstantStr { public static final String corpus_user = "corpush_user"; public static final String CARMODELLIST_CACHEKEY = "ai_carmodellist"; + + public static final String INTELLIGENT_CUSTOMER_4IN1 = "INTELLIGENT_CUSTOMER_4IN1"; + + } diff --git a/ai-analytic-center-biz/src/main/resources/mapper/AiAnalysisErrorsMapper.xml b/ai-analytic-center-biz/src/main/resources/mapper/AiAnalysisErrorsMapper.xml index eaca7d6..7f3c95b 100644 --- a/ai-analytic-center-biz/src/main/resources/mapper/AiAnalysisErrorsMapper.xml +++ b/ai-analytic-center-biz/src/main/resources/mapper/AiAnalysisErrorsMapper.xml @@ -13,9 +13,13 @@ tt_ai_analysis_errors WHERE is_deleted = 0 - AND ai_analysis_request_type=#{businessType} + AND ai_analysis_request_type in ( + + #{businessType} + + ) AND ai_analysis_error_handling_status = '0' - AND retry_count <= max_retry_count + AND retry_count < max_retry_count )tag @@ -31,9 +35,13 @@ tt_ai_analysis_errors WHERE is_deleted = 0 - AND ai_analysis_request_type=#{businessType} + AND ai_analysis_request_type in ( + + #{businessType} + + ) AND ai_analysis_error_handling_status = '0' - AND retry_count <= max_retry_count + AND retry_count < max_retry_count LIMIT #{offset}, #{pageSize}