索赔检核审计流程代码
This commit is contained in:
@@ -54,6 +54,12 @@ public class AiAnalyticBusinessConfig {
|
|||||||
@TableField(value = "config_version")
|
@TableField(value = "config_version")
|
||||||
private Integer configVersion;
|
private Integer configVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件配置分类
|
||||||
|
*/
|
||||||
|
@TableField(value = "file_config_category")
|
||||||
|
private String fileConfigCategory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除标识(0-未删除,1-已删除)
|
* 删除标识(0-未删除,1-已删除)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -13,8 +13,11 @@ public enum BusinessTypeEnum {
|
|||||||
CLAIM_VERIFICATION_FILE_ANALYSIS("99001", "索赔检核文件分析"),
|
CLAIM_VERIFICATION_FILE_ANALYSIS("99001", "索赔检核文件分析"),
|
||||||
CLAIM_VERIFICATION_AUDIT("99002", "索赔检核审计报告"),
|
CLAIM_VERIFICATION_AUDIT("99002", "索赔检核审计报告"),
|
||||||
CLAIM_VERIFICATION_DTC("DTC", "DTC报告"),
|
CLAIM_VERIFICATION_DTC("DTC", "DTC报告"),
|
||||||
CLAIM_VERIFICATION_DIAGNOSTIC("DIAGNOSTIC", "诊断报告")
|
CLAIM_VERIFICATION_DIAGNOSTIC("DIAGNOSTIC", "诊断报告"),
|
||||||
;
|
|
||||||
|
//索赔检核配置类型
|
||||||
|
AUDITRULES("AuditRules", "审计规则配置")
|
||||||
|
;
|
||||||
|
|
||||||
private String code;
|
private String code;
|
||||||
private String message;
|
private String message;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,20 +1,34 @@
|
|||||||
package com.volvo.ai.analytic.center.service.impl;
|
package com.volvo.ai.analytic.center.service.impl;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
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.dto.req.ClaimVerificationFileDTO;
|
import com.volvo.ai.analytic.center.dto.req.ClaimVerificationFileDTO;
|
||||||
|
import com.volvo.ai.analytic.center.dto.req.DiFyReq;
|
||||||
import com.volvo.ai.analytic.center.entity.AiAnalysisRequestLogs;
|
import com.volvo.ai.analytic.center.entity.AiAnalysisRequestLogs;
|
||||||
|
import com.volvo.ai.analytic.center.entity.AiAnalyticBusinessConfig;
|
||||||
import com.volvo.ai.analytic.center.enums.BusinessTypeEnum;
|
import com.volvo.ai.analytic.center.enums.BusinessTypeEnum;
|
||||||
|
import com.volvo.ai.analytic.center.enums.ClaimVerificationFileTypeEnums;
|
||||||
|
import com.volvo.ai.analytic.center.feign.DiFyFeign;
|
||||||
import com.volvo.ai.analytic.center.mapper.AiAnalysisRequestLogsMapper;
|
import com.volvo.ai.analytic.center.mapper.AiAnalysisRequestLogsMapper;
|
||||||
import com.volvo.ai.analytic.center.mapper.AiAnalyticBusinessConfigMapper;
|
import com.volvo.ai.analytic.center.mapper.AiAnalyticBusinessConfigMapper;
|
||||||
import com.volvo.ai.analytic.center.service.ClaimVerificationService;
|
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.AiAnalysisUtils;
|
||||||
|
import com.volvo.ai.analytic.center.utils.ObsUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.util.List;
|
import java.io.InputStream;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@@ -26,6 +40,12 @@ public class ClaimVerificationServiceImpl implements ClaimVerificationService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private AiAnalyticBusinessConfigMapper aiAnalyticBusinessConfigMapper;
|
private AiAnalyticBusinessConfigMapper aiAnalyticBusinessConfigMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DiFyFeign diFyFeign;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DiFyService diFyService;
|
||||||
|
|
||||||
@Value("${dify.claimVerification.user}")
|
@Value("${dify.claimVerification.user}")
|
||||||
private String claimVerificationUser;
|
private String claimVerificationUser;
|
||||||
|
|
||||||
@@ -35,8 +55,11 @@ public class ClaimVerificationServiceImpl implements ClaimVerificationService {
|
|||||||
@Value("${dify.claimVerification.verificationToken}")
|
@Value("${dify.claimVerification.verificationToken}")
|
||||||
private String verificationToken;
|
private String verificationToken;
|
||||||
|
|
||||||
@Value("${rocketmq.producer.topic}")
|
@Value("${rocketmq.producer.claimVerification.topic}")
|
||||||
private String topic;
|
private String topic;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RocketMQTemplate rocketMQTemplate;
|
||||||
@Override
|
@Override
|
||||||
public void consumerMessageByMQ(String message) {
|
public void consumerMessageByMQ(String message) {
|
||||||
log.info("售后索赔检核MQ message: {}", message);
|
log.info("售后索赔检核MQ message: {}", message);
|
||||||
@@ -46,30 +69,156 @@ public class ClaimVerificationServiceImpl implements ClaimVerificationService {
|
|||||||
throw new RuntimeException(" 售后索赔检核文件分析入参为空");
|
throw new RuntimeException(" 售后索赔检核文件分析入参为空");
|
||||||
}
|
}
|
||||||
// 生成ai分析请求id
|
// 生成ai分析请求id
|
||||||
String aiAnalysisRequestId = AiAnalysisUtils.getAiAnalysisRequestId(BusinessTypeEnum.COMMUNITYTARGET.getCode());
|
String aiAnalysisRequestId = AiAnalysisUtils.getAiAnalysisRequestId(BusinessTypeEnum.CLAIM_VERIFICATION.getCode());
|
||||||
// 异步保存请求日志
|
// 异步保存请求日志
|
||||||
syncSaveRequestLogs(message, aiAnalysisRequestId);
|
syncSaveRequestLogs(message, aiAnalysisRequestId);
|
||||||
|
|
||||||
if(claimVerificationFileAnalysisDTO.getBusinessType().equals(BusinessTypeEnum.CLAIM_VERIFICATION_FILE_ANALYSIS.getCode())){
|
if(claimVerificationFileAnalysisDTO.getBusinessType().equals(BusinessTypeEnum.CLAIM_VERIFICATION_FILE_ANALYSIS.getCode())){
|
||||||
//文件分析
|
//文件分析
|
||||||
List<String> fileObsPath = claimVerificationFileAnalysisDTO.getFileObsPath();
|
List<String> fileObsPath = claimVerificationFileAnalysisDTO.getFileObsPath();
|
||||||
|
List<HashMap<String,String>> fileIds = Collections.EMPTY_LIST;
|
||||||
|
//上传所有文件到dify
|
||||||
if(fileObsPath != null && fileObsPath.size() > 0){
|
if(fileObsPath != null && fileObsPath.size() > 0){
|
||||||
|
for (String filePath : fileObsPath) {
|
||||||
|
HashMap<String,String> fileToDifyDTO = new HashMap<>();
|
||||||
|
ObsObject obsObject = ObsUtil.downloadFile(filePath);
|
||||||
|
InputStream inputStream = obsObject.getObjectContent();
|
||||||
|
MultipartFile file = ObsUtil.getMultipartFile(inputStream, ObsUtil.getFilenameByUrl(filePath));
|
||||||
|
JSONObject fileUploadRes = diFyFeign.fileUpload(fileToken,file);
|
||||||
|
String uploadFileId = fileUploadRes.getString("id");
|
||||||
|
String extension = fileUploadRes.getString("extension");
|
||||||
|
fileToDifyDTO.put("id", uploadFileId);
|
||||||
|
fileToDifyDTO.put("type", extension);
|
||||||
|
fileIds.add(fileToDifyDTO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
//根据业务线标识和文件配置分类查询配置
|
||||||
|
List<AiAnalyticBusinessConfig> aiAnalyticBusinessConfigs = aiAnalyticBusinessConfigMapper.selectList(
|
||||||
|
Wrappers.<AiAnalyticBusinessConfig>lambdaQuery()
|
||||||
|
.eq(AiAnalyticBusinessConfig::getBusinessLine, BusinessTypeEnum.CLAIM_VERIFICATION.getCode())
|
||||||
|
.eq(AiAnalyticBusinessConfig::getFileConfigCategory, claimVerificationFileAnalysisDTO.getFileType())
|
||||||
|
.eq(AiAnalyticBusinessConfig::getIsDeleted, 0)
|
||||||
|
);
|
||||||
|
|
||||||
|
//组装文件分析workflow入参
|
||||||
|
JSONArray files = new JSONArray();
|
||||||
|
for (HashMap<String, String> fileToDifyDTO : fileIds) {
|
||||||
|
JSONObject object = new JSONObject();
|
||||||
|
object.put("upload_file_id", fileToDifyDTO.get("id"));
|
||||||
|
object.put("type", fileToDifyDTO.get("type"));
|
||||||
|
object.put("transfer_method", "local_file");
|
||||||
|
files.add(object);
|
||||||
|
}
|
||||||
|
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));
|
||||||
|
|
||||||
|
DiFyReq diFyReq = new DiFyReq();
|
||||||
|
diFyReq.setUser(BusinessTypeEnum.CLAIM_VERIFICATION.getCode());
|
||||||
|
diFyReq.setFlowId(fileToken);
|
||||||
|
diFyReq.setInputs(fileToDifyDTO);
|
||||||
|
//调用dify 工作流
|
||||||
|
JSONObject diFyObject = (JSONObject) diFyService.getDiFyObject(diFyReq);
|
||||||
|
//处理结果并推送MQ
|
||||||
|
if (diFyObject == null) {
|
||||||
|
log.error(" 售后索赔检核文件分析dify返回结果为空");
|
||||||
|
throw new RuntimeException(" 售后索赔检核文件分析dify返回结果为空");
|
||||||
|
}else {
|
||||||
|
JSONObject data = new JSONObject();
|
||||||
|
data.put("newBieAfterSalesId", claimVerificationFileAnalysisDTO.getNewBieAfterSalesId());
|
||||||
|
data.put("businessType", claimVerificationFileAnalysisDTO.getBusinessType());
|
||||||
|
data.put("fileType", claimVerificationFileAnalysisDTO.getFileType());
|
||||||
|
data.put("fileData",diFyObject);
|
||||||
|
//返回结果推送到Newbie的MQ
|
||||||
|
rocketMQTemplate.syncSend(topic, data);
|
||||||
|
log.info("索赔检核文件分析发送回调MQ完成: {}", data);
|
||||||
|
}
|
||||||
|
//异步更新请求日志表的difyResponse字段
|
||||||
|
syncUpdateDiFyResponse(diFyObject, aiAnalysisRequestId);
|
||||||
} else if(claimVerificationFileAnalysisDTO.getBusinessType().equals(BusinessTypeEnum.CLAIM_VERIFICATION_AUDIT.getCode())){
|
} else if(claimVerificationFileAnalysisDTO.getBusinessType().equals(BusinessTypeEnum.CLAIM_VERIFICATION_AUDIT.getCode())){
|
||||||
//审计报告
|
//审计报告
|
||||||
|
|
||||||
|
//加载审计规则配置
|
||||||
|
List<AiAnalyticBusinessConfig> aiAnalyticBusinessConfigs = aiAnalyticBusinessConfigMapper.selectList(
|
||||||
|
Wrappers.<AiAnalyticBusinessConfig>lambdaQuery()
|
||||||
|
.eq(AiAnalyticBusinessConfig::getBusinessLine, BusinessTypeEnum.CLAIM_VERIFICATION.getCode())
|
||||||
|
.eq(AiAnalyticBusinessConfig::getConfigType, BusinessTypeEnum.AUDITRULES.getCode())
|
||||||
|
.eq(AiAnalyticBusinessConfig::getIsDeleted, 0));
|
||||||
|
|
||||||
|
//组装审计报告workflow入参
|
||||||
|
JSONObject auditRules = new JSONObject();
|
||||||
|
auditRules.put("AnalysisRules", aiAnalyticBusinessConfigs
|
||||||
|
.stream()
|
||||||
|
.filter(config -> config.getConfigType().equals("AuditRules"))
|
||||||
|
.map(AiAnalyticBusinessConfig::getConfigData)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null));
|
||||||
|
auditRules.put("DiagnosticReport", claimVerificationFileAnalysisDTO.getDiagnosticReport());
|
||||||
|
auditRules.put("PreCheckReport", claimVerificationFileAnalysisDTO.getPreCheckReport());
|
||||||
|
auditRules.put("DTCReport", claimVerificationFileAnalysisDTO.getDtcReport());
|
||||||
|
|
||||||
|
DiFyReq diFyReq = new DiFyReq();
|
||||||
|
diFyReq.setUser(BusinessTypeEnum.CLAIM_VERIFICATION.getCode());
|
||||||
|
diFyReq.setFlowId(verificationToken);
|
||||||
|
diFyReq.setInputs(auditRules);
|
||||||
|
//调用dify 工作流
|
||||||
|
JSONObject diFyObject = (JSONObject) diFyService.getDiFyObject(diFyReq);
|
||||||
|
//处理结果并推送MQ
|
||||||
|
if (diFyObject == null) {
|
||||||
|
log.error(" 售后索赔检核审计报告dify返回结果为空");
|
||||||
|
throw new RuntimeException(" 售后索赔检核审计报告dify返回结果为空");
|
||||||
|
}else {
|
||||||
|
JSONObject data = new JSONObject();
|
||||||
|
data.put("newBieAfterSalesId", claimVerificationFileAnalysisDTO.getNewBieAfterSalesId());
|
||||||
|
data.put("businessType", claimVerificationFileAnalysisDTO.getBusinessType());
|
||||||
|
data.put("warrantyAuditReport",diFyObject);
|
||||||
|
//返回结果推送到Newbie的MQ
|
||||||
|
rocketMQTemplate.syncSend(topic, data);
|
||||||
|
log.info("索赔检核审计报告发送回调MQ完成: {}", data);
|
||||||
|
}
|
||||||
}else {
|
}else {
|
||||||
throw new RuntimeException(" 售后索赔检核业务类型错误");
|
throw new RuntimeException("售后索赔检核业务类型错误");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Async
|
||||||
|
protected void syncUpdateDiFyResponse(JSONObject difResult, String aiAnalysisRequestId) {
|
||||||
|
aiAnalysisRequestLogsMapper.update(new AiAnalysisRequestLogs(),
|
||||||
|
new UpdateWrapper<AiAnalysisRequestLogs>().set("dify_response", difResult.toJSONString())
|
||||||
|
.eq("ai_analysis_request_id", aiAnalysisRequestId));
|
||||||
|
}
|
||||||
@Async
|
@Async
|
||||||
protected void syncSaveRequestLogs(String message, String aiAnalysisRequestId) {
|
protected void syncSaveRequestLogs(String message, String aiAnalysisRequestId) {
|
||||||
aiAnalysisRequestLogsMapper.insert(AiAnalysisRequestLogs.builder()
|
aiAnalysisRequestLogsMapper.insert(AiAnalysisRequestLogs.builder()
|
||||||
.aiAnalysisRequestId(aiAnalysisRequestId)
|
.aiAnalysisRequestId(aiAnalysisRequestId)
|
||||||
.businessRequest(message)
|
.businessRequest(message)
|
||||||
.difyAgentKey("")
|
.aiAnalysisRequestType(BusinessTypeEnum.CLAIM_VERIFICATION.getCode())
|
||||||
.aiAnalysisRequestType(BusinessTypeEnum.COMMUNITYTARGET.getCode())
|
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user