From 27f356519ee53a7c591bc421061a349d5bcc9d37 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 15 Oct 2025 17:37:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(notification):=20=E5=BC=95=E5=85=A5?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=8E=88=E6=9D=83=E6=A3=80=E6=9F=A5=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=20-=20=E5=9C=A8=E4=BB=BB=E5=8A=A1=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E4=B8=AD=E9=9B=86=E6=88=90=E9=80=9A=E7=9F=A5=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=20-=20=E5=AE=9E=E7=8E=B0=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E7=94=9F=E6=88=90=E9=80=9A=E7=9F=A5=E5=89=8D=E7=9A=84?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91-=20?= =?UTF-8?q?=E5=9C=A8=E4=B8=8B=E8=BD=BD=E9=80=9A=E7=9F=A5=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=B8=AD=E5=A2=9E=E5=8A=A0=E6=8E=88=E6=9D=83=E6=B6=88=E8=B4=B9?= =?UTF-8?q?=E6=A3=80=E6=9F=A5-=20=E6=B7=BB=E5=8A=A0=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E6=8F=90=E9=86=92=E5=8F=8A=E9=A2=9D=E5=A4=96=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E7=9A=84=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=20-=20=E5=AE=8C=E5=96=84=E6=97=A0=E6=8E=88=E6=9D=83=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95=E4=B8=8E=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/impl/TaskTaskServiceImpl.java | 14 ++++++-- .../task/DownloadNotificationTasker.java | 36 +++++++++++++++---- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java index 56cce4c6..ecd3a236 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java @@ -57,6 +57,7 @@ import com.ycwl.basic.task.VideoPieceGetter; import com.ycwl.basic.repository.TemplateRepository; import com.ycwl.basic.utils.SnowFlakeUtil; import com.ycwl.basic.utils.VideoReUploader; +import com.ycwl.basic.utils.NotificationAuthUtils; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -130,6 +131,8 @@ public class TaskTaskServiceImpl implements TaskService { private MemberRelationRepository memberRelationRepository; @Autowired private ZtMessageProducerService ztMessageProducerService; + @Autowired + private NotificationAuthUtils notificationAuthUtils; private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) { String accessKey = req.getAccessKey(); @@ -642,16 +645,23 @@ public class TaskTaskServiceImpl implements TaskService { log.warn("未配置视频生成通知模板"); return; } + + // 检查并消费通知授权 + if (!notificationAuthUtils.checkAndConsumeAuthorization(memberId, templateId, item.getScenicId())) { + log.debug("用户[memberId={}]对模板[templateId={}]授权不足,跳过视频生成通知", memberId, templateId); + return; + } + ScenicEntity scenic = scenicRepository.getScenic(item.getScenicId()); ScenicConfigManager configManager = scenicRepository.getScenicConfigManager(item.getScenicId()); String configTitle = configManager.getString("first_notification_title"); String configContent = configManager.getString("first_notification_content"); - + if (StringUtils.isBlank(configTitle) || StringUtils.isBlank(configContent)) { log.info("景区[{}]未配置第一次通知内容,跳过发送通知", scenic.getName()); return; } - + String title = configTitle.replace("【景区】", scenic.getName()); String page; if (configManager.getBoolean("grouping_enable", false)) { diff --git a/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java b/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java index 69efea7c..78e25ec9 100644 --- a/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java +++ b/src/main/java/com/ycwl/basic/task/DownloadNotificationTasker.java @@ -17,6 +17,7 @@ import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.TemplateRepository; import com.ycwl.basic.integration.common.manager.ScenicConfigManager; +import com.ycwl.basic.utils.NotificationAuthUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -50,6 +51,8 @@ public class DownloadNotificationTasker { private CouponMapper couponMapper; @Autowired private ZtMessageProducerService ztMessageProducerService; + @Autowired + private NotificationAuthUtils notificationAuthUtils; @Scheduled(cron = "0 0 21 * * *") public void sendDownloadNotification() { @@ -75,16 +78,23 @@ public class DownloadNotificationTasker { log.info("模板消息为空"); return; } + + // 检查并消费通知授权 + if (!notificationAuthUtils.checkAndConsumeAuthorization(item.getMemberId(), templateId, item.getScenicId())) { + log.debug("用户[memberId={}]对模板[templateId={}]授权不足,跳过下载通知", item.getMemberId(), templateId); + return; + } + ScenicEntity scenic = scenicRepository.getScenic(item.getScenicId()); ScenicConfigManager configManager = scenicRepository.getScenicConfigManager(item.getScenicId()); String configTitle = configManager.getString("second_notification_title"); String configContent = configManager.getString("second_notification_content"); - + if (StringUtils.isBlank(configTitle) || StringUtils.isBlank(configContent)) { log.info("景区[{}]未配置第二次通知内容,跳过发送通知", scenic.getName()); return; } - + String title = configTitle.replace("【景区】", scenic.getName()); String page; if (configManager.getBoolean("grouping_enable", false)) { @@ -147,16 +157,23 @@ public class DownloadNotificationTasker { log.info("模板消息为空"); return; } + + // 检查并消费通知授权 + if (!notificationAuthUtils.checkAndConsumeAuthorization(item.getMemberId(), templateId, item.getScenicId())) { + log.debug("用户[memberId={}]对模板[templateId={}]授权不足,跳过过期提醒通知", item.getMemberId(), templateId); + return; + } + ScenicEntity scenic = scenicRepository.getScenic(item.getScenicId()); ScenicConfigManager configManager = scenicRepository.getScenicConfigManager(item.getScenicId()); String configTitle = configManager.getString("third_notification_title"); String configContent = configManager.getString("third_notification_content"); - + if (StringUtils.isBlank(configTitle) || StringUtils.isBlank(configContent)) { log.info("景区[{}]未配置第三次通知内容,跳过发送通知", scenic.getName()); return; } - + String title = configTitle.replace("【景区】", scenic.getName()); String page; if (configManager.getBoolean("grouping_enable", false)) { @@ -242,15 +259,22 @@ public class DownloadNotificationTasker { log.info("模板消息为空"); return; } + + // 检查并消费通知授权 + if (!notificationAuthUtils.checkAndConsumeAuthorization(item.getMemberId(), templateId, item.getScenicId())) { + log.debug("用户[memberId={}]对模板[templateId={}]授权不足,跳过额外下载通知", item.getMemberId(), templateId); + return; + } + ScenicConfigManager configManager = scenicRepository.getScenicConfigManager(scenicId); String configTitle = configManager.getString("second_notification_title"); String configContent = configManager.getString("second_notification_content"); - + if (StringUtils.isBlank(configTitle) || StringUtils.isBlank(configContent)) { log.info("景区[{}]未配置第一次通知内容,跳过发送通知", scenic.getName()); return; } - + String title = configTitle.replace("【景区】", scenic.getName()); String page; if (configManager.getBoolean("grouping_enable", false)) {