From 07a8e96750473fbdf676993191c41155ddf8146e Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期二, 01 七月 2025 15:55:20 +0800 Subject: [PATCH] 视频点赞实现 --- framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml | 27 ++++ framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java | 4 framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java | 4 framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java | 17 ++ buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java | 7 + framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java | 17 ++ framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java | 104 ++++++++++++++++- consumer/src/main/java/cn/lili/listener/VideoMessageListener.java | 8 + framework/src/main/java/cn/lili/cache/CachePrefix.java | 5 framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java | 5 framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java | 7 + framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java | 8 + framework/src/main/resources/mapper/lmk/VideoMapper.xml | 28 ++++ framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java | 12 ++ framework/src/main/java/cn/lili/rocketmq/tags/VideoTagsEnum.java | 1 framework/src/main/java/cn/lili/modules/lmk/domain/vo/SimpleMyThumbsUpVO.java | 24 ++++ framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java | 23 +++ framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java | 7 + framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java | 1 lmk-job/src/main/java/cn/lili/job/VideoJob.java | 15 ++ 20 files changed, 318 insertions(+), 6 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java index 450d331..c0dce59 100644 --- a/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java +++ b/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java @@ -2,6 +2,7 @@ import cn.lili.group.Update; import cn.lili.group.Add; +import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; import cn.lili.modules.lmk.domain.form.VideoFootPrintForm; import cn.lili.modules.lmk.domain.form.VideoHomePageInfoForm; import cn.lili.modules.lmk.domain.form.WxVideoForm; @@ -129,4 +130,10 @@ public Result wxDetail(@PathVariable("id") String id) { return videoService.wxDetail(id); } + + @PostMapping("/change/thumbs-up") + @ApiOperation(value = "鐐硅禐/鍙栨秷鐐硅禐瑙嗛", notes = "鐐硅禐/鍙栨秷鐐硅禐瑙嗛") + public Result changeThumbsUp(@RequestBody @Validated(Add.class) ThumbsUpRecordForm form) { + return videoService.changeThumbsUp(form); + } } diff --git a/consumer/src/main/java/cn/lili/listener/VideoMessageListener.java b/consumer/src/main/java/cn/lili/listener/VideoMessageListener.java index 1bedb96..e970292 100644 --- a/consumer/src/main/java/cn/lili/listener/VideoMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/VideoMessageListener.java @@ -53,6 +53,9 @@ case COLLECT: this.collect(msg); break; + case THUMBS_UP: + this.changeThumbsUp(msg); + break; case ES_RECREATE: this.recreateVideoIndex(); break; @@ -120,4 +123,9 @@ esService.deleteDocument(EsSuffix.VIDEO_INDEX_NAME, id); } + public void changeThumbsUp(String msg) { + ThumbsUpRecord thumbsUpRecord = JSON.parseObject(msg, ThumbsUpRecord.class); + videoService.mqChangeThumbsUp(thumbsUpRecord); + } + } diff --git a/framework/src/main/java/cn/lili/cache/CachePrefix.java b/framework/src/main/java/cn/lili/cache/CachePrefix.java index e3cb80b..9d8ec0b 100644 --- a/framework/src/main/java/cn/lili/cache/CachePrefix.java +++ b/framework/src/main/java/cn/lili/cache/CachePrefix.java @@ -528,6 +528,11 @@ */ VIDEO_COLLECT_NUM, + /** + * 瑙嗛鐐硅禐鏁伴噺 + */ + VIDEO_THUMBS_UP_NUM, + /** * 鎵爜鐧诲綍 diff --git a/framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java b/framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java index 2c4a4ba..edc1aa4 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java +++ b/framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java @@ -25,6 +25,11 @@ */ public static final Long COLLECT_NUM_EXPIRE = 15l; + /** + * 瑙嗛鐐硅禐鏁拌繃鏈熸椂闂� + */ + public static final Long VIDEO_THUMBS_UP_EXPIRE = 15l; + /** * 杩囨湡鏃堕棿鍗曚綅 diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java index 35ca6a7..d2e7e15 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java @@ -85,10 +85,18 @@ /** 璇勮鏁� */ private Integer commentNum; + @TableField("thumbs_up_num") + /** 鐐硅禐鏁� */ + private Integer thumbsUpNum; + @TableField("collect_num_job") /** 鏄惁闇�瑕佸畾鏃朵换鍔$粺璁℃敹钘忔暟 */ private Boolean collectNumJob; + @TableField("thumbs_up_num_job") + /** 鏄惁闇�瑕佸畾鏃朵换鍔$粺璁$偣璧炴暟 */ + private Boolean thumbsUpNumJob; + @TableField("comment_num_job") /** 鏄惁闇�瑕佸畾鏃朵换鍔$粺璁¤瘎璁烘暟 */ private Boolean commentNumJob; diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java index 7511b4d..bf57ce5 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/KitchenVideoVO.java @@ -97,6 +97,10 @@ @ApiModelProperty("璇勮鏁�") private Integer commentNum; + /** 鐐硅禐鏁� */ + @ApiModelProperty("鐐硅禐鏁�") + private Integer thumbsUpNum; + /** 鏉冮噸 */ @ApiModelProperty("鏉冮噸") private double weight; diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/SimpleMyThumbsUpVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/SimpleMyThumbsUpVO.java new file mode 100644 index 0000000..7d43ba7 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/SimpleMyThumbsUpVO.java @@ -0,0 +1,24 @@ +package cn.lili.modules.lmk.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 鎴戠殑鐐硅禐灞曠ず + * + * @author xp + * @since 2025-05-22 + */ +@Data +@ApiModel(value = "鎴戠殑鐐硅禐鍝嶅簲鏁版嵁", description = "鎴戠殑鐐硅禐鍝嶅簲鏁版嵁") +public class SimpleMyThumbsUpVO { + + private String id; + + /** 鐐硅禐瀵瑰簲鐨刬d锛岃棰慽d銆佽瘎璁篿d锛屾牴鎹偣璧炵被鍨嬪畾 */ + @ApiModelProperty("鐐硅禐瀵瑰簲鐨刬d锛岃棰慽d銆佽瘎璁篿d锛屾牴鎹偣璧炵被鍨嬪畾") + private String refId; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java index 6f80172..bbcc48f 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java @@ -89,6 +89,10 @@ @ApiModelProperty("璇勮鏁�") private Integer commentNum; + /** 鐐硅禐鏁� */ + @ApiModelProperty("鐐硅禐鏁�") + private Integer thumbsUpNum; + /** 鏉冮噸 */ @ApiModelProperty("鏉冮噸") private double weight; diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java index 9041166..16ca447 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java @@ -81,6 +81,9 @@ @ApiModelProperty("褰撳墠鐢ㄦ埛鏄惁鏀惰棌浜嗚瑙嗛") private Boolean collected = Boolean.FALSE; + @ApiModelProperty("褰撳墠鐢ㄦ埛鏄惁鐐硅禐浜嗚瑙嗛") + private Boolean thumbsUp = Boolean.FALSE; + /** 鏀惰棌鏁� */ @ApiModelProperty("鏀惰棌鏁�") private Integer collectNum; @@ -89,6 +92,10 @@ @ApiModelProperty("璇勮鏁�") private Integer commentNum; + /** 鐐硅禐鏁� */ + @ApiModelProperty("鐐硅禐鏁�") + private Integer thumbsUpNum; + /** 瑙嗛鎷ユ湁鐨勬搷浣� */ @ApiModelProperty("瑙嗛鏀寔鐨勬搷浣�") private List<VideoOption> options; diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java index f8374f2..48303e6 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java @@ -13,6 +13,7 @@ public enum ThumbsUpTypeEnum { VIDEO_COMMENT("video_comment", "瑙嗛璇勮"), + VIDEO("video", "瑙嗛"), ; private final String value; diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java index 013bc58..c1040cc 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java @@ -2,6 +2,7 @@ import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; +import cn.lili.modules.lmk.domain.vo.SimpleMyThumbsUpVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import cn.lili.modules.lmk.domain.vo.ThumbsUpRecordVO; @@ -38,4 +39,20 @@ * @return */ List<CollectTypeNumVO> countNumGroupByComment(); + + /** + * 缁熻瑙嗛鐐硅禐鏁伴噺 + * + * @return + */ + List<CollectTypeNumVO> countNumGroupByVideo(); + + /** + * 鏍规嵁瑙嗛id鏌ヨ鎴戠殑鐐硅禐 + * + * @param videoIds + * @param userId + * @return + */ + List<SimpleMyThumbsUpVO> getThumbssByVideoIds(@Param("videoIds") List<String> videoIds, @Param("userId") String userId); } diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java index 560e878..31c2ba2 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java @@ -67,6 +67,13 @@ void updateCommentNumBatch(@Param("list") List<CollectTypeNumVO> numList); /** + * 鎵归噺鏇存柊瑙嗛鐐硅禐鏁� + * + * @param numList + */ + void updateThumbsUpNumBatch(@Param("list") List<CollectTypeNumVO> numList); + + /** * 瑙嗛涓婚〉浣滆�呬俊鎭� * * @param authorId diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java index 24a2102..05864c1 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java @@ -5,8 +5,10 @@ import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm; import cn.lili.modules.lmk.domain.query.ThumbsUpRecordQuery; import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; +import cn.lili.modules.lmk.domain.vo.SimpleMyThumbsUpVO; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; import java.util.List; /** @@ -57,4 +59,19 @@ * @return */ List<CollectTypeNumVO> countNumGroupByComment(); + + /** + * 缁熻瑙嗛鐨勭偣璧炴暟 + * + * @return + */ + List<CollectTypeNumVO> countNumGroupByVideo(); + + /** + * 鏍规嵁瑙嗛id鏌ヨ鎴戠殑鐐硅禐 + * + * @param videoIds + * @return + */ + List<SimpleMyThumbsUpVO> getThumbssByVideoIds(List<String> videoIds); } diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java b/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java index 16f3932..054521f 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java @@ -2,6 +2,7 @@ import cn.lili.group.Add; import cn.lili.modules.lmk.domain.entity.MyCollect; +import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; import cn.lili.modules.lmk.domain.entity.Video; import cn.lili.modules.lmk.domain.form.*; import cn.lili.modules.lmk.domain.query.*; @@ -258,4 +259,26 @@ * @return */ Result recreateEsIndex(); + + /** + * 淇敼瑙嗛鐐硅禐鐘舵�� + * + * @param form + * @return + */ + Result changeThumbsUp(ThumbsUpRecordForm form); + + /** + * mq淇敼瑙嗛鐐硅禐鐘舵�� + * + * @param thumbsUpRecord + */ + void mqChangeThumbsUp(ThumbsUpRecord thumbsUpRecord); + + /** + * 鎵归噺鏇存柊瑙嗛鐐硅禐鏁伴噺 + * + * @param numList + */ + void updateThumbsUpNumBatch(List<CollectTypeNumVO> numList); } diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java index 44570b1..e3ec3f0 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java @@ -1,6 +1,8 @@ package cn.lili.modules.lmk.service.impl; +import cn.lili.common.security.context.UserContext; import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO; +import cn.lili.modules.lmk.domain.vo.SimpleMyThumbsUpVO; import com.baomidou.mybatisplus.core.metadata.IPage; import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord; import cn.lili.modules.lmk.mapper .ThumbsUpRecordMapper; @@ -94,4 +96,14 @@ public List<CollectTypeNumVO> countNumGroupByComment() { return baseMapper.countNumGroupByComment(); } + + @Override + public List<CollectTypeNumVO> countNumGroupByVideo() { + return baseMapper.countNumGroupByVideo(); + } + + @Override + public List<SimpleMyThumbsUpVO> getThumbssByVideoIds(List<String> videoIds) { + return baseMapper.getThumbssByVideoIds(videoIds, UserContext.getCurrentUserId()); + } } diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java index 3deed2b..e26fe9e 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java @@ -73,6 +73,7 @@ private final RocketmqCustomProperties rocketmqCustomProperties; private final RocketMQTemplate rocketMQTemplate; + private final ThumbsUpRecordService thumbsUpRecordService; /** @@ -471,16 +472,21 @@ Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(videoIds) .stream() .collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId)); - Map<String, List<SimpleMyCollectVO>> collectMap =myCollectService.getCollectsByVideoIds(videoIds) + Map<String, List<SimpleMyCollectVO>> collectMap = myCollectService.getCollectsByVideoIds(videoIds) .stream() .collect(Collectors.groupingBy(SimpleMyCollectVO::getRefId)); + Map<String, List<SimpleMyThumbsUpVO>> thumbsUpMap = thumbsUpRecordService.getThumbssByVideoIds(videoIds) + .stream() + .collect(Collectors.groupingBy(SimpleMyThumbsUpVO::getRefId)); List<String> subscribes = mySubscribeService.getSubscribesByUserId(UserContext.getCurrentUserId()); - // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌銆佷綔鑰呮槸鍚﹀叧娉� + // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌銆佹槸鍚︾偣璧炪�佷綔鑰呮槸鍚﹀叧娉� page.getRecords().forEach(v -> { v.setTagList(tagMap.get(v.getId())); v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId()))); + v.setThumbsUp(CollectionUtils.isNotEmpty(thumbsUpMap.get(v.getId()))); v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum())); v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum())); + v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum())); if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) { v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey())); v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey())); @@ -532,6 +538,23 @@ return (Integer) redisNum; } + /** + * 浠巖edis涓幏鍙栫偣璧炴暟閲忥紝濡傛灉redis涓病鏈夊垯灏唌ysql涓殑鏁伴噺鍐欏叆鍒皉edis + * + * @param videoId + * @param mysqlNum + * @return + */ + private Integer getThumbsUpNum(String videoId, Integer mysqlNum) { + Object redisNum = cache.get(CachePrefix.VIDEO_THUMBS_UP_NUM.getPrefixWithId(videoId)); + if (Objects.isNull(redisNum)) { + // redis涓病鏈夊氨鎶婃暟鎹簱鐨勫啓鍒皉edis涓� + cache.put(CachePrefix.VIDEO_THUMBS_UP_NUM.getPrefixWithId(videoId), mysqlNum, RedisKeyExpireConstant.VIDEO_THUMBS_UP_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY); + return mysqlNum; + } + return (Integer) redisNum; + } + @Override public Result healthRecommendVideo(WxHealthVideoQuery query) { IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class); @@ -572,8 +595,8 @@ @Override @Transactional(rollbackFor = Exception.class) public void updateCollectNumBatch(List<CollectTypeNumVO> numList) { - // 鎸�500鏉℃暟鎹繘琛屾媶鍒� - List<List<CollectTypeNumVO>> chunks = ListUtils.partition(numList, 500); + // 鎸�200鏉℃暟鎹繘琛屾媶鍒� + List<List<CollectTypeNumVO>> chunks = ListUtils.partition(numList, 200); for (List<CollectTypeNumVO> chunk : chunks) { baseMapper.updateCollectNumBatch(chunk); new LambdaUpdateChainWrapper<>(baseMapper) @@ -586,8 +609,8 @@ @Override @Transactional(rollbackFor = Exception.class) public void updateCommentNumBatch(List<CollectTypeNumVO> numList) { - // 鎸�500鏉℃暟鎹繘琛屾媶鍒� - List<List<CollectTypeNumVO>> chunks = ListUtils.partition(numList, 500); + // 鎸�200鏉℃暟鎹繘琛屾媶鍒� + List<List<CollectTypeNumVO>> chunks = ListUtils.partition(numList, 200); for (List<CollectTypeNumVO> chunk : chunks) { baseMapper.updateCommentNumBatch(chunk); new LambdaUpdateChainWrapper<>(baseMapper) @@ -903,4 +926,73 @@ rocketMQTemplate.asyncSend(destination, "1", RocketmqSendCallbackBuilder.commonCallback()); return Result.ok("宸叉垚鍔熷彂璧锋瀯寤鸿姹傦紝绋嶄綔绛夊緟鍚庝究浼氳嚜鍔ㄥ畬鎴�"); } + + + @Override + public Result changeThumbsUp(ThumbsUpRecordForm form) { + // mq寮傛澶勭悊 + ThumbsUpRecord thumbsUp = new ThumbsUpRecord(); + thumbsUp.setRefId(form.getRefId()); + thumbsUp.setThumbsUpType(ThumbsUpTypeEnum.VIDEO.getValue()); + thumbsUp.setUserId(UserContext.getCurrentUserId()); + String destination = rocketmqCustomProperties.getVideoTopic() + ":" + VideoTagsEnum.THUMBS_UP.name(); + rocketMQTemplate.asyncSend(destination, JSON.toJSONString(thumbsUp), RocketmqSendCallbackBuilder.commonCallback()); + return Result.ok(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void mqChangeThumbsUp(ThumbsUpRecord thumbsUpRecord) { + ThumbsUpRecord exists = new LambdaQueryChainWrapper<>(thumbsUpRecordService.getBaseMapper()) + .eq(ThumbsUpRecord::getUserId, thumbsUpRecord.getUserId()) + .eq(ThumbsUpRecord::getRefId, thumbsUpRecord.getRefId()) + .eq(ThumbsUpRecord::getThumbsUpType, thumbsUpRecord.getThumbsUpType()) + .one(); + boolean add = false; + if (Objects.nonNull(exists)) { + // 鍙栨秷鐐硅禐 + thumbsUpRecordService.removeById(exists.getId()); + } else { + // 鐐硅禐 + thumbsUpRecordService.save(thumbsUpRecord); + add = true; + } + // 澶勭悊缂撳瓨 + Video video = baseMapper.selectById(thumbsUpRecord.getRefId()); + if (cache.exist(CachePrefix.VIDEO_THUMBS_UP_NUM.getPrefixWithId(thumbsUpRecord.getRefId()))) { + if (add) { + cache.incr(CachePrefix.VIDEO_THUMBS_UP_NUM.getPrefixWithId(thumbsUpRecord.getRefId())); + } else { + cache.decr(CachePrefix.VIDEO_THUMBS_UP_NUM.getPrefixWithId(thumbsUpRecord.getRefId())); + } + } else { + if (Objects.nonNull(video)) { + cache.put(CachePrefix.VIDEO_THUMBS_UP_NUM.getPrefixWithId(video.getId()), + video.getThumbsUpNum() + (add ? 1 : -1), + RedisKeyExpireConstant.VIDEO_THUMBS_UP_EXPIRE, + RedisKeyExpireConstant.EXPIRE_DAY); + } + } + // 鏍囪瘑璇ヨ棰戦渶瑕侀�氳繃瀹氭椂浠诲姟缁熻鏀惰棌鏁� + if (Objects.nonNull(video) && ! video.getCollectNumJob()) { + new LambdaUpdateChainWrapper<>(baseMapper) + .eq(Video::getId, video.getId()) + .set(Video::getThumbsUpNumJob, Boolean.TRUE) + .update(); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateThumbsUpNumBatch(List<CollectTypeNumVO> numList) { + // 鎸�200鏉℃暟鎹繘琛屾媶鍒� + List<List<CollectTypeNumVO>> chunks = ListUtils.partition(numList, 200); + for (List<CollectTypeNumVO> chunk : chunks) { + baseMapper.updateThumbsUpNumBatch(chunk); + new LambdaUpdateChainWrapper<>(baseMapper) + .in(Video::getId, chunk.stream().map(CollectTypeNumVO::getId).collect(Collectors.toList())) + .set(Video::getThumbsUpNumJob, Boolean.FALSE) + .update(); + } + } } diff --git a/framework/src/main/java/cn/lili/rocketmq/tags/VideoTagsEnum.java b/framework/src/main/java/cn/lili/rocketmq/tags/VideoTagsEnum.java index 01738ca..4b8ab2a 100644 --- a/framework/src/main/java/cn/lili/rocketmq/tags/VideoTagsEnum.java +++ b/framework/src/main/java/cn/lili/rocketmq/tags/VideoTagsEnum.java @@ -12,6 +12,7 @@ * 鏀惰棌 */ COLLECT("鏀惰棌"), + THUMBS_UP("鐐硅禐"), ES_RECREATE("閲嶅缓瑙嗛绱㈠紩"), ES_DOC_ADD_OR_UPDATE("鏂板鎴栧叏閲忎慨鏀硅棰�"), ES_DOC_UPDATE_SOME_FIELD("淇敼瑙嗛鏌愪簺瀛楁"), diff --git a/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml b/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml index a0a28e7..48008b4 100644 --- a/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml +++ b/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml @@ -56,4 +56,31 @@ LTUR.ref_id </select> + <select id="countNumGroupByVideo" resultType="cn.lili.modules.lmk.domain.vo.CollectTypeNumVO"> + SELECT + LV.id as id, + count(LTUR.ref_id) as countNum + FROM + lmk_video LV + LEFT JOIN lmk_thumbs_up_record LTUR ON LTUR.ref_id = LV.id AND LTUR.thumbs_up_type = 'video' AND LTUR.delete_flag = 0 + WHERE + LV.thumbs_up_num_job = 1 + AND LV.delete_flag = 0 + GROUP BY + LTUR.ref_id + </select> + + <select id="getThumbssByVideoIds" resultType="cn.lili.modules.lmk.domain.vo.SimpleMyThumbsUpVO"> + SELECT + id, + ref_id as refId + FROM + lmk_thumbs_up_record + WHERE + user_id = #{userId} + AND delete_flag = 0 + AND thumbs_up_type = 'video' + AND ref_id IN <foreach collection="videoIds" open="(" item="videoId" close=")" separator=",">#{videoId}</foreach> + </select> + </mapper> diff --git a/framework/src/main/resources/mapper/lmk/VideoMapper.xml b/framework/src/main/resources/mapper/lmk/VideoMapper.xml index b220b13..03e49db 100644 --- a/framework/src/main/resources/mapper/lmk/VideoMapper.xml +++ b/framework/src/main/resources/mapper/lmk/VideoMapper.xml @@ -17,6 +17,7 @@ <result column="play_num" property="playNum" /> <result column="collect_num" property="collectNum" /> <result column="comment_num" property="commentNum" /> + <result column="thumbs_up_num" property="thumbsUpNum" /> <result column="weight" property="weight" /> <result column="audit_pass_time" property="auditPassTime" /> <result column="update_time" property="updateTime" /> @@ -70,6 +71,7 @@ <result column="play_num" property="playNum" /> <result column="collect_num" property="collectNum" /> <result column="comment_num" property="commentNum" /> + <result column="thumbs_up_num" property="thumbsUpNum" /> <result column="weight" property="weight" /> <result column="audit_pass_time" property="auditPassTime" /> <result column="update_time" property="updateTime" /> @@ -91,6 +93,7 @@ <result column="title" property="title" /> <result column="collect_num" property="collectNum" /> <result column="comment_num" property="commentNum" /> + <result column="thumbs_up_num" property="thumbsUpNum" /> <result column="status" property="status" /> <result column="video_content_type" property="videoContentType" /> <result column="video_type" property="videoType" /> @@ -114,6 +117,7 @@ LV.play_num, LV.collect_num, LV.comment_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -145,6 +149,7 @@ LV.play_num, LV.collect_num, LV.comment_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -176,6 +181,7 @@ LV.play_num, LV.collect_num, LV.comment_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -218,6 +224,7 @@ LV.play_num, LV.comment_num, LV.collect_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -251,6 +258,7 @@ LV.play_num, LV.comment_num, LV.collect_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -283,6 +291,7 @@ LV.play_num, LV.comment_num, LV.collect_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -326,6 +335,20 @@ WHEN #{video.id} THEN #{video.countNum} </foreach> ELSE comment_num + END + WHERE id IN + <foreach collection="list" item="video" open="(" separator="," close=")"> + #{video.id} + </foreach> + </update> + + <update id="updateThumbsUpNumBatch"> + UPDATE lmk_video + SET thumbs_up_num = CASE id + <foreach collection="list" item="video"> + WHEN #{video.id} THEN #{video.countNum} + </foreach> + ELSE thumbs_up_num END WHERE id IN <foreach collection="list" item="video" open="(" separator="," close=")"> @@ -378,6 +401,7 @@ LV.play_num, LV.comment_num, LV.collect_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -416,6 +440,7 @@ LV.play_num, LV.comment_num, LV.collect_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -479,6 +504,7 @@ LV.play_num, LV.collect_num, LV.comment_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -520,6 +546,7 @@ LV.play_num, LV.collect_num, LV.comment_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, @@ -591,6 +618,7 @@ LV.play_num, LV.comment_num, LV.collect_num, + LV.thumbs_up_num, LV.weight, LV.audit_pass_time, LV.update_time, diff --git a/lmk-job/src/main/java/cn/lili/job/VideoJob.java b/lmk-job/src/main/java/cn/lili/job/VideoJob.java index 15035f1..e2df6d1 100644 --- a/lmk-job/src/main/java/cn/lili/job/VideoJob.java +++ b/lmk-job/src/main/java/cn/lili/job/VideoJob.java @@ -72,4 +72,19 @@ } } + /** + * 瑙嗛鐐硅禐鏁扮粺璁� + * + * @throws Exception + */ + @XxlJob("videoThumbsUpNumJob") + public void videoThumbsUpNumJob() throws Exception { + XxlJobHelper.log("寮�濮嬫墽琛岋細瑙嗛鐐硅禐鏁扮粺璁�"); + + List<CollectTypeNumVO> numList = thumbsUpRecordService.countNumGroupByVideo(); + if (CollectionUtils.isNotEmpty(numList)) { + videoService.updateThumbsUpNumBatch(numList); + } + } + } -- Gitblit v1.8.0