@@ -1,22 +1,105 @@
package com.volvo.ai.analytic.center.service.impl ;
import com.alibaba.fastjson.JSONObject ;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper ;
import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO ;
import com.volvo.ai.analytic.center.dto.corpus.CorpusReportDTO ;
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.mapper.TmTelephoneCorpusMapper ;
import com.volvo.ai.analytic.center.service.AiAnalysisRequestLogsService ;
import com.volvo.ai.analytic.center.service.AiDifyResultService ;
import com.volvo.ai.analytic.center.utils.FlowResultSplitUtil ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.collections.CollectionUtils ;
import org.apache.commons.lang3.StringUtils ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
import java.time.ZonedDateTime ;
import java.time.format.DateTimeFormatter ;
import java.util.Arrays ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
@Slf4j
@Service
public class AiDifyResultServiceImpl implements AiDifyResultService {
@Autowired
private AiAnalysisRequestLogsService aiAnalysisRequestLogsService ;
@Autowired
private TmTelephoneCorpusMapper tmTelephoneCorpusMapper ;
@Override
public boolean updateAiDifyResult ( String message ) {
JSONObject messageJson = JSONObject . parseObject ( message ) ;
String aiAnalysisRequestId = messageJson . getString ( " aiAnalysisRequestId " ) ;
String difyResponse = messageJson . getString ( " difyResponse " ) ;
AiAnalysisRequestLogs oldAiAnalysisRequestLogs = aiAnalysisRequestLogsService . queryByAiAnalysisRequestId ( aiAnalysisRequestId ) ;
if ( null = = oldAiAnalysisRequestLogs ) {
log . info ( " 根据aiAnalysisRequestId查询的log为空 " ) ;
return false ;
}
Map < String , String > ltoMap = null ;
// 特殊处理
List < String > analysisRequestTypeList = Arrays . asList ( BusinessTypeEnum . SMART_ASSISTANT . getCode ( ) , BusinessTypeEnum . SMART_ASSISTANT_QIWEI . getCode ( ) ) ;
if ( analysisRequestTypeList . contains ( oldAiAnalysisRequestLogs . getAiAnalysisRequestType ( ) ) ) {
// 结果特殊封装
if ( oldAiAnalysisRequestLogs . getAiAnalysisRequestType ( ) . equals ( BusinessTypeEnum . SMART_ASSISTANT . getCode ( ) ) ) {
ltoMap = sendDccCorpus ( oldAiAnalysisRequestLogs , difyResponse ) ;
}
if ( oldAiAnalysisRequestLogs . getAiAnalysisRequestType ( ) . equals ( BusinessTypeEnum . SMART_ASSISTANT_QIWEI . getCode ( ) ) ) {
}
}
AiAnalysisRequestLogs aiAnalysisRequestLogs = new AiAnalysisRequestLogs ( ) ;
aiAnalysisRequestLogs . setAiAnalysisRequestId ( messageJson . getString ( " aiAnalysisRequestId" ) ) ;
aiAnalysisRequestLogs . setDifyResponse ( messageJson . getString ( " difyResponse" ) ) ;
aiAnalysisRequestLogs . setAiAnalysisRequestId ( aiAnalysisRequestId ) ;
aiAnalysisRequestLogs . setDifyResponse ( difyResponse ) ;
aiAnalysisRequestLogs . setBusinessResponse ( JSONObject . toJSONString ( ltoMap ) ) ;
aiAnalysisRequestLogsService . saveAiAnalysisRequestLogs ( aiAnalysisRequestLogs ) ;
// aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder().aiAnalysisRequestId(aiAnalysisRequestId).businessResponse(JSONObject.toJSONString(ltoMap)).build());
return false ;
}
Map < String , String > sendDccCorpus ( AiAnalysisRequestLogs oldAiAnalysisRequestLogs , String difyResponse ) {
CorpusReportDTO corpusReportDTO = JSONObject . parseObject ( oldAiAnalysisRequestLogs . getBusinessRequest ( ) , CorpusReportDTO . class ) ;
String text = JSONObject . parseObject ( difyResponse ) . getJSONObject ( " outputs " ) . getString ( " text " ) ;
String resultStrOne = FlowResultSplitUtil . flowOutputTextSplit ( text , " 任务1 " , " 任务2 " ) ;
String resultStrTwo = FlowResultSplitUtil . flowOutputTextSplit ( text , " 任务2 " , null ) ;
if ( StringUtils . isBlank ( resultStrOne ) | | StringUtils . isBlank ( resultStrTwo ) ) {
log . info ( " 电话语料解析为空, text:{} " , text ) ;
return null ;
}
List < AicorpusTelephoneDTO > dccDtoList = tmTelephoneCorpusMapper . queryTelephoneCorpusBySourceIds ( Arrays . asList ( corpusReportDTO . getRecordId ( ) ) ) ;
if ( CollectionUtils . isNotEmpty ( dccDtoList ) ) {
AicorpusTelephoneDTO dccDto = dccDtoList . get ( 0 ) ;
JSONObject jsonObject = JSONObject . parseObject ( dccDto . getDisplay ( ) ) ;
ZonedDateTime zonedDateTime = ZonedDateTime . parse ( jsonObject . getString ( " start_time " ) ) ;
DateTimeFormatter formatter = DateTimeFormatter . ofPattern ( " yyyy-MM-dd HH:mm:ss " ) ;
String formattedDateStartTime = zonedDateTime . format ( formatter ) ;
Map < String , String > ltoMap = new HashMap ( ) ;
ltoMap . put ( " analysisRecordId " , oldAiAnalysisRequestLogs . getAiAnalysisRequestId ( ) ) ;
ltoMap . put ( " analysisScene " , " 2 " ) ;
ltoMap . put ( " recordId " , corpusReportDTO . getRecordId ( ) ) ;
ltoMap . put ( " communicateDate " , formattedDateStartTime ) ;
ltoMap . put ( " analysisResult " , resultStrOne ) ;
ltoMap . put ( " analysisDetail " , resultStrTwo ) ;
// 发送MQ
log . info ( " send mq {} " , ltoMap ) ;
return ltoMap ;
}
return null ;
}
}