diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/statistics/StatisticsController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/statistics/StatisticsController.java index 7378c003..b50df1b9 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/statistics/StatisticsController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/statistics/StatisticsController.java @@ -1,9 +1,14 @@ package com.xinelu.manage.controller.statistics; import com.xinelu.common.core.controller.BaseController; +import com.xinelu.common.core.domain.AjaxResult; import com.xinelu.common.core.domain.R; +import com.xinelu.common.core.page.TableDataInfo; +import com.xinelu.manage.dto.signpatientmanageroutenode.UploadRobotPublishRecordDto; import com.xinelu.manage.dto.statistics.FollowUpRateDto; +import com.xinelu.manage.dto.statistics.QuestionnaireTaskStatisticsDto; import com.xinelu.manage.service.statistics.IStatisticsService; +import com.xinelu.manage.vo.signpatientmanageroutenode.UploadRobotPublishRecordVo; import com.xinelu.manage.vo.statistics.FollowUpDetailVo; import com.xinelu.manage.vo.statistics.FollowUpRateVo; import io.swagger.annotations.Api; @@ -44,4 +49,21 @@ public class StatisticsController extends BaseController { public R> getFollowUpDetail(FollowUpRateDto queryDto) { return R.ok(statisticsService.getFollowUpDetail(queryDto)); } + + /** + * 问卷任务统计 + */ + @ApiOperation("问卷任务统计") + @GetMapping("/questionnaireTaskStatistics") + public AjaxResult questionnaireTaskStatistics(QuestionnaireTaskStatisticsDto questionnaireTaskStatisticsDto){ + return AjaxResult.success(statisticsService.questionnaireTaskStatistics(questionnaireTaskStatisticsDto)); + } + + @ApiOperation("问卷任务选项统计") + @GetMapping("/questionnaireTaskOptionList") + public TableDataInfo questionnaireTaskOptionList(UploadRobotPublishRecordDto uploadRobotPublishRecordDto) { + startPage(); + List list = statisticsService.questionnaireTaskOptionList(uploadRobotPublishRecordDto); + return getDataTable(list); + } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/dto/signpatientmanageroutenode/UploadRobotPublishRecordDto.java b/postdischarge-manage/src/main/java/com/xinelu/manage/dto/signpatientmanageroutenode/UploadRobotPublishRecordDto.java index c0a4ae55..c1b48063 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/dto/signpatientmanageroutenode/UploadRobotPublishRecordDto.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/dto/signpatientmanageroutenode/UploadRobotPublishRecordDto.java @@ -97,4 +97,14 @@ public class UploadRobotPublishRecordDto extends BaseEntity { * 电话拨通情况;SUCCESS:成功;FAILURE:失败;EXPIRED:超期自动作废(如超期一周);NULL或空字符串:缺省值,表示未执行; */ private String phoneNodeExecuteResultStatus; + + /** + * 问卷题目选项表的ID + */ + private Long questionSubjectOptionId; + + /** + * 题目选项选择标识,0:已选择,1:未选择 + */ + private Integer optionChooseSign; } \ No newline at end of file diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/dto/statistics/QuestionnaireTaskStatisticsDto.java b/postdischarge-manage/src/main/java/com/xinelu/manage/dto/statistics/QuestionnaireTaskStatisticsDto.java new file mode 100644 index 00000000..b763a839 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/dto/statistics/QuestionnaireTaskStatisticsDto.java @@ -0,0 +1,44 @@ +package com.xinelu.manage.dto.statistics; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * @description: 问卷任务统计传入值 + * @author: zh + * @create: 2024-12-22 + **/ +@Data +public class QuestionnaireTaskStatisticsDto { + + /** + * 任务开始时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate taskStartTime; + + /** + * 任务结束时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate taskEndTime; + + /** + * 就诊/出院开始时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate visitStartTime; + + /** + * 就诊/出院结束时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate visitEndTime; + + /** + * 问卷id + */ + private Long questionInfoId; +} \ No newline at end of file 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 8aadc98e..f9448577 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 @@ -5,9 +5,11 @@ import com.xinelu.manage.dto.signpatientmanageroutenode.PatientTaskDto; import com.xinelu.manage.dto.signpatientmanageroutenode.SignPatientManageRouteNodeDto; import com.xinelu.manage.dto.signpatientmanageroutenode.UploadRobotPublishRecordDto; import com.xinelu.manage.dto.statistics.FollowUpRateDto; +import com.xinelu.manage.dto.statistics.QuestionnaireTaskStatisticsDto; import com.xinelu.manage.vo.homepage.PatientAndNode; import com.xinelu.manage.vo.signpatientmanageroutenode.*; import com.xinelu.manage.vo.specialdiseasenode.SpecialDiseaseNodeAuditVo; +import com.xinelu.manage.vo.statistics.QuestionnaireTaskStatisticsVo; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; @@ -204,4 +206,20 @@ public interface SignPatientManageRouteNodeMapper { * @return UploadRobotPublishRecordVo */ List selectTaskContented(UploadRobotPublishRecordDto uploadRobotPublishRecordDto); + + /** + * 问卷任务统计 + * + * @param questionnaireTaskStatisticsDto 时间问卷信息 + * @return QuestionnaireTaskStatisticsDto + */ + List questionnaireTaskStatistics(QuestionnaireTaskStatisticsDto questionnaireTaskStatisticsDto); + + /** + * 问卷任务选项统计 + * + * @param uploadRobotPublishRecordDto 时间信息 + * @return UploadRobotPublishRecordVo + */ + List selectTaskOptionContented(UploadRobotPublishRecordDto uploadRobotPublishRecordDto); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/IStatisticsService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/IStatisticsService.java index b8a68038..2dd0ab6a 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/IStatisticsService.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/IStatisticsService.java @@ -1,8 +1,13 @@ package com.xinelu.manage.service.statistics; +import com.xinelu.common.core.domain.AjaxResult; +import com.xinelu.manage.dto.signpatientmanageroutenode.UploadRobotPublishRecordDto; import com.xinelu.manage.dto.statistics.FollowUpRateDto; +import com.xinelu.manage.dto.statistics.QuestionnaireTaskStatisticsDto; +import com.xinelu.manage.vo.signpatientmanageroutenode.UploadRobotPublishRecordVo; import com.xinelu.manage.vo.statistics.FollowUpDetailVo; import com.xinelu.manage.vo.statistics.FollowUpRateVo; + import java.util.List; /** @@ -30,4 +35,20 @@ public interface IStatisticsService { * @Date 2024-11-1 10:47 */ List getFollowUpDetail(FollowUpRateDto queryDto); + + /** + * 问卷任务统计 + * + * @param questionnaireTaskStatisticsDto 时间问卷信息 + * @return AjaxResult + */ + AjaxResult questionnaireTaskStatistics(QuestionnaireTaskStatisticsDto questionnaireTaskStatisticsDto); + + /** + * 问卷任务选项统计 + * + * @param uploadRobotPublishRecordDto 时间信息 + * @return UploadRobotPublishRecordVo + */ + List questionnaireTaskOptionList(UploadRobotPublishRecordDto uploadRobotPublishRecordDto); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/impl/StatisticsServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/impl/StatisticsServiceImpl.java index c969ece3..15d86060 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/impl/StatisticsServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/impl/StatisticsServiceImpl.java @@ -1,12 +1,16 @@ package com.xinelu.manage.service.statistics.impl; +import com.xinelu.common.core.domain.AjaxResult; import com.xinelu.common.core.domain.entity.SysUser; import com.xinelu.common.enums.NodeTypeEnum; import com.xinelu.common.enums.PhoneDialMethodEnum; +import com.xinelu.common.enums.QuestionTypeEnum; import com.xinelu.common.utils.StringUtils; import com.xinelu.manage.domain.agency.Agency; import com.xinelu.manage.domain.department.Department; +import com.xinelu.manage.dto.signpatientmanageroutenode.UploadRobotPublishRecordDto; import com.xinelu.manage.dto.statistics.FollowUpRateDto; +import com.xinelu.manage.dto.statistics.QuestionnaireTaskStatisticsDto; import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper; import com.xinelu.manage.mapper.phonedialrecord.PhoneDialRecordMapper; import com.xinelu.manage.mapper.shortmessagesendrecord.ShortMessageSendRecordMapper; @@ -18,11 +22,8 @@ import com.xinelu.manage.service.statistics.IStatisticsService; import com.xinelu.manage.vo.patientvisitrecord.PatientVisitRecordStatisticVo; import com.xinelu.manage.vo.phonedialrecord.PhoneDialRecordVo; import com.xinelu.manage.vo.signpatientmanageroutenode.PatientFollowUpPlanVo; -import com.xinelu.manage.vo.statistics.FollowUpDetailVo; -import com.xinelu.manage.vo.statistics.FollowUpNumTrendVo; -import com.xinelu.manage.vo.statistics.FollowUpRateTrendVo; -import com.xinelu.manage.vo.statistics.FollowUpRateVo; -import com.xinelu.manage.vo.statistics.MessageSendVo; +import com.xinelu.manage.vo.signpatientmanageroutenode.UploadRobotPublishRecordVo; +import com.xinelu.manage.vo.statistics.*; import com.xinelu.system.service.ISysUserService; import java.math.BigDecimal; import java.math.RoundingMode; @@ -294,6 +295,46 @@ public class StatisticsServiceImpl implements IStatisticsService { return retList; } + /** + * 问卷任务统计 + * + * @param questionnaireTaskStatisticsDto 时间问卷信息 + * @return AjaxResult + */ + @Override + public AjaxResult questionnaireTaskStatistics(QuestionnaireTaskStatisticsDto questionnaireTaskStatisticsDto) { + //查询问卷任务 + List questionnaireTaskStatisticsVos = signPatientManageRouteNodeMapper.questionnaireTaskStatistics(questionnaireTaskStatisticsDto); + //遍历计算比例 + if (CollectionUtils.isNotEmpty(questionnaireTaskStatisticsVos)){ + for (QuestionnaireTaskStatisticsVo questionnaireTaskStatisticsVo : questionnaireTaskStatisticsVos) { + //除数不能为空或0 + if (CollectionUtils.isNotEmpty(questionnaireTaskStatisticsVo.getQuestionnaireTaskOptionStatisticsVos()) && Objects.nonNull(questionnaireTaskStatisticsVo.getTotal()) && questionnaireTaskStatisticsVo.getTotal() != 0){ + questionnaireTaskStatisticsVo.getQuestionnaireTaskOptionStatisticsVos() + .forEach(item -> item.setChoiceProportion( + new BigDecimal(item.getChoiceNumber()) + .divide(new BigDecimal(questionnaireTaskStatisticsVo.getTotal()),2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")))); + } + } + } + return AjaxResult.success(questionnaireTaskStatisticsVos); + } + + /** + * 问卷任务统计选项统计 + * + * @param uploadRobotPublishRecordDto 时间信息 + * @return UploadRobotPublishRecordVo + */ + @Override + public List questionnaireTaskOptionList(UploadRobotPublishRecordDto uploadRobotPublishRecordDto) { + // sql查询反馈意见使用 + if (Objects.nonNull(uploadRobotPublishRecordDto)){ + uploadRobotPublishRecordDto.setQuestionType(QuestionTypeEnum.FEEDBACK_BLANKS_SUBJECT.getInfo()); + } + return signPatientManageRouteNodeMapper.selectTaskOptionContented(uploadRobotPublishRecordDto); + } + /** * @description 统计AI电话拨打次数、AI电话拨打次数成功率、AI拨打人数、AI拨打人数成功率、人工电话拨打次数、人工电话拨打次数成功率、人工拨打人数、人工拨打人数成功率 * @Param 拨打电话记录列表 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskOptionStatisticsVo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskOptionStatisticsVo.java new file mode 100644 index 00000000..66f9dfcf --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskOptionStatisticsVo.java @@ -0,0 +1,78 @@ +package com.xinelu.manage.vo.statistics; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @description: 问卷任务统计选项返回值 + * @author: zh + * @create: 2024-12-22 + **/ +@Data +public class QuestionnaireTaskOptionStatisticsVo { + + /** + * 问卷表id + */ + @ApiModelProperty(value = "问卷表id") + private Long questionInfoId; + + /** + * 患者问卷题目选项提交结果信息表id + */ + @ApiModelProperty(value = "患者问卷题目选项提交结果信息表id") + private Long patientQuestionOptionResultId; + + /** + * 问卷题目提交结果信息表id + */ + @ApiModelProperty(value = "问卷题目提交结果信息表id") + private Long questionSubjectResultId; + + /** + * 问卷题目表id + */ + @ApiModelProperty(value = "问卷题目表id") + private Long questionnaireSubjectId; + + /** + * 题目名称 + */ + @ApiModelProperty(value = "题目名称") + private String questionName; + + /** + * 选项名称 + */ + @ApiModelProperty(value = "选项名称") + private String optionName; + + /** + * 题目选项选择标识,0:已选择,1:未选择 + */ + @ApiModelProperty(value = "题目选项选择标识,0:已选择,1:未选择") + private Integer optionChooseSign; + + /** + * 选项排序 + */ + @ApiModelProperty(value = "选项排序") + private Integer optionSort; + + /** + * 问卷题目选项表的ID + */ + private Long questionSubjectOptionId; + + /** + * 选择人数 + */ + private Long choiceNumber; + + /** + * 选择比例 + */ + private BigDecimal choiceProportion; +} \ No newline at end of file diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskStatisticsVo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskStatisticsVo.java new file mode 100644 index 00000000..88b0b894 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskStatisticsVo.java @@ -0,0 +1,58 @@ +package com.xinelu.manage.vo.statistics; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @description: 问卷任务统计返回值 + * @author: zh + * @create: 2024-12-22 + **/ +@Data +public class QuestionnaireTaskStatisticsVo { + + /** + * 问卷提交结果信息表id + */ + @ApiModelProperty(value = "问卷提交结果信息表id") + private Long questionSubmitResultId; + + /** + * 问卷表id + */ + @ApiModelProperty(value = "问卷表id") + private Long questionInfoId; + + /** + * 题目序号 + */ + @ApiModelProperty(value = "题目序号") + private BigDecimal questionNumber; + + /** + * 题目类型,单选题:MULTIPLE_CHOICE,多选题:MULTIPLE_CHOICE_QUESTIONS,填空题:FILL_IN_THE_BLANKS,打分题:SCORING_QUESTIONS, + * 组合单选题:COMBINATION_RADIO_SUBJECT,组合多选题:COMBINATION_MULTIPLE_SUBJECT,组合填空题:COMBINATION_BLANKS_SUBJECT, + * 组合打分题:COMBINATION_SCORING_SUBJECT,日期填空题:DATE_BLANKS_SUBJECT,时间填空题:TIME_BLANKS_SUBJECT + */ + @ApiModelProperty(value = "题目类型,单选题:MULTIPLE_CHOICE,多选题:MULTIPLE_CHOICE_QUESTIONS,填空题:FILL_IN_THE_BLANKS,打分题:SCORING_QUESTIONS, 组合单选题:COMBINATION_RADIO_SUBJECT,组合多选题:COMBINATION_MULTIPLE_SUBJECT,组合填空题:COMBINATION_BLANKS_SUBJECT, 组合打分题:COMBINATION_SCORING_SUBJECT,日期填空题:DATE_BLANKS_SUBJECT,时间填空题:TIME_BLANKS_SUBJECT") + private String questionType; + + /** + * 题目名称 + */ + @ApiModelProperty(value = "题目名称") + private String questionName; + + /** + * 填写问卷总数 + */ + private Long total; + + /** + * 选项结合 + */ + private List questionnaireTaskOptionStatisticsVos; +} \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/questioninfo/QuestionInfoMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/questioninfo/QuestionInfoMapper.xml index a00e84d7..925a6e9d 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/questioninfo/QuestionInfoMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/questioninfo/QuestionInfoMapper.xml @@ -174,7 +174,7 @@ ${params.dataScope} - order by questionnaire_sort + order by qi.create_time desc + + + +