患者任务数量统计数据预生成。
This commit is contained in:
parent
8d5e74e497
commit
bb7ca50f37
@ -130,4 +130,10 @@ public class SignPatientManageRouteNodeController extends BaseController {
|
||||
return R.ok(signNodeService.getSpecialDiseaseNode(patientTaskDto));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/generateStatistic")
|
||||
public R<String> generateStatistic() {
|
||||
signNodeService.generateStatistic();
|
||||
return R.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
/**
|
||||
* 删除患者任务统计
|
||||
*
|
||||
|
||||
@ -152,4 +152,14 @@ public interface SignPatientManageRouteNodeMapper {
|
||||
* @return int
|
||||
*/
|
||||
int updateNodeExecuteStatusByIds(@Param("manageRouteNodeIds") List<Long> 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);
|
||||
|
||||
}
|
||||
|
||||
@ -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<PatientInfoVo> getPatientList(PatientInfoDto patientInfo) {
|
||||
List<PatientInfoVo> 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<Long, List<PatientInfoVo>> groupById = patientInfoVoList.stream().collect(Collectors.groupingBy(PatientInfoVo::getId));
|
||||
|
||||
@ -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<Long> 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<Long> patientIdList);
|
||||
}
|
||||
|
||||
@ -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<Long> 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<Long> 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -206,4 +206,6 @@ public interface ISignPatientManageRouteNodeService {
|
||||
* @return 是否满足触发条件,true:满足,false:不满足
|
||||
*/
|
||||
Boolean getSignTriggerConditon(Long signPatientManageRouteId, Long patientId);
|
||||
|
||||
void generateStatistic();
|
||||
}
|
||||
|
||||
@ -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<PatientInfoVo> 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 签约管理路径
|
||||
|
||||
@ -158,6 +158,8 @@ public class PatientInfoVo {
|
||||
@ApiModelProperty(value = "最新一条就诊记录id")
|
||||
private Long patientVisitRecordId;
|
||||
|
||||
private Long signPatientRecordId;
|
||||
|
||||
/**
|
||||
* 就诊时间,格式:yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
|
||||
@ -171,17 +171,63 @@
|
||||
|
||||
<select id="getPatientList" parameterType="com.xinelu.manage.dto.patientinfo.PatientInfoDto"
|
||||
resultType="com.xinelu.manage.vo.patientinfo.PatientInfoVo">
|
||||
select p.*, count(p.manage_route_node_id) as taskNum, SUM(p.task_finish_status) as taskFinishNum, SUM(p.task_execute_status) as taskExecuteNum,
|
||||
select p.id AS id,
|
||||
p.resident_id AS resident_id,
|
||||
p.patient_name AS patient_name,
|
||||
p.patient_phone AS patient_phone,
|
||||
p.birth_date AS birth_date,
|
||||
p.card_no AS card_no,
|
||||
p.sex AS sex,
|
||||
p.address AS address,
|
||||
p.patient_type AS patient_type,
|
||||
p.visit_method AS visit_method,
|
||||
p.visit_serial_number AS visit_serial_number,
|
||||
p.in_hospital_number AS in_hospital_number,
|
||||
p.attending_physician_id AS attending_physician_id,
|
||||
p.attending_physician_name AS attending_physician_name,
|
||||
p.main_diagnosis AS main_diagnosis,
|
||||
p.hospital_agency_id AS hospital_agency_id,
|
||||
p.hospital_agency_name AS hospital_agency_name,
|
||||
p.campus_agency_id AS campus_agency_id,
|
||||
p.campus_agency_name AS campus_agency_name,
|
||||
p.department_id AS department_id,
|
||||
p.department_name AS department_name,
|
||||
p.ward_id AS ward_id,
|
||||
p.ward_name AS ward_name,
|
||||
p.patient_visit_record_id AS patient_visit_record_id,
|
||||
p.sign_patient_record_id,
|
||||
p.visit_date AS visit_date,
|
||||
p.patient_source AS patient_source,
|
||||
CASE
|
||||
WHEN isnull( p.sign_patient_record_id) THEN '新建'
|
||||
WHEN sign.service_status = 'INTENTIONAL_SIGNING' THEN '意向签约'
|
||||
WHEN sign.service_status = 'SERVICE_CENTER' AND sign.route_check_status = 'AGREE' THEN '服务中'
|
||||
WHEN sign.service_status = 'SERVICE_END' THEN '已归档' ELSE '已签约' END AS patientSignStatus,
|
||||
pts.task_num, pts.task_execute_num, pts.task_finish_num, pts.next_task_name as nextTaskName, pts.next_task_time as nextTaskTime,
|
||||
case
|
||||
when count(p.manage_route_node_id) = 0 then 0
|
||||
when pts.task_num = 0 then 0
|
||||
else
|
||||
ROUND(SUM(p.task_finish_status) / count(p.manage_route_node_id) * 100, 2) end as taskFinishRate,
|
||||
ROUND(pts.task_finish_num / pts.task_num * 100, 2) end as taskFinishRate,
|
||||
case
|
||||
when count(p.manage_route_node_id) = 0 then 0
|
||||
when pts.task_num = 0 then 0
|
||||
else
|
||||
ROUND(SUM(p.task_execute_status) / count(p.manage_route_node_id) * 100, 2) end as taskExecuteRate
|
||||
ROUND(pts.task_execute_num / pts.task_num * 100, 2) end as taskExecuteRate
|
||||
from
|
||||
patient_task_view p
|
||||
patient_info p
|
||||
left join sign_patient_record sign on p.sign_patient_record_id = sign.id
|
||||
left join patient_task_statistics pts on p.id = pts.patient_id
|
||||
|
||||
-- select p.*, count(p.manage_route_node_id) as taskNum, SUM(p.task_finish_status) as taskFinishNum, SUM(p.task_execute_status) as taskExecuteNum,
|
||||
-- case
|
||||
-- when count(p.manage_route_node_id) = 0 then 0
|
||||
-- else
|
||||
-- ROUND(SUM(p.task_finish_status) / count(p.manage_route_node_id) * 100, 2) end as taskFinishRate,
|
||||
-- case
|
||||
-- when count(p.manage_route_node_id) = 0 then 0
|
||||
-- else
|
||||
-- ROUND(SUM(p.task_execute_status) / count(p.manage_route_node_id) * 100, 2) end as taskExecuteRate
|
||||
-- from
|
||||
-- patient_task_view p
|
||||
<where>
|
||||
<if test="residentId != null">
|
||||
and p.resident_id = #{residentId}
|
||||
@ -271,7 +317,7 @@
|
||||
<!-- 数据范围过滤 -->
|
||||
${params.dataScope}
|
||||
</where>
|
||||
GROUP BY p.id order by p.id desc
|
||||
order by p.id desc
|
||||
</select>
|
||||
|
||||
<select id="getPatientNextTask" parameterType="Long" resultType="com.xinelu.manage.vo.patientinfo.PatientNextTaskVo">
|
||||
|
||||
@ -12,10 +12,12 @@
|
||||
<result property="taskNum" column="task_num"/>
|
||||
<result property="taskExecuteNum" column="task_execute_num"/>
|
||||
<result property="taskFinishNum" column="task_finish_num"/>
|
||||
<result property="nextTaskName" column="next_task_name"/>
|
||||
<result property="nextTaskTime" column="next_task_time"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectPatientTaskStatisticsVo">
|
||||
select patient_id, sign_patient_record_id, service_status, route_check_status, task_num, task_execute_num, task_finish_num from patient_task_statistics
|
||||
select patient_id, sign_patient_record_id, service_status, route_check_status, task_num, task_execute_num, task_finish_num,next_task_name,next_task_time from patient_task_statistics
|
||||
</sql>
|
||||
|
||||
<select id="selectPatientTaskStatisticsList" parameterType="PatientTaskStatistics" resultMap="PatientTaskStatisticsResult">
|
||||
@ -68,6 +70,10 @@
|
||||
</if>
|
||||
<if test="taskFinishNum != null">task_finish_num,
|
||||
</if>
|
||||
<if test="nextTaskName != null">next_task_name,
|
||||
</if>
|
||||
<if test="nextTaskTime != null">next_task_time,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="signPatientRecordId != null">#{signPatientRecordId},
|
||||
@ -84,6 +90,10 @@
|
||||
</if>
|
||||
<if test="taskFinishNum != null">#{taskFinishNum},
|
||||
</if>
|
||||
<if test="nextTaskName != null">#{nextTaskName},
|
||||
</if>
|
||||
<if test="nextTaskTime != null">#{nextTaskTime},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
@ -108,10 +118,29 @@
|
||||
<if test="taskFinishNum != null">task_finish_num =
|
||||
#{taskFinishNum},
|
||||
</if>
|
||||
<if test="nextTaskName != null">next_task_name =
|
||||
#{nextTaskName},
|
||||
</if>
|
||||
<if test="nextTaskTime != null">next_task_time =
|
||||
#{nextTaskTime},
|
||||
</if>
|
||||
</trim>
|
||||
where patient_id = #{patientId}
|
||||
</update>
|
||||
|
||||
<select id="selectNum" parameterType="Long" resultMap="PatientTaskStatisticsResult">
|
||||
select id as patientId, sign_patient_record_id as signPatientRecordId,
|
||||
sum(task_execute_status) as taskExecuteNum, sum(task_finish_status) as taskFinishNum
|
||||
from patient_task_statistics_view
|
||||
where id = #{patientId}
|
||||
</select>
|
||||
|
||||
<select id="getPatientNextTask" parameterType="Long" resultType="com.xinelu.manage.vo.patientinfo.PatientNextTaskVo">
|
||||
select p.task_name, p.execute_date_time from patient_task_statistics_view p
|
||||
where p.id = #{patientId} and p.node_execute_status = 'UNEXECUTED'
|
||||
order by p.execute_date_time limit 1
|
||||
</select>
|
||||
|
||||
<delete id="deletePatientTaskStatisticsByPatientId" parameterType="Long">
|
||||
delete from patient_task_statistics where patient_id = #{patientId}
|
||||
</delete>
|
||||
|
||||
@ -25,6 +25,8 @@
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="robotPublishId" column="robot_publish_id"/>
|
||||
|
||||
</resultMap>
|
||||
|
||||
<resultMap type="com.xinelu.manage.vo.scriptInfo.ScriptVO" id="ScriptVOResult">
|
||||
@ -53,7 +55,8 @@
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time
|
||||
update_time,
|
||||
robot_publish_id
|
||||
from script_info
|
||||
</sql>
|
||||
|
||||
@ -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
|
||||
<where>
|
||||
@ -194,6 +198,8 @@
|
||||
</if>
|
||||
<if test="updateTime != null">update_time,
|
||||
</if>
|
||||
<if test="robotPublishId != null">robot_publish_id,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="departmentId != null">#{departmentId},
|
||||
@ -234,6 +240,8 @@
|
||||
</if>
|
||||
<if test="updateTime != null">#{updateTime},
|
||||
</if>
|
||||
<if test="robotPublishId != null">#{robotPublishId},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
@ -293,6 +301,9 @@
|
||||
<if test="updateTime != null">update_time =
|
||||
#{updateTime},
|
||||
</if>
|
||||
<if test="robotPublishId != null">robot_publish_id =
|
||||
#{robotPublishId},
|
||||
</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
@ -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
|
||||
<foreach item="manageRouteId" collection="manageRouteIds" open="(" separator="," close=")">
|
||||
#{manageRouteId}
|
||||
</foreach>
|
||||
and dic.dict_type ='task_node_type'
|
||||
</select>
|
||||
|
||||
<select id="selectNodesByManageIds" resultMap="SignPatientManageRouteNodeResult">
|
||||
@ -938,4 +937,13 @@
|
||||
#{manageRouteNodeIds}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<select id="getPatientExecutedTaskNum" resultType="java.lang.Integer">
|
||||
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
|
||||
</select>
|
||||
</mapper>
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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<Long> failSignPatientManageRouteNodeIds = new ArrayList<>();
|
||||
|
||||
Set<Long> patientIdSet = new HashSet<>();
|
||||
if (CollectionUtils.isNotEmpty(messages)) {
|
||||
List<Long> 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<Long> signPatientManageRouteNodeIds = new ArrayList<>();
|
||||
//发送失败
|
||||
List<Long> failSignPatientManageRouteNodeIds = new ArrayList<>();
|
||||
Set<Long> 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user