|
@@ -1,6 +1,6 @@
|
|
package com.tzld.piaoquan.recommend.server.service.filter;
|
|
package com.tzld.piaoquan.recommend.server.service.filter;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
|
|
import com.google.common.base.Stopwatch;
|
|
import com.google.common.base.Stopwatch;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
import com.tzld.piaoquan.recommend.server.common.ThreadPoolFactory;
|
|
import com.tzld.piaoquan.recommend.server.common.ThreadPoolFactory;
|
|
@@ -12,6 +12,8 @@ import com.tzld.piaoquan.recommend.server.util.CommonCollectionUtils;
|
|
import com.tzld.piaoquan.recommend.server.util.JSONUtils;
|
|
import com.tzld.piaoquan.recommend.server.util.JSONUtils;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
+import org.apache.commons.collections4.MapUtils;
|
|
|
|
+import org.apache.commons.lang.math.NumberUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -41,6 +43,15 @@ public abstract class AbstractFilterService {
|
|
@Value("${newFilterAbExpCode:}")
|
|
@Value("${newFilterAbExpCode:}")
|
|
private String newFilterAbExpCode;
|
|
private String newFilterAbExpCode;
|
|
|
|
|
|
|
|
+ @ApolloJsonValue("${supply.exp.list:[6]}")
|
|
|
|
+ private Set<Integer> supplyExps;
|
|
|
|
+
|
|
|
|
+ @Value("${supply.exp.id:666}")
|
|
|
|
+ private int supplyExpId;
|
|
|
|
+
|
|
|
|
+ @ApolloJsonValue("${supply.exp.video.list:[]}")
|
|
|
|
+ private Set<Long> supplyExpVideos;
|
|
|
|
+
|
|
|
|
|
|
private List<Long> viewFilterOld(FilterParam param) {
|
|
private List<Long> viewFilterOld(FilterParam param) {
|
|
|
|
|
|
@@ -48,30 +59,48 @@ public abstract class AbstractFilterService {
|
|
List<Long> videoIds = filterWithRiskVideo(param.getRiskFilterFlag(),
|
|
List<Long> videoIds = filterWithRiskVideo(param.getRiskFilterFlag(),
|
|
param.getAppType(), param.getRegionCode(), param.getAppRegionFiltered(), param.getVideosWithRisk(),
|
|
param.getAppType(), param.getRegionCode(), param.getAppRegionFiltered(), param.getVideosWithRisk(),
|
|
param.getVideoIds(), param.getForceTruncation());
|
|
param.getVideoIds(), param.getForceTruncation());
|
|
-
|
|
+
|
|
-
|
|
+
|
|
-
|
|
+ Map<String, String> obj = new HashMap<>();
|
|
-
|
|
+ obj.put("before", JSONUtils.toJson(videoIds));
|
|
-
|
|
+
|
|
-
|
|
+ videoIds = filterBySupplyExp(param.getAppType(), param.getExpIdMap(), videoIds);
|
|
|
|
+
|
|
|
|
+ obj.put("after", JSONUtils.toJson(videoIds));
|
|
|
|
+ log.info("supply filter {}", JSONUtils.toJson(obj));
|
|
|
|
+
|
|
if (param.isNotUsePreView()) {
|
|
if (param.isNotUsePreView()) {
|
|
- ;
|
|
+
|
|
} else {
|
|
} else {
|
|
videoIds = filterByPreViewed(param.getAppType(), param.getMid(), videoIds);
|
|
videoIds = filterByPreViewed(param.getAppType(), param.getMid(), videoIds);
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
if (param.isConcurrent()) {
|
|
if (param.isConcurrent()) {
|
|
videoIds = filterByViewedConcurrent(param.getAppType(), param.getMid(), param.getUid(), videoIds);
|
|
videoIds = filterByViewedConcurrent(param.getAppType(), param.getMid(), param.getUid(), videoIds);
|
|
} else {
|
|
} else {
|
|
videoIds = filterByViewed(param.getAppType(), param.getMid(), param.getUid(), videoIds);
|
|
videoIds = filterByViewed(param.getAppType(), param.getMid(), param.getUid(), videoIds);
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
return videoIds;
|
|
return videoIds;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private List<Long> filterBySupplyExp(int appType, Map<String, String> expIdMap, List<Long> videoIds) {
|
|
|
|
+ if (!supplyExps.contains(appType)) {
|
|
|
|
+ return videoIds;
|
|
|
|
+ }
|
|
|
|
+ if (MapUtils.isEmpty(expIdMap)) {
|
|
|
|
+ return videoIds;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (supplyExpId == NumberUtils.toInt(expIdMap.get("supply"), -1)) {
|
|
|
|
+
|
|
|
|
+ return videoIds;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return videoIds.stream()
|
|
|
|
+ .filter(l -> !supplyExpVideos.contains(l))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
private List<Long> filterByViewedConcurrent(int appType, String mid, String uid, List<Long> videoIds) {
|
|
private List<Long> filterByViewedConcurrent(int appType, String mid, String uid, List<Long> videoIds) {
|
|
|
|
|
|
if (StringUtils.isBlank(mid)
|
|
if (StringUtils.isBlank(mid)
|
|
@@ -79,11 +108,6 @@ public abstract class AbstractFilterService {
|
|
return videoIds;
|
|
return videoIds;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
int chunkSize = 20;
|
|
int chunkSize = 20;
|
|
List<List<Long>> chunks = new ArrayList<>();
|
|
List<List<Long>> chunks = new ArrayList<>();
|
|
int size = videoIds.size();
|
|
int size = videoIds.size();
|