diff --git a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java index 493800f..e94ffd1 100644 --- a/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java +++ b/ai-analytic-center-biz/src/main/java/com/volvo/ai/analytic/center/service/impl/TmOdsVdqwMessagearchivingServiceImpl.java @@ -164,96 +164,105 @@ public class TmOdsVdqwMessagearchivingServiceImpl extends ServiceImpl contetnList = tmOdsVdqwMessagearchivingMapper.queryOdsVdqwMessageByFromUserIdAndAcceptUserId(statTime, endTime, Arrays.asList(item.getFromUserId(), item.getAcceptUserId()) ); - - log.info("一条完整的企微信息的聊天内容,未加密:{}", contetnList.toString()); - OdsVdqwMessageOTD maxMsgTimeItem = contetnList.stream() - .max((o1, o2) -> o1.getMsgTime().compareTo(o2.getMsgTime())) - .orElse(null); - - List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.SMART_ASSISTANT_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("没有客户回复的语料,无需解析"); + DiFyReq diFyImageReq = new DiFyReq(); + CorpusReportDTO corpusReportDTO = new CorpusReportDTO(); + OdsVdqwMessageOTD finalMaxMsgTimeItem = new OdsVdqwMessageOTD(); + StringBuffer chatList = new StringBuffer(); + String unionId = ""; + synchronized (this) {// 1,vdqw_workuserinfo 这个表对应是 B端认证中心userId + // 2,vdqw_externalcontact 这个表对应是 企微客户unionId + TmOdsVdqwExternalcontact tmOdsVdqwExternalcontact = getUnionId(Arrays.asList(item.getFromUserId(), item.getAcceptUserId())); + TmOdsVdqwWorkuserinfo tmOdsVdqwWorkuserinfo = getUserId(Arrays.asList(item.getFromUserId(), item.getAcceptUserId())); + if (null == tmOdsVdqwExternalcontact || null == tmOdsVdqwWorkuserinfo) { + log.info("企微查询信息为空 "); return; } - log.info("一条完整的企微信息的聊天内容,循环次数:{} ,应该循环次数:{}, 掩码后:{}", externalcontactCount.get(),contetnList.size(),chatList.toString()); + unionId = tmOdsVdqwExternalcontact.getUnionId(); + String userId = tmOdsVdqwWorkuserinfo.getMiddleUserId().toString(); + log.info("企微查询信息:unionId:{}, userId:{}", unionId, userId); + if (StringUtils.isNotBlank(item.getFromUserId()) && StringUtils.isNotBlank(item.getAcceptUserId())) { + List contetnList = tmOdsVdqwMessagearchivingMapper.queryOdsVdqwMessageByFromUserIdAndAcceptUserId(statTime, endTime, Arrays.asList(item.getFromUserId(), item.getAcceptUserId())); - Map inputMap = new HashMap<>(); - DiFyReq diFyImageReq = new DiFyReq(); - diFyImageReq.setUser(ConstantStr.corpus_user); - diFyImageReq.setFlowId(qiweiToken); - 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); + log.info("一条完整的企微信息的聊天内容,未加密:{}", contetnList.toString()); + finalMaxMsgTimeItem = contetnList.stream() + .max((o1, o2) -> o1.getMsgTime().compareTo(o2.getMsgTime())) + .orElse(null); - CorpusReportDTO corpusReportDTO = new CorpusReportDTO(); - corpusReportDTO.setCorpusTime(DateUtil.format(maxMsgTimeItem.getMsgTime(), DatePattern.NORM_DATETIME_PATTERN)); - corpusReportDTO.setUnionId(unionId); - corpusReportDTO.setUserId(userId); - corpusReportDTO.setAnalysisScene(1l); + List maskingRuleItems = dataMaskingRuleService.getDataMaskingRuleListByApplicationChannel(BusinessTypeEnum.SMART_ASSISTANT_QIWEI.getCode()); + RunMaskingRuleInput runMaskingRuleInput = new RunMaskingRuleInput(); + runMaskingRuleInput.setDataMaskingRules(maskingRuleItems); + + 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; + } + log.info("一条完整的企微信息的聊天内容,循环次数:{} ,应该循环次数:{}, 掩码后:{}", externalcontactCount.get(), contetnList.size(), chatList.toString()); + + Map inputMap = new HashMap<>(); + + diFyImageReq.setUser(ConstantStr.corpus_user); + diFyImageReq.setFlowId(qiweiToken); + inputMap.put("chat", chatList.toString()); + inputMap.put("analysisScene", "1"); + inputMap.put("unionId", unionId); + inputMap.put("consultantId", userId); + inputMap.put("communicateDate", DateUtil.format(finalMaxMsgTimeItem.getMsgTime(), DatePattern.NORM_DATETIME_PATTERN)); + inputMap.put("version", 2); + diFyImageReq.setInputs(inputMap); + corpusReportDTO.setCorpusTime(DateUtil.format(finalMaxMsgTimeItem.getMsgTime(), DatePattern.NORM_DATETIME_PATTERN)); + corpusReportDTO.setUnionId(unionId); + corpusReportDTO.setUserId(userId); + corpusReportDTO.setAnalysisScene(1l); - - // 使用多线程并行执行两个业务场景 - log.info("第1个业务场景, 优先执行。 "); - long startTime = System.currentTimeMillis(); - CompletableFuture summaryTask = CompletableFuture.runAsync(() -> { - executeSummaryTask(diFyImageReq, corpusReportDTO, item, maxMsgTimeItem); - }, executor); - - long startTime2 = System.currentTimeMillis(); - CompletableFuture portraitTask = CompletableFuture.runAsync(() -> { - executePortraitTask(unionId, maxMsgTimeItem, chatList, corpusReportDTO); - }, executor); - - // 等待两个任务完成 - CompletableFuture.allOf(summaryTask, portraitTask).join(); - - long endTime1 = System.currentTimeMillis(); - log.info("第一个业务场景(总结和分类)执行时间: {} ms", (endTime1 - startTime)); - long endTime2 = System.currentTimeMillis(); - log.info("第二个业务场景(用户画像)执行时间: {} ms", (endTime2 - startTime2)); - + } } + // 使用多线程并行执行两个业务场景 + log.info("第1个业务场景, 优先执行。 "); + long startTime = System.currentTimeMillis(); + + + OdsVdqwMessageOTD finalMaxMsgTimeItem1 = finalMaxMsgTimeItem; + CompletableFuture summaryTask = CompletableFuture.runAsync(() -> { + executeSummaryTask(diFyImageReq, corpusReportDTO, item, finalMaxMsgTimeItem1); + }, executor); + + long startTime2 = System.currentTimeMillis(); + OdsVdqwMessageOTD finalMaxMsgTimeItem2 = finalMaxMsgTimeItem; + String finalUnionId = unionId; + CompletableFuture portraitTask = CompletableFuture.runAsync(() -> { + executePortraitTask(finalUnionId, finalMaxMsgTimeItem2, chatList, corpusReportDTO); + }, executor); + + // 等待两个任务完成 + CompletableFuture.allOf(summaryTask, portraitTask).join(); + + long endTime1 = System.currentTimeMillis(); + log.info("第一个业务场景(总结和分类)执行时间: {} ms", (endTime1 - startTime)); + long endTime2 = System.currentTimeMillis(); + log.info("第二个业务场景(用户画像)执行时间: {} ms", (endTime2 - startTime2)); + + } public TmOdsVdqwExternalcontact getUnionId(List userIds){