Forráskód Böngészése

修复达人视频

xw 1 napja
szülő
commit
2cdacc636c

+ 1 - 1
fs-service/src/main/java/com/fs/course/mapper/FsUserVideoFavoriteMapper.java

@@ -76,7 +76,7 @@ public interface FsUserVideoFavoriteMapper
 
 
     @Select("<script>" +
-            "select video_id, ifnull(count(1), 0) > 0 as favorited " +
+            "select video_id, ifnull(count(1), 0) > 0 as favorite " +
             "from fs_user_video_favorite " +
             "where video_id in " +
             "<foreach item='videoId' collection='videoIds' open='(' separator=',' close=')'>" +

+ 11 - 24
fs-service/src/main/java/com/fs/course/service/impl/FsUserVideoFavoriteServiceImpl.java

@@ -1,14 +1,11 @@
 package com.fs.course.service.impl;
 
 import java.util.List;
-import java.util.concurrent.TimeUnit;
 
 import com.fs.common.core.domain.R;
-import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.DateUtils;
 import lombok.Synchronized;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import com.fs.course.mapper.FsUserVideoFavoriteMapper;
 import com.fs.course.domain.FsUserVideoFavorite;
@@ -26,8 +23,6 @@ public class FsUserVideoFavoriteServiceImpl implements IFsUserVideoFavoriteServi
 {
     @Autowired
     private FsUserVideoFavoriteMapper fsUserVideoFavoriteMapper;
-    @Autowired(required=false)
-    private RedisTemplate<String, Boolean> redisTemplate;
 
     /**
      * 查询课堂视频收藏
@@ -102,38 +97,30 @@ public class FsUserVideoFavoriteServiceImpl implements IFsUserVideoFavoriteServi
     {
         return fsUserVideoFavoriteMapper.deleteFsUserVideoFavoriteByFavoriteId(favoriteId);
     }
-    private static final String FAVORITE_KEY_PREFIX = "favorite:video:";
-    private static final String NO_FAVORITE_KEY_PREFIX = "nofavorite:video:";
     @Override
     public R checkFavorite(Long videoId, long userId) {
-        String key = FAVORITE_KEY_PREFIX + videoId + ":user:" + userId;
-        Boolean hasFavorite = redisTemplate.opsForValue().get(key);
-        if (hasFavorite != null && hasFavorite) {
-            return R.ok().put("isFavorite",1);
-        }else {
-            return fsUserVideoFavoriteMapper.checkFavorite(videoId, userId) > 0 ? R.ok().put("isFavorite", 1) : R.error().put("isFavorite", 0);
-        }
+        return fsUserVideoFavoriteMapper.checkFavorite(videoId, userId) > 0
+                ? R.ok().put("isFavorite", 1)
+                : R.error().put("isFavorite", 0);
     }
 
     @Override
     @Transactional
     @Synchronized
     public void favoriteVideo(Long videoId, long userId) {
-        String unlikeKey = NO_FAVORITE_KEY_PREFIX + videoId + ":user:" + userId;
-        redisTemplate.delete(unlikeKey);
-        String key = FAVORITE_KEY_PREFIX + videoId + ":user:" + userId;
-        redisTemplate.opsForValue().set(key, true, 1, TimeUnit.DAYS);
+        if (fsUserVideoFavoriteMapper.checkFavorite(videoId, userId) == 0) {
+            FsUserVideoFavorite favorite = new FsUserVideoFavorite();
+            favorite.setVideoId(videoId);
+            favorite.setUserId(userId);
+            favorite.setCreateTime(DateUtils.getNowDate());
+            fsUserVideoFavoriteMapper.insertFsUserVideoFavorite(favorite);
+        }
     }
 
     @Override
     @Transactional
     @Synchronized
     public void deleteFavorite(Long videoId, long userId) {
-        String key = FAVORITE_KEY_PREFIX + videoId + ":user:" + userId;
-        redisTemplate.delete(key);
-
-        // 将取消点赞记录写入Redis
-        String unlikeKey = NO_FAVORITE_KEY_PREFIX + videoId + ":user:" + userId;
-        redisTemplate.opsForValue().set(unlikeKey, true, 1, TimeUnit.DAYS);
+        fsUserVideoFavoriteMapper.deleteFavorite(videoId, userId);
     }
 }

+ 11 - 26
fs-service/src/main/java/com/fs/course/service/impl/FsUserVideoLikeServiceImpl.java

@@ -1,14 +1,11 @@
 package com.fs.course.service.impl;
 
 import java.util.List;
-import java.util.concurrent.TimeUnit;
 
 import com.fs.common.core.domain.R;
-import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.DateUtils;
 import lombok.Synchronized;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import com.fs.course.mapper.FsUserVideoLikeMapper;
 import com.fs.course.domain.FsUserVideoLike;
@@ -27,9 +24,6 @@ public class FsUserVideoLikeServiceImpl implements IFsUserVideoLikeService
     @Autowired
     private FsUserVideoLikeMapper fsUserVideoLikeMapper;
 
-    @Autowired
-    private RedisTemplate<String, Boolean> redisTemplate;
-
     /**
      * 查询课堂视频点赞
      *
@@ -104,39 +98,30 @@ public class FsUserVideoLikeServiceImpl implements IFsUserVideoLikeService
         return fsUserVideoLikeMapper.deleteFsUserVideoLikeByLikeId(likeId);
     }
 
-    private static final String LIKE_KEY_PREFIX = "like:video:";
-    private static final String UNLIKE_KEY_PREFIX = "unlike:video:";
     @Override
     public R checkLike(Long videoId, long userId) {
-        String key = LIKE_KEY_PREFIX + videoId + ":user:" + userId;
-        Boolean hasLiked = redisTemplate.opsForValue().get(key);
-        if (hasLiked != null && hasLiked) {
-            return R.ok().put("isLike",1);
-        }else {
-            return fsUserVideoLikeMapper.checkLike(videoId,userId)>0?R.ok().put("isLike",1):R.error().put("isLike",0);
-        }
+        return fsUserVideoLikeMapper.checkLike(videoId, userId) > 0
+                ? R.ok().put("isLike", 1)
+                : R.error().put("isLike", 0);
     }
 
     @Override
     @Transactional
     @Synchronized
     public void likeVideo(Long videoId, long userId) {
-        String unlikeKey = UNLIKE_KEY_PREFIX + videoId + ":user:" + userId;
-        redisTemplate.delete(unlikeKey);
-        String key = LIKE_KEY_PREFIX + videoId + ":user:" + userId;
-        redisTemplate.opsForValue().set(key, true, 1, TimeUnit.DAYS);
+        if (fsUserVideoLikeMapper.checkLike(videoId, userId) == 0) {
+            FsUserVideoLike like = new FsUserVideoLike();
+            like.setVideoId(videoId);
+            like.setUserId(userId);
+            like.setCreateTime(DateUtils.getNowDate());
+            fsUserVideoLikeMapper.insertFsUserVideoLike(like);
+        }
     }
 
     @Override
     @Transactional
     @Synchronized
     public void unlikeVideo(Long videoId, long userId) {
-
-        String key = LIKE_KEY_PREFIX + videoId + ":user:" + userId;
-        redisTemplate.delete(key);
-
-        // 将取消点赞记录写入Redis
-        String unlikeKey = UNLIKE_KEY_PREFIX + videoId + ":user:" + userId;
-        redisTemplate.opsForValue().set(unlikeKey, true, 1, TimeUnit.DAYS);
+        fsUserVideoLikeMapper.deleteLike(videoId, userId);
     }
 }

+ 8 - 86
fs-service/src/main/java/com/fs/course/service/impl/FsUserVideoServiceImpl.java

@@ -65,9 +65,6 @@ public class FsUserVideoServiceImpl implements IFsUserVideoService {
 
     @Autowired
     private IVodService vodService;
-    private static final String LIKE_KEY_PREFIX = "like:video:";
-    private static final String FAVORITE_KEY_PREFIX = "favorite:video:";
-
     /**
      * 查询课堂视频
      *
@@ -205,69 +202,18 @@ public class FsUserVideoServiceImpl implements IFsUserVideoService {
         return list;
     }
 
-    //查询点赞信息和收藏信息
+    // 查询点赞、收藏、评论数(仅数据库,便于本地联调线上库)
     public List<FsUserVideoListUVO> selectLikesAndFavorites(Long userId, List<FsUserVideoListUVO> list) {
         if (list != null && !list.isEmpty()) {
             List<Long> videoIds = list.stream().map(vo -> Long.parseLong(vo.getId())).collect(Collectors.toList());
-
-            // 批量查询Redis中的点赞信息
-            List<String> likeKeys = videoIds.stream()
-                    .map(videoId -> LIKE_KEY_PREFIX + videoId + ":user:" + userId)
-                    .collect(Collectors.toList());
-            List<Boolean> redisLikes = redisTemplate.opsForValue().multiGet(likeKeys);
-
-            // 批量查询Redis中的收藏信息
-            List<String> favoriteKeys = videoIds.stream()
-                    .map(videoId -> FAVORITE_KEY_PREFIX + videoId + ":user:" + userId)
-                    .collect(Collectors.toList());
-            List<Boolean> redisFavorites = redisTemplate.opsForValue().multiGet(favoriteKeys);
-
-            // 缓存未命中的视频ID列表
-            List<Long> missingLikeVideoIds = new ArrayList<>();
-            List<Long> missingFavoriteVideoIds = new ArrayList<>();
-
-            // 设置点赞和收藏信息
-            for (int i = 0; i < list.size(); i++) {
-                FsUserVideoListUVO vo = list.get(i);
+            Map<Long, VideoLikeStatusDTO> likeMap = fsUserVideoLikeMapper.checkLikes(videoIds, userId);
+            Map<Long, VideoFavoriteStatusDTO> favoriteMap = fsUserVideoFavoriteMapper.checkFavorites(videoIds, userId);
+            for (FsUserVideoListUVO vo : list) {
                 Long videoId = Long.parseLong(vo.getId());
-                Integer commentCount = fsUserVideoCommentMapper.selectCommentCountByVideos(videoId);
-                vo.setSmsNum(commentCount);
-                // 优先使用Redis中的点赞数据
-                if (redisLikes != null && redisLikes.get(i) != null) {
-                    vo.setLike(Boolean.TRUE.equals(redisLikes.get(i)) ? 1 : 0);
-                } else {
-                    missingLikeVideoIds.add(videoId);
-                }
-
-                // 优先使用Redis中的收藏数据
-                if (redisFavorites != null && redisFavorites.get(i) != null) {
-                    vo.setFavorite(Boolean.TRUE.equals(redisFavorites.get(i)) ? 1 : 0);
-                } else {
-                    missingFavoriteVideoIds.add(videoId);
-                }
-            }
-
-            // 查询数据库中的点赞和收藏信息
-            if (!missingLikeVideoIds.isEmpty()) {
-                Map<Long, VideoLikeStatusDTO> likeMap = fsUserVideoLikeMapper.checkLikes(missingLikeVideoIds, userId);
-                for (FsUserVideoListUVO vo : list) {
-                    Long videoId = Long.parseLong(vo.getId());
-                    if (missingLikeVideoIds.contains(videoId)) {
-                        vo.setLike(likeMap.getOrDefault(videoId, new VideoLikeStatusDTO()).getLiked() ? 1 : 0);
-                    }
-                }
-            }
-
-            if (!missingFavoriteVideoIds.isEmpty()) {
-                Map<Long, VideoFavoriteStatusDTO> favoriteMap = fsUserVideoFavoriteMapper.checkFavorites(missingFavoriteVideoIds, userId);
-                for (FsUserVideoListUVO vo : list) {
-                    Long videoId = Long.parseLong(vo.getId());
-                    if (missingFavoriteVideoIds.contains(videoId)) {
-                        vo.setFavorite(favoriteMap.getOrDefault(videoId, new VideoFavoriteStatusDTO()).getFavorite() ? 1 : 0);
-                    }
-                }
+                vo.setSmsNum(fsUserVideoCommentMapper.selectCommentCountByVideos(videoId));
+                vo.setLike(likeMap.getOrDefault(videoId, new VideoLikeStatusDTO()).getLiked() ? 1 : 0);
+                vo.setFavorite(favoriteMap.getOrDefault(videoId, new VideoFavoriteStatusDTO()).getFavorite() ? 1 : 0);
             }
-
             fillTalentFollowInfo(userId, list);
         }
         return list;
@@ -416,16 +362,9 @@ public class FsUserVideoServiceImpl implements IFsUserVideoService {
     @Override
     public List<FsUserVideoListUVO> selectFsUserVideoListUVOByUser(Long talentId, boolean oneSelf, Long userId) {
         List<FsUserVideoListUVO> list = fsUserVideoMapper.selectFsUserVideoListUVOByUser(talentId, oneSelf);
-        /*if (param != null && param.getUserId() != null) {
-            Long userId = param.getUserId();
+        if (userId != null && !list.isEmpty()) {
             list = selectLikesAndFavorites(userId, list);
-        }*/
-        // 当前视频是否被自己喜欢或收藏
-        if (list.size() > 0) {
-            selectLikesAndFavoritesByMyself(list,userId);
         }
-
-
         return list;
     }
 
@@ -466,23 +405,6 @@ public class FsUserVideoServiceImpl implements IFsUserVideoService {
         return R.ok();
     }
 
-    private void selectLikesAndFavoritesByMyself(List<FsUserVideoListUVO> list, long userId) {
-        List<Long> videoIds = list.stream().map(vo -> Long.parseLong(vo.getId())).collect(Collectors.toList());
-        Map<Long, VideoLikeStatusDTO> likeMaps = fsUserVideoLikeMapper.checkLikes(videoIds, userId);
-        Map<Long, VideoFavoriteStatusDTO> FavoriteMaps = fsUserVideoFavoriteMapper.checkFavorites(videoIds, userId);
-        long videoId;
-        for (FsUserVideoListUVO entity : list) {
-            videoId = Long.parseLong(entity.getId());
-            if (likeMaps.containsKey(videoId)) {
-                entity.setLike(1);
-            }
-            if (FavoriteMaps.containsKey(videoId)) {
-                entity.setFavorite(1);
-            }
-        }
-        fillTalentFollowInfo(userId, list);
-    }
-
     public static String updateUrlPrefix(String url) {
         final String oldPrefix = "https://obs.ylrztop.com";
         final String newPrefix = "https://rtobs.ylrztop.com";

+ 1 - 0
fs-user-app/src/main/java/com/fs/app/controller/TalentController.java

@@ -255,6 +255,7 @@ public class TalentController extends  AppBaseController{
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
         boolean oneSelf = userId == param.getUserId();
         List<FsUserVideoListUVO> list = fsUserVideoService.selectFsUserVideoListUVOByUser(fsUserTalent.getTalentId(),oneSelf,userId);
+        list = fsUserVideoService.addNum(list);
 
         PageInfo<FsUserVideoListUVO> listPageInfo=new PageInfo<>(list);
         return R.ok().put("data",listPageInfo);

+ 4 - 2
fs-user-app/src/main/java/com/fs/app/controller/VideoController.java

@@ -54,8 +54,6 @@ public class VideoController extends  AppBaseController{
         }
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
         List<FsUserVideoListUVO> list= videoService.selectFsUserVideoListUVO(param);
-        //添加假数据
-        list = videoService.addNum(list);
         PageInfo<FsUserVideoListUVO> listPageInfo=new PageInfo<>(list);
         if (param.getUserId() != null) {
             // 对分页后的数据进行推荐排序
@@ -73,6 +71,9 @@ public class VideoController extends  AppBaseController{
                 listPageInfo.setList(list);
             }
         }
+        // 统一在列表最终确定后叠加展示数,避免置顶视频未叠加导致与达人/我的列表不一致
+        list = videoService.addNum(listPageInfo.getList());
+        listPageInfo.setList(list);
         return R.ok().put("data",listPageInfo);
     }
 
@@ -84,6 +85,7 @@ public class VideoController extends  AppBaseController{
         param.setUserId(Long.parseLong(getUserId()));
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
         List<FsUserVideoListUVO> list= videoService.selectFsUserFavoriteVideoListUVO(param);
+        list = videoService.addNum(list);
         PageInfo<FsUserVideoListUVO> listPageInfo=new PageInfo<>(list);
         return R.ok().put("data",listPageInfo);
     }