画像提交
This commit is contained in:
@@ -23,7 +23,11 @@ public enum BusinessTypeEnum {
|
|||||||
|
|
||||||
CASE("case", "舆情事件"),
|
CASE("case", "舆情事件"),
|
||||||
|
|
||||||
SMART_ASSISTANT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-铭牌")
|
SMART_ASSISTANT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-铭牌"),
|
||||||
|
|
||||||
|
CORPUS_PORTRAIT_DCC("SMART_ASSISTANT_DCC", "智能助手-画像-DCC"),
|
||||||
|
CORPUS_PORTRAIT_QIWEI("SMART_ASSISTANT_QIWEI", "智能助手-画像-企微"),
|
||||||
|
CORPUS_PORTRAIT_NAMEPLATE("SMART_ASSISTANT_NAMEPLATE", "智能助手-画像-铭牌"),
|
||||||
;
|
;
|
||||||
|
|
||||||
private String code;
|
private String code;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.volvo.ai.analytic.center.service;
|
|||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO;
|
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO;
|
||||||
|
import com.volvo.ai.analytic.center.dto.corpus.OdsVdqwMessageOTD;
|
||||||
import com.volvo.ai.analytic.center.entity.TmNameplateCorpus;
|
import com.volvo.ai.analytic.center.entity.TmNameplateCorpus;
|
||||||
import com.volvo.common.core.util.ResultMsg;
|
import com.volvo.common.core.util.ResultMsg;
|
||||||
|
|
||||||
@@ -17,9 +18,9 @@ public interface CorpusPortraitService {
|
|||||||
|
|
||||||
void portraitDcc(AicorpusTelephoneDTO aicorpusTelephone);
|
void portraitDcc(AicorpusTelephoneDTO aicorpusTelephone);
|
||||||
|
|
||||||
void portraitQiWei(TmNameplateCorpus item);
|
void portraitQiWei(OdsVdqwMessageOTD item, String statTime, String endTime);
|
||||||
|
|
||||||
void portraitNameplate(JSONObject execDifyFlow,String aiAnalysisRequestId, TmNameplateCorpus tmNameplateCorpus);
|
void portraitNameplate(TmNameplateCorpus item);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,12 @@
|
|||||||
package com.volvo.ai.analytic.center.service;
|
package com.volvo.ai.analytic.center.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.volvo.ai.analytic.center.entity.TmOdsVdqwExternalcontact;
|
||||||
import com.volvo.ai.analytic.center.entity.TmOdsVdqwMessagearchiving;
|
import com.volvo.ai.analytic.center.entity.TmOdsVdqwMessagearchiving;
|
||||||
|
import com.volvo.ai.analytic.center.entity.TmOdsVdqwWorkuserinfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 电话语料表-同步表
|
* @description 电话语料表-同步表
|
||||||
* @author BEJSON
|
* @author BEJSON
|
||||||
@@ -11,5 +16,8 @@ public interface TmOdsVdqwMessagearchivingService extends IService<TmOdsVdqwMess
|
|||||||
|
|
||||||
void runQiWeiCorpusDify(String paramJson);
|
void runQiWeiCorpusDify(String paramJson);
|
||||||
|
|
||||||
|
TmOdsVdqwWorkuserinfo getUserId(List<String> userIds);
|
||||||
|
|
||||||
|
TmOdsVdqwExternalcontact getUnionId(List<String> userIds);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,8 +2,11 @@ package com.volvo.ai.analytic.center.service;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO;
|
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO;
|
||||||
|
import com.volvo.ai.analytic.center.entity.DataMaskingRule;
|
||||||
import com.volvo.ai.analytic.center.entity.TmTelephoneCorpus;
|
import com.volvo.ai.analytic.center.entity.TmTelephoneCorpus;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 电话语料表-同步表
|
* @description 电话语料表-同步表
|
||||||
* @author BEJSON
|
* @author BEJSON
|
||||||
@@ -20,4 +23,7 @@ public interface TmTelephoneCorpusService extends IService<TmTelephoneCorpus> {
|
|||||||
String getCarModelList();
|
String getCarModelList();
|
||||||
|
|
||||||
void sendMq(String tag, String message);
|
void sendMq(String tag, String message);
|
||||||
|
|
||||||
|
|
||||||
|
public String processChatSegments(String display, List<DataMaskingRule> maskingRuleItems);
|
||||||
}
|
}
|
||||||
@@ -1,38 +1,29 @@
|
|||||||
package com.volvo.ai.analytic.center.service.impl;
|
package com.volvo.ai.analytic.center.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
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.dto.PageDto;
|
|
||||||
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO;
|
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO;
|
||||||
import com.volvo.ai.analytic.center.dto.corpus.CorpusReportDTO;
|
import com.volvo.ai.analytic.center.dto.corpus.CorpusReportDTO;
|
||||||
|
import com.volvo.ai.analytic.center.dto.corpus.OdsVdqwMessageOTD;
|
||||||
import com.volvo.ai.analytic.center.dto.req.DiFyReq;
|
import com.volvo.ai.analytic.center.dto.req.DiFyReq;
|
||||||
import com.volvo.ai.analytic.center.dto.req.RunMaskingRuleInput;
|
import com.volvo.ai.analytic.center.dto.req.RunMaskingRuleInput;
|
||||||
import com.volvo.ai.analytic.center.entity.*;
|
import com.volvo.ai.analytic.center.entity.*;
|
||||||
import com.volvo.ai.analytic.center.enums.BusinessTypeEnum;
|
import com.volvo.ai.analytic.center.enums.BusinessTypeEnum;
|
||||||
import com.volvo.ai.analytic.center.enums.CategoryEnum;
|
|
||||||
import com.volvo.ai.analytic.center.feign.RemoteCarModelClient;
|
|
||||||
import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper;
|
|
||||||
import com.volvo.ai.analytic.center.mapper.TmNameplateCorpusMapper;
|
|
||||||
import com.volvo.ai.analytic.center.mapper.TmOdsVdqwMessagearchivingMapper;
|
import com.volvo.ai.analytic.center.mapper.TmOdsVdqwMessagearchivingMapper;
|
||||||
import com.volvo.ai.analytic.center.mapper.TtNameplateRecordMapper;
|
|
||||||
import com.volvo.ai.analytic.center.service.*;
|
import com.volvo.ai.analytic.center.service.*;
|
||||||
import com.volvo.ai.analytic.center.utils.ConstantStr;
|
import com.volvo.ai.analytic.center.utils.ConstantStr;
|
||||||
import com.volvo.common.core.util.ResultMsg;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
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.cloud.context.config.annotation.RefreshScope;
|
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.LocalDate;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,54 +37,206 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
public class CorpusPortraitServiceImpl implements CorpusPortraitService {
|
public class CorpusPortraitServiceImpl implements CorpusPortraitService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private TmOdsVdqwMessagearchivingMapper tmOdsVdqwMessagearchivingMapper;
|
TmTelephoneCorpusService tmTelephoneCorpusService;
|
||||||
|
|
||||||
@Autowired
|
@Value("${dify.corpus.portrait.dccToken}")
|
||||||
private TmNameplateCorpusMapper tmNameplateCorpusMapper;
|
private String dccToken;
|
||||||
|
|
||||||
@Autowired
|
@Value("${dify.corpus.portrait.qiweiToken}")
|
||||||
private TtNameplateRecordMapper ttNameplateRecordMapper;
|
private String qiweiToken;
|
||||||
@Autowired
|
|
||||||
private TmTelephoneCorpusService tmTelephoneCorpusService;
|
|
||||||
|
|
||||||
|
@Value("${dify.corpus.portrait.nameplateToken}")
|
||||||
|
private String nameplateAppKey;
|
||||||
@Autowired
|
@Autowired
|
||||||
private AiAnalysisRequestLogsService aiAnalysisRequestLogsService;
|
private DataMaskingRuleService dataMaskingRuleService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AiAnalysisErrorsMapper aiAnalysisErrorsMapper;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DiFyService diFyService;
|
private DiFyService diFyService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RocketMQTemplate rocketMqTemplate;
|
|
||||||
@Value("${dify.corpus.nameplate.appkey}")
|
|
||||||
private String nameplateAppKey;
|
|
||||||
|
|
||||||
@Value("${batch.size}")
|
|
||||||
public int pageSize = 100;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RemoteCarModelClient remoteCarModelClient;
|
private AiAnalysisErrorsService aiAnalysisErrorsService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DataMaskingRuleService dataMaskingRuleService;
|
private AiAnalysisRequestLogsService aiAnalysisRequestLogsService;
|
||||||
|
@Autowired
|
||||||
|
TmOdsVdqwMessagearchivingService tmOdsVdqwMessagearchivingService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Resource(name = "threadPoolTaskExecutor")
|
private TmOdsVdqwMessagearchivingMapper tmOdsVdqwMessagearchivingMapper;
|
||||||
private ThreadPoolTaskExecutor executor;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void portraitDcc(AicorpusTelephoneDTO aicorpusTelephone) {
|
public void portraitDcc(AicorpusTelephoneDTO aicorpusTelephone) {
|
||||||
|
|
||||||
|
if (null != aicorpusTelephone) {
|
||||||
|
List<DataMaskingRule> maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.CORPUS_PORTRAIT_DCC.getCode());
|
||||||
|
|
||||||
|
RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput();
|
||||||
|
runMaskingRuleInput.setDataMaskingRules(maskingRuleItems);
|
||||||
|
|
||||||
|
Map<String, Object> inputMap = new HashMap();
|
||||||
|
DiFyReq diFyImageReq = new DiFyReq();
|
||||||
|
diFyImageReq.setUser(ConstantStr.corpus_user);
|
||||||
|
diFyImageReq.setFlowId(dccToken);
|
||||||
|
|
||||||
|
|
||||||
|
String chatContent = tmTelephoneCorpusService.processChatSegments(aicorpusTelephone.getDisplay(), maskingRuleItems);
|
||||||
|
if (chatContent == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZonedDateTime zonedDateTime = ZonedDateTime.parse(JSONObject.parseObject(aicorpusTelephone.getDisplay()).getString("start_time"));
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
String formattedDateStartTime = zonedDateTime.format(formatter);
|
||||||
|
inputMap.put("chat", chatContent);
|
||||||
|
inputMap.put("analysisScene", "2");
|
||||||
|
inputMap.put("recordId", aicorpusTelephone.getSourceId());
|
||||||
|
inputMap.put("communicateDate", formattedDateStartTime);
|
||||||
|
inputMap.put("version", 2);
|
||||||
|
diFyImageReq.setInputs(inputMap);
|
||||||
|
CorpusReportDTO corpusReportDTO = new CorpusReportDTO();
|
||||||
|
corpusReportDTO.setCorpusTime(formattedDateStartTime);
|
||||||
|
corpusReportDTO.setRecordId(aicorpusTelephone.getSourceId());
|
||||||
|
corpusReportDTO.setAnalysisScene(2l);
|
||||||
|
// 获取配置
|
||||||
|
JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.CORPUS_PORTRAIT_DCC.getCode(), JSONObject.toJSONString(corpusReportDTO), aicorpusTelephone.getAiAnalysisRequestId());
|
||||||
|
log.info("runDify execDifyFlow {}", execDifyFlow);
|
||||||
|
String aiAnalysisRequestId = execDifyFlow.getString("aiAnalysisRequestId");
|
||||||
|
if (null != execDifyFlow && execDifyFlow.get("status").equals("succeeded")) {
|
||||||
|
|
||||||
|
// 发送消息
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
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("").build());
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.info(" 电话语料处理保存报告异常processItem:{} ", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void portraitQiWei(TmNameplateCorpus item) {
|
public void portraitQiWei(OdsVdqwMessageOTD item, String statTime, String endTime) {
|
||||||
|
log.info("画像-企微语料内容:FromUserId:{}, AcceptUserId:{}", item.getFromUserId(), item.getAcceptUserId());
|
||||||
|
// 1,vdqw_workuserinfo 这个表对应是 B端认证中心userId
|
||||||
|
// 2,vdqw_externalcontact 这个表对应是 企微客户unionId
|
||||||
|
TmOdsVdqwExternalcontact tmOdsVdqwExternalcontact = tmOdsVdqwMessagearchivingService.getUnionId(Arrays.asList(item.getFromUserId(), item.getAcceptUserId()));
|
||||||
|
TmOdsVdqwWorkuserinfo tmOdsVdqwWorkuserinfo = tmOdsVdqwMessagearchivingService.getUserId(Arrays.asList(item.getFromUserId(), item.getAcceptUserId()));
|
||||||
|
if (null == tmOdsVdqwExternalcontact || null == tmOdsVdqwWorkuserinfo) {
|
||||||
|
log.info("企微查询信息为空 ");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String unionId = tmOdsVdqwExternalcontact.getUnionId();
|
||||||
|
String userId = tmOdsVdqwWorkuserinfo.getMiddleUserId().toString();
|
||||||
|
log.info("企微查询信息:unionId:{}, userId:{}", unionId, userId);
|
||||||
|
if (StringUtils.isNotBlank(item.getFromUserId()) && StringUtils.isNotBlank(item.getAcceptUserId())) {
|
||||||
|
List<OdsVdqwMessageOTD> contetnList = tmOdsVdqwMessagearchivingMapper.queryOdsVdqwMessageByFromUserIdAndAcceptUserId(statTime, endTime, Arrays.asList(item.getFromUserId(), item.getAcceptUserId()));
|
||||||
|
OdsVdqwMessageOTD maxMsgTimeItem = contetnList.stream()
|
||||||
|
.max((o1, o2) -> o1.getMsgTime().compareTo(o2.getMsgTime()))
|
||||||
|
.orElse(null);
|
||||||
|
Map<String, Object> inputMap = new HashMap<>();
|
||||||
|
DiFyReq diFyImageReq = new DiFyReq();
|
||||||
|
diFyImageReq.setUser(ConstantStr.corpus_user);
|
||||||
|
diFyImageReq.setFlowId(qiweiToken);
|
||||||
|
List<DataMaskingRule> maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.CORPUS_PORTRAIT_QIWEI.getCode());
|
||||||
|
RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput();
|
||||||
|
runMaskingRuleInput.setDataMaskingRules(maskingRuleItems);
|
||||||
|
StringBuffer chatList = new StringBuffer();
|
||||||
|
AtomicInteger externalcontactCount = new AtomicInteger();
|
||||||
|
contetnList.forEach(contentItem -> {
|
||||||
|
String title = "";
|
||||||
|
if (tmOdsVdqwExternalcontact.getExternalUserId().equals(contentItem.getFromUserId())) {
|
||||||
|
title = "客户:";
|
||||||
|
externalcontactCount.addAndGet(1);
|
||||||
|
} else {
|
||||||
|
title = "顾问:";
|
||||||
|
}
|
||||||
|
JSONObject contentJson = JSONObject.parseObject(contentItem.getContent());
|
||||||
|
String content = contentJson.getString("content");
|
||||||
|
// 拼接 role 和 text
|
||||||
|
String chat = title.concat(content);
|
||||||
|
runMaskingRuleInput.setOldStr(chat);
|
||||||
|
String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput);
|
||||||
|
chatList.append(corpusChat).append("\n");
|
||||||
|
});
|
||||||
|
if (externalcontactCount.get() < 1) {
|
||||||
|
log.info("没有客户回复的语料,无需解析");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
inputMap.put("chat", chatList.toString());
|
||||||
|
inputMap.put("analysisScene", "1");
|
||||||
|
inputMap.put("unionId", unionId);
|
||||||
|
inputMap.put("consultantId", userId);
|
||||||
|
inputMap.put("communicateDate", DateUtil.format(maxMsgTimeItem.getMsgTime(), DatePattern.NORM_DATETIME_PATTERN));
|
||||||
|
inputMap.put("version", 2);
|
||||||
|
diFyImageReq.setInputs(inputMap);
|
||||||
|
|
||||||
|
CorpusReportDTO corpusReportDTO = new CorpusReportDTO();
|
||||||
|
corpusReportDTO.setCorpusTime(DateUtil.format(maxMsgTimeItem.getMsgTime(), DatePattern.NORM_DATETIME_PATTERN));
|
||||||
|
corpusReportDTO.setUnionId(unionId);
|
||||||
|
corpusReportDTO.setUserId(userId);
|
||||||
|
corpusReportDTO.setAnalysisScene(1l);
|
||||||
|
// 获取配置
|
||||||
|
JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT_QIWEI.getCode(), JSONObject.toJSONString(corpusReportDTO), null);
|
||||||
|
log.info("runDify execDifyFlow {}", execDifyFlow);
|
||||||
|
if (null != execDifyFlow && execDifyFlow.get("status").equals("succeeded")) {
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder().aiAnalysisRequestId(execDifyFlow.getString("aiAnalysisRequestId")).businessResponse("").build());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.info(" 企业语料处理保存报告异常processItem:{} ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void portraitNameplate(JSONObject execDifyFlow, String aiAnalysisRequestId, TmNameplateCorpus tmNameplateCorpus) {
|
public void portraitNameplate(TmNameplateCorpus item) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Optional.ofNullable(item).filter(tmNameplateCorpus -> tmNameplateCorpus.getCustomerFlowId()!=null && tmNameplateCorpus.getNameplateContent()!=null).orElseThrow(()->new RuntimeException("铭牌语料为空"));
|
||||||
|
|
||||||
|
String customerFlowId = item.getCustomerFlowId();
|
||||||
|
String nameplateContent = item.getNameplateContent();
|
||||||
|
log.info("铭牌数据处理:customerFlowId:{}", customerFlowId);
|
||||||
|
|
||||||
|
DiFyReq diFyImageReq = new DiFyReq();
|
||||||
|
diFyImageReq.setUser(ConstantStr.corpus_user);
|
||||||
|
diFyImageReq.setFlowId(nameplateAppKey);
|
||||||
|
List<DataMaskingRule> maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.SMART_ASSISTANT_NAMEPLATE.getCode());
|
||||||
|
RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput();
|
||||||
|
runMaskingRuleInput.setDataMaskingRules(maskingRuleItems);
|
||||||
|
|
||||||
|
runMaskingRuleInput.setOldStr(nameplateContent);
|
||||||
|
String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput);
|
||||||
|
Map<String, Object> inputMap = new HashMap<>();
|
||||||
|
String carModel = tmTelephoneCorpusService.getCarModelList();
|
||||||
|
inputMap.put("dialogue", corpusChat);
|
||||||
|
inputMap.put("model", carModel);
|
||||||
|
inputMap.put("customerFlowId", item.getCustomerFlowId());
|
||||||
|
inputMap.put("analysisScene", "3");
|
||||||
|
inputMap.put("version",2);
|
||||||
|
diFyImageReq.setInputs(inputMap);
|
||||||
|
|
||||||
|
CorpusReportDTO corpusReportDTO = new CorpusReportDTO();
|
||||||
|
corpusReportDTO.setCustomerFlowId(customerFlowId);
|
||||||
|
corpusReportDTO.setAnalysisScene(3l);
|
||||||
|
corpusReportDTO.setCarModel(carModel);
|
||||||
|
// 获取配置
|
||||||
|
JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT_NAMEPLATE.getCode(), JSONObject.toJSONString(corpusReportDTO),null);
|
||||||
|
log.info("runDify execDifyFlow {}", execDifyFlow);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("nameplate processItem error {}", e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -226,7 +226,7 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl<TmOdsVdqwM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private TmOdsVdqwExternalcontact getUnionId(List<String> userIds){
|
public TmOdsVdqwExternalcontact getUnionId(List<String> userIds){
|
||||||
LambdaQueryWrapper<TmOdsVdqwExternalcontact> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<TmOdsVdqwExternalcontact> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.in(TmOdsVdqwExternalcontact::getExternalUserId, userIds);
|
queryWrapper.in(TmOdsVdqwExternalcontact::getExternalUserId, userIds);
|
||||||
queryWrapper.eq(TmOdsVdqwExternalcontact::getIsDeleted, 0);
|
queryWrapper.eq(TmOdsVdqwExternalcontact::getIsDeleted, 0);
|
||||||
@@ -237,7 +237,7 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl<TmOdsVdqwM
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TmOdsVdqwWorkuserinfo getUserId(List<String> userIds){
|
public TmOdsVdqwWorkuserinfo getUserId(List<String> userIds){
|
||||||
LambdaQueryWrapper<TmOdsVdqwWorkuserinfo> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<TmOdsVdqwWorkuserinfo> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.in(TmOdsVdqwWorkuserinfo::getUserId, userIds);
|
queryWrapper.in(TmOdsVdqwWorkuserinfo::getUserId, userIds);
|
||||||
queryWrapper.eq(TmOdsVdqwWorkuserinfo::getIsDeleted, 0);
|
queryWrapper.eq(TmOdsVdqwWorkuserinfo::getIsDeleted, 0);
|
||||||
|
|||||||
@@ -102,45 +102,16 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl<TmTelephoneCorpusM
|
|||||||
diFyImageReq.setFlowId(telephoneToken);
|
diFyImageReq.setFlowId(telephoneToken);
|
||||||
|
|
||||||
|
|
||||||
JSONObject jsonObject = JSONObject.parseObject( aicorpusTelephone.getDisplay());
|
String chatContent = processChatSegments(aicorpusTelephone.getDisplay(), maskingRuleItems);
|
||||||
JSONArray segments = jsonObject.getJSONArray("segments");
|
if (chatContent == null) {
|
||||||
Long audioDuration = jsonObject.getLong("audio_duration"); // 毫秒
|
return; // 如果返回 null 表示不需要继续处理
|
||||||
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");
|
|
||||||
|
|
||||||
});
|
ZonedDateTime zonedDateTime = ZonedDateTime.parse(JSONObject.parseObject(aicorpusTelephone.getDisplay()).getString("start_time"));
|
||||||
|
|
||||||
ZonedDateTime zonedDateTime = ZonedDateTime.parse(jsonObject.getString("start_time"));
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
String formattedDateStartTime = zonedDateTime.format(formatter);
|
String formattedDateStartTime = zonedDateTime.format(formatter);
|
||||||
String carModel = getCarModelList();
|
String carModel = getCarModelList();
|
||||||
inputMap.put("chat",chatList.toString());
|
inputMap.put("chat",chatContent);
|
||||||
inputMap.put("model",carModel);
|
inputMap.put("model",carModel);
|
||||||
inputMap.put("analysisScene", "2");
|
inputMap.put("analysisScene", "2");
|
||||||
inputMap.put("recordId", aicorpusTelephone.getSourceId());
|
inputMap.put("recordId", aicorpusTelephone.getSourceId());
|
||||||
@@ -178,6 +149,54 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl<TmTelephoneCorpusM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String processChatSegments(String display, List<DataMaskingRule> maskingRuleItems) {
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(display);
|
||||||
|
JSONArray segments = jsonObject.getJSONArray("segments");
|
||||||
|
Long audioDuration = jsonObject.getLong("audio_duration"); // 单位:毫秒
|
||||||
|
|
||||||
|
// 时长小于10秒不处理
|
||||||
|
if (audioDuration / 1000 <= 10) {
|
||||||
|
log.info("电话语料时长小于10秒,不进行dify处理");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// segments 为空不处理
|
||||||
|
if (segments == null || segments.isEmpty()) {
|
||||||
|
log.info("电话语料内容segments为空,不进行dify处理");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput();
|
||||||
|
runMaskingRuleInput.setDataMaskingRules(maskingRuleItems);
|
||||||
|
|
||||||
|
StringBuffer chatList = new StringBuffer();
|
||||||
|
|
||||||
|
// 遍历 segments 并拼接内容
|
||||||
|
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 ("AGENT".equals(role)) {
|
||||||
|
title = "顾问";
|
||||||
|
}
|
||||||
|
|
||||||
|
String chat = title + ": " + text;
|
||||||
|
|
||||||
|
// 应用脱敏规则
|
||||||
|
runMaskingRuleInput.setOldStr(chat);
|
||||||
|
String corpusChat = dataMaskingRuleService.runMaskingRule(runMaskingRuleInput);
|
||||||
|
|
||||||
|
chatList.append(corpusChat).append("\n");
|
||||||
|
});
|
||||||
|
|
||||||
|
return chatList.toString();
|
||||||
|
}
|
||||||
|
|
||||||
public String getCarModelList(){
|
public String getCarModelList(){
|
||||||
try {
|
try {
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|||||||
Reference in New Issue
Block a user