diff --git a/postdischarge-common/src/main/java/com/xinelu/common/enums/QuestionSubjectTypeEnum.java b/postdischarge-common/src/main/java/com/xinelu/common/enums/QuestionSubjectTypeEnum.java new file mode 100644 index 00000000..d485d63e --- /dev/null +++ b/postdischarge-common/src/main/java/com/xinelu/common/enums/QuestionSubjectTypeEnum.java @@ -0,0 +1,32 @@ +package com.xinelu.common.enums; + +import lombok.Getter; + +/** + * 问卷题目选项类型 + */ +@Getter +public enum QuestionSubjectTypeEnum { + + /** + * 单选题 + */ + MULTIPLE_CHOICE("MULTIPLE_CHOICE"), + + /** + * 多选题 + */ + MULTIPLE_CHOICE_QUESTIONS("MULTIPLE_CHOICE_QUESTIONS"), + + /** + * 填空题 + */ + FILL_IN_THE_BLANKS("FILL_IN_THE_BLANKS"), + ; + + final private String info; + + QuestionSubjectTypeEnum(String info) { + this.info = info; + } +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/signpatientmanageroutenode/SignPatientManageRouteNodeController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/signpatientmanageroutenode/SignPatientManageRouteNodeController.java index e7f1223e..2168dc50 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/signpatientmanageroutenode/SignPatientManageRouteNodeController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/signpatientmanageroutenode/SignPatientManageRouteNodeController.java @@ -159,7 +159,7 @@ public class SignPatientManageRouteNodeController extends BaseController { } @ApiOperation("外呼记录导出") - @PostMapping("/export") + //@PostMapping("/export") public void export(HttpServletResponse response, UploadRobotPublishRecordDto uploadRobotPublishRecordDto) { List list = signNodeService.uploadRobotPublishRecord(uploadRobotPublishRecordDto); if (CollectionUtils.isNotEmpty(list)){ @@ -168,4 +168,12 @@ public class SignPatientManageRouteNodeController extends BaseController { ExcelUtil util = new ExcelUtil(UploadRobotPublishRecordVo.class); util.exportExcel(response, list, "外呼记录"); } + + @ApiOperation("外呼记录导出") + @PostMapping("/export") + public void questionnaireExport(HttpServletResponse response, UploadRobotPublishRecordDto uploadRobotPublishRecordDto) { + List list = signNodeService.selectAIQuestionnaireList(uploadRobotPublishRecordDto); + ExcelUtil util = new ExcelUtil<>(FollowUpFeedbackVo.class); + util.exportExcel(response, list, "外呼记录"); + } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java index fa749949..5625ecc4 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java @@ -256,4 +256,20 @@ public interface SignPatientManageRouteNodeMapper { * @return SignPatientManageRouteNode */ SignPatientManageRouteNode selectSignPatientManageRouteNode(SignPatientManageRouteNode signPatientManageRouteNode); + + /** + * 问卷外呼记录查询 + * + * @param uploadRobotPublishRecordDto 时间信息 + * @return UploadRobotPublishRecordVo + */ + List selectAIQuestionnaireList(UploadRobotPublishRecordDto uploadRobotPublishRecordDto); + + /** + * 问卷选项记录查询 + * + * @param manageRouteNodeIds + * @return QuestionSubmitExportVo + */ + List selectQuestionSubmit(List manageRouteNodeIds); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/ISignPatientManageRouteNodeService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/ISignPatientManageRouteNodeService.java index ba72886b..0bbb7ce4 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/ISignPatientManageRouteNodeService.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/ISignPatientManageRouteNodeService.java @@ -233,4 +233,12 @@ public interface ISignPatientManageRouteNodeService { * @return UploadRobotPublishRecordVo */ List uploadRobotPublishRecord(UploadRobotPublishRecordDto uploadRobotPublishRecordDto); + + /** + * 外呼记录 + * + * @param uploadRobotPublishRecordDto 时间信息 + * @return UploadRobotPublishRecordVo + */ + List selectAIQuestionnaireList(UploadRobotPublishRecordDto uploadRobotPublishRecordDto); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/SignPatientManageRouteNodeServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/SignPatientManageRouteNodeServiceImpl.java index 7837e001..bf7a25a7 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/SignPatientManageRouteNodeServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/SignPatientManageRouteNodeServiceImpl.java @@ -14,13 +14,7 @@ import com.xinelu.common.constant.TemplateTypeConstants; import com.xinelu.common.constant.TriggerConditionOperatorConstants; import com.xinelu.common.constant.TriggerLogicConstants; import com.xinelu.common.constant.VisitMethodConstants; -import com.xinelu.common.enums.MessageStatusEnum; -import com.xinelu.common.enums.NodeExecuteResultStatusEnum; -import com.xinelu.common.enums.NodeExecuteStatusEnum; -import com.xinelu.common.enums.PhoneDialMethodEnum; -import com.xinelu.common.enums.QuestionTypeEnum; -import com.xinelu.common.enums.RouteCheckStatusEnum; -import com.xinelu.common.enums.RouteNodeNameEnum; +import com.xinelu.common.enums.*; import com.xinelu.common.exception.ServiceException; import com.xinelu.common.utils.SecurityUtils; import com.xinelu.common.utils.StringUtils; @@ -80,16 +74,7 @@ import com.xinelu.manage.vo.patientinfo.PatientNextTaskVo; import com.xinelu.manage.vo.patientquestionsubmitresult.PatientQuestionSubmitResultVO; import com.xinelu.manage.vo.propagandainfo.PropagandaMaterialsVo; import com.xinelu.manage.vo.questionInfo.QuestionVO; -import com.xinelu.manage.vo.signpatientmanageroutenode.AIDialRecordVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.AppletRouteNodeListVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.PatientManageNodeInfoVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.PatientManageNodeListVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.PatientTaskVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeInfoVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientTaskVo; -import com.xinelu.manage.vo.signpatientmanageroutenode.UploadRobotPublishRecordVo; +import com.xinelu.manage.vo.signpatientmanageroutenode.*; import com.xinelu.manage.vo.specialdiseasenode.PatientSpecialDiseaseNodeVo; import com.xinelu.manage.vo.specialdiseasenode.SpecialDiseaseNodeVO; import com.xinelu.manage.vo.specialdiseaseroute.SpecialDiseaseRouteVO; @@ -104,6 +89,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -1481,6 +1467,69 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage return uploadRobotPublishRecordVos; } + /** + * 外呼记录 + * + * @param uploadRobotPublishRecordDto 时间信息 + * @return FollowUpFeedbackVo + */ + @Override + public List selectAIQuestionnaireList(UploadRobotPublishRecordDto uploadRobotPublishRecordDto) { + //查询管理任务节点数据 + List followUpFeedbackVos = signPatientManageRouteNodeMapper.selectAIQuestionnaireList(uploadRobotPublishRecordDto); + if (CollectionUtils.isEmpty(followUpFeedbackVos)) { + return new ArrayList<>(); + } + Map userMap = followUpFeedbackVos.stream().collect(Collectors.toMap(FollowUpFeedbackVo::getManageRouteNodeId, Function.identity())); + List manageRouteNodeIds = followUpFeedbackVos.stream().filter(Objects::nonNull).map(UploadRobotPublishRecordVo::getManageRouteNodeId).collect(Collectors.toList()); + //问卷题目选项查询 + List questionSubmitExportVos = signPatientManageRouteNodeMapper.selectQuestionSubmit(manageRouteNodeIds); + if (CollectionUtils.isEmpty(questionSubmitExportVos)) { + return followUpFeedbackVos; + } + //遍历塞值 + for (QuestionSubmitExportVo questionSubmitExportVo : questionSubmitExportVos) { + //没数据跳出 + FollowUpFeedbackVo followUpFeedbackVo = userMap.get(questionSubmitExportVo.getManageRouteNodeId()); + if (Objects.isNull(followUpFeedbackVo)) { + continue; + } + //题目是单选 + if (questionSubmitExportVo.getQuestionType().equals(QuestionSubjectTypeEnum.MULTIPLE_CHOICE.getInfo())) { + //序号1 已选择数据 + if (questionSubmitExportVo.getQuestionNumber() == 1 && Objects.nonNull(questionSubmitExportVo.getOptionChooseSign()) && questionSubmitExportVo.getOptionChooseSign() == 0) { + followUpFeedbackVo.setWorkingPersonnelService(questionSubmitExportVo.getOptionName()); + if (StringUtils.isNotBlank(questionSubmitExportVo.getOptionSubmitAnswer())) { + followUpFeedbackVo.setWorkingPersonnelServiceSuggestion(questionSubmitExportVo.getOptionSubmitAnswer()); + } + //序号2 已选择数据 + } else if (questionSubmitExportVo.getQuestionNumber() == 2 && Objects.nonNull(questionSubmitExportVo.getOptionChooseSign()) && questionSubmitExportVo.getOptionChooseSign() == 0) { + followUpFeedbackVo.setConsultConvenientDegree(questionSubmitExportVo.getOptionName()); + if (StringUtils.isNotBlank(questionSubmitExportVo.getOptionSubmitAnswer())) { + followUpFeedbackVo.setConsultConvenientDegreeSuggestion(questionSubmitExportVo.getOptionSubmitAnswer()); + } + //序号3 已选择数据 + } else if (questionSubmitExportVo.getQuestionNumber() == 3 && Objects.nonNull(questionSubmitExportVo.getOptionChooseSign()) && questionSubmitExportVo.getOptionChooseSign() == 0) { + followUpFeedbackVo.setDoctorServiceAttitude(questionSubmitExportVo.getOptionName()); + if (StringUtils.isNotBlank(questionSubmitExportVo.getOptionSubmitAnswer())) { + followUpFeedbackVo.setDoctorServiceAttitudeSuggestion(questionSubmitExportVo.getOptionSubmitAnswer()); + } + //序号4 已选择数据 + } else if (questionSubmitExportVo.getQuestionNumber() == 4 && Objects.nonNull(questionSubmitExportVo.getOptionChooseSign()) && questionSubmitExportVo.getOptionChooseSign() == 0) { + followUpFeedbackVo.setHospitalEnvironment(questionSubmitExportVo.getOptionName()); + if (StringUtils.isNotBlank(questionSubmitExportVo.getOptionSubmitAnswer())) { + followUpFeedbackVo.setHospitalEnvironmentSuggestion(questionSubmitExportVo.getOptionSubmitAnswer()); + } + } + } + //题目是多选 + if (questionSubmitExportVo.getQuestionType().equals(QuestionSubjectTypeEnum.FILL_IN_THE_BLANKS.getInfo())) { + followUpFeedbackVo.setWorkSuggestions(questionSubmitExportVo.getFillBlanksAnswer()); + } + } + return followUpFeedbackVos; + } + /** * 根据管理路径生成任务 * @param signPatientManageRoute 签约管理路径 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/signpatientmanageroutenode/FollowUpFeedbackVo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/signpatientmanageroutenode/FollowUpFeedbackVo.java new file mode 100644 index 00000000..abb5c41a --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/signpatientmanageroutenode/FollowUpFeedbackVo.java @@ -0,0 +1,69 @@ +package com.xinelu.manage.vo.signpatientmanageroutenode; + +import com.xinelu.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @Description 外呼导出随访反馈实体类 + * @Author zh + * @Date 2026-02-06 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class FollowUpFeedbackVo extends UploadRobotPublishRecordVo{ + + /** + * 工作人员的服务态度反馈 + */ + @Excel(name = "工作人员的服务态度反馈") + private String workingPersonnelService; + + /** + * 工作人员的服务态度反馈意见 + */ + @Excel(name = "工作人员的服务态度反馈意见") + private String workingPersonnelServiceSuggestion; + + /** + * 门诊就诊流程便捷程度反馈 + */ + @Excel(name = "门诊就诊流程便捷程度反馈") + private String consultConvenientDegree; + + /** + * 门诊就诊流程便捷程度反馈意见 + */ + @Excel(name = "门诊就诊流程便捷程度反馈意见") + private String consultConvenientDegreeSuggestion; + + /** + * 医生的服务态度反馈 + */ + @Excel(name = "医生的服务态度反馈") + private String doctorServiceAttitude; + + /** + * 医生的服务态度反馈意见 + */ + @Excel(name = "医生的服务态度反馈意见") + private String doctorServiceAttitudeSuggestion; + + /** + * 医院就医环境反馈 + */ + @Excel(name = "医院就医环境反馈") + private String hospitalEnvironment; + + /** + * 医院就医环境反馈意见 + */ + @Excel(name = "医院就医环境反馈意见") + private String hospitalEnvironmentSuggestion; + + /** + * 工作建议 + */ + @Excel(name = "工作建议") + private String workSuggestions; +} \ No newline at end of file diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/signpatientmanageroutenode/QuestionSubmitExportVo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/signpatientmanageroutenode/QuestionSubmitExportVo.java new file mode 100644 index 00000000..8fc61e4c --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/signpatientmanageroutenode/QuestionSubmitExportVo.java @@ -0,0 +1,55 @@ +package com.xinelu.manage.vo.signpatientmanageroutenode; + +import lombok.Data; + +/** + * 外呼问卷导出vo + */ +@Data +public class QuestionSubmitExportVo { + + /** + * 管理任务路径节点id + */ + private Long manageRouteNodeId; + + /** + * 问卷id + */ + private Long questionInfoId; + + /** + * 问卷标号 + */ + private Long questionNumber; + + /** + * 题目类型,单选题:MULTIPLE_CHOICE,多选题:MULTIPLE_CHOICE_QUESTIONS,填空题:FILL_IN_THE_BLANKS + */ + private String questionType; + + /** + * 回答填空题 + */ + private String fillBlanksAnswer; + + /** + * 问卷名称 + */ + private String questionName; + + /** + * 题目名称 + */ + private String optionName; + + /** + * 题目选项选择标识,0:已选择,1:未选择 + */ + private Long optionChooseSign; + + /** + * 选项题目提交答案 + */ + private String optionSubmitAnswer; +} diff --git a/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml index c4f84ddb..fadbe3be 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml @@ -1431,4 +1431,126 @@ where create_by = #{createBy} order by create_time desc limit 1 + + + +