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 ce47643f..56cce4c6 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 @@ -81,7 +81,9 @@ import java.util.stream.Collectors; @Service public class TaskTaskServiceImpl implements TaskService { private static final String WORKER_SELF_HOSTED_CACHE_KEY = "worker_self_hosted_scenic:%s"; + private static final String VIDEO_NOTIFICATION_CACHE_KEY = "video_notification_member:%s"; private static final int CACHE_EXPIRE_MINUTES = 3; + private static final int NOTIFICATION_CACHE_EXPIRE_MINUTES = 2; @Autowired private TaskMapper taskMapper; @Autowired @@ -621,6 +623,15 @@ public class TaskTaskServiceImpl implements TaskService { @Override public void sendVideoGeneratedServiceNotification(Long taskId, Long memberId) { + // 检查Redis中该memberId是否在3分钟内已发送过通知 + String notificationCacheKey = String.format(VIDEO_NOTIFICATION_CACHE_KEY, memberId); + String cachedValue = redisTemplate.opsForValue().get(notificationCacheKey); + + if (cachedValue != null) { + log.info("memberId:{} 在3分钟内已发送过通知,跳过本次发送", memberId); + return; + } + MemberVideoEntity item = videoMapper.queryRelationByMemberTask(memberId, taskId); MemberRespVO member = memberMapper.getById(memberId); String openId = member.getOpenId(); @@ -673,6 +684,10 @@ public class TaskTaskServiceImpl implements TaskService { msg.setSendReason("视频生成通知"); msg.setSendBiz("视频生成"); ztMessageProducerService.send(msg); + + // 发送成功后,设置Redis缓存,2分钟过期 + redisTemplate.opsForValue().set(notificationCacheKey, String.valueOf(System.currentTimeMillis()), NOTIFICATION_CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES); + log.debug("memberId:{} 通知发送成功,已设置{}分钟缓存", memberId, NOTIFICATION_CACHE_EXPIRE_MINUTES); } }