From 842974a47a846ee29c35842f035a87d3ca9f1ebc Mon Sep 17 00:00:00 2001 From: zren25 Date: Fri, 7 Mar 2025 14:38:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E8=AF=9D=E8=AF=AD=E6=96=99=E8=AF=B7?= =?UTF-8?q?=E6=B1=82dify=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../center/dto/req/CarModelReqDTO.java | 41 ++++++ .../center/dto/resp/CarModelRespDTO.java | 65 +++++++++ .../analytic/center/dto/resp/ResultDTO.java | 19 +++ .../center/entity/AiAnalysisRequestLogs.java | 3 + .../ai/analytic/center/enums/BizEnum.java | 2 + .../center/enums/BusinessTypeEnum.java | 3 +- .../center/feign/RemoteCarModelClient.java | 18 +++ .../center/mq/CorpusProcessKafkaConsumer.java | 6 + .../service/AiAnalysisErrorsService.java | 2 + .../analytic/center/service/DiFyService.java | 4 + .../service/TmTelephoneCorpusService.java | 4 + .../impl/AiAnalysisErrorsServiceImpl.java | 18 +++ .../center/service/impl/DiFyServiceImpl.java | 51 +++++++ .../impl/TmTelephoneCorpusServiceImpl.java | 125 +++++++++++++++++- .../center/utils/FlowResultSplitUtil.java | 27 ++++ 15 files changed, 386 insertions(+), 2 deletions(-) create mode 100644 ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/CarModelReqDTO.java create mode 100644 ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/CarModelRespDTO.java create mode 100644 ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ResultDTO.java create mode 100644 ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/feign/RemoteCarModelClient.java create mode 100644 ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/utils/FlowResultSplitUtil.java diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/CarModelReqDTO.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/CarModelReqDTO.java new file mode 100644 index 0000000..c093407 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/req/CarModelReqDTO.java @@ -0,0 +1,41 @@ +package com.volvo.ai.analytic.center.dto.req; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CarModelReqDTO { + + //@ApiModelProperty("燃料类型") + private Integer fuelType; + + //@ApiModelProperty("是否包含主图 0 不包含 1 包含 默认不包含") + private Integer isContainMainImage; + + //@ApiModelProperty("车型类型") + private Integer modelType; + + //@ApiModelProperty("车型代码") + private String modelCode; + + //@ApiModelProperty("年款") + private String modelYear; + + //@ApiModelProperty("是否有效 10041001 有效 10041002 无效") + private Integer isValid; + + //@ApiModelProperty("是否是直售 10041001 是 10041002 否") + private Integer isDirectModel; + + //@ApiModelProperty("是否在售(10041001:是 10041002: 否)") + private Integer onSale; + + //@ApiModelProperty("车系ID") + private Integer seriesId; + + //@ApiModelProperty("车型名称模糊查询") + private String modelName; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/CarModelRespDTO.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/CarModelRespDTO.java new file mode 100644 index 0000000..f953100 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/CarModelRespDTO.java @@ -0,0 +1,65 @@ +package com.volvo.ai.analytic.center.dto.resp; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CarModelRespDTO { + + // ("燃料类型") + private Integer fuelType; + + // ("公司代码") + private String companyCode; + + // @ApiModelProperty("主图") + private String imageUrl; + + // @ApiModelProperty("车型代码") + private String modelCode; + + // @ApiModelProperty("车型描述(中文)") + private String modelDescriptionChinese; + + // ("是否直售车型:10041001:是;10041002:否") + private Integer isDirectModel; + + // ("车型描述(英文)") + private String modelDescriptionEnglish; + + // ("车型名称") + private String modelName; + + // ("车型名称英文") + private String modelNameEn; + + // ("车型类型") + private Integer modelType; + + // ("年款") + private String modelYear; + + // ("车系代码") + private String seriesCode; + + // ("车型id") + private Integer id; + + // ("排序") + private Integer sort; + + // ("是否有效 10041001 有效 10041002 无效") + private Integer isValid; + + // ("是否在售(10041001:是 10041002: 否)") + private Integer onSale; + + //@ApiModelProperty("车型名称 沃世界名称") + private String modelNameC; + + //@ApiModelProperty("备注") + private String modelRemark; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ResultDTO.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ResultDTO.java new file mode 100644 index 0000000..c8b8551 --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/dto/resp/ResultDTO.java @@ -0,0 +1,19 @@ +package com.volvo.ai.analytic.center.dto.resp; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ResultDTO implements Serializable { + + private static final long serialVersionUID = -1179271389084311472L; + + private String returnCode; + + private String returnMessage; + + private String errMsg; + + private T data; +} diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalysisRequestLogs.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalysisRequestLogs.java index 457c93a..9db74bc 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalysisRequestLogs.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/entity/AiAnalysisRequestLogs.java @@ -29,6 +29,9 @@ public class AiAnalysisRequestLogs extends BaseEntity { @TableField("business_response") private String businessResponse; // JSON 字符串 + @TableField("dify_response") + private String difyResponse; + @TableField("quest_status") private String questStatus; diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BizEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BizEnum.java index 3c3927d..3b1e9e1 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BizEnum.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BizEnum.java @@ -14,7 +14,9 @@ import java.util.Objects; @Getter @ToString public enum BizEnum { + SUCCESS(200, "操作成功"), + FAIL(500, "操作失败"), BAD_REQUEST(4000, "参数不合法"), METHOD_NOT_ALLOWED(4001, "方法不允许"), MISS_PARAM(4002, "参数缺失"), diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java index 43623bd..4f19e9f 100644 --- a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/enums/BusinessTypeEnum.java @@ -5,7 +5,8 @@ import lombok.Getter; @Getter public enum BusinessTypeEnum { - COMMUNITYTARGET("CommunityTarget", "社区舆情分析") + COMMUNITYTARGET("CommunityTarget", "社区舆情分析"), + SMART_ASSISTANT("SMART_ASSISTANT", "智能助手") ; private String code; diff --git a/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/feign/RemoteCarModelClient.java b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/feign/RemoteCarModelClient.java new file mode 100644 index 0000000..c9aef0b --- /dev/null +++ b/ai-analytic-center-api/src/main/java/com/volvo/ai/analytic/center/feign/RemoteCarModelClient.java @@ -0,0 +1,18 @@ +package com.volvo.ai.analytic.center.feign; + +import com.volvo.ai.analytic.center.dto.req.CarModelReqDTO; +import com.volvo.ai.analytic.center.dto.resp.CarModelRespDTO; +import com.volvo.ai.analytic.center.dto.resp.ResultDTO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +@FeignClient(url = "${mse-in.url.domain}", contextId = "basic-data-client", value = "basicDataClient", path = "/2b/2b-basicdata-service") +public interface RemoteCarModelClient { + + @PostMapping(name = "查询车型", path = "/model/list") + ResultDTO> queryCarModelList(@RequestBody CarModelReqDTO carModelReqDTO); + +} diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusProcessKafkaConsumer.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusProcessKafkaConsumer.java index 494394a..90596a8 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusProcessKafkaConsumer.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/mq/CorpusProcessKafkaConsumer.java @@ -10,6 +10,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; @@ -22,6 +24,7 @@ import java.time.LocalDateTime; **/ @Slf4j @Component +@RestController public class CorpusProcessKafkaConsumer { @Autowired @@ -29,6 +32,7 @@ public class CorpusProcessKafkaConsumer { private final ObjectMapper objectMapper = new ObjectMapper(); + @GetMapping("corpusProcessKafkaConsumer") @KafkaListener(topics = "${spring.kafka.topic}", groupId = "${spring.kafka.group}") public void listen(String message) { try { @@ -44,6 +48,8 @@ public class CorpusProcessKafkaConsumer { tmTelephoneCorpus.setCreateTime(LocalDateTime.now()); tmTelephoneCorpusService.saveTelephoneCorpus(tmTelephoneCorpus); + tmTelephoneCorpusService.runDify(aicorpusTelephone); + // 在这里可以添加对解析后的对象的进一步处理逻辑 } catch (Exception e) { e.printStackTrace(); diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/AiAnalysisErrorsService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/AiAnalysisErrorsService.java index e5ebb2a..abf457e 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/AiAnalysisErrorsService.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/AiAnalysisErrorsService.java @@ -4,4 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.volvo.ai.analytic.center.entity.AiAnalysisErrors; public interface AiAnalysisErrorsService extends IService { + + boolean saveAiAnalysisErrors(AiAnalysisErrors entity); } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/DiFyService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/DiFyService.java index ea4a511..7ec8108 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/DiFyService.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/DiFyService.java @@ -1,9 +1,13 @@ package com.volvo.ai.analytic.center.service; +import com.alibaba.fastjson.JSONObject; import com.volvo.ai.analytic.center.dto.req.DiFyReq; +import com.volvo.ai.analytic.center.enums.BusinessTypeEnum; public interface DiFyService { public Object getDiFyObject(DiFyReq diFyReq); + + public JSONObject execDifyFlow(DiFyReq diFyReq, String businessType); } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java index 2e2b879..85a83bf 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/TmTelephoneCorpusService.java @@ -1,6 +1,7 @@ package com.volvo.ai.analytic.center.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO; import com.volvo.ai.analytic.center.entity.TmTelephoneCorpus; import java.util.Map; @@ -14,4 +15,7 @@ public interface TmTelephoneCorpusService extends IService { void saveTelephoneCorpus(TmTelephoneCorpus tmTelephoneCorpus); + + + void runDify(AicorpusTelephoneDTO aicorpusTelephone); } \ No newline at end of file diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/AiAnalysisErrorsServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/AiAnalysisErrorsServiceImpl.java index eb1ebbc..a7c88e9 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/AiAnalysisErrorsServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/AiAnalysisErrorsServiceImpl.java @@ -1,13 +1,31 @@ package com.volvo.ai.analytic.center.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.volvo.ai.analytic.center.entity.AiAnalysisErrors; import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper; import com.volvo.ai.analytic.center.service.AiAnalysisErrorsService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Slf4j @Service public class AiAnalysisErrorsServiceImpl extends ServiceImpl implements AiAnalysisErrorsService { + @Autowired + private AiAnalysisErrorsMapper aiAnalysisErrorsMapper; + + @Override + public boolean saveAiAnalysisErrors(AiAnalysisErrors entity) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AiAnalysisErrors::getAiAnalysisRequestId, entity.getAiAnalysisRequestId()); + AiAnalysisErrors oldAiAnalysisErrors = aiAnalysisErrorsMapper.selectOne(queryWrapper); + if (oldAiAnalysisErrors == null) { + return aiAnalysisErrorsMapper.insert(entity) > 0; + } else { + return aiAnalysisErrorsMapper.update(entity, queryWrapper) > 0; + } + } } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java index bef1387..1ed0cb0 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/DiFyServiceImpl.java @@ -1,13 +1,22 @@ package com.volvo.ai.analytic.center.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.volvo.ai.analytic.center.dto.req.DiFyReq; +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.feign.DiFyFeign; +import com.volvo.ai.analytic.center.mapper.AiAnalysisErrorsMapper; +import com.volvo.ai.analytic.center.mapper.AiAnalysisRequestLogsMapper; +import com.volvo.ai.analytic.center.service.AiAnalysisErrorsService; import com.volvo.ai.analytic.center.service.DiFyService; +import com.volvo.ai.analytic.center.utils.AiAnalysisUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -18,6 +27,12 @@ public class DiFyServiceImpl implements DiFyService{ @Autowired private DiFyFeign diFyFeign; + @Autowired + private AiAnalysisRequestLogsMapper aiAnalysisRequestLogsMapper; + + @Autowired + private AiAnalysisErrorsService aiAnalysisErrorsService; + @Override public Object getDiFyObject(DiFyReq diFyReq) { Map map = new HashMap<>(); @@ -33,4 +48,40 @@ public class DiFyServiceImpl implements DiFyService{ } return ""; } + + @Override + public JSONObject execDifyFlow(DiFyReq diFyReq, String businessType) { + String aiAnalysisRequestId = AiAnalysisUtils.getAiAnalysisRequestId(businessType); + try { + Map map = new HashMap<>(); + map.put("inputs",diFyReq.getInputs()); + map.put("response_mode","blocking"); + map.put("user",diFyReq.getUser()); + JSONObject difyResult = diFyFeign.runWorkflows("Bearer "+diFyReq.getFlowId(),map); + JSONObject data = difyResult.getJSONObject("data"); + log.info("execDifyFlow dify response data:{}",data); + + // 保存请求日志 + aiAnalysisRequestLogsMapper.insert(AiAnalysisRequestLogs.builder() + .aiAnalysisRequestId(aiAnalysisRequestId) + .businessRequest("") + .difyAgentKey(diFyReq.getFlowId()) + .difyRequest(JSON.toJSONString(diFyReq)) + .aiAnalysisRequestType(businessType) + .difyResponse(data.toJSONString()) + .build()); + + return data; + + } catch (Exception e) { + log.error("dify请求失败",e); + aiAnalysisErrorsService.saveAiAnalysisErrors(AiAnalysisErrors.builder() + .aiAnalysisRequestId(aiAnalysisRequestId) + .aiAnalysisErrorHandlingStatus("0") + .aiAnalysisErrorMessage(e.getMessage()) + .build()); + return null; + } + + } } diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java index d6c4c2a..68d88ef 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmTelephoneCorpusServiceImpl.java @@ -1,14 +1,37 @@ package com.volvo.ai.analytic.center.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.volvo.ai.analytic.center.dto.corpus.AicorpusTelephoneDTO; +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.resp.CarModelRespDTO; +import com.volvo.ai.analytic.center.dto.resp.ResultDTO; import com.volvo.ai.analytic.center.entity.TmTelephoneCorpus; -import com.volvo.ai.analytic.center.exception.BizException; +import com.volvo.ai.analytic.center.enums.BizEnum; +import com.volvo.ai.analytic.center.enums.BusinessTypeEnum; +import com.volvo.ai.analytic.center.feign.RemoteCarModelClient; import com.volvo.ai.analytic.center.mapper.TmTelephoneCorpusMapper; +import com.volvo.ai.analytic.center.service.DiFyService; import com.volvo.ai.analytic.center.service.TmTelephoneCorpusService; +import com.volvo.ai.analytic.center.utils.FlowResultSplitUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.rocketmq.client.producer.SendCallback; +import org.apache.rocketmq.client.producer.SendResult; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.messaging.support.MessageBuilder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + /** * @description 电话语料表-同步表 @@ -20,9 +43,109 @@ import org.springframework.transaction.annotation.Transactional; public class TmTelephoneCorpusServiceImpl extends ServiceImpl implements TmTelephoneCorpusService { + @Autowired + private DiFyService diFyService; + + @Resource + private RocketMQTemplate rocketMqTemplate; + + @Value("${rocketmq.corpusTelephone.topic}") + private String topic; + + @Autowired + private RemoteCarModelClient remoteCarModelClient; + @Override @Transactional public void saveTelephoneCorpus(TmTelephoneCorpus tmTelephoneCorpus) { this.save(tmTelephoneCorpus); } + + @Override + public void runDify(AicorpusTelephoneDTO aicorpusTelephone) { + + if(null != aicorpusTelephone){ + + Map inputMap = new HashMap(); + DiFyReq diFyImageReq = new DiFyReq(); + diFyImageReq.setUser("11111"); + diFyImageReq.setFlowId("app-peJXSjHjVKdkYxjdOUuPnZ5b"); + + + JSONObject jsonObject = JSONObject.parseObject( aicorpusTelephone.getDisplay()); + JSONArray segments = jsonObject.getJSONArray("segments"); + // 遍历 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"); + + // 拼接 role 和 text + String chat = role + ": " + text; + System.out.println(chat); + inputMap.put("chat",chat); + }); + + + inputMap.put("model",getCarModelList()); + diFyImageReq.setInputs(inputMap); + // 获取配置 + JSONObject execDifyFlow = diFyService.execDifyFlow(diFyImageReq, BusinessTypeEnum.SMART_ASSISTANT.getCode()); + log.info("runDify execDifyFlow {}",execDifyFlow); + if(null != execDifyFlow && execDifyFlow.get("status").equals("succeeded")){ + + String text = execDifyFlow.getJSONObject("outputs").getString("text"); + String resultStrOne = FlowResultSplitUtil.flowOutputTextSplit(text, "### 任务1", "### 任务2"); + String resultStrTwo =FlowResultSplitUtil.flowOutputTextSplit(text, "### 任务2", null); + Map ltoMap = new HashMap(); + ltoMap.put("analysisRecordId", aicorpusTelephone.getSourceId()); + ltoMap.put("analysisScene", "2"); +// ltoMap.put("unionId", aicorpusTelephone.getSourceId()); + ltoMap.put("recordId", aicorpusTelephone.getSourceId()); + ltoMap.put("communicateDate", jsonObject.get("start_time")); + ltoMap.put("analysisResult", resultStrOne); + ltoMap.put("analysisDetail", resultStrTwo); + // 发送MQ + + log.info("send mq {}",ltoMap); + rocketMqTemplate.asyncSend(topic, MessageBuilder.withPayload(JSON.toJSONString(ltoMap)).build(), + new SendCallback() { + @Override + public void onSuccess(SendResult sendResult) { + log.info("发送导入标签值成功 消息体:{}", JSON.toJSONString(ltoMap)); + } + @Override + public void onException(Throwable e) { + log.error("发送导入标签值异常 消息体:{}, 异常:", JSON.toJSONString(ltoMap), e); + } + }, 10000); + + } + } + } + + private String getCarModelList(){ + long startTime = System.currentTimeMillis(); + CarModelReqDTO carModelReqDTO = new CarModelReqDTO(); + carModelReqDTO.setOnSale(10041001); + carModelReqDTO.setIsValid(10041001); + ResultDTO> cardModelResult= remoteCarModelClient.queryCarModelList(carModelReqDTO); + log.info("queryCarModelList 导出查询耗时开始时间:{}",System.currentTimeMillis()-startTime); + if (BizEnum.SUCCESS.getCode().toString().equals(cardModelResult.getReturnCode()) && CollectionUtils.isNotEmpty(cardModelResult.getData())) { + List carModelRespDTOList = cardModelResult.getData(); + // 拼接 modelName + String modelNames = carModelRespDTOList.stream() + .map(CarModelRespDTO::getModelName) // 提取 modelName + .collect(Collectors.joining(", ")); // 用逗号和空格拼接 + + log.info("拼接后的车型名称: {}", modelNames); + return modelNames; + } + return "C40 RECHARGE、EM90、EX30、S60、S90、V60、V90、XC40、XC40 RECHARGE、XC60、XC90"; + } + + } \ No newline at end of file diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/utils/FlowResultSplitUtil.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/utils/FlowResultSplitUtil.java new file mode 100644 index 0000000..9194d00 --- /dev/null +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/utils/FlowResultSplitUtil.java @@ -0,0 +1,27 @@ +package com.volvo.ai.analytic.center.utils; + +public class FlowResultSplitUtil { + + + /** + * 提取指定任务的内容 + * + * @param text 原始文本 + * @param startMark 任务起始标记(如 "### 任务1") + * @param endMark 任务结束标记(如 "### 任务2"),如果为 null,则提取到文本末尾 + * @return 任务内容 + */ + public static String flowOutputTextSplit(String text, String startMark, String endMark) { + int startIndex = text.indexOf(startMark); + if (startIndex == -1) { + return "未找到任务起始标记:" + startMark; + } + + int endIndex = (endMark != null) ? text.indexOf(endMark) : text.length(); + if (endIndex == -1) { + return "未找到任务结束标记:" + endMark; + } + + return text.substring(startIndex, endIndex).trim(); + } +}