修改时间格式化

This commit is contained in:
zren25
2025-03-13 13:45:17 +08:00
parent ea10b1d87d
commit a321fc60ff
11 changed files with 158 additions and 6 deletions

View File

@@ -0,0 +1,51 @@
package com.volvo.ai.analytic.center.dto.corpus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description 语料解析报告
* @author BEJSON
* @date 2025-03-11
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CorpusReportDTO {
private static final long serialVersionUID = 1L;
/**
* 语料Id
*/
private String aiAnalysisRequestId;
/**
* 语料类型【1企业微信2电话】
*/
private Long analysisScene;
/**
* corpus_time
*/
private String corpusTime;
/**
* union_id
*/
private String unionId;
/**
* user_id
*/
private String userId;
private String recordId;
}

View File

@@ -8,4 +8,6 @@ public class DiFyReq {
private String user;
private String flowId;
private Object inputs;
private Object businessData;
}

View File

@@ -16,6 +16,9 @@ public class AiAnalysisErrors extends BaseEntity {
@TableField("ai_analysis_request_id")
private String aiAnalysisRequestId;
@TableField("ai_analysis_request_type")
private String aiAnalysisRequestType;
@TableField("dify_response")
private String difyResponse; // JSON 字符串

View File

@@ -0,0 +1,51 @@
package com.volvo.ai.analytic.center.job;
import com.volvo.ai.analytic.center.entity.AiAnalysisErrors;
import com.volvo.ai.analytic.center.enums.BusinessTypeEnum;
import com.volvo.ai.analytic.center.service.AiAnalysisErrorsService;
import com.volvo.common.core.util.ResultMsg;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Slf4j
@Component
@RestController
public class CorpusFailJob {
@Autowired
private AiAnalysisErrorsService aiAnalysisErrorsService;
/**
* 企微语料处理
*/
@XxlJob("corpusFailTask")
public ResultMsg corpusFailTask() {
try {
log.info("语料解析失败重试处理");
List<AiAnalysisErrors> aiAnalysisErrorsListlist = aiAnalysisErrorsService.queryAnalysisErrorList(BusinessTypeEnum.SMART_ASSISTANT.getCode());
if(CollectionUtils.isNotEmpty(aiAnalysisErrorsListlist)){
aiAnalysisErrorsListlist.stream().forEach(aiAnalysisErrors -> {
if(aiAnalysisErrors.getMaxRetryCount()>= aiAnalysisErrors.getRetryCount()){
log.info("已超过最大重试次数!");
return ;
}
});
}
} catch (Exception e) {
log.error("processMessageByTask 定时任务补偿处理消息异常",e.getMessage());
throw new RuntimeException(e);
}
return ResultMsg.ok();
}
}

View File

@@ -49,7 +49,7 @@ public class CorpusProcessKafkaProducer {
tmTelephoneCorpus.setCreateTime(LocalDateTime.now());
// 条件: 只处理dcc的 10s通话时间以上
log.info("CorpusProcessKafkaProducer getCategoryCode: {}" , tmTelephoneCorpus.getCategoryCode());
log.info("CorpusProcessKafkaProducer getCategoryCode: {}audioFileId{}sourceId{}" , tmTelephoneCorpus.getCategoryCode(), aicorpusTelephone.getAudioFileId(), aicorpusTelephone.getSourceId());
if (Constant.CHANNEL_DCC.equals(tmTelephoneCorpus.getCategoryCode())){
log.info(" dcc 语料开始处理: {}");
tmTelephoneCorpusService.saveTelephoneCorpus(tmTelephoneCorpus);

View File

@@ -3,7 +3,11 @@ package com.volvo.ai.analytic.center.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.volvo.ai.analytic.center.entity.AiAnalysisErrors;
import java.util.List;
public interface AiAnalysisErrorsService extends IService<AiAnalysisErrors> {
boolean saveAiAnalysisErrors(AiAnalysisErrors entity);
List<AiAnalysisErrors> queryAnalysisErrorList(String businessType);
}

View File

@@ -9,6 +9,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class AiAnalysisErrorsServiceImpl extends ServiceImpl<AiAnalysisErrorsMapper, AiAnalysisErrors> implements AiAnalysisErrorsService {
@@ -27,4 +29,15 @@ public class AiAnalysisErrorsServiceImpl extends ServiceImpl<AiAnalysisErrorsMa
return aiAnalysisErrorsMapper.update(entity, queryWrapper) > 0;
}
}
public List<AiAnalysisErrors> queryAnalysisErrorList(String businessType) {
//捞取异常表中属于社区的异常数据
List<AiAnalysisErrors> aiAnalysisErrors = aiAnalysisErrorsMapper.selectList(new LambdaQueryWrapper<AiAnalysisErrors>()
.eq(AiAnalysisErrors::getAiAnalysisRequestType, businessType)
.eq(AiAnalysisErrors::getAiAnalysisErrorHandlingStatus, "0")
.eq(AiAnalysisErrors::getIsDeleted, 0)
.lt(AiAnalysisErrors::getRetryCount, 4));
return aiAnalysisErrors;
}
}

View File

@@ -58,7 +58,7 @@ public class DiFyServiceImpl implements DiFyService{
// 保存请求日志
aiAnalysisRequestLogsService.saveAiAnalysisRequestLogs(AiAnalysisRequestLogs.builder()
.aiAnalysisRequestId(aiAnalysisRequestId)
.businessRequest(JSONObject.toJSONString(""))
.businessRequest(JSONObject.toJSONString(diFyReq.getBusinessData()))
.difyAgentKey(diFyReq.getFlowId())
.difyRequest(JSON.toJSONString(diFyReq))
.difyResponse(JSON.toJSONString(""))

View File

@@ -8,6 +8,7 @@ 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;
import com.volvo.ai.analytic.center.dto.req.DiFyReq;
import com.volvo.ai.analytic.center.dto.req.RunMaskingRuleInput;
@@ -191,6 +192,13 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl<TmOdsVdqwM
inputMap.put("chat", chatList.toString());
// inputMap.put("model", tmTelephoneCorpusService.getCarModelList());
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);
diFyImageReq.setBusinessData(corpusReportDTO);
// 获取配置
JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT.getCode());
log.info("runDify execDifyFlow {}", execDifyFlow);
@@ -198,6 +206,10 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl<TmOdsVdqwM
String text = execDifyFlow.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;
}
Map<String, String> ltoMap = new HashMap<>();
ltoMap.put("analysisRecordId", execDifyFlow.getString("aiAnalysisRequestId"));
ltoMap.put("analysisScene", "1");

View File

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.volvo.ai.analytic.center.constant.Constant;
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.req.CarModelReqDTO;
import com.volvo.ai.analytic.center.dto.req.DiFyReq;
import com.volvo.ai.analytic.center.dto.req.RunMaskingRuleInput;
@@ -28,6 +29,7 @@ import com.volvo.ai.analytic.center.utils.ConstantStr;
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.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
@@ -39,6 +41,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -127,9 +131,17 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl<TmTelephoneCorpusM
});
ZonedDateTime zonedDateTime = ZonedDateTime.parse(jsonObject.getString("start_time"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateStartTime = zonedDateTime.format(formatter);
inputMap.put("chat",chatList.toString());
inputMap.put("model",getCarModelList());
diFyImageReq.setInputs(inputMap);
CorpusReportDTO corpusReportDTO = new CorpusReportDTO();
corpusReportDTO.setCorpusTime(formattedDateStartTime);
corpusReportDTO.setRecordId(aicorpusTelephone.getSourceId());
diFyImageReq.setBusinessData(corpusReportDTO);
// 获取配置
JSONObject execDifyFlow = diFyService.executeDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT.getCode());
log.info("runDify execDifyFlow {}",execDifyFlow);
@@ -138,12 +150,16 @@ public class TmTelephoneCorpusServiceImpl extends ServiceImpl<TmTelephoneCorpusM
String text = execDifyFlow.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;
}
Map<String, String> ltoMap = new HashMap();
ltoMap.put("analysisRecordId", execDifyFlow.getString("aiAnalysisRequestId"));
ltoMap.put("aiAnalysisRequestId", execDifyFlow.getString("aiAnalysisRequestId"));
ltoMap.put("analysisScene", "2");
// ltoMap.put("unionId", aicorpusTelephone.getSourceId());
ltoMap.put("recordId", aicorpusTelephone.getSourceId());
ltoMap.put("communicateDate", jsonObject.getString("start_time"));
ltoMap.put("communicateDate", formattedDateStartTime);
ltoMap.put("analysisResult", resultStrOne.replace("#",""));
ltoMap.put("analysisDetail", resultStrTwo);
// 发送MQ

View File

@@ -14,12 +14,12 @@ public class FlowResultSplitUtil {
public static String flowOutputTextSplit(String text, String startMark, String endMark) {
int startIndex = text.indexOf(startMark);
if (startIndex == -1) {
return "未找到任务起始标记:" + startMark;
return "" ;
}
int endIndex = (endMark != null) ? text.indexOf(endMark) : text.length();
if (endIndex == -1) {
return "未找到任务结束标记:" + endMark;
return "" ;
}
return text.substring(startIndex, endIndex).trim();