diff --git a/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java b/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java index 07a62fc5..4738b435 100644 --- a/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java +++ b/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java @@ -93,7 +93,7 @@ public class DownloadNotificationTasker { }); } - @Scheduled(cron = "0 0 20 * * *") + @Scheduled(cron = "0 0 19 * * *") public void sendExpireNotification() { log.info("开始执行定时任务"); // 用于记录已发送通知的用户ID,避免重复发送 @@ -143,6 +143,56 @@ public class DownloadNotificationTasker { WechatSubscribeNotifyTriggerResult result = notifyTriggerService.trigger("EXPIRE_NOTIFY", request); }); } + @Scheduled(cron = "0 0 19 * * *") + public void sendPreExpireNotification() { + log.info("开始执行定时任务"); + // 用于记录已发送通知的用户ID,避免重复发送 + Set sentMemberIds = ConcurrentHashMap.newKeySet(); + videoMapper.listRelationByCreateTime(new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000), new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000)) + .forEach(item -> { + if (item.getIsBuy() == 1) { + return; + } + // 检查该用户是否已经发送过通知,避免重复发送 + if (sentMemberIds.contains(item.getMemberId())) { + log.debug("用户[memberId={}]已发送过过期提醒通知,跳过", item.getMemberId()); + return; + } + sentMemberIds.add(item.getMemberId()); + + MemberRespVO member = memberMapper.getById(item.getMemberId()); + ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(item.getScenicId()); + Integer videoStoreDay = scenicConfig.getInteger("video_store_day"); + if (videoStoreDay == null) { + videoStoreDay = 3; + } + Date expireDate = new Date(item.getCreateTime().getTime() + videoStoreDay * 24 * 60 * 60 * 1000); + // 发送模板消息 + HashMap variables = new HashMap<>(); + ScenicV2DTO scenic = scenicRepository.getScenicBasic(item.getScenicId()); + variables.put("scenicName", scenic.getName()); + variables.put("scenicId", scenic.getId()); + variables.put("faceId", item.getFaceId()); + ScenicConfigManager configManager = scenicRepository.getScenicConfigManager(item.getScenicId()); + if (configManager.getBoolean("grouping_enable", false)) { + variables.put("videoResultPage", "travelVideoCenter"); + } else { + variables.put("videoResultPage", "videoSynthesis"); + } + variables.put("expireDate", DateUtil.format(expireDate, "yyyy-MM-dd")); + variables.put("videoDeviceCount", videoTaskRepository.getTaskDeviceNum(item.getTaskId())); + variables.put("videoLensCount", videoTaskRepository.getTaskLensNum(item.getTaskId())); + variables.put("videoShotTime", DateUtil.format(videoTaskRepository.getTaskShotDate(item.getTaskId()), "yyyy-MM-dd HH:mm")); + WechatSubscribeNotifyTriggerRequest request = WechatSubscribeNotifyTriggerRequest.builder() + .scenicId(item.getScenicId()) + .memberId(item.getMemberId()) + .openId(member.getOpenId()) + .bizId(String.valueOf(item.getId())) + .variables(variables) + .build(); + WechatSubscribeNotifyTriggerResult result = notifyTriggerService.trigger("VIDEO_PRE_EXPIRE", request); + }); + } @Scheduled(cron = "0 0 * * * *") public void sendExtraDownloadNotification() {