|
@@ -51,6 +51,8 @@ public abstract class AbstractFilterService {
|
|
|
|
|
|
@ApolloJsonValue("${supply.exp.video.list:[]}")
|
|
|
private Set<Long> supplyExpVideos;
|
|
|
+ @ApolloJsonValue("${not.supply.exp.video.list:[]}")
|
|
|
+ private Set<Long> notSupplyExpVideos;
|
|
|
|
|
|
|
|
|
private List<Long> viewFilterOld(FilterParam param) {
|
|
@@ -82,20 +84,18 @@ public abstract class AbstractFilterService {
|
|
|
if (MapUtils.isEmpty(expIdMap)) {
|
|
|
return videoIds;
|
|
|
}
|
|
|
- // A VS A+B 模式:供给实验的视频只在实验组出
|
|
|
+ // 供给实验
|
|
|
if (supplyExpId == NumberUtils.toInt(expIdMap.get("supply"), -1)) {
|
|
|
- // 命中实验,都可以出
|
|
|
- return videoIds;
|
|
|
+ // 对照组视频只在对照组出
|
|
|
+ return videoIds.stream()
|
|
|
+ .filter(l -> !notSupplyExpVideos.contains(l))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ } else {
|
|
|
+ // 实验组视频只在实验组出
|
|
|
+ return videoIds.stream()
|
|
|
+ .filter(l -> !supplyExpVideos.contains(l))
|
|
|
+ .collect(Collectors.toList());
|
|
|
}
|
|
|
- // 对照组,需要过滤掉视频
|
|
|
- Map<String, String> obj = new HashMap<>();
|
|
|
- obj.put("before", JSONUtils.toJson(videoIds));
|
|
|
- List<Long> result = videoIds.stream()
|
|
|
- .filter(l -> !supplyExpVideos.contains(l))
|
|
|
- .collect(Collectors.toList());
|
|
|
- obj.put("after", JSONUtils.toJson(result));
|
|
|
- log.info("supply filter {}", JSONUtils.toJson(obj));
|
|
|
- return result;
|
|
|
}
|
|
|
|
|
|
private List<Long> filterByViewedConcurrent(int appType, String mid, String uid, List<Long> videoIds) {
|