From bf57c37b93ffe57b50e7b2728168db17087cb237 Mon Sep 17 00:00:00 2001 From: haown <454902499@qq.com> Date: Thu, 29 Jan 2026 11:23:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9B=9C=E6=99=BA=E5=A4=96?= =?UTF-8?q?=E5=91=BC=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PatientQuestionOptionResultMapper.java | 1 - .../service/aiob/impl/AIOBServiceImpl.java | 6 +- .../yzaiobs/impl/YZAIOBSServiceImpl.java | 73 +++++++++++-------- .../PatientQuestionOptionResultMapper.xml | 38 +++++----- .../com/xinelu/quartz/task/YZAIOBSTask.java | 9 ++- 5 files changed, 72 insertions(+), 55 deletions(-) diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patientquestionoptionresult/PatientQuestionOptionResultMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patientquestionoptionresult/PatientQuestionOptionResultMapper.java index 3432c323..9f8b3caa 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patientquestionoptionresult/PatientQuestionOptionResultMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patientquestionoptionresult/PatientQuestionOptionResultMapper.java @@ -1,7 +1,6 @@ package com.xinelu.manage.mapper.patientquestionoptionresult; import com.xinelu.manage.domain.patientquestionoptionresult.PatientQuestionOptionResult; - import java.util.List; /** diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/impl/AIOBServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/impl/AIOBServiceImpl.java index 39f884c0..e7949ce5 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/impl/AIOBServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/impl/AIOBServiceImpl.java @@ -708,7 +708,8 @@ public class AIOBServiceImpl implements IAIOBService { } questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult); - if(patientQuestionOptionResults.size()>0) { + if(CollectionUtils.isNotEmpty(patientQuestionOptionResults)) { + log.info("问卷选项结果:{}", patientQuestionOptionResults); patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); } totalScore[0] = totalScore[0].add(questionSubjectVO.getQuestionScore() == null ? BigDecimal.ZERO : questionSubjectVO.getQuestionScore()); @@ -736,7 +737,8 @@ public class AIOBServiceImpl implements IAIOBService { patientQuestionOptionResult.setQuestionSubjectResultId(patientQuestionSubjectResult.getId()); patientQuestionOptionResults.add(patientQuestionOptionResult); }); - if(patientQuestionOptionResults.size()>0) { + if(CollectionUtils.isNotEmpty(patientQuestionOptionResults)) { + log.info("问卷选项结果:{}", patientQuestionOptionResults); patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); } totalScore[0] = totalScore[0].add(BigDecimal.ZERO); diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/yzaiobs/impl/YZAIOBSServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/yzaiobs/impl/YZAIOBSServiceImpl.java index 5387c9af..376fcac8 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/yzaiobs/impl/YZAIOBSServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/yzaiobs/impl/YZAIOBSServiceImpl.java @@ -9,7 +9,6 @@ import com.xinelu.common.config.SystemBusinessConfig; import com.xinelu.common.constant.Constants; import com.xinelu.common.constant.PhoneMessageRemindConstants; import com.xinelu.common.constant.TaskCreateTypeConstant; -import com.xinelu.common.constant.TaskStatisticsTypeConstants; import com.xinelu.common.enums.ContentedAndRemarkableFlagEnum; import com.xinelu.common.enums.ErrorStatusEnum; import com.xinelu.common.enums.NodeExecuteResultStatusEnum; @@ -289,10 +288,10 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { phoneDialRecordMapper.insertPhoneDialRecord(phoneDialRecord); // 修改任务统计表数据 - if (patientTaskExecuteRecordMapper.insertPatientTaskExecuteRecord(patientTaskExecuteRecord) > 0) { - // 任务统计表修改 - patientTaskStatisticsService.updateNum(signPatientManageRoute.getPatientId(), TaskStatisticsTypeConstants.TASK_EXECUTE_NUM, 1); - } + //if (patientTaskExecuteRecordMapper.insertPatientTaskExecuteRecord(patientTaskExecuteRecord) > 0) { + // // 任务统计表修改 + // patientTaskStatisticsService.updateNum(signPatientManageRoute.getPatientId(), TaskStatisticsTypeConstants.TASK_EXECUTE_NUM, 1); + //} //接通状态,1-已接通 if (dutyCallbackDataDto.getIsAnswer() != null && dutyCallbackDataDto.getIsAnswer() == 1) { @@ -409,7 +408,9 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { boolean hasQuestion = false; String aiobQuestionName = ""; for (int i = 0; i < recordList.size(); i++) { - if (recordList.get(i).getContextText().contains(questionNameAlias.replaceAll("\\p{P}", ""))) { + if (StringUtils.equals(recordList.get(i).getRole(), "speech") && StringUtils.isNotBlank(recordList.get(i).getContextText()) + &&recordList.get(i).getContextText().contains(questionNameAlias.replaceAll("\\p{P}", "")) + ) { hasQuestion = true; aiobQuestionName = recordList.get(i).getContextText(); break; @@ -440,13 +441,10 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { questionSubjectOptions.forEach(questionSubjectOption -> { PatientQuestionOptionResult patientQuestionOptionResult = new PatientQuestionOptionResult(); BeanUtils.copyProperties(questionSubjectOption, patientQuestionOptionResult); - patientQuestionOptionResult.setOptionChooseSign(0); + patientQuestionOptionResult.setOptionChooseSign(1); // 设置是否选中, 根据回调数据中命中的意向查询 - List intents = Arrays.asList(questionSubjectOption.getIntent().split("\\|")); - for (String intent : intents) { - if (callResultIntents.contains(intent)) { - patientQuestionOptionResult.setOptionChooseSign(1); - } + if (callResultIntents.contains(questionSubjectOption.getIntent())) { + patientQuestionOptionResult.setOptionChooseSign(0); } patientQuestionOptionResult.setId(null); @@ -477,11 +475,10 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { if (!CollectionUtils.isEmpty(contentedFlag)) { patientQuestionSubmitResult.setContentedFlag(ContentedAndRemarkableFlagEnum.DISCONTENTED.getInfo()); } - + patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); } questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult); - patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); totalScore[0] = totalScore[0].add(questionSubjectVO.getQuestionScore() == null ? BigDecimal.ZERO : questionSubjectVO.getQuestionScore()); } else { @@ -508,7 +505,8 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { patientQuestionOptionResult.setQuestionSubjectResultId(patientQuestionSubjectResult.getId()); patientQuestionOptionResults.add(patientQuestionOptionResult); }); - if(patientQuestionOptionResults.size()>0) { + if(!CollectionUtils.isEmpty(patientQuestionOptionResults)) { + log.info("问卷选项结果:{}", patientQuestionOptionResults); patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); } totalScore[0] = totalScore[0].add(BigDecimal.ZERO); @@ -537,20 +535,18 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { callRecord.setRole(str1[0]); if (StringUtils.equals("机器人", str1[0])) { callRecord.setRole("speech"); - if (str1.length > 1) { - if(StringUtils.isNotBlank(str1[1])) { - // 用^分隔 - String[] content = str1[1].split("\\^"); - for (int i = 0; i < content.length; i++) { - if (StringUtils.contains(content[i], "txt=")) { - callRecord.setContextText(content[i].replaceAll("txt=", "")); - } + if (str1.length > 1 && StringUtils.isNotBlank(str1[1])) { + // 用^分隔 + String[] content = str1[1].split("\\^"); + for (int i = 0; i < content.length; i++) { + if (StringUtils.contains(content[i], "txt=")) { + callRecord.setContextText(content[i].replaceAll("txt=", "")); } } } } else if (StringUtils.equals("用户", str1[0])) { callRecord.setRole("voice"); - if (str1.length > 1) { + if (str1.length > 1 && StringUtils.isNotBlank(str1[1])) { callRecord.setContextText(str1[1]); } } @@ -570,15 +566,33 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { */ private String getReply(List callRecordList, String question) { for (int i = 0; i < callRecordList.size(); i++) { - if (StringUtils.equals(callRecordList.get(i).getContextText(), question)) { - if (StringUtils.equals("voice",callRecordList.get(i+1).getRole())) { + if (StringUtils.equals(callRecordList.get(i).getContextText(), question) && i+1 <= callRecordList.size() && StringUtils.equals("voice", callRecordList.get(i+1).getRole())) { + // 问题可能出现多次补充的情况,用[p2000]标签来标识是补充的问题。 + if (callRecordList.get(i).getContextText().contains("[p2000]")) { + // 查找通话内容中包含[p2000]的用户回复 + return getReplyByLabel(callRecordList, "[p2000]", i); + } else { return callRecordList.get(i+1).getContextText(); } + } } return null; } + private String getReplyByLabel(List callRecordList, String label, int i) { + List subRecord = callRecordList.subList(i, callRecordList.size()); + StringBuffer reply = new StringBuffer(); + if (!CollectionUtils.isEmpty(subRecord)) { + for (int j = 0; j < subRecord.size(); j++) { + if (StringUtils.isNotBlank(subRecord.get(j).getContextText()) && subRecord.get(j).getContextText().contains(label) && j+1 <= subRecord.size() && StringUtils.equals("voice",subRecord.get(j+1).getRole())) { + reply.append(StringUtils.isBlank(subRecord.get(j+1).getContextText()) ? "" : subRecord.get(j+1).getContextText()); + } + } + } + return reply.toString(); + } + private void genenrateQuestion(SignPatientManageRouteNode node, PatientInfo patientInfo, Long taskExecuteRecordId) { QuestionInfo questionInfo = questionInfoMapper.selectQuestionInfoById(node.getQuestionInfoId()); // 1、保存patient_question_submit_result @@ -627,8 +641,7 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { questionSubjectOptions.forEach(questionSubjectOption -> { PatientQuestionOptionResult patientQuestionOptionResult = new PatientQuestionOptionResult(); BeanUtils.copyProperties(questionSubjectOption, patientQuestionOptionResult); - patientQuestionOptionResult.setOptionChooseSign(0); - patientQuestionOptionResult.setOptionChooseSign(0); + patientQuestionOptionResult.setOptionChooseSign(1); patientQuestionOptionResult.setId(null); patientQuestionOptionResult.setCreateTime(LocalDateTime.now()); patientQuestionOptionResult.setQuestionSubjectResultId(patientQuestionSubjectResult.getId()); @@ -653,9 +666,11 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService { if (!CollectionUtils.isEmpty(contentedFlag)) { patientQuestionSubmitResult.setContentedFlag(ContentedAndRemarkableFlagEnum.DISCONTENTED.getInfo()); } + log.info("问卷选项结果:{}", patientQuestionOptionResults); + patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); } questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult); - patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); + }); } } diff --git a/postdischarge-manage/src/main/resources/mapper/manage/patientquestionoptionresult/PatientQuestionOptionResultMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/patientquestionoptionresult/PatientQuestionOptionResultMapper.xml index 92d791e5..ad81de0c 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/patientquestionoptionresult/PatientQuestionOptionResultMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/patientquestionoptionresult/PatientQuestionOptionResultMapper.xml @@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -48,7 +48,7 @@ @@ -194,23 +194,23 @@ remarkable_flag, question_subject_option_id ) values - + ( - #{QuestionSubjectOption.questionSubjectResultId}, - #{QuestionSubjectOption.questionnaireSubjectId}, - #{QuestionSubjectOption.questionName}, - #{QuestionSubjectOption.optionName}, - #{QuestionSubjectOption.optionAnswer}, - #{QuestionSubjectOption.optionScore}, - #{QuestionSubjectOption.optionChooseSign}, - #{QuestionSubjectOption.optionSubmitAnswer}, - #{QuestionSubjectOption.optionSort}, - #{QuestionSubjectOption.optionRemark}, - #{QuestionSubjectOption.createBy}, - #{QuestionSubjectOption.createTime}, - #{QuestionSubjectOption.contentedFlag}, - #{QuestionSubjectOption.remarkableFlag}, - #{QuestionSubjectOption.questionSubjectOptionId} + #{item.questionSubjectResultId}, + #{item.questionnaireSubjectId}, + #{item.questionName}, + #{item.optionName}, + #{item.optionAnswer}, + #{item.optionScore}, + #{item.optionChooseSign}, + #{item.optionSubmitAnswer}, + #{item.optionSort}, + #{item.optionRemark}, + #{item.createBy}, + #{item.createTime}, + #{item.contentedFlag}, + #{item.remarkableFlag}, + #{item.questionSubjectOptionId} ) diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/YZAIOBSTask.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/YZAIOBSTask.java index f4cde58c..329e7bd8 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/YZAIOBSTask.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/YZAIOBSTask.java @@ -128,8 +128,8 @@ public class YZAIOBSTask { if (ObjectUtils.isNotEmpty(scriptInfo)) { // 查询机构拨打时间设置 - LocalTime localStartTime = LocalTime.now(); - LocalTime localEndTime = LocalTime.now(); + LocalTime localStartTime = LocalTime.parse("08:00"); + LocalTime localEndTime = LocalTime.parse("17:00"); Long hospitalId = patientInfoImportMainMapper.selectHospitalAgencyId(sn); if (hospitalId != null) { DialTime dialTime = patientInfoImportMainMapper.selectDialTimeById(hospitalId); @@ -141,7 +141,7 @@ public class YZAIOBSTask { List sysDictDataList = iSysDictTypeService.selectDictDataByType(Constants.DIAL_TIME); if (CollectionUtils.isEmpty(sysDictDataList) || sysDictDataList.size() != 2) { dateStartTime = LocalTime.parse("08:00"); - dateEndTime = LocalTime.parse("19:00"); + dateEndTime = LocalTime.parse("17:00"); } else { dateStartTime = LocalTime.parse(sysDictDataList.get(0).getDictValue()); dateEndTime = LocalTime.parse(sysDictDataList.get(1).getDictValue()); @@ -303,7 +303,8 @@ public class YZAIOBSTask { createDutyDto.setDutyName(dutyName); createDutyDto.setDutyType(scriptInfo.getRobotPublishId()); createDutyDto.setDutySceneId(Integer.parseInt(scriptInfo.getRobotPublishId())); - createDutyDto.setOutboundPeriods("[\"09:00~11:30\",\"14:00~17:30\"]"); + //createDutyDto.setOutboundPeriods("[\"09:00~11:30\",\"14:00~18:30\"]"); + createDutyDto.setOutboundPeriods("[\"08:00~18:30\"]"); createDutyDto.setStartDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); createDutyDto.setEndDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); JSONObject repStrategy = new JSONObject();