Просмотр исходного кода

interleaveMultiPools 场景已看默认首个,其他随机
后续增加多dimension后该逻辑去除

wangyunpeng 1 день назад
Родитель
Сommit
747aa9d297

+ 10 - 4
api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/impl/ContentPlatformPlanServiceImpl.java

@@ -805,15 +805,21 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
 
     /**
      * 通用 N 池轮转穿插:
-     * - 池列表随机打乱后,按新顺序轮转,每池取 1 条,跳过已耗尽的池继续下一轮
+     * - 场景已看视频池(索引0)固定首位,其余池随机打乱后按序轮转,每池取 1 条
+     * - TODO: 场景已看池扩充多 dimension 后去掉首位固定,全部随机打乱
      * - 跨池 video_id / 标题去重;某池耗尽后自动从轮转中移除
      */
     private List<VideoContentItemVO> interleaveMultiPools(List<List<VideoContentItemVO>> pools) {
         int n = pools.size();
-        // 随机打乱池顺序,轮转遍历
+        // 池顺序: 首位固定(场景已看视频池), 其余随机打乱
         List<Integer> order = new ArrayList<>(n);
-        for (int i = 0; i < n; i++) order.add(i);
-        Collections.shuffle(order);
+        if (n > 0) order.add(0); // 场景已看视频池固定首位
+        if (n > 1) {
+            List<Integer> tail = new ArrayList<>(n - 1);
+            for (int i = 1; i < n; i++) tail.add(i);
+            Collections.shuffle(tail);
+            order.addAll(tail);
+        }
 
         int[] pointers = new int[n];
         boolean[] exhausted = new boolean[n];