修改曜智外呼。

This commit is contained in:
haown 2026-01-29 11:23:00 +08:00
parent 601e89dd79
commit bf57c37b93
5 changed files with 72 additions and 55 deletions

View File

@ -1,7 +1,6 @@
package com.xinelu.manage.mapper.patientquestionoptionresult; package com.xinelu.manage.mapper.patientquestionoptionresult;
import com.xinelu.manage.domain.patientquestionoptionresult.PatientQuestionOptionResult; import com.xinelu.manage.domain.patientquestionoptionresult.PatientQuestionOptionResult;
import java.util.List; import java.util.List;
/** /**

View File

@ -708,7 +708,8 @@ public class AIOBServiceImpl implements IAIOBService {
} }
questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult); questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult);
if(patientQuestionOptionResults.size()>0) { if(CollectionUtils.isNotEmpty(patientQuestionOptionResults)) {
log.info("问卷选项结果:{}", patientQuestionOptionResults);
patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults);
} }
totalScore[0] = totalScore[0].add(questionSubjectVO.getQuestionScore() == null ? BigDecimal.ZERO : questionSubjectVO.getQuestionScore()); 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()); patientQuestionOptionResult.setQuestionSubjectResultId(patientQuestionSubjectResult.getId());
patientQuestionOptionResults.add(patientQuestionOptionResult); patientQuestionOptionResults.add(patientQuestionOptionResult);
}); });
if(patientQuestionOptionResults.size()>0) { if(CollectionUtils.isNotEmpty(patientQuestionOptionResults)) {
log.info("问卷选项结果:{}", patientQuestionOptionResults);
patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults);
} }
totalScore[0] = totalScore[0].add(BigDecimal.ZERO); totalScore[0] = totalScore[0].add(BigDecimal.ZERO);

View File

@ -9,7 +9,6 @@ import com.xinelu.common.config.SystemBusinessConfig;
import com.xinelu.common.constant.Constants; import com.xinelu.common.constant.Constants;
import com.xinelu.common.constant.PhoneMessageRemindConstants; import com.xinelu.common.constant.PhoneMessageRemindConstants;
import com.xinelu.common.constant.TaskCreateTypeConstant; import com.xinelu.common.constant.TaskCreateTypeConstant;
import com.xinelu.common.constant.TaskStatisticsTypeConstants;
import com.xinelu.common.enums.ContentedAndRemarkableFlagEnum; import com.xinelu.common.enums.ContentedAndRemarkableFlagEnum;
import com.xinelu.common.enums.ErrorStatusEnum; import com.xinelu.common.enums.ErrorStatusEnum;
import com.xinelu.common.enums.NodeExecuteResultStatusEnum; import com.xinelu.common.enums.NodeExecuteResultStatusEnum;
@ -289,10 +288,10 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
phoneDialRecordMapper.insertPhoneDialRecord(phoneDialRecord); phoneDialRecordMapper.insertPhoneDialRecord(phoneDialRecord);
// 修改任务统计表数据 // 修改任务统计表数据
if (patientTaskExecuteRecordMapper.insertPatientTaskExecuteRecord(patientTaskExecuteRecord) > 0) { //if (patientTaskExecuteRecordMapper.insertPatientTaskExecuteRecord(patientTaskExecuteRecord) > 0) {
// 任务统计表修改 // // 任务统计表修改
patientTaskStatisticsService.updateNum(signPatientManageRoute.getPatientId(), TaskStatisticsTypeConstants.TASK_EXECUTE_NUM, 1); // patientTaskStatisticsService.updateNum(signPatientManageRoute.getPatientId(), TaskStatisticsTypeConstants.TASK_EXECUTE_NUM, 1);
} //}
//接通状态1-已接通 //接通状态1-已接通
if (dutyCallbackDataDto.getIsAnswer() != null && dutyCallbackDataDto.getIsAnswer() == 1) { if (dutyCallbackDataDto.getIsAnswer() != null && dutyCallbackDataDto.getIsAnswer() == 1) {
@ -409,7 +408,9 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
boolean hasQuestion = false; boolean hasQuestion = false;
String aiobQuestionName = ""; String aiobQuestionName = "";
for (int i = 0; i < recordList.size(); i++) { 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; hasQuestion = true;
aiobQuestionName = recordList.get(i).getContextText(); aiobQuestionName = recordList.get(i).getContextText();
break; break;
@ -440,13 +441,10 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
questionSubjectOptions.forEach(questionSubjectOption -> { questionSubjectOptions.forEach(questionSubjectOption -> {
PatientQuestionOptionResult patientQuestionOptionResult = new PatientQuestionOptionResult(); PatientQuestionOptionResult patientQuestionOptionResult = new PatientQuestionOptionResult();
BeanUtils.copyProperties(questionSubjectOption, patientQuestionOptionResult); BeanUtils.copyProperties(questionSubjectOption, patientQuestionOptionResult);
patientQuestionOptionResult.setOptionChooseSign(0);
// 设置是否选中, 根据回调数据中命中的意向查询
List<String> intents = Arrays.asList(questionSubjectOption.getIntent().split("\\|"));
for (String intent : intents) {
if (callResultIntents.contains(intent)) {
patientQuestionOptionResult.setOptionChooseSign(1); patientQuestionOptionResult.setOptionChooseSign(1);
} // 设置是否选中, 根据回调数据中命中的意向查询
if (callResultIntents.contains(questionSubjectOption.getIntent())) {
patientQuestionOptionResult.setOptionChooseSign(0);
} }
patientQuestionOptionResult.setId(null); patientQuestionOptionResult.setId(null);
@ -477,11 +475,10 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
if (!CollectionUtils.isEmpty(contentedFlag)) { if (!CollectionUtils.isEmpty(contentedFlag)) {
patientQuestionSubmitResult.setContentedFlag(ContentedAndRemarkableFlagEnum.DISCONTENTED.getInfo()); patientQuestionSubmitResult.setContentedFlag(ContentedAndRemarkableFlagEnum.DISCONTENTED.getInfo());
} }
patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults);
} }
questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult); questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult);
patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults);
totalScore[0] = totalScore[0].add(questionSubjectVO.getQuestionScore() == null ? BigDecimal.ZERO : questionSubjectVO.getQuestionScore()); totalScore[0] = totalScore[0].add(questionSubjectVO.getQuestionScore() == null ? BigDecimal.ZERO : questionSubjectVO.getQuestionScore());
} else { } else {
@ -508,7 +505,8 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
patientQuestionOptionResult.setQuestionSubjectResultId(patientQuestionSubjectResult.getId()); patientQuestionOptionResult.setQuestionSubjectResultId(patientQuestionSubjectResult.getId());
patientQuestionOptionResults.add(patientQuestionOptionResult); patientQuestionOptionResults.add(patientQuestionOptionResult);
}); });
if(patientQuestionOptionResults.size()>0) { if(!CollectionUtils.isEmpty(patientQuestionOptionResults)) {
log.info("问卷选项结果:{}", patientQuestionOptionResults);
patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults); patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults);
} }
totalScore[0] = totalScore[0].add(BigDecimal.ZERO); totalScore[0] = totalScore[0].add(BigDecimal.ZERO);
@ -537,8 +535,7 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
callRecord.setRole(str1[0]); callRecord.setRole(str1[0]);
if (StringUtils.equals("机器人", str1[0])) { if (StringUtils.equals("机器人", str1[0])) {
callRecord.setRole("speech"); callRecord.setRole("speech");
if (str1.length > 1) { if (str1.length > 1 && StringUtils.isNotBlank(str1[1])) {
if(StringUtils.isNotBlank(str1[1])) {
// ^分隔 // ^分隔
String[] content = str1[1].split("\\^"); String[] content = str1[1].split("\\^");
for (int i = 0; i < content.length; i++) { for (int i = 0; i < content.length; i++) {
@ -547,10 +544,9 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
} }
} }
} }
}
} else if (StringUtils.equals("用户", str1[0])) { } else if (StringUtils.equals("用户", str1[0])) {
callRecord.setRole("voice"); callRecord.setRole("voice");
if (str1.length > 1) { if (str1.length > 1 && StringUtils.isNotBlank(str1[1])) {
callRecord.setContextText(str1[1]); callRecord.setContextText(str1[1]);
} }
} }
@ -570,15 +566,33 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
*/ */
private String getReply(List<CallRecord> callRecordList, String question) { private String getReply(List<CallRecord> callRecordList, String question) {
for (int i = 0; i < callRecordList.size(); i++) { for (int i = 0; i < callRecordList.size(); i++) {
if (StringUtils.equals(callRecordList.get(i).getContextText(), question)) { if (StringUtils.equals(callRecordList.get(i).getContextText(), question) && i+1 <= callRecordList.size() && StringUtils.equals("voice", callRecordList.get(i+1).getRole())) {
if (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 callRecordList.get(i+1).getContextText();
} }
} }
} }
return null; return null;
} }
private String getReplyByLabel(List<CallRecord> callRecordList, String label, int i) {
List<CallRecord> 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) { private void genenrateQuestion(SignPatientManageRouteNode node, PatientInfo patientInfo, Long taskExecuteRecordId) {
QuestionInfo questionInfo = questionInfoMapper.selectQuestionInfoById(node.getQuestionInfoId()); QuestionInfo questionInfo = questionInfoMapper.selectQuestionInfoById(node.getQuestionInfoId());
// 1保存patient_question_submit_result // 1保存patient_question_submit_result
@ -627,8 +641,7 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
questionSubjectOptions.forEach(questionSubjectOption -> { questionSubjectOptions.forEach(questionSubjectOption -> {
PatientQuestionOptionResult patientQuestionOptionResult = new PatientQuestionOptionResult(); PatientQuestionOptionResult patientQuestionOptionResult = new PatientQuestionOptionResult();
BeanUtils.copyProperties(questionSubjectOption, patientQuestionOptionResult); BeanUtils.copyProperties(questionSubjectOption, patientQuestionOptionResult);
patientQuestionOptionResult.setOptionChooseSign(0); patientQuestionOptionResult.setOptionChooseSign(1);
patientQuestionOptionResult.setOptionChooseSign(0);
patientQuestionOptionResult.setId(null); patientQuestionOptionResult.setId(null);
patientQuestionOptionResult.setCreateTime(LocalDateTime.now()); patientQuestionOptionResult.setCreateTime(LocalDateTime.now());
patientQuestionOptionResult.setQuestionSubjectResultId(patientQuestionSubjectResult.getId()); patientQuestionOptionResult.setQuestionSubjectResultId(patientQuestionSubjectResult.getId());
@ -653,9 +666,11 @@ public class YZAIOBSServiceImpl implements IYZAIOBSService {
if (!CollectionUtils.isEmpty(contentedFlag)) { if (!CollectionUtils.isEmpty(contentedFlag)) {
patientQuestionSubmitResult.setContentedFlag(ContentedAndRemarkableFlagEnum.DISCONTENTED.getInfo()); patientQuestionSubmitResult.setContentedFlag(ContentedAndRemarkableFlagEnum.DISCONTENTED.getInfo());
} }
log.info("问卷选项结果:{}", patientQuestionOptionResults);
patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults);
} }
questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult); questionSubmitResultMapper.updatePatientQuestionSubmitResult(patientQuestionSubmitResult);
patientQuestionOptionResultMapper.saveQuestionOptionList(patientQuestionOptionResults);
}); });
} }
} }

View File

@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xinelu.manage.mapper.patientquestionoptionresult.PatientQuestionOptionResultMapper"> <mapper namespace="com.xinelu.manage.mapper.patientquestionoptionresult.PatientQuestionOptionResultMapper">
<resultMap type="PatientQuestionOptionResult" id="PatientQuestionOptionResultResult"> <resultMap type="com.xinelu.manage.domain.patientquestionoptionresult.PatientQuestionOptionResult" id="PatientQuestionOptionResult">
<result property="id" column="id"/> <result property="id" column="id"/>
<result property="questionSubjectResultId" column="question_subject_result_id"/> <result property="questionSubjectResultId" column="question_subject_result_id"/>
<result property="questionnaireSubjectId" column="questionnaire_subject_id"/> <result property="questionnaireSubjectId" column="questionnaire_subject_id"/>
@ -48,7 +48,7 @@
</sql> </sql>
<select id="selectPatientQuestionOptionResultList" parameterType="PatientQuestionOptionResult" <select id="selectPatientQuestionOptionResultList" parameterType="PatientQuestionOptionResult"
resultMap="PatientQuestionOptionResultResult"> resultMap="PatientQuestionOptionResult">
<include refid="selectPatientQuestionOptionResultVo"/> <include refid="selectPatientQuestionOptionResultVo"/>
<where> <where>
<if test="questionSubjectResultId != null "> <if test="questionSubjectResultId != null ">
@ -94,7 +94,7 @@
</select> </select>
<select id="selectPatientQuestionOptionResultById" parameterType="Long" <select id="selectPatientQuestionOptionResultById" parameterType="Long"
resultMap="PatientQuestionOptionResultResult"> resultMap="PatientQuestionOptionResult">
<include refid="selectPatientQuestionOptionResultVo"/> <include refid="selectPatientQuestionOptionResultVo"/>
where id = #{id} where id = #{id}
</select> </select>
@ -194,23 +194,23 @@
remarkable_flag, remarkable_flag,
question_subject_option_id question_subject_option_id
) values ) values
<foreach item="QuestionSubjectOption" index="index" collection="list" separator=","> <foreach item="item" index="index" collection="list" separator=",">
( (
#{QuestionSubjectOption.questionSubjectResultId}, #{item.questionSubjectResultId},
#{QuestionSubjectOption.questionnaireSubjectId}, #{item.questionnaireSubjectId},
#{QuestionSubjectOption.questionName}, #{item.questionName},
#{QuestionSubjectOption.optionName}, #{item.optionName},
#{QuestionSubjectOption.optionAnswer}, #{item.optionAnswer},
#{QuestionSubjectOption.optionScore}, #{item.optionScore},
#{QuestionSubjectOption.optionChooseSign}, #{item.optionChooseSign},
#{QuestionSubjectOption.optionSubmitAnswer}, #{item.optionSubmitAnswer},
#{QuestionSubjectOption.optionSort}, #{item.optionSort},
#{QuestionSubjectOption.optionRemark}, #{item.optionRemark},
#{QuestionSubjectOption.createBy}, #{item.createBy},
#{QuestionSubjectOption.createTime}, #{item.createTime},
#{QuestionSubjectOption.contentedFlag}, #{item.contentedFlag},
#{QuestionSubjectOption.remarkableFlag}, #{item.remarkableFlag},
#{QuestionSubjectOption.questionSubjectOptionId} #{item.questionSubjectOptionId}
) )
</foreach> </foreach>
</insert> </insert>

View File

@ -128,8 +128,8 @@ public class YZAIOBSTask {
if (ObjectUtils.isNotEmpty(scriptInfo)) { if (ObjectUtils.isNotEmpty(scriptInfo)) {
// 查询机构拨打时间设置 // 查询机构拨打时间设置
LocalTime localStartTime = LocalTime.now(); LocalTime localStartTime = LocalTime.parse("08:00");
LocalTime localEndTime = LocalTime.now(); LocalTime localEndTime = LocalTime.parse("17:00");
Long hospitalId = patientInfoImportMainMapper.selectHospitalAgencyId(sn); Long hospitalId = patientInfoImportMainMapper.selectHospitalAgencyId(sn);
if (hospitalId != null) { if (hospitalId != null) {
DialTime dialTime = patientInfoImportMainMapper.selectDialTimeById(hospitalId); DialTime dialTime = patientInfoImportMainMapper.selectDialTimeById(hospitalId);
@ -141,7 +141,7 @@ public class YZAIOBSTask {
List<SysDictData> sysDictDataList = iSysDictTypeService.selectDictDataByType(Constants.DIAL_TIME); List<SysDictData> sysDictDataList = iSysDictTypeService.selectDictDataByType(Constants.DIAL_TIME);
if (CollectionUtils.isEmpty(sysDictDataList) || sysDictDataList.size() != 2) { if (CollectionUtils.isEmpty(sysDictDataList) || sysDictDataList.size() != 2) {
dateStartTime = LocalTime.parse("08:00"); dateStartTime = LocalTime.parse("08:00");
dateEndTime = LocalTime.parse("19:00"); dateEndTime = LocalTime.parse("17:00");
} else { } else {
dateStartTime = LocalTime.parse(sysDictDataList.get(0).getDictValue()); dateStartTime = LocalTime.parse(sysDictDataList.get(0).getDictValue());
dateEndTime = LocalTime.parse(sysDictDataList.get(1).getDictValue()); dateEndTime = LocalTime.parse(sysDictDataList.get(1).getDictValue());
@ -303,7 +303,8 @@ public class YZAIOBSTask {
createDutyDto.setDutyName(dutyName); createDutyDto.setDutyName(dutyName);
createDutyDto.setDutyType(scriptInfo.getRobotPublishId()); createDutyDto.setDutyType(scriptInfo.getRobotPublishId());
createDutyDto.setDutySceneId(Integer.parseInt(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.setStartDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
createDutyDto.setEndDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); createDutyDto.setEndDate(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
JSONObject repStrategy = new JSONObject(); JSONObject repStrategy = new JSONObject();