Merge branch '0418_小程序开发' of http://182.92.166.109:3000/zhuangyuanke/PostDischargePatientManage into 0418_小程序开发

This commit is contained in:
haown 2024-07-29 14:53:21 +08:00
commit 68846ecb7d
9 changed files with 141 additions and 81 deletions

View File

@ -96,7 +96,7 @@ public class TextMessageServiceImpl implements ITextMessageService {
public int insertTextMessage(TextMessageTaskDTO textMessageTaskDTO) {
// 检查短信模板名称是否已存在
if (textMessageMapper.countByTextMessageTaskDTO(textMessageTaskDTO) > 0) {
throw new ServiceException("短信模板名称已存在");
throw new ServiceException("短信模板编号已存在");
}
// 设置创建者和创建时间
@ -104,7 +104,6 @@ public class TextMessageServiceImpl implements ITextMessageService {
LocalDateTime currentTime = LocalDateTime.now();
textMessageTaskDTO.setCreateBy(currentUsername);
textMessageTaskDTO.setCreateTime(currentTime);
textMessageTaskDTO.setTextMessageId(IdUtils.fastUUID());
// 将textMessageTaskDTO对象的属性复制到textMessage对象
TextMessage textMessage = new TextMessage();

View File

@ -8,7 +8,7 @@ import java.time.LocalDate;
/**
* @Description 查询短信发送实体类
* @Author zh
* @Date 2024-05-24
* @Date 2024-07-22
*/
@Data
public class TextMessage {
@ -61,6 +61,9 @@ public class TextMessage {
@ApiModelProperty(value = "短信推送标识0未开启1已开启")
private Integer messagePushSign;
@ApiModelProperty(value = "短信ID")
private String textMessageId;
@ApiModelProperty(value = "节点id")
private Long signPatientManageRouteNodeId;
}

View File

@ -840,10 +840,12 @@
pi.admission_time,
pi.discharge_time,
pi.visit_date,
pi.visit_method
pi.visit_method,
tm.text_message_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.id = spmr.patient_id
LEFT JOIN text_message tm ON tm.id = spmrn.message_template_id
where spmrn.message_push_sign = 1
and spmrn.del_flag = 0
and spmrn.node_execute_status = 'UNEXECUTED'

View File

@ -153,8 +153,7 @@
parameterType="com.xinelu.manage.dto.textmessage.TextMessageTaskDTO">
select count(*)
from text_message
where department_id = #{departmentId}
and text_message_name = #{textMessageName}
where text_message_id = #{textMessageId}
</select>
<select id="countByTextMessageNameExcludingId" resultType="java.lang.Integer">

View File

@ -9,7 +9,7 @@ public interface SubscribeTaskService {
/**
* 签约患者管理任务路径节点消息推送定时任务每10分钟执行一次
* 签约患者管理任务路径节点消息推送定时任务
*/
void signPatientManageRouteNodeTask();
}

View File

@ -2,7 +2,6 @@ package com.xinelu.quartz.service.impl;
import com.aliyuncs.exceptions.ClientException;
import com.xinelu.common.config.AliYunSmsTwoConfig;
import com.xinelu.common.enums.PatientTypeEnum;
import com.xinelu.common.enums.RouteNodeNameEnum;
import com.xinelu.manage.dto.smssend.SmsInfoDTO;
import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
@ -36,6 +35,11 @@ public class SendTextMessageServiceImpl implements SendTextMessageService {
@Resource
private AliYunSmsTwoConfig aliYunSmsTwoConfig;
/**
* 签约患者管理任务路径节点短信发送定时任务
*
* @throws ClientException 发送信息
*/
@Override
public void sendTextMessageSendTask() throws ClientException {
//查询短信发送数据
@ -50,38 +54,59 @@ public class SendTextMessageServiceImpl implements SendTextMessageService {
if (StringUtils.isBlank(textMessage.getPatientType()) || Objects.isNull(textMessage.getRouteNodeDay())) {
continue;
}
//模版暂时处理
if (StringUtils.isBlank(textMessage.getTextMessageId()) || !aliYunSmsTwoConfig.getTemplateCode().equals(textMessage.getTextMessageId())) {
continue;
}
LocalDate localDate = null;
if (Objects.nonNull(textMessage.getDischargeTime())) {
localDate = textMessage.getDischargeTime().plusDays(textMessage.getRouteNodeDay());
}
if (Objects.isNull(textMessage.getDischargeTime()) && Objects.nonNull(textMessage.getVisitDate())) {
localDate = textMessage.getVisitDate().plusDays(textMessage.getRouteNodeDay());
}
if (Objects.isNull(localDate)) {
continue;
}
boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
if (before) {
textMessage.setRouteNodeName(RouteNodeNameEnum.getNameByInfo(textMessage.getRouteNodeName()).getName());
messages.add(textMessage);
}
}
//判断路径节点组装数据
if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_DISCHARGE.getInfo()) || textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
if (textMessage.getPatientType().equals(PatientTypeEnum.DISCHARGED_PATIENT.getInfo()) && Objects.nonNull(textMessage.getDischargeTime())) {
LocalDate localDate = textMessage.getDischargeTime().plusDays(textMessage.getRouteNodeDay());
boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
if (before) {
textMessage.setRouteNodeName(RouteNodeNameEnum.AFTER_DISCHARGE.getName());
messages.add(textMessage);
}
}
}
if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_ADMISSION.getInfo())) {
if (textMessage.getPatientType().equals(PatientTypeEnum.IN_HOSPITAL_PATIENT.getInfo()) && Objects.nonNull(textMessage.getAdmissionTime())) {
LocalDate localDate = textMessage.getAdmissionTime().plusDays(textMessage.getRouteNodeDay());
boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
if (before) {
textMessage.setRouteNodeName(RouteNodeNameEnum.AFTER_ADMISSION.getName());
messages.add(textMessage);
}
}
}
if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_CONSULTATION.getInfo()) || textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
if (textMessage.getPatientType().equals(PatientTypeEnum.OUTPATIENT.getInfo()) && textMessage.getAdmissionTime() == null && Objects.nonNull(textMessage.getVisitDate())) {
LocalDate localDate = textMessage.getVisitDate().plusDays(textMessage.getRouteNodeDay());
boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
if (before) {
textMessage.setRouteNodeName(RouteNodeNameEnum.AFTER_CONSULTATION.getName());
messages.add(textMessage);
}
}
}
}
// if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_DISCHARGE.getInfo()) || textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
// if (textMessage.getPatientType().equals(PatientTypeEnum.DISCHARGED_PATIENT.getInfo()) && Objects.nonNull(textMessage.getDischargeTime())) {
// LocalDate localDate = textMessage.getDischargeTime().plusDays(textMessage.getRouteNodeDay());
// boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
// if (before) {
// textMessage.setRouteNodeName(RouteNodeNameEnum.AFTER_DISCHARGE.getName());
// messages.add(textMessage);
// }
// }
// }
// if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_ADMISSION.getInfo())) {
// if (textMessage.getPatientType().equals(PatientTypeEnum.IN_HOSPITAL_PATIENT.getInfo()) && Objects.nonNull(textMessage.getAdmissionTime())) {
// LocalDate localDate = textMessage.getAdmissionTime().plusDays(textMessage.getRouteNodeDay());
// boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
// if (before) {
// textMessage.setRouteNodeName(RouteNodeNameEnum.AFTER_ADMISSION.getName());
// messages.add(textMessage);
// }
// }
// }
// if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_CONSULTATION.getInfo()) || textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
// if (textMessage.getPatientType().equals(PatientTypeEnum.OUTPATIENT.getInfo()) && textMessage.getAdmissionTime() == null && Objects.nonNull(textMessage.getVisitDate())) {
// LocalDate localDate = textMessage.getVisitDate().plusDays(textMessage.getRouteNodeDay());
// boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
// if (before) {
// textMessage.setRouteNodeName(RouteNodeNameEnum.AFTER_CONSULTATION.getName());
// messages.add(textMessage);
// }
// }
// }
// }
//发送
if (CollectionUtils.isNotEmpty(messages)) {
List<Long> ids = new ArrayList<>();
@ -89,12 +114,14 @@ public class SendTextMessageServiceImpl implements SendTextMessageService {
SmsInfoDTO smsInfoDTO = new SmsInfoDTO();
smsInfoDTO.setPhoneNumbers(message.getPatientPhone());
smsInfoDTO.setSignName(aliYunSmsTwoConfig.getSignName());
smsInfoDTO.setTemplateCode(aliYunSmsTwoConfig.getTemplateCode());
// 根据模版id发送
smsInfoDTO.setTemplateCode(message.getTextMessageId());
Boolean aBoolean = smsSendUtils.sendTextMessage(smsInfoDTO);
if (aBoolean) {
ids.add(message.getSignPatientManageRouteNodeId());
}
}
//修改节点状态
if (CollectionUtils.isNotEmpty(ids)) {
signPatientManageRouteNodeMapper.updateMessageStatusByIds(ids);
}

View File

@ -2,7 +2,6 @@ package com.xinelu.quartz.service.impl;
import com.alibaba.fastjson2.JSON;
import com.xinelu.common.config.WeChatAppletChatConfig;
import com.xinelu.common.enums.PatientTypeEnum;
import com.xinelu.common.enums.RouteNodeNameEnum;
import com.xinelu.common.enums.SubscribeStatusEnum;
import com.xinelu.mobile.domain.TemplateContent;
@ -42,65 +41,96 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService {
*/
public void signPatientManageRouteNodeTask() {
//微信小程序订阅消息记录表
List<PatientVO> patient = homePageMapper.selectResidentAndSubscribeMessageRecord(SubscribeStatusEnum.accept.getValue(), weChatAppletChatConfig.getHealthyPropagandaId());
List<Long> collect = patient.stream().filter(Objects::nonNull).map(PatientVO::getPatientId).filter(Objects::nonNull).collect(Collectors.toList());
if (CollectionUtils.isEmpty(collect)) {
List<PatientVO> patientList = homePageMapper.selectResidentAndSubscribeMessageRecord(SubscribeStatusEnum.accept.getValue(), weChatAppletChatConfig.getHealthyPropagandaId());
List<Long> patientIdList = patientList.stream().filter(Objects::nonNull).map(PatientVO::getPatientId).filter(Objects::nonNull).collect(Collectors.toList());
if (CollectionUtils.isEmpty(patientIdList)) {
return;
}
//患者节点表
List<PatientVO> signPatientManageRouteNodes = homePageMapper.selectSignPatientManageRouteNode(collect);
List<PatientVO> patientVOS = new ArrayList<>();
// 患者节点表
List<PatientVO> signPatientManageRouteNodes = homePageMapper.selectSignPatientManageRouteNode(patientIdList);
// PatientVO 包含签约路径节点相关属性后面用于推送消息
List<PatientVO> patientVOList = new ArrayList<>();
for (PatientVO signPatientManageRouteNode : signPatientManageRouteNodes) {
//判断推送状态
if (Objects.isNull(signPatientManageRouteNode.getAppletPushSign()) || signPatientManageRouteNode.getAppletPushSign() != 1) {
continue;
}
//判断路径节点组装数据
if (signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_DISCHARGE.getInfo()) || signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
PatientVO patientVO = patient.stream().filter(Objects::nonNull).filter(item -> signPatientManageRouteNode.getPatientId().equals(item.getPatientId())).findFirst().orElse(new PatientVO());
if (patientVO.getPatientType().equals(PatientTypeEnum.DISCHARGED_PATIENT.getInfo())) {
LocalDate localDate = patientVO.getDischargeTime().plusDays(signPatientManageRouteNode.getRouteNodeDay());
LocalDate localDate = null;
PatientVO patientVO = patientList.stream().filter(Objects::nonNull).filter(item -> signPatientManageRouteNode.getPatientId().equals(item.getPatientId())).findFirst().orElse(new PatientVO());
if (Objects.nonNull(patientVO.getDischargeTime())) {
localDate = patientVO.getDischargeTime().plusDays(signPatientManageRouteNode.getRouteNodeDay());
}
if (Objects.isNull(patientVO.getDischargeTime()) && Objects.nonNull(patientVO.getVisitDate())) {
localDate = patientVO.getVisitDate().plusDays(signPatientManageRouteNode.getRouteNodeDay());
}
if (Objects.isNull(localDate)) {
continue;
}
boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
if (before) {
signPatientManageRouteNode.setOpenId(patientVO.getOpenId());
signPatientManageRouteNode.setRouteNodeName(RouteNodeNameEnum.AFTER_DISCHARGE.getName());
patientVOS.add(signPatientManageRouteNode);
}
}
}
if (signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_ADMISSION.getInfo())) {
PatientVO patientVO = patient.stream().filter(Objects::nonNull).filter(item -> signPatientManageRouteNode.getPatientId().equals(item.getPatientId())).findFirst().orElse(new PatientVO());
if (patientVO.getPatientType().equals(PatientTypeEnum.IN_HOSPITAL_PATIENT.getInfo())) {
LocalDate localDate = patientVO.getAdmissionTime().plusDays(signPatientManageRouteNode.getRouteNodeDay());
boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
if (before) {
signPatientManageRouteNode.setOpenId(patientVO.getOpenId());
signPatientManageRouteNode.setRouteNodeName(RouteNodeNameEnum.AFTER_ADMISSION.getName());
patientVOS.add(signPatientManageRouteNode);
}
}
}
if (signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_CONSULTATION.getInfo()) || signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
PatientVO patientVO = patient.stream().filter(Objects::nonNull).filter(item -> signPatientManageRouteNode.getPatientId().equals(item.getPatientId())).findFirst().orElse(new PatientVO());
if (patientVO.getPatientType().equals(PatientTypeEnum.OUTPATIENT.getInfo()) && patientVO.getAdmissionTime() == null) {
LocalDate localDate = patientVO.getVisitDate().plusDays(signPatientManageRouteNode.getRouteNodeDay());
boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
if (before) {
signPatientManageRouteNode.setOpenId(patientVO.getOpenId());
signPatientManageRouteNode.setRouteNodeName(RouteNodeNameEnum.AFTER_CONSULTATION.getName());
patientVOS.add(signPatientManageRouteNode);
}
}
//转换成中文
signPatientManageRouteNode.setRouteNodeName(RouteNodeNameEnum.getNameByInfo(signPatientManageRouteNode.getRouteNodeName()).getName());
patientVOList.add(signPatientManageRouteNode);
}
}
// //如果节点 适用范围是 出院后或就诊/出院后
// if (signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_DISCHARGE.getInfo()) || signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
// PatientVO patientVO = patientList.stream().filter(Objects::nonNull).filter(item -> signPatientManageRouteNode.getPatientId().equals(item.getPatientId())).findFirst().orElse(new PatientVO());
// //患者类型如果是 出院患者
// if (patientVO.getPatientType().equals(PatientTypeEnum.DISCHARGED_PATIENT.getInfo())) {
// //出院时间
// LocalDate localDate = patientVO.getDischargeTime().plusDays(signPatientManageRouteNode.getRouteNodeDay());
// boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
// if (before) {
// signPatientManageRouteNode.setOpenId(patientVO.getOpenId());
// signPatientManageRouteNode.setRouteNodeName(RouteNodeNameEnum.AFTER_DISCHARGE.getName());
// patientVOList.add(signPatientManageRouteNode);
// }
// }
// }
// //如果节点适用范围是 入院后
// if (signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_ADMISSION.getInfo())) {
// PatientVO patientVO = patientList.stream().filter(Objects::nonNull).filter(item -> signPatientManageRouteNode.getPatientId().equals(item.getPatientId())).findFirst().orElse(new PatientVO());
// //患者类型如果是 在院患者
// if (patientVO.getPatientType().equals(PatientTypeEnum.IN_HOSPITAL_PATIENT.getInfo())) {
// //入院时间
// LocalDate localDate = patientVO.getAdmissionTime().plusDays(signPatientManageRouteNode.getRouteNodeDay());
// boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
// if (before) {
// signPatientManageRouteNode.setOpenId(patientVO.getOpenId());
// signPatientManageRouteNode.setRouteNodeName(RouteNodeNameEnum.AFTER_ADMISSION.getName());
// patientVOList.add(signPatientManageRouteNode);
// }
// }
// }
// //如果节点 适用范围是 就诊后 就诊/出院后
// if (signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_CONSULTATION.getInfo()) || signPatientManageRouteNode.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
// PatientVO patientVO = patientList.stream().filter(Objects::nonNull).filter(item -> signPatientManageRouteNode.getPatientId().equals(item.getPatientId())).findFirst().orElse(new PatientVO());
// //患者类型如果是 门诊患者
// if (patientVO.getPatientType().equals(PatientTypeEnum.OUTPATIENT.getInfo()) && patientVO.getAdmissionTime() == null) {
// //就诊时间
// LocalDate localDate = patientVO.getVisitDate().plusDays(signPatientManageRouteNode.getRouteNodeDay());
// boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
// if (before) {
// signPatientManageRouteNode.setOpenId(patientVO.getOpenId());
// signPatientManageRouteNode.setRouteNodeName(RouteNodeNameEnum.AFTER_CONSULTATION.getName());
// patientVOList.add(signPatientManageRouteNode);
// }
// }
// }
List<Long> signPatientManageRouteNodeIds = new ArrayList<>();
//发送
for (PatientVO patientVO : patientVOS) {
for (PatientVO patientVO : patientVOList) {
try {
JSON.parseArray(patientVO.getAppletNodeContent(), TemplateContent.class);
} catch (Exception e) {
continue;
}
// 开始推送消息
Integer integer = weChatOfficialAccountUtils.sendAppletTemplateMessage(patientVO);
if (integer == 0) {
signPatientManageRouteNodeIds.add(patientVO.getSignPatientManageRouteNodeId());

View File

@ -11,7 +11,7 @@ import javax.annotation.Resource;
/**
* @Description 短信相关定时任务
* @Author zh
* @Date 2024-05-24
* @Date 2024-07-22
*/
@Slf4j
@Component("sendTextMessageTask")
@ -21,7 +21,7 @@ public class SendTextMessageTask {
private SendTextMessageService sendTextMessageService;
/**
* 签约患者管理任务路径节点短信发送定时任务每10分钟执行一次
* 签约患者管理任务路径节点短信发送定时任务
*/
public void automaticSendTextMessageTask() throws ClientException {
log.info("开始执行签约患者管理任务短信推送定时任务......");

View File

@ -19,7 +19,7 @@ public class SubscribeTask {
private SubscribeTaskService subscribeTaskService;
/**
* 签约患者管理任务路径节点消息推送定时任务每10分钟执行一次
* 签约患者管理任务路径节点消息推送定时任务
*/
public void automaticSendSignPatientManageRouteNodeTask() {
log.info("开始执行签约患者管理任务路径节点推送定时任务......");