患者康复计划及记录。

This commit is contained in:
haown 2024-08-02 13:45:15 +08:00
parent b9a125dade
commit 3884228f0b
11 changed files with 482 additions and 44 deletions

View File

@ -0,0 +1,34 @@
package com.xinelu.common.constant;
/**
* @description: 任务完成情况常量
* @author: haown
* @create: 2024-08-01 14:24
**/
public class TaskStatusConstant {
/**
* 电话未接通
*/
public static final String NOT_CONNECTED = "NOT_CONNECTED";
/**
* 电话已接通
*/
public static final String CONNECTED = "CONNECTED";
/**
* 任务已超期
*/
public static final String EXPIRED = "EXPIRED";
/**
* 消息未读
*/
public static final String UNREAD = "UNREAD";
/**
* 消息已读
*/
public static final String READ = "READ";
}

View File

@ -16,6 +16,7 @@ import com.xinelu.manage.service.signpatientmanageroute.ISignPatientManageRouteS
import com.xinelu.manage.vo.manualfollowup.ManualFollowUpVO;
import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo;
import com.xinelu.manage.vo.signpatientrecord.SignPatientRecordSelectVo;
import com.xinelu.manage.vo.specialdiseaseroute.SpecialDiseaseRouteAuditVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -158,4 +159,13 @@ public class SignPatientManageRouteController extends BaseController {
public R<List<SignPatientManageNodeAuditVo>> getRouteNodeInfo(@PathVariable("signRecordId") Long signRecordId) {
return R.ok(signPatientManageRouteService.getRouteNodeInfo(signRecordId));
}
/**
* 患者详情--康复计划及记录右上角签约记录下拉框
*/
@ApiOperation("患者详情--康复计划及记录,右上角签约记录下拉框")
@GetMapping("/getRecordList/{patientId}")
public R<List<SignPatientRecordSelectVo>> getRecordList(@PathVariable("patientId") Long patientId) {
return R.ok(signPatientManageRouteService.getRecordList(patientId));
}
}

View File

@ -13,6 +13,7 @@ import com.xinelu.manage.vo.signpatientmanageroutenode.PatientManageNodeInfoVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.PatientManageNodeListVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.PatientTaskVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientTaskVo;
import com.xinelu.manage.vo.specialdiseasenode.PatientSpecialDiseaseNodeVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -76,14 +77,17 @@ public class SignPatientManageRouteNodeController extends BaseController {
return R.ok(signNodeService.getNodeListByPatient(patientTaskDto));
}
/**
* 患者详情--查询患者任务路径及节点列表
*/
@ApiOperation("患者详情--查询患者任务路径及节点列表")
@GetMapping("/getNodeList")
public R<List<SignPatientManageRouteNodeVo>> getNodeList(PatientTaskDto patientTaskDto) {
return R.ok(signNodeService.getNodeList(patientTaskDto));
* @description 患者详情--康复计划及记录
* @param signPatientRecordId 签约记录表主键
* @return 患者管理任务路径节点
* @Author haown
* @Date 2024-08-01 15:23
*/
@ApiOperation("患者详情--康复计划及记录")
@GetMapping("/getNodeList/{signPatientRecordId}")
public R<List<SignPatientTaskVo>> getNodeList(@PathVariable("signPatientRecordId") Long signPatientRecordId) {
return R.ok(signNodeService.getNodeList(signPatientRecordId));
}
/**

View File

@ -6,11 +6,11 @@ import com.xinelu.manage.dto.signpatientmanageroutenode.SignPatientManageRouteNo
import com.xinelu.manage.vo.signpatientmanageroutenode.PatientManageNodeListVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.PatientTaskVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientTaskVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.TextMessage;
import com.xinelu.manage.vo.specialdiseasenode.SpecialDiseaseNodeAuditVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import org.apache.ibatis.annotations.Param;
/**
* 签约患者管理任务路径节点Mapper接口
@ -112,6 +112,13 @@ public interface SignPatientManageRouteNodeMapper {
*/
List<SignPatientManageNodeAuditVo> selectAuditNodeInfo(@Param("manageRouteIds") List<Long> manageRouteIds);
/**
* 患者详情查询任务节点详情
* @param manageRouteIds 路径列表
* @return 节点详细信息列表
*/
List<SignPatientTaskVo> selectNodeInfoByManageIds(@Param("manageRouteIds") List<Long> manageRouteIds);
/**
* 根据路径主键列表查询节点列表
* @param manageRouteIds 路径主键列表

View File

@ -8,6 +8,7 @@ import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitRe
import com.xinelu.manage.vo.manualfollowup.ManualFollowUpVO;
import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo;
import com.xinelu.manage.vo.signpatientrecord.SignPatientRecordSelectVo;
import com.xinelu.manage.vo.specialdiseaseroute.SpecialDiseaseRouteAuditVo;
import java.util.List;
@ -105,4 +106,13 @@ public interface ISignPatientManageRouteService {
* @return 节点详细信息列表
*/
List<SignPatientManageNodeAuditVo> getRouteNodeInfo(Long signRecordId);
/**
* @description 患者详情--康复计划及记录右上角签约记录下拉框
* @Param patientId 患者主键
* @return 签约记录列表
* @Author haown
* @Date 2024-08-01 14:48
*/
List<SignPatientRecordSelectVo> getRecordList(Long patientId);
}

View File

@ -15,7 +15,18 @@ import com.xinelu.common.constant.TaskCreateTypeConstant;
import com.xinelu.common.constant.TaskNodeTypeConstants;
import com.xinelu.common.constant.TemplateTypeConstants;
import com.xinelu.common.core.domain.AjaxResult;
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.PhoneConnectStatusEnum;
import com.xinelu.common.enums.PhoneMessageRemindEnum;
import com.xinelu.common.enums.PhoneRedialTimesEnum;
import com.xinelu.common.enums.RouteNodeNameEnum;
import com.xinelu.common.enums.ShortMessageTypeEnum;
import com.xinelu.common.enums.SmsErrorCodeEnum;
import com.xinelu.common.enums.TaskContentEnum;
import com.xinelu.common.enums.TaskCreateTypeEnum;
import com.xinelu.common.enums.TaskNodeTypeEnum;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.AgeUtil;
import com.xinelu.common.utils.SecurityUtils;
@ -63,11 +74,23 @@ import com.xinelu.manage.vo.propagandainfo.PropagandaMaterialsVo;
import com.xinelu.manage.vo.questionInfo.QuestionVO;
import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo;
import com.xinelu.manage.vo.signpatientrecord.SignPatientRecordSelectVo;
import com.xinelu.manage.vo.signpatientrecord.SignPatientRecordVo;
import com.xinelu.manage.vo.signroutetriggercondition.SignRouteTriggerConditionVO;
import com.xinelu.manage.vo.specialdiseasenode.RouteTaskAuditVo;
import com.xinelu.manage.vo.specialdiseasenode.SpecialDiseaseNodeAuditVo;
import com.xinelu.manage.vo.specialdiseaseroute.SpecialDiseaseChildRouteAuditVo;
import com.xinelu.manage.vo.specialdiseaseroute.SpecialDiseaseRouteAuditVo;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.ObjectUtils;
@ -75,12 +98,6 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* 签约患者管理任务路径Service业务层处理
@ -710,10 +727,6 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
List<SignPatientManageRoute> createRouteList = signPatientManageRouteMapper.selectSignPatientManageRouteList(manageRouteQuery);
if (CollectionUtils.isNotEmpty(createRouteList)) {
List<Long> manageRouteIds = createRouteList.stream().map(SignPatientManageRoute::getId).collect(Collectors.toList());
//for (Long routeId : manageRouteIds) {
// boolean satisfy = signPatientManageRouteNodeService.getSignTriggerConditon(routeId, signPatientRecord.getPatientId());
// routeSatisfyMap.put(routeId, satisfy);
//}
List<SignPatientManageNodeAuditVo> manageNodeList = signPatientManageRouteNodeMapper.selectAuditNodeInfo(manageRouteIds);
// 根据node去替换模板信息
manageNodeList.forEach(manageNode -> {
@ -816,7 +829,33 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout
return manageNodeAuditList;
}
/**
/**
* @description 患者详情--康复计划及记录右上角签约记录下拉框
* @Param patientId 患者主键
* @return 签约记录列表
* @Author haown
* @Date 2024-08-01 14:48
*/
@Override public List<SignPatientRecordSelectVo> getRecordList(Long patientId) {
List<SignPatientRecordSelectVo> retList = new ArrayList<>();
// 查询签约记录
List<SignPatientRecordVo> signRecordList = signPatientRecordMapper.getByPatient(patientId);
signRecordList.forEach(signRecord -> {
SignPatientManageRoute manageRouteQuery = new SignPatientManageRoute();
manageRouteQuery.setSignPatientRecordId(signRecord.getId());
manageRouteQuery.setTaskCreateType(TaskCreateTypeConstant.MANUAL_MATCHE);
List<SignPatientManageRoute> manageRouteList = signPatientManageRouteMapper.selectSignPatientManageRouteList(manageRouteQuery);
if (CollectionUtils.isNotEmpty(manageRouteList)) {
retList.add(SignPatientRecordSelectVo.builder()
.id(signRecord.getId())
.signRouteName(signRecord.getSignTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + "|" + manageRouteList.get(0).getRouteName())
.build());
}
});
return retList;
}
/**
* 新增患者管理任务执行记录
*/
private Long insertPatientTaskExecuteRecord(PatientQuestionSubmitResultDTO dto, String routeHandlePerson, LocalDateTime time) {

View File

@ -14,6 +14,7 @@ import com.xinelu.manage.vo.signpatientmanageroutenode.PatientManageNodeListVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.PatientTaskVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientTaskVo;
import com.xinelu.manage.vo.specialdiseasenode.PatientSpecialDiseaseNodeVo;
import java.time.LocalDateTime;
import java.time.LocalTime;
@ -37,10 +38,12 @@ public interface ISignPatientManageRouteNodeService {
/**
* 查询患者管理路径节点
* @param patientTaskDto 任务查询传输对象
* @param signPatientRecordId 签约记录主键
* @return 患者管理任务路径节点
* @Author haown
* @Date 2024-08-01 15:23
*/
List<SignPatientManageRouteNodeVo> getNodeList(PatientTaskDto patientTaskDto);
List<SignPatientTaskVo> getNodeList(Long signPatientRecordId);
/**
* 根据节点类型查询节点列表详情

View File

@ -6,12 +6,16 @@ import com.xinelu.common.constant.ApplyRangeContant;
import com.xinelu.common.constant.RouteNodeNameConstants;
import com.xinelu.common.constant.TaskCreateTypeConstant;
import com.xinelu.common.constant.TaskNodeTypeConstants;
import com.xinelu.common.constant.TaskStatusConstant;
import com.xinelu.common.constant.TemplateTypeConstants;
import com.xinelu.common.constant.TriggerConditionOperatorConstants;
import com.xinelu.common.constant.TriggerLogicConstants;
import com.xinelu.common.constant.VisitMethodConstants;
import com.xinelu.common.enums.MessageStatusEnum;
import com.xinelu.common.enums.NodeExecuteResultStatusEnum;
import com.xinelu.common.enums.NodeExecuteStatusEnum;
import com.xinelu.common.enums.RouteCheckStatusEnum;
import com.xinelu.common.enums.RouteNodeNameEnum;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.SecurityUtils;
import com.xinelu.common.utils.StringUtils;
@ -19,7 +23,9 @@ import com.xinelu.common.utils.bean.BeanUtils;
import com.xinelu.manage.domain.patientinfo.PatientAllInfoViewUppercase;
import com.xinelu.manage.domain.patientinfo.PatientInfo;
import com.xinelu.manage.domain.patientnodeparamscurrent.PatientNodeParamsCurrent;
import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecord;
import com.xinelu.manage.domain.patientvisitrecord.PatientVisitRecord;
import com.xinelu.manage.domain.propagandainfo.PropagandaInfo;
import com.xinelu.manage.domain.scriptInfo.ScriptInfo;
import com.xinelu.manage.domain.signpatientmanageroute.SignPatientManageRoute;
import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode;
@ -38,6 +44,8 @@ import com.xinelu.manage.dto.signpatientmanageroutenode.SignPatientManageRouteNo
import com.xinelu.manage.mapper.labelfieldcontent.LabelFieldContentMapper;
import com.xinelu.manage.mapper.patientinfo.PatientAllInfoViewMapper;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
import com.xinelu.manage.mapper.patientquestionsubmitresult.PatientQuestionSubmitResultMapper;
import com.xinelu.manage.mapper.patienttaskexecuterecord.PatientTaskExecuteRecordMapper;
import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper;
import com.xinelu.manage.mapper.scriptInfo.ScriptInfoMapper;
import com.xinelu.manage.mapper.signpatientmanageroute.SignPatientManageRouteMapper;
@ -54,6 +62,7 @@ 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.patientquestionsubmitresult.PatientQuestionSubmitResultVO;
import com.xinelu.manage.vo.propagandainfo.PropagandaMaterialsVo;
import com.xinelu.manage.vo.questionInfo.QuestionVO;
import com.xinelu.manage.vo.signpatientmanageroutenode.AppletRouteNodeListVo;
@ -63,6 +72,7 @@ import com.xinelu.manage.vo.signpatientmanageroutenode.PatientTaskVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeInfoVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageRouteNodeVo;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientTaskVo;
import com.xinelu.manage.vo.specialdiseasenode.PatientSpecialDiseaseNodeVo;
import com.xinelu.manage.vo.specialdiseasenode.SpecialDiseaseNodeVO;
import com.xinelu.manage.vo.specialdiseaseroute.SpecialDiseaseRouteVO;
@ -132,6 +142,10 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
private SpecialDiseaseRouteMapper specialDiseaseRouteMapper;
@Resource
private SignRouteTriggerConditionMapper signRouteTriggerConditionMapper;
@Resource
private PatientQuestionSubmitResultMapper patientQuestionSubmitResultMapper;
@Resource
private PatientTaskExecuteRecordMapper patientTaskExecuteRecordMapper;
/**
* 查询签约患者管理任务路径节点
@ -166,16 +180,112 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
return retVo;
}
@Override public List<SignPatientManageRouteNodeVo> getNodeList(PatientTaskDto patientTaskDto) {
if (patientTaskDto.getPatientId() == null) {
throw new ServiceException("患者信息有误");
/**
* 查询患者管理路径节点
* @param signPatientRecordId 签约记录主键
* @return 患者管理任务路径节点
* @Author haown
* @Date 2024-08-01 15:23
*/
@Override public List<SignPatientTaskVo> getNodeList(Long signPatientRecordId) {
List<SignPatientTaskVo> retList = new ArrayList<>();
SignPatientRecord signPatientRecord = signPatientRecordMapper.selectByPrimaryKey(signPatientRecordId);
if (ObjectUtils.isEmpty(signPatientRecord)) {
throw new ServiceException("数据有误,请联系管理员!");
}
PatientInfo patientInfo = patientInfoMapper.selectPatientInfoById(patientTaskDto.getPatientId());
if (ObjectUtils.isEmpty(patientInfo)) {
throw new ServiceException("患者信息有误!");
PatientVisitRecord patientVisitRecord = patientVisitRecordMapper.selectPatientVisitRecordById(signPatientRecord.getPatientVisitRecordId());
// 根据签约记录主键查询患者任务列表
SignPatientManageRoute manageRouteQuery = new SignPatientManageRoute();
manageRouteQuery.setSignPatientRecordId(signPatientRecordId);
List<SignPatientManageRoute> manageRouteList = signRouteMapper.selectSignPatientManageRouteList(manageRouteQuery);
if (CollectionUtils.isNotEmpty(manageRouteList)) {
List<Long> manageRouteIds = manageRouteList.stream().map(SignPatientManageRoute::getId).collect(Collectors.toList());
List<SignPatientTaskVo> manageNodeList = signPatientManageRouteNodeMapper.selectNodeInfoByManageIds(manageRouteIds);
// 组装数据
List<SignPatientTaskVo> finalRetList = new ArrayList<>();
manageNodeList.forEach(manageNode -> {
manageNode.setTaskCreateType(ObjectUtils.isEmpty(manageNode.getRouteNodeId()) ? TaskCreateTypeConstant.MANUAL_CREATE : TaskCreateTypeConstant.MANUAL_MATCHE);
manageNode.setRouteNodeNameCN(RouteNodeNameEnum.getNameByInfo(manageNode.getRouteNodeName()).getName());
manageNode.setExecuteDateTime(getExecuteTime(manageNode.getExecuteTime(), manageNode.getRouteNodeName(), manageNode.getRouteNodeDay(), patientVisitRecord));
manageNode.setTaskTypeName(StringUtils.isEmpty(manageNode.getTaskTypeName()) ? manageNode.getTaskNodeTypeName() : manageNode.getTaskTypeName());
// 判断电话拨通情况任务超时已读未读
if (StringUtils.equals(NodeExecuteResultStatusEnum.FAILURE.getInfo(), manageNode.getPhoneNodeExecuteResultStatus())) {
manageNode.setTaskStatus(TaskStatusConstant.NOT_CONNECTED);
} else if (StringUtils.equals(NodeExecuteResultStatusEnum.SUCCESS.getInfo(), manageNode.getPhoneNodeExecuteResultStatus())) {
manageNode.setTaskStatus(TaskStatusConstant.CONNECTED);
} else if (StringUtils.equals(NodeExecuteResultStatusEnum.EXPIRED.getInfo(), manageNode.getPhoneNodeExecuteResultStatus())) {
manageNode.setTaskStatus(TaskStatusConstant.EXPIRED);
} else {
// 判断消息已读未读
if (ObjectUtils.isEmpty(manageNode.getNodeFinishDate()) || StringUtils.isBlank(manageNode.getMessageStatus()) || StringUtils.equals(MessageStatusEnum.UNREAD.getInfo(), manageNode.getMessageStatus())) {
manageNode.setTaskStatus(TaskStatusConstant.UNREAD);
} else {
manageNode.setTaskStatus(TaskStatusConstant.READ);
}
}
JSONObject templateDetail = new JSONObject();
if (StringUtils.isNotBlank(manageNode.getTaskNodeType())) {
switch (manageNode.getTaskNodeType()) {
// 电话外呼
case TaskNodeTypeConstants.PHONE_OUTBOUND:
manageNode.setTaskName(manageNode.getPhoneTemplateName());
break;
// 问卷,查询问卷详情已作答的问卷展示作答详情未作答显示问卷详情
case TaskNodeTypeConstants.QUESTIONNAIRE_SCALE:
if (manageNode.getQuestionInfoId() != null) {
if (ObjectUtils.isEmpty(manageNode.getNodeFinishDate())) {
QuestionVO questionVO = questionInfoService.selectQuestionInfoById(manageNode.getQuestionInfoId());
if (ObjectUtils.isNotEmpty(questionVO)) {
templateDetail = JSONObject.parseObject(JSONObject.toJSONString(questionVO));
manageNode.setDetailInfo(templateDetail);
}
manageNode.setTaskName(questionVO.getQuestionnaireName());
} else {
// 查询执行记录
PatientTaskExecuteRecord patientTaskExecuteRecordQuery = new PatientTaskExecuteRecord();
patientTaskExecuteRecordQuery.setManageRouteNodeId(manageNode.getId());
List<PatientTaskExecuteRecord> taskExecuteRecordList = patientTaskExecuteRecordMapper.selectPatientTaskExecuteRecordList(patientTaskExecuteRecordQuery);
if (CollectionUtils.isEmpty(taskExecuteRecordList)) {
QuestionVO questionVO = questionInfoService.selectQuestionInfoById(manageNode.getQuestionInfoId());
if (ObjectUtils.isNotEmpty(questionVO)) {
templateDetail = JSONObject.parseObject(JSONObject.toJSONString(questionVO));
manageNode.setTaskName(questionVO.getQuestionnaireName());
}
} else {
PatientQuestionSubmitResultVO patientQuestionSubmitResultVO = patientQuestionSubmitResultMapper.selectResultByTaskExecuteRecordId(taskExecuteRecordList.get(0).getId(), null);
if (ObjectUtils.isNotEmpty(patientQuestionSubmitResultVO)) {
templateDetail = JSONObject.parseObject(JSONObject.toJSONString(patientQuestionSubmitResultVO));
manageNode.setTaskName(patientQuestionSubmitResultVO.getQuestionnaireName());
}
}
manageNode.setDetailInfo(templateDetail);
}
}
break;
// 宣教
case TaskNodeTypeConstants.PROPAGANDA_ARTICLE:
// 查询宣教详情
if (manageNode.getPropagandaInfoId() != null) {
PropagandaInfo propagandaInfo = propagandaInfoService.getById(manageNode.getPropagandaInfoId());
if (ObjectUtils.isNotEmpty(propagandaInfo)) {
manageNode.setPropagandaContent(propagandaInfo.getPropagandaContent());
}
manageNode.setTaskName(propagandaInfo.getPropagandaTitle());
}
break;
// 文字提醒--展示nodeContent,根据message_status判断已读状态
case TaskNodeTypeConstants.TEXT_REMIND:
manageNode.setTaskName(StringUtils.isEmpty(manageNode.getTaskPartitionDictName()) ? manageNode.getTaskNodeTypeName() : manageNode.getTaskPartitionDictName());
break;
}
}
finalRetList.add(manageNode);
});
// 按照执行时间正序排序
retList = finalRetList.stream().sorted(Comparator.comparing(SignPatientTaskVo::getExecuteDateTime)).collect(Collectors.toList());
}
patientTaskDto.setSignPatientRecordId(patientInfo.getSignPatientRecordId());
return getRouteNodeList(patientTaskDto);
return retList;
}
@Override public List<PatientManageNodeInfoVo> getNodeListByPatient(PatientTaskDto patientTaskDto) {
@ -258,12 +368,6 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
detailInfo = JSONObject.parseObject(JSONObject.toJSONString(questionVO));
}
break;
//case (TaskNodeTypeConstants.ARTIFICIAL_FOLLOW_UP): // 人工随访-返回问卷信息
// if (node.getFollowTemplateId() != null) {
// QuestionVO questionVO = questionInfoService.selectQuestionInfoById(node.getFollowTemplateId());
// detailInfo = JSONObject.parseObject(JSONObject.toJSONString(questionVO));
// }
// break;
case (TaskNodeTypeConstants.PROPAGANDA_ARTICLE): // 宣教文章-返回宣教库信息
if (node.getPropagandaInfoId() != null) {
PropagandaMaterialsVo propagandaMaterialsVo = propagandaInfoService.selectPropagandaInfoById(node.getPropagandaInfoId());
@ -304,8 +408,7 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
}
@Override public List<PatientManageNodeListVo> selectPatientManageNodeList(SignPatientManageRouteNodeDto signPatientManageRouteNodeDto) {
List<PatientManageNodeListVo> nodeList = signPatientManageRouteNodeMapper.selectPatientManageNodeList(signPatientManageRouteNodeDto);
return nodeList;
return signPatientManageRouteNodeMapper.selectPatientManageNodeList(signPatientManageRouteNodeDto);
}
/**
@ -925,7 +1028,7 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
}
/**
* 查询手动船舰路径触发条件是否满足
* 查询手动创建路径触发条件是否满足
* @param signPatientManageRouteId 专病管理路径主键
* @param patientId 患者主键
* @return 是否满足触发条件true:满足false:不满足
@ -1024,7 +1127,7 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage
break;
// 话术
case TaskNodeTypeConstants.PHONE_OUTBOUND:
manageRouteNode.setPhoneId(node.getTemplateId());
manageRouteNode.setPhoneId(node.getPhoneTemplateId());
// 查询话术
ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getPhoneTemplateId());
if (ObjectUtils.isNotEmpty(scriptInfo)) {

View File

@ -0,0 +1,179 @@
package com.xinelu.manage.vo.signpatientmanageroutenode;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
import java.time.LocalTime;
import lombok.Data;
/**
* @description: 患者康复计划及记录返回视图类
* @author: haown
* @create: 2024-07-31 17:41
**/
@Data
public class SignPatientTaskVo {
/** 任务创建类型手动创建MANUAL_CREATE自动匹配MANUAL_MATCHE */
@ApiModelProperty(value = "任务创建类型手动创建MANUAL_CREATE自动匹配MANUAL_MATCHE")
private String taskCreateType;
/** 主键id */
private Long id;
/** 签约患者管理任务表id */
@ApiModelProperty(value = "签约患者管理任务表id")
private Long manageRouteId;
/** 路径名称 */
@ApiModelProperty(value = "路径名称")
private String manageRouteName;
/** 管理路径节点id */
@ApiModelProperty(value = "管理路径节点id")
private Long routeNodeId;
/** 管理路径节点名称 */
@ApiModelProperty(value = "管理路径节点名称")
private String routeNodeName;
/** 管理路径节点名称中文 */
@ApiModelProperty(value = "管理路径节点名称中文")
private String routeNodeNameCN;
/** 管理路径节点时间,时间单位为:天 */
@ApiModelProperty(value = "管理路径节点时间,时间单位为:天")
private Integer routeNodeDay;
/**
* 任务名称
*/
@ApiModelProperty(value = "任务名称")
private String taskName;
/** 任务类型电话外呼PHONE_OUTBOUND问卷量表QUESTIONNAIRE_SCALE宣教文章PROPAGANDA_ARTICLE文字提醒TEXT_REMIND人工随访ARTIFICIAL_FOLLOW_UP */
@ApiModelProperty(value = "任务类型电话外呼PHONE_OUTBOUND问卷量表QUESTIONNAIRE_SCALE宣教文章PROPAGANDA_ARTICLE文字提醒TEXT_REMIND人工随访ARTIFICIAL_FOLLOW_UP")
private String taskType;
/**
* 任务类型名称
*/
@ApiModelProperty(value = "任务类型名称")
private String taskTypeName;
/** 任务细分 */
@ApiModelProperty(value = "任务细分")
private String taskSubdivision;
/** 任务细分名称 */
@ApiModelProperty(value = "任务细分名称")
private String taskPartitionDictName;
/** 二级分类描述 */
@ApiModelProperty(value = "二级分类描述")
private String secondClassifyDescribe;
/** 执行时间格式HH:mm */
@ApiModelProperty(value = "执行时间格式HH:mm")
@JsonFormat(pattern = "HH:mm")
private LocalTime executeTime;
/** 执行时间格式yyyy-MM-dd */
@ApiModelProperty(value = "执行时间格式yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDateTime executeDateTime;
/** 电话话术表id */
@ApiModelProperty(value = "电话话术表id")
@Excel(name = "电话话术表id")
private Long phoneId;
/** 电话模板ID */
@ApiModelProperty(value = "电话模板ID")
@Excel(name = "电话模板ID")
private String phoneTemplateId;
/** 电话模板名称 */
@ApiModelProperty(value = "电话模板名称")
@Excel(name = "电话模板名称")
private String phoneTemplateName;
/** 电话内容(富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记) */
@ApiModelProperty(value = "电话内容")
@Excel(name = "电话内容", readConverterExp = "富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记")
private String phoneNodeContent;
/** 问卷表id */
@ApiModelProperty(value = "问卷表id")
@Excel(name = "问卷表id")
private Long questionInfoId;
/** 问卷模板名称 */
@ApiModelProperty(value = "问卷模板名称")
private String questionnaireName;
/** 问卷模板内容(富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记) */
@ApiModelProperty(value = "问卷模板内容")
private String questionnaireContent;
/** 宣教文章表id */
@ApiModelProperty(value = "宣教文章表id")
private Long propagandaInfoId;
/** 宣教文章模板标题(宣教模板名称) */
@ApiModelProperty(value = "宣教文章模板标题")
private String propagandaTitle;
/** 宣教文章内容(富文本存放整个节点的信息,包含标签画像的名称以及其它,标签画像名称使用特殊符号进行标记) */
@ApiModelProperty(value = "宣教文章内容")
private String propagandaContent;
/** 任务处理信息 */
@ApiModelProperty(value = "任务处理信息")
private String routeHandleRemark;
@ApiModelProperty(value = "消息状态已读READ未读UNREAD。")
private String messageStatus;
/**
* 节点内容
*/
@ApiModelProperty(value = "节点内容")
private String nodeContent;
/**
* 任务节点类型PHONE_OUTBOUND电话外呼(默认自动人工或自动)QUESTIONNAIRE_SCALE问卷量表消息推送或人工随访PROPAGANDA_ARTICLE宣教文章TEXT_REMIND文字提醒微信短信公众号
*/
@ApiModelProperty(value = "任务节点类型")
private String taskNodeType;
/**
* 任务节点类型PHONE_OUTBOUND电话外呼(默认自动人工或自动)QUESTIONNAIRE_SCALE问卷量表消息推送或人工随访PROPAGANDA_ARTICLE宣教文章TEXT_REMIND文字提醒微信短信公众号
*/
@ApiModelProperty(value = "任务节点类型-中文")
private String taskNodeTypeName;
/** 节点任务执行状态已执行EXECUTED未执行UNEXECUTED */
@ApiModelProperty(value = "节点任务执行状态已执行EXECUTED未执行UNEXECUTED")
private String nodeExecuteStatus;
/** 电话拨通情况SUCCESS成功FAILURE失败EXPIRED超期自动作废如超期一周NULL或空字符串缺省值表示未执行 */
@ApiModelProperty(value = "电话拨通情况")
private String phoneNodeExecuteResultStatus;
/** 患者宣教阅读或问卷提交的时间null表示尚未阅读或提交 */
@ApiModelProperty(value = "患者宣教阅读或问卷提交的时间")
private LocalDateTime nodeFinishDate;
/**
* 任务状态
*/
@ApiModelProperty(value = "任务状态NOT_CONNECTED未接通CONNECTED已接通EXPIRED任务已超时UNREAD未阅读READ已阅读")
private String taskStatus;
/** 详细信息 */
@ApiModelProperty(value = "详细信息")
private JSONObject detailInfo;
}

View File

@ -0,0 +1,32 @@
package com.xinelu.manage.vo.signpatientrecord;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description: 签约记录下拉框返回视图类
* @author: haown
* @create: 2024-08-01 14:41
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SignPatientRecordSelectVo {
/**
* 签约记录主键
*/
@ApiModelProperty("签约记录主键")
private Long id;
/**
* 路径名称,签约时间|路径名称格式
*/
@ApiModelProperty("路径名称,签约时间|路径名称格式")
private String signRouteName;
}

View File

@ -820,9 +820,9 @@
<select id="selectAuditNodeInfo" resultType="com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo">
select
node.*,
dic.dict_label as taskTypeName
from sign_patient_manage_route_node node
left join sys_dict_data dic on node.task_node_type = dic.dict_value
dic.dict_label as taskTypeName
from sign_patient_manage_route_node node
left join sys_dict_data dic on node.task_node_type = dic.dict_value
where node.manage_route_id in
<foreach item="manageRouteId" collection="manageRouteIds" open="(" separator="," close=")">
#{manageRouteId}
@ -830,6 +830,23 @@
and dic.dict_type ='task_node_type'
</select>
<select id="selectNodeInfoByManageIds" resultType="com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientTaskVo">
select
node.*,
ttd.task_type_name as taskTypeName,
tpd.task_partition_name as taskPartitionDictName,
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 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">
<include refid="selectSignPatientManageRouteNodeVo"/>
where manage_route_id in