From 984eb0016349585b5643dfb92c9387cfc09b5be2 Mon Sep 17 00:00:00 2001 From: zhuangyuanke Date: Mon, 4 Nov 2024 15:57:32 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/subscribeTaskServiceImpl.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java index 51df4bc8..b3aa2a92 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java @@ -59,12 +59,14 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { */ public void signPatientManageRouteNodeTask() { //微信小程序订阅消息记录表 + //1、获取已订阅 指定 小程序通知模版 的 患者列表; List patientList = homePageMapper.selectResidentAndSubscribeMessageRecord(SubscribeStatusEnum.accept.getValue(), weChatAppletChatConfig.getHealthyPropagandaId()); + //1.1 获取已订阅 指定 小程序通知模版 的 患者ID列表; List patientIdList = patientList.stream().filter(Objects::nonNull).map(PatientVO::getPatientId).filter(Objects::nonNull).collect(Collectors.toList()); if (CollectionUtils.isEmpty(patientIdList)) { return; } - // 患者节点表 + // 2、患者节点表(患者任务表) List signPatientManageRouteNodes = homePageMapper.selectSignPatientManageRouteNode(patientIdList); if (CollectionUtils.isEmpty(signPatientManageRouteNodes)) { return; @@ -73,6 +75,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { List patientVOList = new ArrayList<>(); //发送消息到期节点id集合 List expiredManageRouteNodeIds = new ArrayList<>(); + //开始遍历患者任务,组装数据 for (PatientVO signPatientManageRouteNode : signPatientManageRouteNodes) { //判断推送状态 if (Objects.isNull(signPatientManageRouteNode.getAppletPushSign()) || signPatientManageRouteNode.getAppletPushSign() != 1) { @@ -93,6 +96,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now()); if (before) { long until = localDate.until(LocalDate.now(), ChronoUnit.DAYS); + //已过期 任务 if (until >= pushMessageRestrictions.getTime()) { expiredManageRouteNodeIds.add(signPatientManageRouteNode.getSignPatientManageRouteNodeId()); continue; @@ -100,6 +104,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { signPatientManageRouteNode.setOpenId(patientVO.getOpenId()); //转换成中文…… signPatientManageRouteNode.setRouteNodeName(RouteNodeNameEnum.getNameByInfo(signPatientManageRouteNode.getRouteNodeName()).getName()); + //待发送 任务列表 patientVOList.add(signPatientManageRouteNode); } } @@ -157,14 +162,18 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { if (CollectionUtils.isEmpty(patientVOList)) { return; } - //节点推送数量 - List collect = patientVOList.stream().filter(Objects::nonNull).map(PatientVO::getSignPatientManageRouteNodeId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + //2.2 节点推送数量 + List collect = patientVOList.stream().filter(Objects::nonNull).map(PatientVO::getSignPatientManageRouteNodeId) + .filter(Objects::nonNull).distinct().collect(Collectors.toList()); + //RecordNum,manageRouteNodeId:任务ID,num:已推送次数 List recordNums = subscribeMessageSendRecordMapper.selectRecordCountByManageRouteNodeIds(collect); //发送成功id集合 List signPatientManageRouteNodeIds = new ArrayList<>(); //发送失败 List failSignPatientManageRouteNodeIds = new ArrayList<>(); Set patientIdSet = new HashSet<>(); + + //3、----------开始推送------------// for (PatientVO patientVO : patientVOList) { // 开始推送消息 Integer integer = weChatOfficialAccountUtils.sendAppletTemplateMessage(patientVO); @@ -180,6 +189,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { subscribeMessageSendRecord.setErrorCode(integer); subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.fail.getValue()); RecordNum recordNum = recordNums.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getManageRouteNodeId()) && item.getManageRouteNodeId().equals(patientVO.getSignPatientManageRouteNodeId())).findFirst().orElse(new RecordNum()); + //若已推送次数达到 配置的 最大次数,则认为:失败; if (Objects.nonNull(recordNum.getNum()) && recordNum.getNum() >= pushMessageRestrictions.getNumber()) { failSignPatientManageRouteNodeIds.add(patientVO.getSignPatientManageRouteNodeId()); } @@ -193,15 +203,17 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { subscribeMessageSendRecord.setCreateTime(LocalDateTime.now()); subscribeMessageSendRecordMapper.insertSubscribeMessageSendRecord(subscribeMessageSendRecord); } - //更改成功执行状态 + + + //4、更改成功执行状态 if (CollectionUtils.isNotEmpty(signPatientManageRouteNodeIds)) { signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(signPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.SUCCESS.getInfo(), null, null); } - //更改失败执行状态 + //4.2 更改失败执行状态 if (CollectionUtils.isNotEmpty(failSignPatientManageRouteNodeIds)) { signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.FAILURE.getInfo(), null, null); } - // 患者任务统计表修改 + //5、 患者任务统计表修改 if (CollectionUtils.isNotEmpty(patientIdSet)) { patientTaskStatisticsService.updateNum(new ArrayList<>(patientIdSet)); } From 503fdcdab15b6671cc3d89d4a7b01992538f940f Mon Sep 17 00:00:00 2001 From: zhuangyuanke Date: Mon, 4 Nov 2024 16:10:21 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quartz/service/impl/subscribeTaskServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java index b3aa2a92..6a804fe2 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java @@ -75,7 +75,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { List patientVOList = new ArrayList<>(); //发送消息到期节点id集合 List expiredManageRouteNodeIds = new ArrayList<>(); - //开始遍历患者任务,组装数据 + //2.1 开始遍历患者任务,组装数据 for (PatientVO signPatientManageRouteNode : signPatientManageRouteNodes) { //判断推送状态 if (Objects.isNull(signPatientManageRouteNode.getAppletPushSign()) || signPatientManageRouteNode.getAppletPushSign() != 1) { @@ -108,7 +108,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { patientVOList.add(signPatientManageRouteNode); } } - //更改过期执行状态 + //2.2 对过期的任务,更改过期执行状态 if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) { signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(expiredManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.EXPIRED.getInfo(), null, null); } @@ -162,7 +162,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { if (CollectionUtils.isEmpty(patientVOList)) { return; } - //2.2 节点推送数量 + //2.3 节点推送数量,用于判断失败次数,若达到最大值,则认为失败; List collect = patientVOList.stream().filter(Objects::nonNull).map(PatientVO::getSignPatientManageRouteNodeId) .filter(Objects::nonNull).distinct().collect(Collectors.toList()); //RecordNum,manageRouteNodeId:任务ID,num:已推送次数 @@ -201,6 +201,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { subscribeMessageSendRecord.setAppletId(weChatAppletChatConfig.getAppletId()); subscribeMessageSendRecord.setTemplateId(weChatAppletChatConfig.getHealthyPropagandaId()); subscribeMessageSendRecord.setCreateTime(LocalDateTime.now()); + //3.1 托送记录入库 subscribeMessageSendRecordMapper.insertSubscribeMessageSendRecord(subscribeMessageSendRecord); }