Sfoglia il codice sorgente

调整 RecommendService

reghao 1 anno fa
parent
commit
7f40e40374

+ 6 - 2
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/ContentPermission.java

@@ -19,9 +19,13 @@ public class ContentPermission {
     private UserService userService;
 
     public List<Integer> getUserScopes() {
-        List<Integer> scopes = new ArrayList<>(List.of(PostScope.PUBLIC.getCode()));
         long userId = UserContext.getUser();
-        if (userService.isVip(userId)) {
+        return getUserScopes(userId);
+    }
+
+    public List<Integer> getUserScopes(long loginUser) {
+        List<Integer> scopes = new ArrayList<>(List.of(PostScope.PUBLIC.getCode()));
+        if (userService.isVip(loginUser)) {
             scopes.add(PostScope.PROTECT.getCode());
         }
 

+ 1 - 1
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/RecommendService.java

@@ -12,7 +12,7 @@ import java.util.*;
  */
 public interface RecommendService {
     List<VideoCard> getRecommendVideos(long userId, String nextId);
-    void putRecommendVideos(long loginUser);
+    void putRecommendVideos(long loginUser, int size);
     String getSimilarVideos(String videoId);
     PageScroll<VideoCard> getVideoTimeline(long userId, String nextIdStr);
     List<BannerVideo> getBannerVideos();

+ 4 - 4
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/impl/RecommendServiceImpl.java

@@ -71,13 +71,13 @@ public class RecommendServiceImpl implements RecommendService {
                 videoCards.add((VideoCard) obj);
             }
         }
-        putRecommendVideos(userId);
+
+        putRecommendVideos(userId, pageSize*3);
         return videoCards;
     }
 
-    public void putRecommendVideos(long loginUser) {
-        List<Integer> userScopes = contentPermission.getUserScopes();
-        RcmdTask rcmdTask = new RcmdTask(loginUser, videoPostQuery, userInterestBased, redisSet, userScopes);
+    public void putRecommendVideos(long loginUser, int size) {
+        RcmdTask rcmdTask = new RcmdTask(loginUser, videoPostQuery, userInterestBased, redisSet, contentPermission, size);
         Future<?> future = threadPool.submit(rcmdTask);
     }
 

+ 8 - 4
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/rcmd/task/RcmdTask.java

@@ -2,6 +2,7 @@ package cn.reghao.tnb.content.app.vod.service.rcmd.task;
 
 import cn.reghao.tnb.content.api.dto.VideoCard;
 import cn.reghao.tnb.content.app.util.redis.ds.RedisSet;
+import cn.reghao.tnb.content.app.vod.service.ContentPermission;
 import cn.reghao.tnb.content.app.vod.service.VideoPostQuery;
 import cn.reghao.tnb.content.app.vod.service.rcmd.RedisKeys;
 import cn.reghao.tnb.content.app.vod.service.rcmd.UserInterestBased;
@@ -21,19 +22,22 @@ public class RcmdTask implements Runnable {
     private final RedisSet redisSet;
     private final UserInterestBased userInterestBased;
     private final VideoPostQuery videoPostQuery;
-    private List<Integer> userScopes;
+    private final ContentPermission contentPermission;
+    private final int size;
 
     public RcmdTask(long loginUser, VideoPostQuery videoPostQuery,
                     UserInterestBased userInterestBased, RedisSet redisSet,
-                    List<Integer> userScopes) {
+                    ContentPermission contentPermission, int size) {
         this.loginUser = loginUser;
         this.videoPostQuery = videoPostQuery;
         this.userInterestBased = userInterestBased;
         this.redisSet = redisSet;
-        this.userScopes = userScopes;
+        this.contentPermission = contentPermission;
+        this.size = size;
     }
 
     public void run() {
+        List<Integer> userScopes = contentPermission.getUserScopes();
         long start = System.currentTimeMillis();
         try {
             List<String> tagIds = videoPostQuery.getRandomTags(1000);
@@ -44,7 +48,7 @@ public class RcmdTask implements Runnable {
             String itemsKey = RedisKeys.getUserItemKey(loginUser);
             Set<String> set = userInterestBased.getUserInterestItems(loginUser);
             List<String> videoIds1 = new ArrayList<>(set);
-            List<String> videoIds = videoPostQuery.getRandomVideoIds(userScopes, 60);
+            List<String> videoIds = videoPostQuery.getRandomVideoIds(userScopes, size);
             if (!videoIds.isEmpty()) {
                 List<VideoCard> videoCards = videoPostQuery.getVideoCards(videoIds);
                 VideoCard[] arr = videoCards.toArray(new VideoCard[0]);