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 7144fe34..33a0a00d 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 @@ -130,4 +130,10 @@ public class SignPatientManageRouteNodeController extends BaseController { return R.ok(signNodeService.getSpecialDiseaseNode(patientTaskDto)); } + + @GetMapping("/generateStatistic") + public R generateStatistic() { + signNodeService.generateStatistic(); + return R.ok(); + } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/patienttaskstatistics/PatientTaskStatistics.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/patienttaskstatistics/PatientTaskStatistics.java index 31fb240b..3cafbe0b 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/patienttaskstatistics/PatientTaskStatistics.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/patienttaskstatistics/PatientTaskStatistics.java @@ -4,6 +4,7 @@ import com.xinelu.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.math.BigDecimal; +import java.time.LocalDateTime; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -52,4 +53,14 @@ public class PatientTaskStatistics extends BaseEntity { @ApiModelProperty(value = "任务完成数量") private BigDecimal taskFinishNum; + /** + * 下次任务名称 + */ + private String nextTaskName; + + /** + * 任务执行时间 + */ + private LocalDateTime nextTaskTime; + } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptInfo/ScriptInfo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptInfo/ScriptInfo.java index b672cfef..6390bc8f 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptInfo/ScriptInfo.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/scriptInfo/ScriptInfo.java @@ -140,6 +140,11 @@ public class ScriptInfo extends BaseEntity { */ private Long sourceTemplateId; + /** + * 爱医声平台机器人ID + */ + private String robotPublishId; + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patienttaskstatistics/PatientTaskStatisticsMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patienttaskstatistics/PatientTaskStatisticsMapper.java index 10c4b534..f2772fce 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patienttaskstatistics/PatientTaskStatisticsMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patienttaskstatistics/PatientTaskStatisticsMapper.java @@ -1,6 +1,7 @@ package com.xinelu.manage.mapper.patienttaskstatistics; import com.xinelu.manage.domain.patienttaskstatistics.PatientTaskStatistics; +import com.xinelu.manage.vo.patientinfo.PatientNextTaskVo; import java.util.List; /** @@ -42,6 +43,10 @@ public interface PatientTaskStatisticsMapper { */ int updatePatientTaskStatistics(PatientTaskStatistics patientTaskStatistics); + PatientTaskStatistics selectNum(Long patientId); + + PatientNextTaskVo getPatientNextTask(Long patientId); + /** * 删除患者任务统计 * 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 d0918835..09143358 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 @@ -152,4 +152,14 @@ public interface SignPatientManageRouteNodeMapper { * @return int */ int updateNodeExecuteStatusByIds(@Param("manageRouteNodeIds") List manageRouteNodeIds, @Param("nodeExecuteStatus") String nodeExecuteStatus, @Param("appletStatus") String appletStatus, @Param("messageStatus") String messageStatus, @Param("officialStatus") String officialStatus); + + /** + * @description 根据签约记录表主键查询患者已执行任务数量 + * @param signPatientRecordId 签约记录表主键 + * @return 任务执行数量 + * @Author haown + * @Date 2024-08-13 14:00 + */ + int getPatientExecutedTaskNum(Long signPatientRecordId); + } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java index 4bc3c114..b17dcb10 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java @@ -21,7 +21,6 @@ import com.xinelu.manage.mapper.signpatientrecord.SignPatientRecordMapper; import com.xinelu.manage.service.patientinfo.IPatientInfoService; import com.xinelu.manage.service.patientvisitrecord.IPatientVisitRecordService; import com.xinelu.manage.vo.patientinfo.PatientInfoVo; -import com.xinelu.manage.vo.patientinfo.PatientNextTaskVo; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; @@ -82,14 +81,14 @@ public class PatientInfoServiceImpl implements IPatientInfoService { @DataScope(agencyAlias = "p", userAlias = "p.attending_physician_id") @Override public List getPatientList(PatientInfoDto patientInfo) { List patientInfoVoList = patientInfoMapper.getPatientList(patientInfo); - patientInfoVoList.forEach(patientInfoVo -> { - // 下次任务 - PatientNextTaskVo patientNextTask = patientInfoMapper.getPatientNextTask(patientInfoVo.getId()); - if (ObjectUtils.isNotEmpty(patientNextTask)) { - patientInfoVo.setNextTaskName(patientNextTask.getTaskName()); - patientInfoVo.setNextTaskTime(patientNextTask.getExecuteDateTime()); - } - }); + //patientInfoVoList.forEach(patientInfoVo -> { + // // 下次任务 + // PatientNextTaskVo patientNextTask = patientInfoMapper.getPatientNextTask(patientInfoVo.getId()); + // if (ObjectUtils.isNotEmpty(patientNextTask)) { + // patientInfoVo.setNextTaskName(patientNextTask.getTaskName()); + // patientInfoVo.setNextTaskTime(patientNextTask.getExecuteDateTime()); + // } + //}); // 按照患者id分组 //Map> groupById = patientInfoVoList.stream().collect(Collectors.groupingBy(PatientInfoVo::getId)); diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskstatistics/IPatientTaskStatisticsService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskstatistics/IPatientTaskStatisticsService.java index b008f30c..d83096c6 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskstatistics/IPatientTaskStatisticsService.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskstatistics/IPatientTaskStatisticsService.java @@ -79,11 +79,19 @@ public interface IPatientTaskStatisticsService { /** * @description 根据任务表主键列表修改任务总数、执行数、完成数 - * @param signManageRouteNodeIds 任务表主键列表 + * @param manageRouteNodeId 任务表主键 * @param type 字段种类,TASK_NUM:任务总数,TASK_EXECUTE_NUM: 任务执行数,TASK_FINISH_NUM:任务完成数 * @return 结果 * @Author haown * @Date 2024-8-12 17:19 */ - int updateNumByManageRouteNodeIds(List signManageRouteNodeIds, String type); + int updateNumByManageRouteNodeId(Long manageRouteNodeId, String type, Integer count); + + /** + * @description 修改患者统计表任务数量、下次任务 + * @param patientIdList 患者主键列表 + * @Author haown + * @Date 2024-8-14 11:37 + */ + void updateNum(List patientIdList); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskstatistics/impl/PatientTaskStatisticsServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskstatistics/impl/PatientTaskStatisticsServiceImpl.java index b467dfa1..dff13fc0 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskstatistics/impl/PatientTaskStatisticsServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskstatistics/impl/PatientTaskStatisticsServiceImpl.java @@ -1,15 +1,24 @@ package com.xinelu.manage.service.patienttaskstatistics.impl; +import com.xinelu.common.constant.SignRecordServiceStatusConstants; import com.xinelu.common.constant.TaskStatisticsTypeConstants; +import com.xinelu.manage.domain.patientinfo.PatientInfo; import com.xinelu.manage.domain.patienttaskstatistics.PatientTaskStatistics; +import com.xinelu.manage.domain.signpatientmanageroute.SignPatientManageRoute; +import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode; import com.xinelu.manage.domain.signpatientrecord.SignPatientRecord; +import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper; import com.xinelu.manage.mapper.patienttaskstatistics.PatientTaskStatisticsMapper; +import com.xinelu.manage.mapper.signpatientmanageroute.SignPatientManageRouteMapper; +import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper; import com.xinelu.manage.mapper.signpatientrecord.SignPatientRecordMapper; import com.xinelu.manage.service.patienttaskstatistics.IPatientTaskStatisticsService; +import com.xinelu.manage.vo.patientinfo.PatientNextTaskVo; import java.math.BigDecimal; import java.util.List; import javax.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; /** @@ -24,13 +33,19 @@ public class PatientTaskStatisticsServiceImpl implements IPatientTaskStatisticsS private PatientTaskStatisticsMapper patientTaskStatisticsMapper; @Resource private SignPatientRecordMapper signPatientRecordMapper; + @Resource + private SignPatientManageRouteNodeMapper signPatientManageRouteNodeMapper; + @Resource + private SignPatientManageRouteMapper signPatientManageRouteMapper; + @Resource + private PatientInfoMapper patientInfoMapper; - /** - * 查询患者任务统计 - * - * @param patientId 患者任务统计主键 - * @return 患者任务统计 - */ + /** + * 查询患者任务统计 + * + * @param patientId 患者任务统计主键 + * @return 患者任务统计 + */ @Override public PatientTaskStatistics selectPatientTaskStatisticsByPatientId(Long patientId) { return patientTaskStatisticsMapper.selectPatientTaskStatisticsByPatientId(patientId); @@ -92,12 +107,20 @@ public class PatientTaskStatisticsServiceImpl implements IPatientTaskStatisticsS } @Override public int insertOrUpdate(PatientTaskStatistics patientTaskStatistics) { + int flag = 0; SignPatientRecord signPatientRecord = signPatientRecordMapper.selectByPrimaryKey(patientTaskStatistics.getSignPatientRecordId()); if (ObjectUtils.isNotEmpty(signPatientRecord)) { PatientTaskStatistics patientTask = patientTaskStatisticsMapper.selectPatientTaskStatisticsByPatientId(patientTaskStatistics.getPatientId()); if (ObjectUtils.isEmpty(patientTask)) { // 插入数据 - patientTaskStatisticsMapper.insertPatientTaskStatistics(patientTaskStatistics); + flag = patientTaskStatisticsMapper.insertPatientTaskStatistics(patientTaskStatistics); + // 查询最新的任务 + PatientNextTaskVo patientNextTaskVo = patientTaskStatisticsMapper.getPatientNextTask(signPatientRecord.getPatientId()); + if (ObjectUtils.isNotEmpty(patientNextTaskVo)) { + patientTaskStatistics.setNextTaskName(patientNextTaskVo.getTaskName()); + patientTaskStatistics.setNextTaskTime(patientNextTaskVo.getExecuteDateTime()); + patientTaskStatisticsMapper.updatePatientTaskStatistics(patientTaskStatistics); + } } else { // 修改数据 patientTask.setServiceStatus(signPatientRecord.getServiceStatus()); @@ -105,11 +128,17 @@ public class PatientTaskStatisticsServiceImpl implements IPatientTaskStatisticsS patientTask.setTaskNum(patientTask.getTaskNum().add(patientTaskStatistics.getTaskNum())); patientTask.setTaskExecuteNum(patientTask.getTaskExecuteNum().add(patientTaskStatistics.getTaskExecuteNum())); patientTask.setTaskFinishNum(patientTask.getTaskFinishNum().add(patientTaskStatistics.getTaskFinishNum())); - patientTaskStatisticsMapper.updatePatientTaskStatistics(patientTask); + // 查询最新的任务 + PatientNextTaskVo patientNextTaskVo = patientTaskStatisticsMapper.getPatientNextTask(signPatientRecord.getPatientId()); + if (ObjectUtils.isNotEmpty(patientNextTaskVo)) { + patientTask.setNextTaskName(patientNextTaskVo.getTaskName()); + patientTask.setNextTaskTime(patientNextTaskVo.getExecuteDateTime()); + } + flag = patientTaskStatisticsMapper.updatePatientTaskStatistics(patientTask); } } - return 0; + return flag; } /** @@ -124,22 +153,60 @@ public class PatientTaskStatisticsServiceImpl implements IPatientTaskStatisticsS @Override public int updateNum(Long patientId, String type, Integer count) { PatientTaskStatistics patientTaskStatistics = patientTaskStatisticsMapper.selectPatientTaskStatisticsByPatientId(patientId); - switch (type) { - case TaskStatisticsTypeConstants.TASK_NUM: - patientTaskStatistics.setTaskNum(patientTaskStatistics.getTaskNum().add(BigDecimal.valueOf(count))); - break; - case TaskStatisticsTypeConstants.TASK_EXECUTE_NUM: - patientTaskStatistics.setTaskExecuteNum(patientTaskStatistics.getTaskExecuteNum().add(BigDecimal.valueOf(count))); - break; - case TaskStatisticsTypeConstants.TASK_FINISH_NUM: - patientTaskStatistics.setTaskFinishNum(patientTaskStatistics.getTaskFinishNum().add(BigDecimal.valueOf(count))); - break; + PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(patientId); + if (ObjectUtils.isNotEmpty(patientInfo) && StringUtils.equals(SignRecordServiceStatusConstants.SERVICE_CENTER, patientInfo.getServiceStatus())) { + switch (type) { + case TaskStatisticsTypeConstants.TASK_NUM: + patientTaskStatistics.setTaskNum(patientTaskStatistics.getTaskNum().add(BigDecimal.valueOf(count))); + break; + case TaskStatisticsTypeConstants.TASK_EXECUTE_NUM: + patientTaskStatistics.setTaskExecuteNum(patientTaskStatistics.getTaskExecuteNum().add(BigDecimal.valueOf(count))); + // 下次任务 + PatientNextTaskVo patientNextTask = patientTaskStatisticsMapper.getPatientNextTask(patientId); + if (ObjectUtils.isNotEmpty(patientNextTask)) { + patientTaskStatistics.setNextTaskName(patientNextTask.getTaskName()); + patientTaskStatistics.setNextTaskTime(patientNextTask.getExecuteDateTime()); + patientTaskStatisticsMapper.updatePatientTaskStatistics(patientTaskStatistics); + } + break; + case TaskStatisticsTypeConstants.TASK_FINISH_NUM: + patientTaskStatistics.setTaskFinishNum(patientTaskStatistics.getTaskFinishNum().add(BigDecimal.valueOf(count))); + break; + } } return patientTaskStatisticsMapper.updatePatientTaskStatistics(patientTaskStatistics); } - @Override public int updateNumByManageRouteNodeIds(List signManageRouteNodeIds, String type) { - + @Override public int updateNumByManageRouteNodeId(Long manageRouteNodeId, String type, Integer count) { + SignPatientManageRouteNode signPatientManageRouteNode = signPatientManageRouteNodeMapper.selectSignPatientManageRouteNodeById(manageRouteNodeId); + if (ObjectUtils.isNotEmpty(signPatientManageRouteNode)) { + SignPatientManageRoute signPatientManageRoute = signPatientManageRouteMapper.selectSignPatientManageRouteById(signPatientManageRouteNode.getManageRouteId()); + if (ObjectUtils.isNotEmpty(signPatientManageRoute)) { + return updateNum(signPatientManageRoute.getPatientId(), type, count); + } + } return 0; } + + /** + * @description 修改患者统计表任务数量、下次任务 + * @param patientIdList 患者主键列表 + * @Author haown + * @Date 2024-8-14 11:37 + */ + @Override + public void updateNum(List patientIdList) { + // 修改任务执行数量、任务完成数量 + patientIdList.forEach(patientId -> { + PatientTaskStatistics patientTaskStatistics = patientTaskStatisticsMapper.selectNum(patientId); + // 修改数据 + if (ObjectUtils.isNotEmpty(patientTaskStatistics)) { + // 下次任务 + PatientNextTaskVo patientNextTask = patientTaskStatisticsMapper.getPatientNextTask(patientId); + patientTaskStatistics.setNextTaskName(patientNextTask.getTaskName()); + patientTaskStatistics.setNextTaskTime(patientNextTask.getExecuteDateTime()); + patientTaskStatisticsMapper.updatePatientTaskStatistics(patientTaskStatistics); + } + }); + } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java index 31b59454..5086b803 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java @@ -484,6 +484,7 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout throw new ServiceException("新增患者问卷题目选项提交结果失败"); } } + return AjaxResult.success(); } @@ -954,6 +955,11 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout // 更新节点任务表 if (signPatientManageRouteNodeMapper.updateSignPatientManageRouteNode(signPatientManageRouteNode) <= 0) { throw new ServiceException("更新节点任务表失败"); + } else { + if (dto.getTaskNodeType().equals(TaskContentEnum.QUESTIONNAIRE_SCALE.getInfo())) { + // 修改任务统计表任务完成数量 + patientTaskStatisticsService.updateNum(dto.getPatientId(), TaskStatisticsTypeConstants.TASK_FINISH_NUM, 1); + } } } 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 711ad1fa..fe0320ab 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 @@ -206,4 +206,6 @@ public interface ISignPatientManageRouteNodeService { * @return 是否满足触发条件,true:满足,false:不满足 */ Boolean getSignTriggerConditon(Long signPatientManageRouteId, Long patientId); + + void generateStatistic(); } 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 dcbe02c3..0e7d811c 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 @@ -64,6 +64,8 @@ import com.xinelu.manage.service.questioninfo.IQuestionInfoService; import com.xinelu.manage.service.signpatientmanageroutenode.ISignPatientManageRouteNodeService; import com.xinelu.manage.service.specialdiseaseroute.ISpecialDiseaseRouteService; import com.xinelu.manage.vo.labelfieldcontent.LabelFieldInfoContentVo; +import com.xinelu.manage.vo.patientinfo.PatientInfoVo; +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; @@ -197,6 +199,9 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage if (ObjectUtils.isEmpty(signPatientRecord)) { throw new ServiceException("数据有误,请联系管理员!"); } + if (!StringUtils.equals(RouteCheckStatusEnum.AGREE.getInfo(), signPatientRecord.getRouteCheckStatus())) { + return new ArrayList<>(); + } PatientVisitRecord patientVisitRecord = patientVisitRecordMapper.selectPatientVisitRecordById(signPatientRecord.getPatientVisitRecordId()); // 根据签约记录主键查询患者任务列表 SignPatientManageRoute manageRouteQuery = new SignPatientManageRoute(); @@ -1097,6 +1102,29 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage return generateTask; } + @Override public void generateStatistic() { + // 查询患者 + PatientInfoDto patientInfo = new PatientInfoDto(); + List patientInfoVoList = patientInfoMapper.getPatientList(patientInfo); + patientInfoVoList.forEach(patientInfoVo -> { + PatientInfo patientInfo1 = patientInfoMapper.selectPatientInfoById(patientInfoVo.getId()); + PatientTaskStatistics patientTaskStatistics = new PatientTaskStatistics(); + patientTaskStatistics.setPatientId(patientInfoVo.getId()); + patientTaskStatistics.setSignPatientRecordId(patientInfo1.getSignPatientRecordId()); + patientTaskStatistics.setServiceStatus(patientInfo1.getServiceStatus()); + patientTaskStatistics.setTaskNum(patientInfoVo.getTaskNum()); + patientTaskStatistics.setTaskExecuteNum(patientInfoVo.getTaskExecuteNum()); + patientTaskStatistics.setTaskFinishNum(patientInfoVo.getTaskFinishNum()); + // 下次任务 + PatientNextTaskVo patientNextTask = patientInfoMapper.getPatientNextTask(patientInfoVo.getId()); + if (ObjectUtils.isNotEmpty(patientNextTask)) { + patientTaskStatistics.setNextTaskName(patientNextTask.getTaskName()); + patientTaskStatistics.setNextTaskTime(patientNextTask.getExecuteDateTime()); + } + patientTaskStatisticsService.insertPatientTaskStatistics(patientTaskStatistics); + }); + } + /** * 根据管理路径生成任务 * @param signPatientManageRoute 签约管理路径 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/patientinfo/PatientInfoVo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/patientinfo/PatientInfoVo.java index 858e6e0f..d4865a82 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/patientinfo/PatientInfoVo.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/patientinfo/PatientInfoVo.java @@ -158,6 +158,8 @@ public class PatientInfoVo { @ApiModelProperty(value = "最新一条就诊记录id") private Long patientVisitRecordId; + private Long signPatientRecordId; + /** * 就诊时间,格式:yyyy-MM-dd HH:mm:ss */ diff --git a/postdischarge-manage/src/main/resources/mapper/manage/patientinfo/PatientInfoMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/patientinfo/PatientInfoMapper.xml index 64105970..3c3455a1 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/patientinfo/PatientInfoMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/patientinfo/PatientInfoMapper.xml @@ -171,17 +171,63 @@ @@ -68,6 +70,10 @@ task_finish_num, + next_task_name, + + next_task_time, + #{signPatientRecordId}, @@ -84,6 +90,10 @@ #{taskFinishNum}, + #{nextTaskName}, + + #{nextTaskTime}, + @@ -108,10 +118,29 @@ task_finish_num = #{taskFinishNum}, + next_task_name = + #{nextTaskName}, + + next_task_time = + #{nextTaskTime}, + where patient_id = #{patientId} + + + + delete from patient_task_statistics where patient_id = #{patientId} diff --git a/postdischarge-manage/src/main/resources/mapper/manage/scriptInfo/ScriptInfoMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/scriptInfo/ScriptInfoMapper.xml index 23e4581e..7989e7d6 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/scriptInfo/ScriptInfoMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/scriptInfo/ScriptInfoMapper.xml @@ -25,6 +25,8 @@ + + @@ -53,7 +55,8 @@ create_by, create_time, update_by, - update_time + update_time, + robot_publish_id from script_info @@ -76,7 +79,8 @@ si.create_by, si.create_time, si.update_by, - si.update_time + si.update_time, + si.robot_publish_id from script_info si left join department d on d.id = si.department_id @@ -194,6 +198,8 @@ update_time, + robot_publish_id, + #{departmentId}, @@ -234,6 +240,8 @@ #{updateTime}, + #{robotPublishId}, + @@ -293,6 +301,9 @@ update_time = #{updateTime}, + robot_publish_id = + #{robotPublishId}, + where id = #{id} 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 80d293b6..22b675f7 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml @@ -863,13 +863,12 @@ dic.dict_label as taskNodeTypeName from sign_patient_manage_route_node node left join task_type_dict ttd on node.task_type = ttd.task_type_code - left join sys_dict_data dic on node.task_node_type = dic.dict_value + left join sys_dict_data dic on node.task_node_type = dic.dict_value and dic.dict_type ='task_node_type' left join task_partition_dict tpd on node.task_subdivision = tpd.task_partition_code where node.manage_route_id in #{manageRouteId} - and dic.dict_type ='task_node_type' + select spmr.patient_id, spmr.sign_patient_record_id, count(spmrn.id) + from sign_patient_manage_route_node spmrn + LEFT JOIN sign_patient_manage_route spmr ON spmr.id = spmrn.manage_route_id + LEFT JOIN patient_info pi ON pi.sign_patient_record_id = spmr.sign_patient_record_id + where spmr.patient_id = #{patientId} and spmrn.del_flag = 0 and spmrn.node_execute_status = 'EXECUTED' + GROUP BY spmr.patient_id, spmr.sign_patient_record_id + \ No newline at end of file diff --git a/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/Impl/HomePageServiceImpl.java b/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/Impl/HomePageServiceImpl.java index 405cd238..20d912c0 100644 --- a/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/Impl/HomePageServiceImpl.java +++ b/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/Impl/HomePageServiceImpl.java @@ -1,9 +1,14 @@ package com.xinelu.mobile.service.homepage.Impl; import com.alibaba.fastjson2.JSONObject; +import com.xinelu.common.constant.TaskStatisticsTypeConstants; 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.enums.TaskContentEnum; import com.xinelu.common.exception.ServiceException; import com.xinelu.common.utils.PageServiceUtil; import com.xinelu.common.utils.bean.BeanUtils; @@ -25,6 +30,7 @@ import com.xinelu.manage.mapper.questioninfo.QuestionInfoMapper; import com.xinelu.manage.mapper.questionsubject.QuestionSubjectMapper; import com.xinelu.manage.mapper.questionsubjectoption.QuestionSubjectOptionMapper; import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper; +import com.xinelu.manage.service.patienttaskstatistics.IPatientTaskStatisticsService; import com.xinelu.manage.service.propagandainfo.IPropagandaInfoService; import com.xinelu.manage.vo.propagandainfo.PropagandaMaterialsVo; import com.xinelu.manage.vo.questionInfo.QuestionVO; @@ -38,19 +44,18 @@ import com.xinelu.mobile.vo.homepage.MessageTabulationVO; import com.xinelu.mobile.vo.homepage.NodeExecuteStatus; import com.xinelu.mobile.vo.myfollowup.MyFollowUpVO; import com.xinelu.mobile.vo.satisfactionquestionnaire.SatisfactionQuestionnaire; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * 小程序首页ServiceImpl @@ -86,6 +91,8 @@ public class HomePageServiceImpl implements HomePageService { private IPropagandaInfoService propagandaInfoService; @Resource private PatientTaskExecuteRecordMapper patientTaskExecuteRecordMapper; + @Resource + private IPatientTaskStatisticsService patientTaskStatisticsService; /** * 我的随访列表 @@ -426,6 +433,8 @@ public class HomePageServiceImpl implements HomePageService { signPatientManageRouteNode.setId(manageRouteNodeId); signPatientManageRouteNode.setNodeFinishDate(LocalDateTime.now()); signPatientManageRouteNodeMapper.updateSignPatientManageRouteNode(signPatientManageRouteNode); + // 修改任务统计表 + patientTaskStatisticsService.updateNumByManageRouteNodeId(manageRouteNodeId, TaskStatisticsTypeConstants.TASK_FINISH_NUM, 1); return AjaxResult.success(); } } \ No newline at end of file diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java index fddb22c9..8c069b09 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java @@ -3,28 +3,34 @@ package com.xinelu.quartz.service.impl; import com.aliyuncs.exceptions.ClientException; import com.xinelu.common.config.AliYunSmsTwoConfig; import com.xinelu.common.config.PushMessageRestrictions; -import com.xinelu.common.enums.*; +import com.xinelu.common.enums.ErrorStatusEnum; +import com.xinelu.common.enums.NodeExecuteResultStatusEnum; +import com.xinelu.common.enums.NodeExecuteStatusEnum; +import com.xinelu.common.enums.RouteNodeNameEnum; +import com.xinelu.common.enums.ShortMessageTypeEnum; import com.xinelu.manage.domain.shortmessagesendrecord.ShortMessageSendRecord; import com.xinelu.manage.dto.smssend.SmsInfoDTO; import com.xinelu.manage.mapper.shortmessagesendrecord.ShortMessageSendRecordMapper; import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper; +import com.xinelu.manage.service.patienttaskstatistics.IPatientTaskStatisticsService; import com.xinelu.manage.vo.signpatientmanageroutenode.TextMessage; import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum; import com.xinelu.mobile.utils.SmsSendUtils; import com.xinelu.quartz.service.SendTextMessageService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; +import javax.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; /** * @Description 短信发送定时任务业务层 @@ -45,6 +51,8 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { private PushMessageRestrictions pushMessageRestrictions; @Resource private ShortMessageSendRecordMapper shortMessageSendRecordMapper; + @Resource + private IPatientTaskStatisticsService patientTaskStatisticsService; /** * 签约患者管理任务路径节点短信发送定时任务 @@ -140,6 +148,8 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { //发送 //发送失败ids List failSignPatientManageRouteNodeIds = new ArrayList<>(); + + Set patientIdSet = new HashSet<>(); if (CollectionUtils.isNotEmpty(messages)) { List ids = new ArrayList<>(); for (TextMessage message : messages) { @@ -163,6 +173,7 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { ids.add(message.getSignPatientManageRouteNodeId()); shortMessageSendRecord.setErrorCode(0L); shortMessageSendRecord.setErrorStatus(ErrorStatusEnum.success.getValue()); + } else { //失败 shortMessageSendRecord.setErrorCode(1L); @@ -174,6 +185,9 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { } shortMessageSendRecordMapper.insertShortMessageSendRecord(shortMessageSendRecord); } + + // 修改患者任务统计表 + patientIdSet.add(message.getPatientId()); } //修改节点状态 if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) { @@ -183,6 +197,11 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) { signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), null, NodeExecuteResultStatusEnum.FAILURE.getInfo(), null); } + + // 患者任务统计表修改 + if (CollectionUtils.isNotEmpty(patientIdSet)) { + patientTaskStatisticsService.updateNum(new ArrayList<>(patientIdSet)); + } } } } diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java index 82c0ee74..51df4bc8 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java @@ -20,8 +20,10 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -162,6 +164,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { List signPatientManageRouteNodeIds = new ArrayList<>(); //发送失败 List failSignPatientManageRouteNodeIds = new ArrayList<>(); + Set patientIdSet = new HashSet<>(); for (PatientVO patientVO : patientVOList) { // 开始推送消息 Integer integer = weChatOfficialAccountUtils.sendAppletTemplateMessage(patientVO); @@ -171,6 +174,8 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { signPatientManageRouteNodeIds.add(patientVO.getSignPatientManageRouteNodeId()); subscribeMessageSendRecord.setErrorCode(0); subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.success.getValue()); + // 修改患者任务统计表 + patientIdSet.add(patientVO.getPatientId()); } else { subscribeMessageSendRecord.setErrorCode(integer); subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.fail.getValue()); @@ -196,5 +201,9 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { if (CollectionUtils.isNotEmpty(failSignPatientManageRouteNodeIds)) { signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.FAILURE.getInfo(), null, null); } + // 患者任务统计表修改 + if (CollectionUtils.isNotEmpty(patientIdSet)) { + patientTaskStatisticsService.updateNum(new ArrayList<>(patientIdSet)); + } } }