小程序满意度

This commit is contained in:
zhangheng 2024-04-29 13:45:42 +08:00
parent 5b8a78447b
commit 5aa0e7b730
9 changed files with 65 additions and 172 deletions

View File

@ -166,6 +166,8 @@ public class PatientQuestionSubmitResult extends BaseEntity {
@Excel(name = "问卷总得分,根据患者提交问卷得出的分值")
private BigDecimal totalScore;
private Long residentId;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

View File

@ -105,11 +105,17 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService {
log.info("新增问卷表失败," + questionInfo);
throw new SecurityException("新增问卷失败!请联系管理员!");
}
if (CollectionUtils.isEmpty(question.getQuestionSubjectList())) {
throw new SecurityException("请添加问卷信息!");
}
//新增题目表
List<QuestionSubjectVO> questionSubjectList = question.getQuestionSubjectList();
List<QuestionSubject> questionSubjects = new ArrayList<>();
List<QuestionSubjectOptionVO> questionSubjectOptions = new ArrayList<>();
for (QuestionSubjectVO questionSubject : questionSubjectList) {
if (StringUtils.isBlank(questionSubject.getQuestionName())) {
throw new SecurityException("请添加完整问卷题目!");
}
QuestionSubject saveQuestionSubject = new QuestionSubject();
BeanUtils.copyBeanProp(saveQuestionSubject, questionSubject);
saveQuestionSubject.setQuestionInfoId(questionInfo.getId());
@ -125,6 +131,9 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService {
log.info("新增问卷题目表失败," + questionSubjects);
throw new SecurityException("新增问卷失败!请联系管理员!");
}
if (CollectionUtils.isEmpty(questionSubjectOptions)) {
return AjaxResult.success();
}
//新增选项表
List<QuestionSubjectOption> saveQuestionSubjectOptions = new ArrayList<>();
for (QuestionSubjectOptionVO questionSubjectOption : questionSubjectOptions) {
@ -183,6 +192,9 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService {
List<QuestionSubject> questionSubjects = new ArrayList<>();
List<QuestionSubjectOptionVO> questionSubjectOptions = new ArrayList<>();
for (QuestionSubjectVO questionSubject : questionSubjectList) {
if (StringUtils.isBlank(questionSubject.getQuestionName())) {
throw new SecurityException("请添加完整问卷题目!");
}
QuestionSubject saveQuestionSubject = new QuestionSubject();
BeanUtils.copyBeanProp(saveQuestionSubject, questionSubject);
saveQuestionSubject.setQuestionInfoId(questionInfo.getId());

View File

@ -219,6 +219,8 @@
</if>
<if test="totalScore != null">total_score,
</if>
<if test="residentId != null">resident_id,
</if>
<if test="remark != null">remark,
</if>
<if test="createBy != null">create_by,
@ -269,6 +271,8 @@
</if>
<if test="totalScore != null">#{totalScore},
</if>
<if test="residentId != null">#{residentId},
</if>
<if test="remark != null">#{remark},
</if>
<if test="createBy != null">#{createBy},

View File

@ -54,8 +54,8 @@ public class HomePageController extends BaseController {
* 问卷记录信息
*/
@GetMapping("/selectQuestionSubmit")
public AjaxResult selectQuestionSubmit(Long patientTaskExecuteRecordId) {
return homePageService.selectQuestionSubmit(patientTaskExecuteRecordId);
public AjaxResult selectQuestionSubmit(Long patientQuestionSubmitResultId) {
return homePageService.selectQuestionSubmit(patientQuestionSubmitResultId);
}
/**
@ -77,20 +77,12 @@ public class HomePageController extends BaseController {
}
/**
* 已完成满意度问卷
* 满意度问卷
*/
@GetMapping("/completedSatisfaction")
private TableDataInfo completedSatisfactionQuestionnaire(Long residentId) {
@GetMapping("/satisfactionQuestionnaire")
private TableDataInfo satisfactionQuestionnaire(Long residentId) {
startPage();
List<SatisfactionQuestionnaire> list = homePageService.completedSatisfactionQuestionnaire(residentId);
List<SatisfactionQuestionnaire> list = homePageService.satisfactionQuestionnaire(residentId);
return getDataTable(list);
}
/**
* 未执行满意度问卷
*/
@GetMapping("/incompleteSatisfaction")
private TableDataInfo incompleteSatisfactionQuestionnaire(Long residentId, Integer pageNum, Integer pageSize) {
return homePageService.incompleteSatisfactionQuestionnaire(residentId, pageNum, pageSize);
}
}

View File

@ -33,23 +33,10 @@ public interface HomePageMapper {
List<PatientTaskExecuteRecord> selectTaskExecuteRecordByResidentId(@Param("residentId") Long residentId, @Param("nodeExecuteStatus") String nodeExecuteStatus);
/**
* 根据居民查询已完成满意度问卷
* 根据居民查询满意度问卷
*
* @param residentId 居民id
* @return SatisfactionQuestionnaire
*/
List<SatisfactionQuestionnaire> satisfactionQuestionnaireByResidentId(@Param("residentId") Long residentId, @Param("taskContent") String taskContent,
@Param("questionType") String questionType, @Param("routeNodeName") String routeNodeName);
/**
* 根据居民查询已完成满意度问卷
*
* @param residentId 居民id
* @return SatisfactionQuestionnaire
*/
List<SatisfactionQuestionnaire> incompleteSatisfactionQuestionnaire(@Param("residentId") Long residentId, @Param("taskContent") String taskContent,
@Param("questionType") String questionType, @Param("routeNodeName") String routeNodeName,
@Param("nodeExecuteStatus") String nodeExecuteStatus, @Param("routeCheckStatus") String routeCheckStatus);
List<SatisfactionQuestionnaire> satisfactionQuestionnaireByResidentId(@Param("residentId") Long residentId, @Param("questionType") String questionType, @Param("questionnaireStatus") String questionnaireStatus);
}

View File

@ -39,10 +39,10 @@ public interface HomePageService {
/**
* 问卷记录信息
*
* @param patientTaskExecuteRecordId 记录表id
* @param patientQuestionSubmitResultId 记录表id
* @return AjaxResult
*/
AjaxResult selectQuestionSubmit(Long patientTaskExecuteRecordId);
AjaxResult selectQuestionSubmit(Long patientQuestionSubmitResultId);
/**
* 问卷提交
@ -66,14 +66,5 @@ public interface HomePageService {
* @param residentId 居民信息
* @return SatisfactionQuestionnaire
*/
List<SatisfactionQuestionnaire> completedSatisfactionQuestionnaire(Long residentId);
/**
* 未执行满意度问卷
*
* @param residentId 居民信息
* @return SatisfactionQuestionnaire
*/
TableDataInfo incompleteSatisfactionQuestionnaire(Long residentId, Integer pageNum, Integer pageSize);
List<SatisfactionQuestionnaire> satisfactionQuestionnaire(Long residentId);
}

View File

@ -3,7 +3,10 @@ package com.xinelu.mobile.service.homepage.Impl;
import com.xinelu.common.constant.TaskCreateTypeConstant;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.page.TableDataInfo;
import com.xinelu.common.enums.*;
import com.xinelu.common.enums.NodeExecuteStatusEnum;
import com.xinelu.common.enums.QuestionTypeEnum;
import com.xinelu.common.enums.QuestionnaireStatusEnum;
import com.xinelu.common.enums.RouteNodeNameEnum;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.PageServiceUtil;
import com.xinelu.common.utils.bean.BeanUtils;
@ -153,12 +156,12 @@ public class HomePageServiceImpl implements HomePageService {
/**
* 问卷记录信息
*
* @param patientTaskExecuteRecordId 记录表id
* @param patientQuestionSubmitResultId 记录表id
* @return AjaxResult
*/
@Override
public AjaxResult selectQuestionSubmit(Long patientTaskExecuteRecordId) {
return AjaxResult.success(submitResultMapper.selectResultByTaskExecuteRecordId(patientTaskExecuteRecordId, null));
public AjaxResult selectQuestionSubmit(Long patientQuestionSubmitResultId) {
return AjaxResult.success(submitResultMapper.selectResultByTaskExecuteRecordId(null, patientQuestionSubmitResultId));
}
/**
@ -170,17 +173,10 @@ public class HomePageServiceImpl implements HomePageService {
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult updatePatientTaskExecuteRecord(PatientQuestionSubmitResultDTO dto) {
String routeHandlePerson = dto.getRouteHandlePerson();
LocalDateTime time = LocalDateTime.now();
// 更新节点任务表
updateSignPatientManageRouteNode(dto, routeHandlePerson, time);
// 新增患者管理任务执行记录
Long taskExecuteRecordId = insertPatientTaskExecuteRecord(dto, routeHandlePerson, time);
PatientQuestionSubmitResult patientQuestionSubmitResult = new PatientQuestionSubmitResult();
BeanUtils.copyBeanProp(patientQuestionSubmitResult, dto);
patientQuestionSubmitResult.setCreateBy(routeHandlePerson);
patientQuestionSubmitResult.setCreateTime(time);
patientQuestionSubmitResult.setTaskExecuteRecordId(taskExecuteRecordId);
// 新增患者问卷提交结果
if (patientQuestionSubmitResultMapper.insertPatientQuestionSubmitResult(patientQuestionSubmitResult) <= 0) {
throw new ServiceException("新增患者问卷提交结果失败");
@ -195,7 +191,6 @@ public class HomePageServiceImpl implements HomePageService {
PatientQuestionSubjectResult saveQuestionSubject = new PatientQuestionSubjectResult();
BeanUtils.copyBeanProp(saveQuestionSubject, questionSubjectResult);
saveQuestionSubject.setQuestionSubmitResultId(patientQuestionSubmitResult.getId());
saveQuestionSubject.setCreateBy(routeHandlePerson);
saveQuestionSubject.setCreateTime(time);
patientQuestionSubjectResults.add(saveQuestionSubject);
if (CollectionUtils.isNotEmpty(questionSubjectResult.getOptionResultList())) {
@ -218,7 +213,6 @@ public class HomePageServiceImpl implements HomePageService {
PatientQuestionSubjectResult patientQuestionSubjectResult = patientQuestionSubjectResults.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionNumber()) && patientQuestionOptionResult.getQuestionNumber().compareTo(item.getQuestionNumber()) == 0).findFirst().orElse(new PatientQuestionSubjectResult());
saveQuestionOption.setQuestionSubjectResultId(patientQuestionSubjectResult.getId());
saveQuestionOption.setCreateTime(time);
saveQuestionOption.setCreateBy(routeHandlePerson);
saveQuestionSubjectOptions.add(saveQuestionOption);
}
// 新增患者问卷题目选项提交结果
@ -240,77 +234,13 @@ public class HomePageServiceImpl implements HomePageService {
}
/**
* 已完成满意度问卷
* 满意度问卷
*
* @param residentId 居民信息
* @return SatisfactionQuestionnaire
*/
@Override
public List<SatisfactionQuestionnaire> completedSatisfactionQuestionnaire(Long residentId) {
return homePageMapper.satisfactionQuestionnaireByResidentId(residentId, TaskContentEnum.QUESTIONNAIRE_SCALE.getInfo(), QuestionTypeEnum.SATISFACTION_QUESTIONNAIRE.getInfo(), RouteNodeNameEnum.AFTER_DISCHARGE.getInfo());
}
/**
* 未执行满意度问卷
*
* @param residentId 居民信息
* @return SatisfactionQuestionnaire
*/
@Override
public TableDataInfo incompleteSatisfactionQuestionnaire(Long residentId, Integer pageNum, Integer pageSize) {
List<SatisfactionQuestionnaire> incompleteSatisfaction = homePageMapper.incompleteSatisfactionQuestionnaire(residentId, TaskContentEnum.QUESTIONNAIRE_SCALE.getInfo(), QuestionTypeEnum.SATISFACTION_QUESTIONNAIRE.getInfo(), RouteNodeNameEnum.AFTER_DISCHARGE.getInfo(), NodeExecuteStatusEnum.UNEXECUTED.getInfo(), RouteCheckStatusEnum.AGREE.getInfo());
if (CollectionUtils.isEmpty(incompleteSatisfaction)) {
return pageServiceUtil.getDataTable(incompleteSatisfaction);
}
int total = incompleteSatisfaction.size();
for (SatisfactionQuestionnaire satisfactionQuestionnaire : incompleteSatisfaction) {
if (Objects.nonNull(satisfactionQuestionnaire) && Objects.nonNull(satisfactionQuestionnaire.getDischargeTime())) {
satisfactionQuestionnaire.setExecuteTime(satisfactionQuestionnaire.getDischargeTime().plusDays(satisfactionQuestionnaire.getRouteNodeDay()));
}
}
incompleteSatisfaction.sort(Comparator.comparing(SatisfactionQuestionnaire::getExecuteTime).reversed());
if (Objects.nonNull(pageSize) || Objects.nonNull(pageNum)) {
incompleteSatisfaction = incompleteSatisfaction.stream().skip((long) (pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
}
TableDataInfo dataTable = pageServiceUtil.getDataTable(incompleteSatisfaction);
dataTable.setTotal(total);
return dataTable;
}
/**
* 更新节点任务表
*/
private void updateSignPatientManageRouteNode(PatientQuestionSubmitResultDTO dto, String routeHandlePerson, LocalDateTime time) {
SignPatientManageRouteNode signPatientManageRouteNode = new SignPatientManageRouteNode();
signPatientManageRouteNode.setId(dto.getManageRouteNodeId());
signPatientManageRouteNode.setRouteHandleRemark(dto.getRouteHandleRemark());
signPatientManageRouteNode.setNodeExecuteStatus(NodeExecuteStatusEnum.EXECUTED.toString());
signPatientManageRouteNode.setRouteHandleId(dto.getRouteHandleId());
signPatientManageRouteNode.setRouteHandlePerson(routeHandlePerson);
signPatientManageRouteNode.setUpdateBy(routeHandlePerson);
signPatientManageRouteNode.setUpdateTime(time);
// 更新节点任务表
if (signPatientManageRouteNodeMapper.updateSignPatientManageRouteNode(signPatientManageRouteNode) <= 0) {
throw new ServiceException("更新节点任务表失败");
}
}
/**
* 新增患者管理任务执行记录
*/
private Long insertPatientTaskExecuteRecord(PatientQuestionSubmitResultDTO dto, String routeHandlePerson, LocalDateTime time) {
PatientTaskExecuteRecord patientTaskExecuteRecord = new PatientTaskExecuteRecord();
BeanUtils.copyProperties(dto, patientTaskExecuteRecord);
patientTaskExecuteRecord.setExecuteTime(time);
patientTaskExecuteRecord.setTaskContent(dto.getTaskType());
patientTaskExecuteRecord.setExecutePerson(routeHandlePerson);
patientTaskExecuteRecord.setCreateBy(routeHandlePerson);
patientTaskExecuteRecord.setExecuteType(TaskCreateTypeConstant.MANUAL_CREATE);
patientTaskExecuteRecord.setCreateTime(time);
if (patientTaskExecuteRecordMapper.insertPatientTaskExecuteRecord(patientTaskExecuteRecord) > 0) {
return patientTaskExecuteRecord.getId();
} else {
throw new ServiceException("新增患者管理任务记录失败");
}
public List<SatisfactionQuestionnaire> satisfactionQuestionnaire(Long residentId) {
return homePageMapper.satisfactionQuestionnaireByResidentId(residentId, QuestionTypeEnum.SATISFACTION_QUESTIONNAIRE.getInfo(), QuestionnaireStatusEnum.PUBLISHED.getInfo());
}
}

View File

@ -8,34 +8,26 @@ import java.time.LocalDateTime;
@Data
public class SatisfactionQuestionnaire {
/**
* 路径名称
*/
private String manageRouteName;
/**
* 执行时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime executeTime;
/**
* 节点名称
*/
private String routeNodeName;
/**
* 节点天数
*/
private Integer routeNodeDay;
/**
* 问卷标题
*/
private String questionnaireName;
/**
* 出院时间
* 问卷id
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime dischargeTime;
private Long templateId;
private String sign;
/***
*
*/
private Long patientQuestionSubmitResultId;
}

View File

@ -67,40 +67,23 @@
<select id="satisfactionQuestionnaireByResidentId"
resultType="com.xinelu.mobile.vo.satisfactionquestionnaire.SatisfactionQuestionnaire">
select pter.manage_route_name,
pter.execute_time,
'出院后' as routeNodeName,
spmrn.route_node_day,
qi.questionnaire_name
from patient_task_execute_record pter
LEFT JOIN patient_info pi ON pi.id = pter.patient_id
LEFT JOIN resident_info ri on ri.id = pi.resident_id
LEFT JOIN sign_patient_manage_route_node spmrn ON spmrn.id = pter.manage_route_node_id
LEFT JOIN question_info qi ON spmrn.question_info_id = qi.id
where ri.id = #{residentId}
and pter.task_content = #{taskContent}
and qi.question_type = #{questionType}
and spmrn.route_node_name = #{routeNodeName}
Order BY pter.execute_time DESC
</select>
<select id="incompleteSatisfactionQuestionnaire"
resultType="com.xinelu.mobile.vo.satisfactionquestionnaire.SatisfactionQuestionnaire">
select spmr.route_name,
'出院后' as routeNodeName,
spmrn.route_node_day,
SELECT qi.id templateId,
qi.questionnaire_name,
pi.discharge_time
from sign_patient_manage_route spmr
LEFT JOIN patient_info pi ON pi.id = spmr.patient_id
LEFT JOIN resident_info ri on ri.id = pi.resident_id
LEFT JOIN sign_patient_manage_route_node spmrn ON spmrn.manage_route_id = spmr.id
LEFT JOIN question_info qi ON spmrn.question_info_id = qi.id
where ri.id = #{residentId}
and spmrn.task_type = #{taskContent}
and qi.question_type = #{questionType}
and spmrn.route_node_name = #{routeNodeName}
and spmrn.node_execute_status = #{nodeExecuteStatus}
and spmrn.route_check_status = #{routeCheckStatus}
(SELECT id
FROM patient_question_submit_result
WHERE resident_id = #{residentId}
AND question_info_id = templateId) patientQuestionSubmitResultId,
pqsr.create_time executeTime,
pqsr.resident_id,
CASE
WHEN pqsr.resident_id IS NULL THEN 'incomplete'
WHEN pqsr.resident_id = #{residentId} THEN 'completed'
END AS sign
FROM question_info qi
LEFT JOIN patient_question_submit_result pqsr ON pqsr.question_info_id = qi.id
WHERE qi.question_type = #{questionType}
and qi.questionnaire_status = #{questionnaireStatus}
GROUP BY qi.id
ORDER BY pqsr.create_time DESC
</select>
</mapper>