外呼统计修改
This commit is contained in:
parent
66c8db8e1b
commit
71711b2b9d
@ -0,0 +1,37 @@
|
||||
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"),
|
||||
|
||||
/**
|
||||
* 反馈填空题
|
||||
*/
|
||||
FEEDBACK_BLANKS_SUBJECT("FEEDBACK_BLANKS_SUBJECT"),
|
||||
;
|
||||
|
||||
final private String info;
|
||||
|
||||
QuestionSubjectTypeEnum(String info) {
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,7 @@ package com.xinelu.manage.mapper.questionsubject;
|
||||
|
||||
import com.xinelu.manage.domain.questionsubject.QuestionSubject;
|
||||
import com.xinelu.manage.vo.questionsubject.QuestionSubjectVO;
|
||||
import com.xinelu.manage.vo.statistics.QuestionnaireTaskStatisticsVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -84,4 +85,12 @@ public interface QuestionSubjectMapper {
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteSubjectByQuestionInfoId(Long questionInfoId);
|
||||
|
||||
/**
|
||||
* 原问卷选项信息
|
||||
*
|
||||
* @param questionnaireId 问卷id
|
||||
* @return QuestionnaireTaskStatisticsVo
|
||||
*/
|
||||
List<QuestionnaireTaskStatisticsVo> selectQuestionnaireByQuestionnaireId(Long questionnaireId);
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ 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.QuestionSubjectTypeEnum;
|
||||
import com.xinelu.common.enums.QuestionTypeEnum;
|
||||
import com.xinelu.common.utils.StringUtils;
|
||||
import com.xinelu.manage.domain.agency.Agency;
|
||||
@ -14,6 +15,7 @@ import com.xinelu.manage.dto.statistics.QuestionnaireTaskStatisticsDto;
|
||||
import com.xinelu.manage.mapper.department.DepartmentMapper;
|
||||
import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper;
|
||||
import com.xinelu.manage.mapper.phonedialrecord.PhoneDialRecordMapper;
|
||||
import com.xinelu.manage.mapper.questionsubject.QuestionSubjectMapper;
|
||||
import com.xinelu.manage.mapper.shortmessagesendrecord.ShortMessageSendRecordMapper;
|
||||
import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
|
||||
import com.xinelu.manage.mapper.subscribemessagesendrecord.SubscribeMessageSendRecordMapper;
|
||||
@ -70,6 +72,8 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
||||
private DepartmentMapper departmentMapper;
|
||||
@Resource
|
||||
private SysUserMapper sysUserMapper;
|
||||
@Resource
|
||||
private QuestionSubjectMapper questionSubjectMapper;
|
||||
|
||||
/**
|
||||
* @description 随访成功率统计
|
||||
@ -317,23 +321,76 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult questionnaireTaskStatistics(QuestionnaireTaskStatisticsDto questionnaireTaskStatisticsDto) {
|
||||
List<QuestionnaireTaskStatisticsVo> output = new ArrayList<>();
|
||||
//查询原问卷信息
|
||||
List<QuestionnaireTaskStatisticsVo> subjectAndOptionVos = questionSubjectMapper.selectQuestionnaireByQuestionnaireId(questionnaireTaskStatisticsDto.getQuestionInfoId());
|
||||
//空数据组装返回
|
||||
if (CollectionUtils.isEmpty(subjectAndOptionVos)) {
|
||||
return AjaxResult.success();
|
||||
}
|
||||
//查询问卷任务
|
||||
List<QuestionnaireTaskStatisticsVo> 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"))));
|
||||
} else if (CollectionUtils.isNotEmpty(questionnaireTaskStatisticsVo.getQuestionnaireTaskOptionStatisticsVos()) && (Objects.isNull(questionnaireTaskStatisticsVo.getTotal()) || questionnaireTaskStatisticsVo.getTotal() == 0)){
|
||||
questionnaireTaskStatisticsVo.getQuestionnaireTaskOptionStatisticsVos().forEach(item -> item.setChoiceProportion(BigDecimal.ZERO));
|
||||
//空数据返回原问卷信息
|
||||
List<Long> total = null;
|
||||
if (CollectionUtils.isNotEmpty(questionnaireTaskStatisticsVos)) {
|
||||
questionnaireTaskStatisticsVos = questionnaireTaskStatisticsVos.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionSubjectOptionId())).collect(Collectors.toList());
|
||||
total = questionnaireTaskStatisticsVos.stream().filter(Objects::nonNull).map(QuestionnaireTaskStatisticsVo::getManageRouteNodeId).distinct().collect(Collectors.toList());
|
||||
}
|
||||
//遍历计算
|
||||
List<QuestionnaireTaskOptionStatisticsVo> optionStatisticsVos = new ArrayList<>();
|
||||
if (questionnaireTaskStatisticsVos.size() > 0 && total != null && total.size() > 0) {
|
||||
for (QuestionnaireTaskStatisticsVo subjectAndOptionVo : subjectAndOptionVos) {
|
||||
QuestionnaireTaskOptionStatisticsVo optionStatisticsVo = new QuestionnaireTaskOptionStatisticsVo();
|
||||
//根据 题目序号、选项已选择过滤
|
||||
List<QuestionnaireTaskStatisticsVo> choice = questionnaireTaskStatisticsVos.stream().filter(Objects::nonNull)
|
||||
.filter(item -> Objects.nonNull(item.getQuestionNumber()) && item.getQuestionNumber().equals(subjectAndOptionVo.getQuestionNumber())
|
||||
&& Objects.equals(item.getQuestionSubjectOptionId(), subjectAndOptionVo.getQuestionSubjectOptionId())
|
||||
&& item.getOptionChooseSign() == 0)
|
||||
.collect(Collectors.toList());
|
||||
if (choice.size() > 0) {
|
||||
subjectAndOptionVo.setChoiceProportion(new BigDecimal(choice.size()).divide(new BigDecimal(total.size()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
|
||||
optionStatisticsVo.setChoiceNumber((long) choice.size());
|
||||
} else {
|
||||
subjectAndOptionVo.setChoiceProportion(BigDecimal.ZERO);
|
||||
optionStatisticsVo.setChoiceNumber(0L);
|
||||
}
|
||||
optionStatisticsVo.setQuestionSubjectOptionId(subjectAndOptionVo.getQuestionSubjectOptionId());
|
||||
optionStatisticsVo.setQuestionInfoId(questionnaireTaskStatisticsDto.getQuestionInfoId());
|
||||
optionStatisticsVo.setOptionName(subjectAndOptionVo.getOptionName());
|
||||
optionStatisticsVo.setQuestionNumber(subjectAndOptionVo.getQuestionNumber());
|
||||
optionStatisticsVo.setChoiceProportion(subjectAndOptionVo.getChoiceProportion());
|
||||
optionStatisticsVos.add(optionStatisticsVo);
|
||||
}
|
||||
} else {
|
||||
//如果没数据返回问卷模板
|
||||
for (QuestionnaireTaskStatisticsVo subjectAndOptionVo : subjectAndOptionVos) {
|
||||
QuestionnaireTaskOptionStatisticsVo optionStatisticsVo = new QuestionnaireTaskOptionStatisticsVo();
|
||||
optionStatisticsVo.setQuestionInfoId(questionnaireTaskStatisticsDto.getQuestionInfoId());
|
||||
optionStatisticsVo.setQuestionSubjectOptionId(subjectAndOptionVo.getQuestionSubjectOptionId());
|
||||
optionStatisticsVo.setOptionName(subjectAndOptionVo.getOptionName());
|
||||
optionStatisticsVo.setQuestionNumber(subjectAndOptionVo.getQuestionNumber());
|
||||
optionStatisticsVo.setChoiceProportion(BigDecimal.ZERO);
|
||||
optionStatisticsVo.setChoiceNumber(0L);
|
||||
optionStatisticsVos.add(optionStatisticsVo);
|
||||
}
|
||||
}
|
||||
//根据题号组装数据类型
|
||||
List<BigDecimal> questionNumberList = subjectAndOptionVos.stream().filter(Objects::nonNull)
|
||||
.filter(item -> item.getQuestionType().equals(QuestionSubjectTypeEnum.MULTIPLE_CHOICE.getInfo()) || item.getQuestionType().equals(QuestionSubjectTypeEnum.MULTIPLE_CHOICE_QUESTIONS.getInfo()))
|
||||
.map(QuestionnaireTaskStatisticsVo::getQuestionNumber).distinct().collect(Collectors.toList());
|
||||
for (BigDecimal questionNumber : questionNumberList) {
|
||||
QuestionnaireTaskStatisticsVo questionnaireTaskStatisticsVo = new QuestionnaireTaskStatisticsVo();
|
||||
List<QuestionnaireTaskOptionStatisticsVo> collect = optionStatisticsVos.stream().filter(Objects::nonNull).filter(item -> questionNumber.equals(item.getQuestionNumber())).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(collect)) {
|
||||
questionnaireTaskStatisticsVo.setQuestionnaireName(collect.get(0).getQuestionnaireName());
|
||||
questionnaireTaskStatisticsVo.setCreateTime(collect.get(0).getCreateTime());
|
||||
questionnaireTaskStatisticsVo.setQuestionName(collect.get(0).getQuestionName());
|
||||
questionnaireTaskStatisticsVo.setQuestionNumber(collect.get(0).getQuestionNumber());
|
||||
questionnaireTaskStatisticsVo.setQuestionnaireTaskOptionStatisticsVos(collect);
|
||||
output.add(questionnaireTaskStatisticsVo);
|
||||
}
|
||||
return AjaxResult.success(questionnaireTaskStatisticsVos);
|
||||
}
|
||||
return AjaxResult.success(output);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
package com.xinelu.manage.vo.statistics;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @description: 问卷任务统计选项返回值
|
||||
@ -75,4 +77,20 @@ public class QuestionnaireTaskOptionStatisticsVo {
|
||||
* 选择比例
|
||||
*/
|
||||
private BigDecimal choiceProportion;
|
||||
|
||||
/**
|
||||
* 题目序号
|
||||
*/
|
||||
private BigDecimal questionNumber;
|
||||
|
||||
/**
|
||||
* 问卷标题(上层数据使用)
|
||||
*/
|
||||
private String questionnaireName;
|
||||
|
||||
/**
|
||||
* 创建时间(上层数据使用)
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
@ -22,6 +22,12 @@ public class QuestionnaireTaskStatisticsVo {
|
||||
@ApiModelProperty(value = "问卷提交结果信息表id")
|
||||
private Long questionSubmitResultId;
|
||||
|
||||
/**
|
||||
* 问卷选项id
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项id")
|
||||
private Long questionSubmitId;
|
||||
|
||||
/**
|
||||
* 问卷表id
|
||||
*/
|
||||
@ -48,6 +54,36 @@ public class QuestionnaireTaskStatisticsVo {
|
||||
@ApiModelProperty(value = "题目名称")
|
||||
private String questionName;
|
||||
|
||||
/**
|
||||
* 问卷选项提交结果信息表id
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项提交结果信息表id")
|
||||
private Long patientQuestionOptionResult;
|
||||
|
||||
/**
|
||||
* 问卷选项信息表id
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项信息表id")
|
||||
private Long questionSubjectOptionId;
|
||||
|
||||
/**
|
||||
* 问卷选项名称
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项名称")
|
||||
private String optionName;
|
||||
|
||||
/**
|
||||
* 问卷选项排序
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项排序")
|
||||
private Long optionSort;
|
||||
|
||||
/**
|
||||
* 问卷选项是否选择
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项是否选择")
|
||||
private Integer optionChooseSign;
|
||||
|
||||
/**
|
||||
* 填写问卷总数
|
||||
*/
|
||||
@ -69,4 +105,14 @@ public class QuestionnaireTaskStatisticsVo {
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 填写问卷总数
|
||||
*/
|
||||
private Long manageRouteNodeId;
|
||||
|
||||
/**
|
||||
* 选择比例
|
||||
*/
|
||||
private BigDecimal choiceProportion;
|
||||
}
|
||||
@ -369,4 +369,20 @@
|
||||
from question_subject
|
||||
where question_info_id = #{questionInfoId}
|
||||
</delete>
|
||||
|
||||
<select id="selectQuestionnaireByQuestionnaireId"
|
||||
resultType="com.xinelu.manage.vo.statistics.QuestionnaireTaskStatisticsVo">
|
||||
select qs.question_info_id,
|
||||
qs.id questionSubjectId,
|
||||
qs.question_number,
|
||||
qs.question_type,
|
||||
qs.question_name,
|
||||
qso.id questionSubjectOptionId,
|
||||
qso.option_name,
|
||||
qso.option_sort
|
||||
from question_subject qs
|
||||
LEFT JOIN question_subject_option qso ON qso.questionnaire_subject_id = qs.id
|
||||
where qs.question_info_id = #{questionnaireId}
|
||||
order by qs.question_number ASC, qso.id ASC
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user