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 5efdb64..4def1a2 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,5 +4,7 @@ public class Constant { public static final String rabbitMqFormQueue = "Voc-Defeat-Dcc"; + public static final String rabbitToFormQueue = "Voc-DefeatResponse-Dcc"; + public static final String CHANNEL_DCC = "Channel_Dcc"; } diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/RabbitMqFormData.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/RabbitMqFormData.java index 917c8a2..80fd666 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/RabbitMqFormData.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/RabbitMqFormData.java @@ -8,7 +8,7 @@ import lombok.Data; @Data public class RabbitMqFormData { private String formId; - private int sinceType; - private int subSinceType; + private Integer sinceType; + private Integer subSinceType; private Object data; } diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/MqMessageRecord.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/MqMessageRecord.java index 762746d..3fc137c 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/MqMessageRecord.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/MqMessageRecord.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.time.LocalDateTime; import java.util.Date; /** * MQ接收数据表实体类 @@ -14,8 +15,7 @@ import java.util.Date; @Data @Accessors @EqualsAndHashCode(callSuper = true) -//@TableName("tt_mq_message_record") -@TableName("tm_custom") +@TableName("tt_mq_message_record") public class MqMessageRecord extends BaseEntity { /** @@ -27,85 +27,73 @@ public class MqMessageRecord extends BaseEntity { /** * 场景类型 1,质检分析 */ -// @TableField("since_type") - @TableField(select = false) + @TableField("since_type") private Integer sinceType; /** * 1,新车销售,2,二手车销售,3,收车销售,4 首定保,5延保 */ -// @TableField("sub_since_type") - @TableField(select = false) + @TableField("sub_since_type") private Integer subSinceType; /** * sessionId */ -// @TableField("biz_no") - @TableField(select = false) + @TableField("biz_no") private String bizNo; /** * sourceId */ -// @TableField("sub_biz_no") - @TableField(select = false) + @TableField("sub_biz_no") private String subBizNo; /** * 消息体小于4000直接存消息体,大于存Iobs key */ -// @TableField("message_content") - @TableField(select = false) + @TableField("message_content") private String messageContent; /** * mq消息体Iobs key */ -// @TableField("message_iobs_key") - @TableField(select = false) + @TableField("message_iobs_key") private String messageIobsKey; /** * mq message key */ -// @TableField("message_key") - @TableField(select = false) + @TableField("message_key") private String messageKey; /** * 批处理重试次数,默认3次 */ -// @TableField("retry_count") - @TableField(select = false) + @TableField("retry_count") private Integer retryCount; /** * 最后一次重试时间 */ -// @TableField("last_retry_time") - @TableField(select = false) - private Date lastRetryTime; + @TableField("last_retry_time") + private LocalDateTime lastRetryTime; /** * 响应码 */ -// @TableField("resp_code") - @TableField(select = false) + @TableField("resp_code") private String respCode; /** * 错误消息 截取200长度字符 */ -// @TableField("resp_content") - @TableField(select = false) + @TableField("resp_content") private String respContent; /** * 任务状态: 0:待分析,1.分析中, 2.分析完成, 3.分析失败 */ -// @TableField("task_status") - @TableField(select = false) + @TableField("task_status") private Integer taskStatus; /** diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/CategoryEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/CategoryEnum.java new file mode 100644 index 0000000..dc7fac9 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/CategoryEnum.java @@ -0,0 +1,24 @@ +package com.volvo.ai.analytic.center.enums; + +public enum CategoryEnum { + + ENTERPRISE_WECHAT("企微", "企微记录"), + PHONE_VOICE("语音", "语音记录"), + OTHER("未知", "未知记录"), + ; + private String code; + private String message; + + CategoryEnum(String code, String message) { + this.code = code; + this.message = message; + } + + public String getCode() { + return this.code; + } + + public String getMessage() { + return this.message; + } +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/HandleStatusEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/HandleStatusEnum.java new file mode 100644 index 0000000..a99e358 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/HandleStatusEnum.java @@ -0,0 +1,24 @@ +package com.volvo.ai.analytic.center.enums; + +public enum HandleStatusEnum { + + ANALYSIS_NORMAL(200, "分析完成"), + ANALYSIS_CONTENT_EMPTY(400, "语料信息为空"), + ANALYSIS_CALLING(500, "存在未完成解析的通话信息"), + ; + private Integer code; + private String message; + + HandleStatusEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return this.code; + } + + public String getMessage() { + return this.message; + } +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/MessageConvertEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/MessageConvertEnum.java new file mode 100644 index 0000000..309da39 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/MessageConvertEnum.java @@ -0,0 +1,25 @@ +package com.volvo.ai.analytic.center.enums; + +public enum MessageConvertEnum { + + CONFIRMED("确认到店", "客户确认将到店"), + LOOK_ON("继续观望", "客户继续观望中"), + GIVE_UP("放弃购车", "客户放弃购车"), + INVALID("无效通话", "近三天无有效通话记录"), + ; + private String code; + private String message; + + MessageConvertEnum(String code, String message) { + this.code = code; + this.message = message; + } + + public String getCode() { + return this.code; + } + + public String getMessage() { + return this.message; + } +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/MqTaskStatusEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/MqTaskStatusEnum.java index 67735c5..cadb75d 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/MqTaskStatusEnum.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/MqTaskStatusEnum.java @@ -1,20 +1,20 @@ package com.volvo.ai.analytic.center.enums; public enum MqTaskStatusEnum { - Analysis_Wait(0, "待分析"), - Analysis_Underway(1, "分析中"), - Analysis_Completion(2, "分析完成"), - Analysis_Failure(3, "分析失败"), + ANALYSIS_WAIT(0, "待分析"), + ANALYSIS_UNDERWAY(1, "分析中"), + ANALYSIS_COMPLETION(2, "分析完成"), + ANALYSIS_FAILURE(3, "分析失败"), ; - private int code; + private Integer code; private String name; - MqTaskStatusEnum(int code, String name) { + MqTaskStatusEnum(Integer code, String name) { this.code = code; this.name = name; } - public int getCode() { + public Integer getCode() { return this.code; } } diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/RoleEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/RoleEnum.java new file mode 100644 index 0000000..6a777d6 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/RoleEnum.java @@ -0,0 +1,24 @@ +package com.volvo.ai.analytic.center.enums; + +public enum RoleEnum { + + AGENT("AGENT", "客服"), + USER("USER", "客户"), + OTHER("OTHER", "未知"), + ; + private String code; + private String message; + + RoleEnum(String code, String message) { + this.code = code; + this.message = message; + } + + public String getCode() { + return this.code; + } + + public String getMessage() { + return this.message; + } +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/SinceTypeEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/SinceTypeEnum.java new file mode 100644 index 0000000..7042115 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/SinceTypeEnum.java @@ -0,0 +1,18 @@ +package com.volvo.ai.analytic.center.enums; + + +public enum SinceTypeEnum { + SINCETYPE2(2, ""), + ; + private Integer code; + private String name; + + SinceTypeEnum(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return this.code; + } +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/SubSinceTypeEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/SubSinceTypeEnum.java index 814e7d3..056bf72 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/SubSinceTypeEnum.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/SubSinceTypeEnum.java @@ -2,19 +2,19 @@ package com.volvo.ai.analytic.center.enums; public enum SubSinceTypeEnum { - SinceType51(51, "真假战败分析请求"), - SinceType52(52, "真假战败审批结果"), - SinceType53(53, "真假战败分析结果"), + SINCETYPE51(51, "真假战败分析请求"), + SINCETYPE52(52, "真假战败审批结果"), + SINCETYPE53(53, "真假战败分析结果"), ; - private int code; + private Integer code; private String name; - SubSinceTypeEnum(int code, String name) { + SubSinceTypeEnum(Integer code, String name) { this.code = code; this.name = name; } - public int getCode() { + public Integer getCode() { return this.code; } } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/rabbitMq/MessageListener.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/rabbitMq/MessageListener.java index 411fbac..8f346ef 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/rabbitMq/MessageListener.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/rabbitMq/MessageListener.java @@ -2,18 +2,24 @@ package com.volvo.ai.analytic.center.rabbitMq; import com.volvo.ai.analytic.center.constant.Constant; +import com.volvo.ai.analytic.center.service.MqMessageRecordService; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Slf4j @Component public class MessageListener { + @Autowired + private MqMessageRecordService mqMessageRecordService; + //默认情况下,当使用@RabbitListener注解时,消息确认模式通常是自动的(AcknowledgeMode.AUTO)可以在yaml文件中更改, // 消息一旦被消费者接收并处理完成(即方法执行完成),就会自动发送ack确认给RabbitMQ。 @RabbitListener(queues = Constant.rabbitMqFormQueue) public void onMessage(String message) { log.info("Received message: " + message); + boolean result = mqMessageRecordService.processMessageByMQ(message); } } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/MqMessageRecordServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/MqMessageRecordServiceImpl.java index 5eccca7..c8a4407 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/MqMessageRecordServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/MqMessageRecordServiceImpl.java @@ -5,23 +5,21 @@ import com.alibaba.cloud.commons.lang.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.fasterxml.jackson.databind.ObjectMapper; import com.volvo.ai.analytic.center.constant.Constant; import com.volvo.ai.analytic.center.dto.req.*; import com.volvo.ai.analytic.center.dto.resp.*; import com.volvo.ai.analytic.center.entity.DataMaskingRule; import com.volvo.ai.analytic.center.entity.DiffdefeatApprove; import com.volvo.ai.analytic.center.entity.MqMessageRecord; -import com.volvo.ai.analytic.center.enums.MqTaskStatusEnum; -import com.volvo.ai.analytic.center.enums.SubSinceTypeEnum; +import com.volvo.ai.analytic.center.enums.*; import com.volvo.ai.analytic.center.mapper.MqMessageRecordMapper; import com.volvo.ai.analytic.center.service.DataMaskingRuleService; import com.volvo.ai.analytic.center.service.DiFyService; import com.volvo.ai.analytic.center.service.DiffdefeatApproveService; import com.volvo.ai.analytic.center.service.MqMessageRecordService; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @@ -37,6 +35,9 @@ import java.util.stream.Collectors; @Service public class MqMessageRecordServiceImpl extends ServiceImpl implements MqMessageRecordService { + @Autowired + private AmqpTemplate rabbitTemplate; + @Autowired private DataMaskingRuleService dataMaskingRuleService; @@ -63,6 +64,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(Constant.CHANNEL_DCC); @@ -178,12 +180,12 @@ public class MqMessageRecordServiceImpl extends ServiceImpl sourceIds = Optional.ofNullable(input.getCallList()).map(list -> list.stream().map(CallItem::getSourceId).collect(Collectors.toList())).orElse(Collections.emptyList()); if (!CollectionUtils.isEmpty(sourceIds)) { //查询未完成解析的通话信息 - String sourceId = sourceIds.stream().map(code -> "'"+String.valueOf(code)+"'").collect(Collectors.joining(",")); + String sourceId = sourceIds.stream().map(code -> "'"+code+"'").collect(Collectors.joining(",")); int asrCount = clickhouseJdbcTemplate.queryForObject("select count(1) from asr_speechdetail where source_id in ("+ sourceId+") and file_status='InProgress'",Integer.class); if (asrCount > 0) { - output.setHandleStatus(500); - output.setResultStr("存在未完成解析的通话信息"); - return new DiffDefeatAnalyseOutputResult(output, contentStr); + output.setHandleStatus(HandleStatusEnum.ANALYSIS_CALLING.getCode()); + output.setResultStr(HandleStatusEnum.ANALYSIS_CALLING.getMessage()); + return new DiffDefeatAnalyseOutputResult(output, contentStr.toString()); } //查询到的通话数据 List> hishistoryList = clickhouseJdbcTemplate.queryForList("select id,msg_json,source_id from asr_hishistory where dialect_text=0 and source_id in ("+ sourceId+") order by id"); @@ -194,7 +196,7 @@ public class MqMessageRecordServiceImpl extends ServiceImpl entity.get("msg_json") == null ? "" : entity.get("msg_json").toString()); DiffDefeatCorpuItem curDiffDefeatCorpuItem = new DiffDefeatCorpuItem(); curDiffDefeatCorpuItem.setSourceId(item.getSourceId()); - curDiffDefeatCorpuItem.setCategory("语音"); + curDiffDefeatCorpuItem.setCategory(CategoryEnum.PHONE_VOICE.getCode()); curDiffDefeatCorpuItem.setCorpuText(result.isPresent() ? result.get() : ""); curDiffDefeatCorpuItem.setHappenTime(item.getAudioTime()); curDiffDefeatCorpuItems.add(curDiffDefeatCorpuItem); @@ -239,47 +241,47 @@ public class MqMessageRecordServiceImpl extends ServiceImpl mqMessageRecords = this.lambdaQuery() - .eq(MqMessageRecord::getTaskStatus, MqTaskStatusEnum.Analysis_Failure.getCode()) + .eq(MqMessageRecord::getTaskStatus, MqTaskStatusEnum.ANALYSIS_FAILURE.getCode()) .eq(MqMessageRecord::getSinceType, 2) .le(MqMessageRecord::getRetryCount, 3) .ge(MqMessageRecord::getCreateTime, startTime) @@ -317,25 +319,25 @@ public class MqMessageRecordServiceImpl extends ServiceImpl curDiffDefeatCorpuItems, Date sliceStartTime, Date sliceStopTime, List sessionItems) { @@ -455,9 +458,9 @@ public class MqMessageRecordServiceImpl extends ServiceImpl