xiangpei
5 天以前 07a8e96750473fbdf676993191c41155ddf8146e
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;
    }
    /**
     * 从redis中获取点赞数量,如果redis中没有则将mysql中的数量写入到redis
     *
     * @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中没有就把数据库的写到redis中
            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();
        }
    }
}