From 1cdb060a8aa59b0979f7609db1781805528e76e7 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 25 六月 2025 18:25:42 +0800
Subject: [PATCH] 视频评论数、收藏数通过mq、redis实现

---
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java |   44 +++++++++++++++++++++++---------------------
 1 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java
index 6d4047b..ca4e7af 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java
@@ -11,6 +11,7 @@
 import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm;
 import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
 import cn.lili.modules.lmk.enums.general.VideoCommentStatusEnum;
+import cn.lili.modules.lmk.event.event.VideoCommentNumCacheEvent;
 import cn.lili.modules.lmk.service.ThumbsUpRecordService;
 import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
 import cn.lili.rocketmq.tags.CommentTagsEnum;
@@ -32,6 +33,7 @@
 import org.apache.rocketmq.client.producer.DefaultMQProducer;
 import org.apache.rocketmq.common.MixAll;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
 import cn.lili.utils.PageUtil;
@@ -59,11 +61,7 @@
     private final ThumbsUpRecordService thumbsUpRecordService;
     private final RocketMQTemplate rocketMQTemplate;
     private final RocketmqCustomProperties rocketmqCustomProperties;
-
-    /**
-     * 璇勮鐐硅禐鏁扮殑杩囨湡鏃堕棿
-     */
-    public final static long EXPIRE_TIME = 15l;
+    private final ApplicationEventPublisher eventPublisher;
 
     /**
      * 娣诲姞
@@ -92,7 +90,9 @@
         entity.setUserAvatar(currentUser.getFace());
         baseMapper.insert(entity);
         // 鍒濆鍖杛edis涓瘎璁虹殑鐐硅禐鏁伴噺
-        cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(entity.getId()), 0, EXPIRE_TIME, TimeUnit.DAYS);
+        cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(entity.getId()), 0, RedisKeyExpireConstant.COMMENT_LIKE_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY);
+        // 澶勭悊瑙嗛璇勮鏁�
+        eventPublisher.publishEvent(new VideoCommentNumCacheEvent(this, entity.getVideoId()));
         return Result.ok("娣诲姞鎴愬姛").data(this.detail(entity.getId()).get("data"));
     }
 
@@ -198,7 +198,7 @@
     public void mqThumbsUp(ThumbsUpRecord record) {
         boolean exists = new LambdaQueryChainWrapper<>(thumbsUpRecordService.getBaseMapper())
                 .eq(ThumbsUpRecord::getRefId, record.getRefId())
-                .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId())
+                .eq(ThumbsUpRecord::getUserId, record.getUserId())
                 .exists();
         if (exists) {
             return;
@@ -209,7 +209,7 @@
             cache.incr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()));
         } else {
             if (Objects.nonNull(comment)) {
-                cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() + 1, RedisKeyExpireConstant.COMMENT_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY);
+                cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() + 1, RedisKeyExpireConstant.COMMENT_LIKE_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY);
             }
         }
         // 鏍囪瘑璇ヨ瘎璁洪渶瑕侀�氳繃瀹氭椂浠诲姟缁熻鐐硅禐鏁�
@@ -223,27 +223,29 @@
 
     @Override
     public Result cancelThumbsUp(ThumbsUpRecordForm form) {
+        ThumbsUpRecord record = ThumbsUpRecordForm.getEntityByForm(form, null);
+        record.setUserId(UserContext.getCurrentUserId());
         // 璧癿q寮傛澶勭悊
         String destination = rocketmqCustomProperties.getCommentTopic() + ":" + CommentTagsEnum.CANCEL_THUMBS_UP.name();
-        rocketMQTemplate.asyncSend(destination, JSON.toJSONString(form), RocketmqSendCallbackBuilder.commonCallback());
+        rocketMQTemplate.asyncSend(destination, JSON.toJSONString(record), RocketmqSendCallbackBuilder.commonCallback());
         return Result.ok();
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void mqCancelThumbsUp(ThumbsUpRecordForm form) {
+    public void mqCancelThumbsUp(ThumbsUpRecord record) {
         new LambdaUpdateChainWrapper<>(thumbsUpRecordService.getBaseMapper())
-                .eq(ThumbsUpRecord::getRefId, form.getRefId())
-                .eq(ThumbsUpRecord::getThumbsUpType, form.getThumbsUpType())
-                .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId())
+                .eq(ThumbsUpRecord::getRefId, record.getRefId())
+                .eq(ThumbsUpRecord::getThumbsUpType, record.getThumbsUpType())
+                .eq(ThumbsUpRecord::getUserId, record.getUserId())
                 .remove();
         // redis鏁伴噺鍑忎竴
-        VideoComment comment = this.getById(form.getRefId());
-        if (cache.exist(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(form.getRefId()))) {
-            cache.decr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(form.getRefId()));
+        VideoComment comment = this.getById(record.getRefId());
+        if (cache.exist(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()))) {
+            cache.decr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()));
         } else {
             if (Objects.nonNull(comment)) {
-                cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() - 1, RedisKeyExpireConstant.COMMENT_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY);
+                cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() - 1, RedisKeyExpireConstant.COMMENT_LIKE_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY);
             }
         }
         // 鏍囪瘑璇ヨ瘎璁洪渶瑕侀�氳繃瀹氭椂浠诲姟缁熻鐐硅禐鏁�
@@ -256,20 +258,20 @@
     }
 
     /**
-     * 浠巖edis涓幏鍙栬瘎璁烘暟閲忥紝濡傛灉redis涓病鏈夊垯灏唌ysql涓殑鏁伴噺鍐欏叆鍒皉edis
+     * 浠巖edis涓幏鍙栬瘎璁虹偣璧炴暟閲忥紝濡傛灉redis涓病鏈夊垯灏唌ysql涓殑鏁伴噺鍐欏叆鍒皉edis
      *
      * @param commentId
      * @param mysqlNum
      * @return
      */
-    private long getCommentThumbsUpNum(String commentId, long mysqlNum) {
+    private Integer getCommentThumbsUpNum(String commentId, Integer mysqlNum) {
         Object redisNum = cache.get(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(commentId));
         if (Objects.isNull(redisNum)) {
             // redis涓病鏈夊氨鎶婃暟鎹簱鐨勫啓鍒皉edis涓�
-            cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(commentId), mysqlNum, EXPIRE_TIME, TimeUnit.DAYS);
+            cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(commentId), mysqlNum, RedisKeyExpireConstant.COMMENT_LIKE_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY);
             return mysqlNum;
         }
-        return Long.valueOf((Integer) redisNum);
+        return (Integer) redisNum;
     }
 
     @Override

--
Gitblit v1.8.0