Kaynağa Gözat

update VideoPostQuery#getRandomVideoIds

reghao 9 ay önce
ebeveyn
işleme
f23d912331

+ 30 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/impl/VideoPostQueryImpl.java

@@ -292,9 +292,39 @@ public class VideoPostQueryImpl implements VideoPostQuery {
 
     @Override
     public List<String> getRandomVideoIds(List<Integer> userScopes, int size) {
+        if (userScopes.size() == 1 && userScopes.get(0).equals(PostScope.PROTECT.getCode())) {
+            return getRandomVipVideoIds();
+        }
+
         return videoPostMapper.findRandomVideoIds(userScopes, size);
     }
 
+    private List<String> getRandomVipVideoIds() {
+        VideoQuery videoQuery = new VideoQuery.Builder()
+                .status(List.of(VideoStatus.publish.getValue()))
+                .scope(List.of(PostScope.PROTECT.getCode()))
+                .categoryPid(11)
+                .build();
+        int total = videoPostMapper.countByCriteria(videoQuery);
+        Page page1 = new Page(1, Math.min(total, 100_000));
+        List<String> videoIds = videoPostMapper.findVideoPostByPage(page1, videoQuery).stream()
+                .map(VideoPost::getVideoId)
+                .collect(Collectors.toList());
+        if (videoIds.isEmpty()) {
+            return videoIds;
+        }
+
+        List<String> results = new ArrayList<>();
+        int min = 0;
+        int size = videoIds.size();
+        for (int i = 0; i < pageSize*10; i++) {
+            int randomIdx = min + random.nextInt(size-1 - min);
+            results.add(videoIds.get(randomIdx));
+        }
+
+        return results;
+    }
+
     public List<VideoInfo> getVideoResource(String videoId) {
         VideoPost videoPost = videoPostMapper.findByVideoId(videoId);
         if (videoPost == null) {

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

@@ -1,5 +1,6 @@
 package cn.reghao.tnb.content.app.vod.service.rcmd.task;
 
+import cn.reghao.tnb.content.api.constant.PostScope;
 import cn.reghao.tnb.content.api.constant.RcmdMode;
 import cn.reghao.tnb.content.api.dto.VideoCard;
 import cn.reghao.tnb.content.app.util.redis.ds.RedisList;
@@ -51,21 +52,11 @@ public class RcmdTask implements Runnable {
         List<Integer> userScopes = contentPermission.getUserScopes(loginUser);
         long start = System.currentTimeMillis();
         try {
-            if (mode == RcmdMode.USER.getValue()) {
-            } else if (mode == RcmdMode.VIP.getValue()) {
-            } else {
+            if (mode == RcmdMode.VIP.getValue()) {
+                userScopes.clear();
+                userScopes.add(PostScope.PROTECT.getCode());
             }
 
-            Set<String> interestTagIds = userInterestBased.getUserInterestCategory(loginUser);
-            if (interestTagIds.size() < 1000) {
-                List<String> tagIds = videoPostQuery.getRandomTags(100);
-                for (String tagId : tagIds) {
-                    userInterestBased.addUserInterests(loginUser, tagId);
-                }
-            }
-
-            Set<String> interestItems = userInterestBased.getUserInterestItems(loginUser);
-            List<String> videoIds1 = new ArrayList<>(interestItems);
             List<String> videoIds = videoPostQuery.getRandomVideoIds(userScopes, size);
             if (!videoIds.isEmpty()) {
                 List<VideoCard> videoCards = videoPostQuery.getVideoCards(videoIds);
@@ -79,4 +70,18 @@ public class RcmdTask implements Runnable {
 
         log.info("{}'s rcmd-task cost {}s", loginUser, (System.currentTimeMillis()-start)/1000);
     }
+
+    List<String> getRedisVideoIds(long loginUser) {
+        Set<String> interestTagIds = userInterestBased.getUserInterestCategory(loginUser);
+        if (interestTagIds.size() < 1000) {
+            List<String> tagIds = videoPostQuery.getRandomTags(100);
+            for (String tagId : tagIds) {
+                userInterestBased.addUserInterests(loginUser, tagId);
+            }
+        }
+
+        Set<String> interestItems = userInterestBased.getUserInterestItems(loginUser);
+        List<String> videoIds1 = new ArrayList<>(interestItems);
+        return videoIds1;
+    }
 }