小程序满意度

This commit is contained in:
zhangheng 2024-04-25 17:54:02 +08:00
parent ed5c15990b
commit 158dafcbcb
8 changed files with 183 additions and 9 deletions

View File

@ -6,7 +6,6 @@ import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecor
import com.xinelu.manage.mapper.patientquestionsubmitresult.PatientQuestionSubmitResultMapper; import com.xinelu.manage.mapper.patientquestionsubmitresult.PatientQuestionSubmitResultMapper;
import com.xinelu.manage.mapper.patienttaskexecuterecord.PatientTaskExecuteRecordMapper; import com.xinelu.manage.mapper.patienttaskexecuterecord.PatientTaskExecuteRecordMapper;
import com.xinelu.manage.service.patienttaskexecuterecord.IPatientTaskExecuteRecordService; import com.xinelu.manage.service.patienttaskexecuterecord.IPatientTaskExecuteRecordService;
import com.xinelu.manage.service.propagandainfo.IPropagandaInfoService;
import com.xinelu.manage.vo.patienttaskexecuterecord.PatientTaskExecuteRecordVO; import com.xinelu.manage.vo.patienttaskexecuterecord.PatientTaskExecuteRecordVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -26,8 +25,6 @@ public class PatientTaskExecuteRecordServiceImpl implements IPatientTaskExecuteR
private PatientTaskExecuteRecordMapper patientTaskExecuteRecordMapper; private PatientTaskExecuteRecordMapper patientTaskExecuteRecordMapper;
@Resource @Resource
private PatientQuestionSubmitResultMapper submitResultMapper; private PatientQuestionSubmitResultMapper submitResultMapper;
@Resource
private IPropagandaInfoService iPropagandaInfoService;
/** /**
* 查询患者管理任务执行记录 * 查询患者管理任务执行记录

View File

@ -61,7 +61,7 @@ public class QuestionInfoServiceImpl implements IQuestionInfoService {
questionVO.setQuestionSubjectList(questionSubjects); questionVO.setQuestionSubjectList(questionSubjects);
return questionVO; return questionVO;
} }
// 查询选项表 // 选项表
List<QuestionSubjectOptionVO> questionSubjectOptions = questionSubjectOptionMapper.selectQuestionSubjectOptions(questionSubjectIds); List<QuestionSubjectOptionVO> questionSubjectOptions = questionSubjectOptionMapper.selectQuestionSubjectOptions(questionSubjectIds);
for (QuestionSubjectVO questionSubject : questionSubjects) { for (QuestionSubjectVO questionSubject : questionSubjects) {
List<QuestionSubjectOptionVO> collect = questionSubjectOptions.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionnaireSubjectId()) && questionSubject.getId().equals(item.getQuestionnaireSubjectId())).collect(Collectors.toList()); List<QuestionSubjectOptionVO> collect = questionSubjectOptions.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionnaireSubjectId()) && questionSubject.getId().equals(item.getQuestionnaireSubjectId())).collect(Collectors.toList());

View File

@ -7,13 +7,12 @@ import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecor
import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO; import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO;
import com.xinelu.mobile.service.homepage.HomePageService; import com.xinelu.mobile.service.homepage.HomePageService;
import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO; import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO;
import com.xinelu.mobile.vo.satisfactionquestionnaire.SatisfactionQuestionnaire;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
import static com.xinelu.common.utils.PageUtils.startPage;
/** /**
* 机构信息Controller * 机构信息Controller
* *
@ -76,4 +75,24 @@ public class HomePageController extends BaseController {
List<PatientTaskExecuteRecord> list = homePageService.selectPatientTaskExecuteRecord(residentId); List<PatientTaskExecuteRecord> list = homePageService.selectPatientTaskExecuteRecord(residentId);
return getDataTable(list); return getDataTable(list);
} }
/**
* 已完成满意度问卷
*/
@GetMapping("/completedSatisfaction")
private TableDataInfo completedSatisfactionQuestionnaire(Long residentId) {
startPage();
List<SatisfactionQuestionnaire> list = homePageService.completedSatisfactionQuestionnaire(residentId);
return getDataTable(list);
}
/**
* 未执行满意度问卷
*/
@GetMapping("/incompleteSatisfaction")
private TableDataInfo incompleteSatisfactionQuestionnaire(Long residentId, Integer pageNum, Integer pageSize) {
startPage();
List<SatisfactionQuestionnaire> list = homePageService.incompleteSatisfactionQuestionnaire(residentId,pageNum,pageSize);
return getDataTable(list);
}
} }

View File

@ -2,6 +2,7 @@ package com.xinelu.mobile.mapper.homepage;
import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecord; import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecord;
import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO; import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO;
import com.xinelu.mobile.vo.satisfactionquestionnaire.SatisfactionQuestionnaire;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -30,4 +31,25 @@ public interface HomePageMapper {
* @return PatientTaskExecuteRecord * @return PatientTaskExecuteRecord
*/ */
List<PatientTaskExecuteRecord> selectTaskExecuteRecordByResidentId(@Param("residentId") Long residentId, @Param("nodeExecuteStatus") String nodeExecuteStatus); 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);
} }

View File

@ -6,6 +6,7 @@ import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecor
import com.xinelu.manage.domain.scriptInfo.ScriptInfo; import com.xinelu.manage.domain.scriptInfo.ScriptInfo;
import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO; import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO;
import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO; import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO;
import com.xinelu.mobile.vo.satisfactionquestionnaire.SatisfactionQuestionnaire;
import java.util.List; import java.util.List;
@ -58,4 +59,21 @@ public interface HomePageService {
* @return AjaxResult * @return AjaxResult
*/ */
List<PatientTaskExecuteRecord> selectPatientTaskExecuteRecord(Long residentId); List<PatientTaskExecuteRecord> selectPatientTaskExecuteRecord(Long residentId);
/**
* 已完成满意度问卷
*
* @param residentId 居民信息
* @return SatisfactionQuestionnaire
*/
List<SatisfactionQuestionnaire> completedSatisfactionQuestionnaire(Long residentId);
/**
* 未执行满意度问卷
*
* @param residentId 居民信息
* @return SatisfactionQuestionnaire
*/
List<SatisfactionQuestionnaire> incompleteSatisfactionQuestionnaire(Long residentId, Integer pageNum, Integer pageSize);
} }

View File

@ -3,8 +3,7 @@ package com.xinelu.mobile.service.homepage.Impl;
import com.xinelu.common.constant.TaskCreateTypeConstant; import com.xinelu.common.constant.TaskCreateTypeConstant;
import com.xinelu.common.core.domain.AjaxResult; import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.core.page.TableDataInfo; import com.xinelu.common.core.page.TableDataInfo;
import com.xinelu.common.enums.NodeExecuteStatusEnum; import com.xinelu.common.enums.*;
import com.xinelu.common.enums.RouteNodeNameEnum;
import com.xinelu.common.exception.ServiceException; import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.PageServiceUtil; import com.xinelu.common.utils.PageServiceUtil;
import com.xinelu.common.utils.bean.BeanUtils; import com.xinelu.common.utils.bean.BeanUtils;
@ -34,6 +33,7 @@ import com.xinelu.manage.vo.questionsubjectoption.QuestionSubjectOptionVO;
import com.xinelu.mobile.mapper.homepage.HomePageMapper; import com.xinelu.mobile.mapper.homepage.HomePageMapper;
import com.xinelu.mobile.service.homepage.HomePageService; import com.xinelu.mobile.service.homepage.HomePageService;
import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO; import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO;
import com.xinelu.mobile.vo.satisfactionquestionnaire.SatisfactionQuestionnaire;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -239,6 +239,44 @@ public class HomePageServiceImpl implements HomePageService {
return homePageMapper.selectTaskExecuteRecordByResidentId(residentId, NodeExecuteStatusEnum.EXECUTED.getInfo()); return homePageMapper.selectTaskExecuteRecordByResidentId(residentId, NodeExecuteStatusEnum.EXECUTED.getInfo());
} }
/**
* 已完成满意度问卷
*
* @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 List<SatisfactionQuestionnaire> 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 new ArrayList<>();
}
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 incompleteSatisfaction;
}
/** /**
* 更新节点任务表 * 更新节点任务表
*/ */

View File

@ -0,0 +1,41 @@
package com.xinelu.mobile.vo.satisfactionquestionnaire;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
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;
/**
* 出院时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime dischargeTime;
}

View File

@ -64,4 +64,43 @@
</where> </where>
ORDER BY pter.execute_time desc ORDER BY pter.execute_time desc
</select> </select>
<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,
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>
</mapper> </mapper>