短信推送修改

This commit is contained in:
zhangheng 2024-07-31 17:25:04 +08:00
parent 57a67a0509
commit 97140adfee
14 changed files with 153 additions and 68 deletions

View File

@ -81,8 +81,8 @@ public class PatientTaskExecuteRecordController extends BaseController {
* 根据患者信息查询就诊记录 * 根据患者信息查询就诊记录
*/ */
@GetMapping("/selectVisitRecord") @GetMapping("/selectVisitRecord")
public AjaxResult selectVisitRecord(Long id) { public AjaxResult selectVisitRecord(Long id, Long patientId) {
return patientTaskExecuteRecordService.selectVisitRecord(id); return patientTaskExecuteRecordService.selectVisitRecord(id, patientId);
} }
/** /**

View File

@ -2,6 +2,7 @@ package com.xinelu.manage.mapper.patienttaskexecuterecord;
import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecord; import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecord;
import com.xinelu.manage.vo.patienttaskexecuterecord.PatientTaskExecuteRecordVO; import com.xinelu.manage.vo.patienttaskexecuterecord.PatientTaskExecuteRecordVO;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -74,5 +75,5 @@ public interface PatientTaskExecuteRecordMapper {
* @param id id * @param id id
* @return AjaxResult * @return AjaxResult
*/ */
PatientTaskExecuteRecordVO selectVisitRecord(Long id); PatientTaskExecuteRecordVO selectVisitRecord(@Param("id") Long id, @Param("patientId") Long patientId);
} }

View File

@ -1,6 +1,8 @@
package com.xinelu.manage.mapper.shortmessagesendrecord; package com.xinelu.manage.mapper.shortmessagesendrecord;
import com.xinelu.manage.domain.shortmessagesendrecord.ShortMessageSendRecord; import com.xinelu.manage.domain.shortmessagesendrecord.ShortMessageSendRecord;
import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -58,4 +60,12 @@ public interface ShortMessageSendRecordMapper {
* @return 结果 * @return 结果
*/ */
int deleteShortMessageSendRecordByIds(Long[] ids); int deleteShortMessageSendRecordByIds(Long[] ids);
/**
* 节点推送数量
*
* @param manageRouteNodeIds 节点id
* @return RecordNum
*/
List<RecordNum> selectShortMessageRecordCountByManageRouteNodeIds(@Param("manageRouteNodeIds") List<Long> manageRouteNodeIds);
} }

View File

@ -107,6 +107,7 @@ public interface SignPatientManageRouteNodeMapper {
/** /**
* 任务审核查询手动创建的任务节点详情 * 任务审核查询手动创建的任务节点详情
*
* @param manageRouteIds 路径主键列表 * @param manageRouteIds 路径主键列表
* @return 节点详细信息列表 * @return 节点详细信息列表
*/ */
@ -114,6 +115,7 @@ public interface SignPatientManageRouteNodeMapper {
/** /**
* 根据路径主键列表查询节点列表 * 根据路径主键列表查询节点列表
*
* @param manageRouteIds 路径主键列表 * @param manageRouteIds 路径主键列表
* @return 节点列表 * @return 节点列表
*/ */
@ -135,10 +137,14 @@ public interface SignPatientManageRouteNodeMapper {
List<TextMessage> selectMessagePushSign(); List<TextMessage> selectMessagePushSign();
/** /**
* 根据节点id修改状态 * 修改执行状态
* *
* @param ids 节点ids * @param manageRouteNodeIds 节点id
* @param nodeExecuteStatus 执行状态
* @param appletStatus 小程序发送状态
* @param messageStatus 短信发送状态
* @param officialStatus 公众号发送状态
* @return int * @return int
*/ */
int updateMessageStatusByIds(@Param("ids") List<Long> ids); int updateNodeExecuteStatusByIds(@Param("manageRouteNodeIds") List<Long> manageRouteNodeIds, @Param("nodeExecuteStatus") String nodeExecuteStatus, @Param("appletStatus") String appletStatus, @Param("messageStatus") String messageStatus, @Param("officialStatus") String officialStatus);
} }

View File

@ -65,9 +65,10 @@ public interface IPatientTaskExecuteRecordService {
* 根据患者信息查询就诊记录 * 根据患者信息查询就诊记录
* *
* @param id 记录id * @param id 记录id
* @param patientId 患者id
* @return AjaxResult * @return AjaxResult
*/ */
AjaxResult selectVisitRecord(Long id); AjaxResult selectVisitRecord(Long id, Long patientId);
/** /**
* 根据任务执行记录查询患者问卷信息 * 根据任务执行记录查询患者问卷信息

View File

@ -104,9 +104,9 @@ public class PatientTaskExecuteRecordServiceImpl implements IPatientTaskExecuteR
* @return AjaxResult * @return AjaxResult
*/ */
@Override @Override
public AjaxResult selectVisitRecord(Long id) { public AjaxResult selectVisitRecord(Long id, Long patientId) {
PatientTaskExecuteRecordVO patientTaskExecuteRecordVO = patientTaskExecuteRecordMapper.selectVisitRecord(id); PatientTaskExecuteRecordVO patientTaskExecuteRecordVO = patientTaskExecuteRecordMapper.selectVisitRecord(id, patientId);
if (Objects.nonNull(patientTaskExecuteRecordVO.getBirthDate())) { if (Objects.nonNull(patientTaskExecuteRecordVO) && Objects.nonNull(patientTaskExecuteRecordVO.getBirthDate())) {
patientTaskExecuteRecordVO.setAge(AgeUtil.getAgeMonth(patientTaskExecuteRecordVO.getBirthDate().toString())); patientTaskExecuteRecordVO.setAge(AgeUtil.getAgeMonth(patientTaskExecuteRecordVO.getBirthDate().toString()));
} }
return AjaxResult.success(patientTaskExecuteRecordVO); return AjaxResult.success(patientTaskExecuteRecordVO);

View File

@ -303,7 +303,8 @@
<select id="selectVisitRecord" <select id="selectVisitRecord"
resultType="com.xinelu.manage.vo.patienttaskexecuterecord.PatientTaskExecuteRecordVO"> resultType="com.xinelu.manage.vo.patienttaskexecuterecord.PatientTaskExecuteRecordVO">
select pvr.in_hospital_info, select
pvr.in_hospital_info,
pvr.out_hospital_info, pvr.out_hospital_info,
pvr.surgical_record, pvr.surgical_record,
ri.patient_name, ri.patient_name,
@ -313,10 +314,17 @@
ri.card_no, ri.card_no,
ri.sex, ri.sex,
ri.address ri.address
FROM patient_task_execute_record pter FROM patient_info pi
LEFT JOIN patient_task_execute_record pter ON pi.id = pter.patient_id
LEFT JOIN patient_visit_record pvr ON pter.visit_record_id = pvr.id LEFT JOIN patient_visit_record pvr ON pter.visit_record_id = pvr.id
LEFT JOIN patient_info pi ON pi.id = pter.patient_id
LEFT JOIN resident_info ri ON ri.id = pi.resident_id LEFT JOIN resident_info ri ON ri.id = pi.resident_id
where pter.id = #{id} <where>
<if test="id != null">
and pter.id = #{id}
</if>
<if test="patientId != null">
and pi.id = #{patientId}
</if>
</where>
</select> </select>
</mapper> </mapper>

View File

@ -198,4 +198,16 @@
#{id} #{id}
</foreach> </foreach>
</delete> </delete>
<select id="selectShortMessageRecordCountByManageRouteNodeIds"
resultType="com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum">
select
manage_route_node_id,
COUNT(1) num
from short_message_send_record
where manage_route_node_id IN
<foreach item="manageRouteNodeId" collection="manageRouteNodeId" open="(" separator="," close=")">
#{manageRouteNodeId}
</foreach>
</select>
</mapper> </mapper>

View File

@ -872,14 +872,28 @@
where spmrn.message_push_sign = 1 where spmrn.message_push_sign = 1
and spmrn.del_flag = 0 and spmrn.del_flag = 0
and spmrn.node_execute_status = 'UNEXECUTED' and spmrn.node_execute_status = 'UNEXECUTED'
and (spmrn.message_node_execute_result_status is null or spmrn.message_node_execute_result_status = ' ')
</select> </select>
<update id="updateMessageStatusByIds"> <update id="updateNodeExecuteStatusByIds">
update sign_patient_manage_route_node update sign_patient_manage_route_node
set message_status = 'EXECUTED' <trim prefix="SET" suffixOverrides=",">
<if test="nodeExecuteStatus != null">node_execute_status =
#{nodeExecuteStatus},
</if>
<if test="appletStatus != null">applet_node_execute_result_status =
#{appletStatus},
</if>
<if test="messageStatus != null">message_node_execute_result_status =
#{messageStatus},
</if>
<if test="officialStatus != null">official_node_execute_result_status =
#{officialStatus},
</if>
</trim>
where id in where id in
<foreach item="ids" collection="ids" open="(" separator="," close=")"> <foreach item="manageRouteNodeIds" collection="manageRouteNodeIds" open="(" separator="," close=")">
#{ids} #{manageRouteNodeIds}
</foreach> </foreach>
</update> </update>
</mapper> </mapper>

View File

@ -242,6 +242,5 @@
<foreach item="manageRouteNodeId" collection="manageRouteNodeId" open="(" separator="," close=")"> <foreach item="manageRouteNodeId" collection="manageRouteNodeId" open="(" separator="," close=")">
#{manageRouteNodeId} #{manageRouteNodeId}
</foreach> </foreach>
</select> </select>
</mapper> </mapper>

View File

@ -60,14 +60,6 @@ public interface HomePageMapper {
*/ */
List<PatientVO> selectSignPatientManageRouteNode(@Param("patientId") List<Long> patientId); List<PatientVO> selectSignPatientManageRouteNode(@Param("patientId") List<Long> patientId);
/**
* 修改执行状态
*
* @param signPatientManageRouteNodeIds 节点id
* @return int
*/
int updateNodeExecuteStatusByIds(@Param("signPatientManageRouteNodeIds") List<Long> signPatientManageRouteNodeIds, @Param("nodeExecuteStatus") String nodeExecuteStatus, @Param("appletNodeExecuteResultStatus") String appletNodeExecuteResultStatus);
/** /**
* 查询个人任务消息 * 查询个人任务消息
* *

View File

@ -147,17 +147,6 @@
</if> </if>
</select> </select>
<update id="updateNodeExecuteStatusByIds">
update sign_patient_manage_route_node
set node_execute_status = #{nodeExecuteStatus},
applet_node_execute_result_status = #{appletNodeExecuteResultStatus}
where id in
<foreach item="signPatientManageRouteNodeIds" collection="signPatientManageRouteNodeIds" open="(" separator=","
close=")">
#{signPatientManageRouteNodeIds}
</foreach>
</update>
<select id="selectManageRouteByResidentId" <select id="selectManageRouteByResidentId"
resultType="com.xinelu.mobile.vo.homepage.MessageTabulationVO"> resultType="com.xinelu.mobile.vo.homepage.MessageTabulationVO">
select spmrn.id manageRouteNodeId, select spmrn.id manageRouteNodeId,

View File

@ -2,10 +2,17 @@ package com.xinelu.quartz.service.impl;
import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ClientException;
import com.xinelu.common.config.AliYunSmsTwoConfig; import com.xinelu.common.config.AliYunSmsTwoConfig;
import com.xinelu.common.config.PushMessageRestrictions;
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.RouteNodeNameEnum;
import com.xinelu.manage.domain.subscribemessagesendrecord.SubscribeMessageSendRecord;
import com.xinelu.manage.dto.smssend.SmsInfoDTO; 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.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
import com.xinelu.manage.vo.signpatientmanageroutenode.TextMessage; import com.xinelu.manage.vo.signpatientmanageroutenode.TextMessage;
import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum;
import com.xinelu.mobile.utils.SmsSendUtils; import com.xinelu.mobile.utils.SmsSendUtils;
import com.xinelu.quartz.service.SendTextMessageService; import com.xinelu.quartz.service.SendTextMessageService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -18,6 +25,7 @@ import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* @Description 短信发送定时任务业务层 * @Description 短信发送定时任务业务层
@ -34,6 +42,10 @@ public class SendTextMessageServiceImpl implements SendTextMessageService {
private SmsSendUtils smsSendUtils; private SmsSendUtils smsSendUtils;
@Resource @Resource
private AliYunSmsTwoConfig aliYunSmsTwoConfig; private AliYunSmsTwoConfig aliYunSmsTwoConfig;
@Resource
private PushMessageRestrictions pushMessageRestrictions;
@Resource
private ShortMessageSendRecordMapper shortMessageSendRecordMapper;
/** /**
* 签约患者管理任务路径节点短信发送定时任务 * 签约患者管理任务路径节点短信发送定时任务
@ -44,7 +56,13 @@ public class SendTextMessageServiceImpl implements SendTextMessageService {
public void sendTextMessageSendTask() throws ClientException { public void sendTextMessageSendTask() throws ClientException {
//查询短信发送数据 //查询短信发送数据
List<TextMessage> textMessages = signPatientManageRouteNodeMapper.selectMessagePushSign(); List<TextMessage> textMessages = signPatientManageRouteNodeMapper.selectMessagePushSign();
if (CollectionUtils.isEmpty(textMessages)) {
return;
}
//条件过滤后短信信息
List<TextMessage> messages = new ArrayList<>(); List<TextMessage> messages = new ArrayList<>();
//超时短信ids
List<Long> expiredManageRouteNodeIds = new ArrayList<>();
for (TextMessage textMessage : textMessages) { for (TextMessage textMessage : textMessages) {
//判断推送状态 //判断推送状态
if (Objects.isNull(textMessage.getMessagePushSign()) || textMessage.getMessagePushSign() != 1) { if (Objects.isNull(textMessage.getMessagePushSign()) || textMessage.getMessagePushSign() != 1) {
@ -70,10 +88,20 @@ public class SendTextMessageServiceImpl implements SendTextMessageService {
} }
boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now()); boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now());
if (before) { if (before) {
//超出7天更改状态
int i = LocalDate.now().compareTo(localDate);
if (i >= pushMessageRestrictions.getTime()) {
expiredManageRouteNodeIds.add(textMessage.getSignPatientManageRouteNodeId());
continue;
}
textMessage.setRouteNodeName(RouteNodeNameEnum.getNameByInfo(textMessage.getRouteNodeName()).getName()); textMessage.setRouteNodeName(RouteNodeNameEnum.getNameByInfo(textMessage.getRouteNodeName()).getName());
messages.add(textMessage); messages.add(textMessage);
} }
} }
//更改过期执行状态
if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) {
signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(expiredManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), null, NodeExecuteResultStatusEnum.EXPIRED.getInfo(), null);
}
//判断路径节点组装数据 //判断路径节点组装数据
// if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_DISCHARGE.getInfo()) || textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) { // if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_DISCHARGE.getInfo()) || textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) {
@ -107,7 +135,12 @@ public class SendTextMessageServiceImpl implements SendTextMessageService {
// } // }
// } // }
// } // }
//节点推送数量
List<Long> collect = messages.stream().filter(Objects::nonNull).map(TextMessage::getSignPatientManageRouteNodeId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
List<RecordNum> recordNums = shortMessageSendRecordMapper.selectShortMessageRecordCountByManageRouteNodeIds(collect);
//发送 //发送
//发送失败ids
List<Long> failSignPatientManageRouteNodeIds = new ArrayList<>();
if (CollectionUtils.isNotEmpty(messages)) { if (CollectionUtils.isNotEmpty(messages)) {
List<Long> ids = new ArrayList<>(); List<Long> ids = new ArrayList<>();
for (TextMessage message : messages) { for (TextMessage message : messages) {
@ -117,13 +150,30 @@ public class SendTextMessageServiceImpl implements SendTextMessageService {
// 根据模版id发送 // 根据模版id发送
smsInfoDTO.setTemplateCode(message.getTextMessageId()); smsInfoDTO.setTemplateCode(message.getTextMessageId());
Boolean aBoolean = smsSendUtils.sendTextMessage(smsInfoDTO); Boolean aBoolean = smsSendUtils.sendTextMessage(smsInfoDTO);
SubscribeMessageSendRecord subscribeMessageSendRecord = new SubscribeMessageSendRecord();
//成功
if (aBoolean) { if (aBoolean) {
ids.add(message.getSignPatientManageRouteNodeId()); ids.add(message.getSignPatientManageRouteNodeId());
subscribeMessageSendRecord.setErrorCode(0);
subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.success.getValue());
} else {
//失败
subscribeMessageSendRecord.setErrorCode(1);
subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.fail.getValue());
RecordNum recordNum = recordNums.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getManageRouteNodeId()) && item.getManageRouteNodeId().equals(message.getSignPatientManageRouteNodeId())).findFirst().orElse(new RecordNum());
//三次失败
if (Objects.nonNull(recordNum.getNum()) && recordNum.getNum() >= pushMessageRestrictions.getNumber()) {
failSignPatientManageRouteNodeIds.add(message.getSignPatientManageRouteNodeId());
}
} }
} }
//修改节点状态 //修改节点状态
if (CollectionUtils.isNotEmpty(ids)) { if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) {
signPatientManageRouteNodeMapper.updateMessageStatusByIds(ids); signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(ids, NodeExecuteStatusEnum.EXECUTED.getInfo(), null, NodeExecuteResultStatusEnum.SUCCESS.getInfo(), null);
}
//修改节点状态
if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) {
signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), null, NodeExecuteResultStatusEnum.FAILURE.getInfo(), null);
} }
} }
} }

View File

@ -6,6 +6,7 @@ import com.xinelu.common.config.WeChatAppletChatConfig;
import com.xinelu.common.enums.*; import com.xinelu.common.enums.*;
import com.xinelu.common.utils.SecurityUtils; import com.xinelu.common.utils.SecurityUtils;
import com.xinelu.manage.domain.subscribemessagesendrecord.SubscribeMessageSendRecord; import com.xinelu.manage.domain.subscribemessagesendrecord.SubscribeMessageSendRecord;
import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
import com.xinelu.manage.mapper.subscribemessagesendrecord.SubscribeMessageSendRecordMapper; import com.xinelu.manage.mapper.subscribemessagesendrecord.SubscribeMessageSendRecordMapper;
import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum; import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum;
import com.xinelu.mobile.domain.TemplateContent; import com.xinelu.mobile.domain.TemplateContent;
@ -44,6 +45,8 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService {
private SubscribeMessageSendRecordMapper subscribeMessageSendRecordMapper; private SubscribeMessageSendRecordMapper subscribeMessageSendRecordMapper;
@Resource @Resource
private PushMessageRestrictions pushMessageRestrictions; private PushMessageRestrictions pushMessageRestrictions;
@Resource
private SignPatientManageRouteNodeMapper signPatientManageRouteNodeMapper;
/** /**
* 推送任务组装数据 * 推送任务组装数据
@ -96,7 +99,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService {
} }
//更改过期执行状态 //更改过期执行状态
if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) { if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) {
homePageMapper.updateNodeExecuteStatusByIds(expiredManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.EXPIRED.getInfo()); signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(expiredManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.EXPIRED.getInfo(), null, null);
} }
// //如果节点 适用范围是 出院后或就诊/出院后 // //如果节点 适用范围是 出院后或就诊/出院后
@ -190,11 +193,11 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService {
} }
//更改成功执行状态 //更改成功执行状态
if (CollectionUtils.isNotEmpty(signPatientManageRouteNodeIds)) { if (CollectionUtils.isNotEmpty(signPatientManageRouteNodeIds)) {
homePageMapper.updateNodeExecuteStatusByIds(signPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.SUCCESS.getInfo()); signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(signPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.SUCCESS.getInfo(), null, null);
} }
//更改失败执行状态 //更改失败执行状态
if (CollectionUtils.isNotEmpty(failSignPatientManageRouteNodeIds)) { if (CollectionUtils.isNotEmpty(failSignPatientManageRouteNodeIds)) {
homePageMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.FAILURE.getInfo()); signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.FAILURE.getInfo(), null, null);
} }
} }
} }