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 e256aa2..db15973 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 @@ -4,6 +4,8 @@ public class Constant { public static final String CHANNEL_DCC = "Channel_Dcc"; + public static final String CHANNEL_4IN1 = "Channel_4in1"; + 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 index aa95c33..451a1f9 100644 --- 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 @@ -33,4 +33,7 @@ public class ClaimVerificationFileDTO { //诊断报告 private JSONObject diagnosticReport; + + //诊断报告 + private JSONObject warrantyReport; } 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 55fc0cc..c735c33 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 @@ -12,7 +12,7 @@ public enum BusinessTypeEnum { SMART_ASSISTANT("SMART_ASSISTANT", "智能助手-DCC"), SMART_ASSISTANT_QIWEI("SMART_ASSISTANT_QIWEI", "智能助手-企微"), INTELLIGENT_CUSTOMER("INTELLIGENT_CUSTOMER_4IN1", "智能客服-4合一"), - + SMART_ASSISTANT_4IN1("SMART_ASSISTANT_4IN1", "智能客服-4In1"), //索赔检核 CLAIM_VERIFICATION("CLAIM_VERIFICATION", "索赔检核流程"), CLAIM_VERIFICATION_FILE_ANALYSIS("99001", "索赔检核文件分析"), diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/AiAnalyticCenterServiceApplication.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/AiAnalyticCenterServiceApplication.java index 7eddcf7..ccca816 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/AiAnalyticCenterServiceApplication.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/AiAnalyticCenterServiceApplication.java @@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Bean; import org.springframework.retry.annotation.EnableRetry; +import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.client.RestTemplate; @@ -18,6 +19,7 @@ import com.volvo.common.feign.annotation.EnableVolvoFeignClients; @MapperScan({"com.volvo.ai.analytic.center.mapper"}) @EnableDiscoveryClient @EnableRetry +@EnableAsync public class AiAnalyticCenterServiceApplication { public static void main(String[] args) { 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 4e90b9d..02b36bf 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 @@ -3,6 +3,7 @@ package com.volvo.ai.analytic.center.job; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.volvo.ai.analytic.center.dto.PageDto; import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO; import com.volvo.ai.analytic.center.dto.corpus.CorpusReportDTO; @@ -11,12 +12,10 @@ import com.volvo.ai.analytic.center.entity.AiAnalysisErrors; import com.volvo.ai.analytic.center.entity.AiAnalysisRequestLogs; import com.volvo.ai.analytic.center.enums.BusinessTypeEnum; import com.volvo.ai.analytic.center.enums.CategoryEnum; +import com.volvo.ai.analytic.center.feign.DiFyFeign; import com.volvo.ai.analytic.center.mapper.AiAnalysisRequestLogsMapper; import com.volvo.ai.analytic.center.mapper.TmTelephoneCorpusMapper; -import com.volvo.ai.analytic.center.service.AiAnalysisErrorsService; -import com.volvo.ai.analytic.center.service.AiAnalysisRequestLogsService; -import com.volvo.ai.analytic.center.service.DiFyService; -import com.volvo.ai.analytic.center.service.TmTelephoneCorpusService; +import com.volvo.ai.analytic.center.service.*; import com.volvo.ai.analytic.center.utils.FlowResultSplitUtil; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.extern.slf4j.Slf4j; @@ -34,6 +33,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.Arrays; +import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -69,9 +70,16 @@ public class CorpusFailJob { private String dccMqTipic; @Value("${rocketmq.consumer.intelligentCustomer.topic}") private String intelligentCustomerTipic; + + @Value("${rocketmq.producer.intelligentCustomer.topic}") + private String intelligentCustomerProducerTopic; + @Autowired private TmTelephoneCorpusMapper tmTelephoneCorpusMapper; + @Autowired + private DiFyFeign diFyFeign; + /** * 企微语料处理 @@ -235,4 +243,95 @@ public class CorpusFailJob { } } } + + /** + * 智能客服-电话场景-四合一 一分钟一次 + */ + @XxlJob("intelligentCustomer4in1MobileFailTask") + @PostMapping("intelligentCustomer4in1MobileFailTask") + public void intelligentCustomer4in1MobileFailTask() { + + log.info(" intelligentCustomer4in1MobileFailTask 解析失败重试处理"); + Integer total = aiAnalysisErrorsService.queryCountAnalysisErrorList(Collections.singletonList(BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode())); + log.info("intelligentCustomer4in1MobileFailTask 语料解析失败重试处理数据量:{}", total); + int totalPages = PageDto.getTotalPages(total, pageSize); + log.info("intelligentCustomer4in1MobileFailTask 语料解析失败重试处理数据量:{},总页数:{}", total, totalPages); + for (int i = 1; i <= totalPages; i++) { + int offset = (i - 1) * pageSize; + + List aiAnalysisErrorsListlist = aiAnalysisErrorsService.queryAnalysisErrorList( + Collections.singletonList(BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode()), offset, pageSize); + if (CollectionUtils.isNotEmpty(aiAnalysisErrorsListlist)) { + log.info("intelligentCustomer4in1MobileFailTask语料解析失败重试处理 size:{}", aiAnalysisErrorsListlist.size()); + aiAnalysisErrorsListlist.forEach(aiAnalysisErrors -> { + try { + log.info("intelligentCustomer4in1MobileFailTask aiAnalysisRequestLogs-id:{}", aiAnalysisErrors.getAiAnalysisRequestId()); + String aiAnalysisRequestId = aiAnalysisErrors.getAiAnalysisRequestId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AiAnalysisRequestLogs::getAiAnalysisRequestId, aiAnalysisRequestId); + AiAnalysisRequestLogs aiAnalysisRequestLogs = aiAnalysisRequestLogsMapper.selectOne(queryWrapper); + + log.info("intelligentCustomer4in1MobileFailTask aiAnalysisRequestLogs:{}", aiAnalysisRequestLogs); + + if (null != aiAnalysisRequestLogs) { + String difyRequest = aiAnalysisRequestLogs.getDifyRequest(); + log.info("intelligentCustomer4in1MobileFailTask aiAnalysisRequestLogs difyRequest:{}", aiAnalysisRequestLogs); + DiFyReq diFyReq = JSON.parseObject(difyRequest, DiFyReq.class); + Map map = new HashMap<>(); + map.put("inputs", diFyReq.getInputs()); + map.put("response_mode", "blocking"); + map.put("user", diFyReq.getUser()); + log.info("intelligentCustomer4in1MobileFailTask execDifyFlow dify request data:{}", map); + JSONObject difyResult = diFyFeign.runWorkflows("Bearer " + diFyReq.getFlowId(), map); + JSONObject data = difyResult.getJSONObject("data"); + log.info("intelligentCustomer4in1MobileFailTask execDifyFlow dify response aiID:{} , data:{}", aiAnalysisRequestId, data); + data.put("aiAnalysisRequestId", aiAnalysisRequestId); + + if (data.get("status").equals("succeeded")) { + JSONObject outputsJson = data.getJSONObject("outputs"); + String message = JSONObject.toJSONString(outputsJson); + log.info("intelligentCustomer4in1MobileFailTask send 4IN1mq {}", message); + rocketMqTemplate.asyncSend(intelligentCustomerProducerTopic, MessageBuilder.withPayload(message).build(), new SendCallback() { + @Override + public void onSuccess(SendResult sendResult) { + log.info(" intelligentCustomer4in1MobileFailTask 失败补偿 发送MQ成功 消息体:{}", message); + } + + @Override + public void onException(Throwable e) { + log.error("intelligentCustomer4in1MobileFailTask 失败补偿 送MQ异常 消息体:{}, 异常:", message, e); + } + }, 10000); + AiAnalysisErrors aiAnalysisErrors1 = new AiAnalysisErrors(); + aiAnalysisErrors1.setAiAnalysisRequestId(aiAnalysisRequestId); + aiAnalysisErrors1.setAiAnalysisErrorHandlingStatus("1"); + aiAnalysisErrorsService.updateAiAnalysisErrors(aiAnalysisErrors1); + aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder() + .aiAnalysisRequestId(data.getString("aiAnalysisRequestId")) + .businessResponse(message) + .difyResponse(data.toJSONString()) + .build()); + } else { + log.info("intelligentCustomer4in1MobileFailTask execDifyFlow failed, aiAnalysisRequestId:{} , data:{}", aiAnalysisRequestId, + data); + String errorMsg = data.getString("error"); + aiAnalysisErrors.setRetryCount(aiAnalysisErrors.getRetryCount() + 1); + aiAnalysisErrors.setUpdateBy("xxlJob"); + aiAnalysisErrors.setUpdateTime(new Date()); + aiAnalysisErrors.setAiAnalysisErrorMessage(errorMsg.length() > 1000 ? errorMsg.substring(0, 1000) : errorMsg); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(AiAnalysisErrors::getAiAnalysisRequestId, aiAnalysisRequestId); + aiAnalysisErrorsService.update(aiAnalysisErrors,updateWrapper); + } + } + } catch (Exception e) { + log.info("intelligentCustomer4in1MobileFailTask 语料解析失败补偿异常:{}", 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/mq/CorpusDccMqConsumer.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusDccMqConsumer.java index 4c0d351..d583973 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 @@ -1,10 +1,11 @@ package com.volvo.ai.analytic.center.mq; +import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.volvo.ai.analytic.center.constant.Constant; import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO; -import com.volvo.ai.analytic.center.service.AiAnalysisRequestLogsService; import com.volvo.ai.analytic.center.service.TmTelephoneCorpusService; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.message.MessageExt; @@ -15,8 +16,10 @@ import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RestController; +import java.util.Objects; + /** - * @ClassName CorpusProcessKafkaConsumer + * @ClassName 湖仓发送过来的kafka消息自己发MQ自己消费 DCC通话记录 (目前接入的需求:4IN1的智能工单-电话场景,LTO跟进记录AI总结) * @Description * @Author renzhen * @Date 2025-03-04 10:18 @@ -37,9 +40,6 @@ public class CorpusDccMqConsumer implements RocketMQListener { @Autowired private TmTelephoneCorpusService tmTelephoneCorpusService; - @Autowired - private AiAnalysisRequestLogsService aiAnalysisRequestLogsService; - private final ObjectMapper objectMapper = new ObjectMapper(); @Override @@ -50,7 +50,15 @@ public class CorpusDccMqConsumer implements RocketMQListener { String message = new String(messageExt.getBody()); log.info("dcc_mq message: " + message); AicorpusTelephoneDTO aicorpusTelephone = objectMapper.readValue(message, AicorpusTelephoneDTO.class); - tmTelephoneCorpusService.runTelephoneCorpusDify(aicorpusTelephone); + //DCC场景 + if(Objects.equals(aicorpusTelephone.getCategoryCode(), Constant.CHANNEL_DCC)){ + tmTelephoneCorpusService.runTelephoneCorpusDify(aicorpusTelephone); + } + //channel_4in1场景 + if(Objects.equals(aicorpusTelephone.getCategoryCode(), Constant.CHANNEL_4IN1)){ + log.info("channel_4in1 message: " + JSON.toJSONString(aicorpusTelephone)); + tmTelephoneCorpusService.runTelephoneCorpusDify4in1(aicorpusTelephone); + } log.info("corpusDccMqProducer mq 处理完成: {}", aicorpusTelephone.getSourceId()); log.info("dcc_mq 处理完成,耗时:{}", System.currentTimeMillis() - startTime); } catch (JsonProcessingException e) { diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusProcessKafkaProducer.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusProcessKafkaProducer.java index 43f1877..db43838 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusProcessKafkaProducer.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusProcessKafkaProducer.java @@ -30,7 +30,7 @@ import java.util.concurrent.Executors; /** * @ClassName CorpusProcessKafkaConsumer - * @Description + * @Description 消费湖仓同步的DCC通话记录kafka消息 * @Author renzhen * @Date 2025-03-04 10:18 * @Version 1.0 @@ -99,7 +99,7 @@ public class CorpusProcessKafkaProducer { tmTelephoneCorpus.setCreateTime(LocalDateTime.now()); // 条件:只处理dcc的 10s通话时间以上 log.info("CorpusProcessKafkaProducer getCategoryCode: {},audioFileId:{},sourceId:{}", tmTelephoneCorpus.getCategoryCode(), aicorpusTelephone.getAudioFileId(), aicorpusTelephone.getSourceId()); - if (Constant.CHANNEL_DCC.equals(tmTelephoneCorpus.getCategoryCode())) { + if (Constant.CHANNEL_DCC.equals(tmTelephoneCorpus.getCategoryCode())||Constant.CHANNEL_4IN1.equals(tmTelephoneCorpus.getCategoryCode())) { log.info(" dcc 语料开始处理"); tmTelephoneCorpusService.saveTelephoneCorpus(tmTelephoneCorpus); long startTimeDify = System.currentTimeMillis(); diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java index 256518f..dfdf9eb 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java @@ -17,6 +17,9 @@ public interface TmTelephoneCorpusService extends IService { void runTelephoneCorpusDify(AicorpusTelephoneDTO aicorpusTelephone); + void runTelephoneCorpusDify4in1(AicorpusTelephoneDTO aicorpusTelephone); + + String getCarModelList(); void sendMq(String tag, String message); 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 index a0c64d6..808bd99 100644 --- 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 @@ -231,6 +231,7 @@ public class ClaimVerificationServiceImpl implements ClaimVerificationService { 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()); + audit.put("warrantyReport", claimVerificationFileAnalysisDTO.getWarrantyReport() == null ? " " :claimVerificationFileAnalysisDTO.getWarrantyReport().toString()); //脱敏处理 List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(Constant.CHANNEL_DCC); diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java index 0703edc..be3b78f 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java @@ -73,10 +73,13 @@ public class DiFyServiceImpl implements DiFyService{ public JSONObject executeDifyFlow(DiFyReq diFyReq, String businessType, String businessData, String oldAiAnalysisRequestId) { String aiAnalysisRequestId = StringUtils.isEmpty(oldAiAnalysisRequestId)? AiAnalysisUtils.getAiAnalysisRequestId(businessType):oldAiAnalysisRequestId; try { + Map inputMap = JSON.parseObject(JSONObject.toJSONString(diFyReq.getInputs()),Map.class); + inputMap.put("aiAnalysisRequestId",aiAnalysisRequestId); Map map = new HashMap<>(); - map.put("inputs",diFyReq.getInputs()); + map.put("inputs", inputMap); map.put("response_mode","blocking"); map.put("user",diFyReq.getUser()); + diFyReq.setInputs(inputMap); // 保存请求日志 aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder() @@ -93,6 +96,17 @@ public class DiFyServiceImpl implements DiFyService{ log.debug("execDifyFlow dify response aiID:{} , data:{}",aiAnalysisRequestId,data); data.put("aiAnalysisRequestId",aiAnalysisRequestId); + if (data.get("status").equals("failed")) { + log.info("execDifyFlow failed, aiAnalysisRequestId:{} , data:{}",aiAnalysisRequestId,data); + String errorMsg = data.getString("error"); + aiAnalysisErrorsService.saveAiAnalysisErrors(AiAnalysisErrors.builder() + .aiAnalysisRequestId(aiAnalysisRequestId) + .aiAnalysisRequestType(businessType) + .aiAnalysisErrorHandlingStatus("0") + .aiAnalysisErrorMessage(errorMsg.length()>1000?errorMsg.substring(0,1000):errorMsg) + .build()); + } + aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder() .aiAnalysisRequestId(aiAnalysisRequestId) .difyResponse(data.toJSONString()) 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 index a2c4d7c..14f6969 100644 --- 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 @@ -54,8 +54,6 @@ public class IntelligentCustomerServiceImpl implements IntelligentCustomerServic private String topic; @Value("${dify.intelligentCustomer.fourInOneToken}") private String fourInOneToken; - @Autowired - private RemoteCarModelClient remoteCarModelClient; @Autowired private DataMaskingRuleService dataMaskingRuleService; @@ -66,13 +64,6 @@ public class IntelligentCustomerServiceImpl implements IntelligentCustomerServic @Autowired private AiAnalysisErrorsService aiAnalysisErrorsService; - @Autowired - private AiAnalysisErrorsMapper aiAnalysisErrorsMapper; - - @Autowired - private TcIntelligentCustomerMapper tcIntelligentCustomerMapper; - - private Map> tcIntelligentCustomer = Collections.EMPTY_MAP; @Override public void fourInOneMqService(FourInOneRequestDTO fourInOneRequestDTO) { @@ -148,39 +139,4 @@ public class IntelligentCustomerServiceImpl implements IntelligentCustomerServic }, 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/TmTelephoneCorpusServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java index 117a212..b6f26e2 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java @@ -21,6 +21,7 @@ import com.volvo.ai.analytic.center.feign.RemoteCarModelClient; import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper; import com.volvo.ai.analytic.center.mapper.TmTelephoneCorpusMapper; import com.volvo.ai.analytic.center.service.*; +import com.volvo.ai.analytic.center.utils.AiAnalysisUtils; import com.volvo.ai.analytic.center.utils.ConstantStr; import com.volvo.ai.analytic.center.utils.FlowResultSplitUtil; import lombok.extern.slf4j.Slf4j; @@ -66,6 +67,9 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode()); + + RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); + runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); + + Map inputMap = new HashMap(); + DiFyReq diFyImageReq = new DiFyReq(); + diFyImageReq.setUser(ConstantStr.corpus_user); + diFyImageReq.setFlowId(channel4In1Token); + + + JSONObject jsonObject = JSONObject.parseObject( aicorpusTelephone.getDisplay()); + JSONArray segments = jsonObject.getJSONArray("segments"); + // Long audioDuration = jsonObject.getLong("audio_duration"); // 毫秒 + // if(audioDuration/1000 <=10){ + // log.info("电话语料时长小于10秒,不进行dify处理"); + // return; + // } + if (segments == null || segments.isEmpty()) { + log.info("电话语料内容segments为空,不进行dify处理"); + return; + } + // 遍历 segments + StringBuffer chatList = new StringBuffer(); + segments.stream() + .map(segment -> (JSONObject) segment) + .forEach(segment -> { + JSONObject result = segment.getJSONObject("result"); + String text = result.getString("text"); + JSONObject analysisInfo = result.getJSONObject("analysis_info"); + String role = analysisInfo.getString("role"); + String title=""; + if(role.equals("AGENT")){ + title="顾问"; + }else{ + title="客户"; + } + // 拼接 role 和 text + String chat = title + ": " + text; + runMaskingRuleInput.setOldStr(chat); + String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput); + chatList.append(corpusChat).append("\n"); + + }); + inputMap.put("workOrderContent", chatList.toString()); + inputMap.put("workOrderId",aicorpusTelephone.getSourceId()); + + String oldAiAnalysisRequestId = aicorpusTelephone.getAiAnalysisRequestId(); + String newAiAnalysisRequestId = StringUtils.isEmpty(oldAiAnalysisRequestId)? AiAnalysisUtils.getAiAnalysisRequestId(BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode()): + oldAiAnalysisRequestId; + + inputMap.put("aiAnalysisRequestId",newAiAnalysisRequestId); + diFyImageReq.setInputs(inputMap); + CorpusReportDTO corpusReportDTO = new CorpusReportDTO(); + corpusReportDTO.setRecordId(aicorpusTelephone.getSourceId()); + + log.info("开始处理智能客服4IN1工作流,{}",diFyImageReq); + + // 获取配置 + JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT_4IN1.getCode(), JSONObject.toJSONString(corpusReportDTO),newAiAnalysisRequestId ); + log.info("runDify智能客服4IN1 {}",execDifyFlow); + String aiAnalysisRequestId = execDifyFlow.getString("aiAnalysisRequestId"); + if(null != execDifyFlow && execDifyFlow.get("status").equals("succeeded")){ + JSONObject outputsJson = execDifyFlow.getJSONObject("outputs"); + String message = JSONObject.toJSONString(outputsJson); + log.info("send 4IN1mq {}",message); + intelligentCustomerService.sendMq(message); + if(StringUtils.isNotEmpty(aicorpusTelephone.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()); + + } + + } + } + public String getCarModelList(){ try { long startTime = System.currentTimeMillis(); 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 c0eff96..bb9c3cc 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 @@ -16,7 +16,11 @@ public class ConstantStr { public static final String INTELLIGENT_CUSTOMER_4IN1 = "INTELLIGENT_CUSTOMER_4IN1"; + public static final String statTime = "statTime"; + public static final String endTime = "endTime"; + public static final String customerFlowIds = "customerFlowIds"; + public static final String aiAnalysisRequestId = "aiAnalysisRequestId"; public static final String DIFY_COUNTERRATELIMIT = "DIFY_COUNTERRATELIMIT"; -} +} \ No newline at end of file