|
|
@@ -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];
|