|
@@ -3,6 +3,7 @@ import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
|
|
|
import com.tzld.piaoquan.recommend.server.common.ThreadPoolFactory;
|
|
|
import com.tzld.piaoquan.recommend.server.common.enums.AppTypeEnum;
|
|
|
import com.tzld.piaoquan.recommend.server.model.Video;
|
|
|
+import com.tzld.piaoquan.recommend.server.service.filter.strategy.BlacklistContainer;
|
|
|
import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
|
|
|
import com.tzld.piaoquan.recommend.server.service.recall.strategy.*;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -13,6 +14,7 @@ import org.springframework.context.ApplicationContextAware;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
+import javax.annotation.Resource;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
@@ -31,6 +33,8 @@ public class RecallService implements ApplicationContextAware {
|
|
|
private final ExecutorService pool = ThreadPoolFactory.recallPool();
|
|
|
@ApolloJsonValue("${last.digit.abcode:{}}")
|
|
|
protected Map<Integer, String> lastDigitAbcode;
|
|
|
+ @Resource
|
|
|
+ private BlacklistContainer blacklistContainer;
|
|
|
|
|
|
@PostConstruct
|
|
|
public void init() {
|
|
@@ -79,6 +83,10 @@ public class RecallService implements ApplicationContextAware {
|
|
|
strategies.add(strategyMap.get(SpecialRecallStrategy.class.getSimpleName()));
|
|
|
return strategies;
|
|
|
}
|
|
|
+ String matchUserBlacklistTypeEnum = blacklistContainer.matchUserBlacklistTypeEnum(param.getUid(), param.getHotSceneType(), param.getCityCode(),
|
|
|
+ param.getClientIp(), param.getMid(), "recommend-flow-pool");
|
|
|
+ boolean hitUserBlacklist = StringUtils.isNotBlank(matchUserBlacklistTypeEnum);
|
|
|
+
|
|
|
String abCode = param.getAbCode();
|
|
|
//1:通过“产品”控制“召回子策略”
|
|
|
if (param.getAppType() == AppTypeEnum.LAO_HAO_KAN_VIDEO.getCode()
|
|
@@ -149,42 +157,45 @@ public class RecallService implements ApplicationContextAware {
|
|
|
default:
|
|
|
strategies.addAll(getRegionRecallStrategy(param));
|
|
|
}
|
|
|
- //2:通过“流量池标记”控制“流量池召回子策略” 其中有9组会走EXPERIMENTAL_FLOW_SET_LEVEL 有1组会走EXPERIMENTAL_FLOW_SET_LEVEL_SCORE
|
|
|
- if ("60116".equals(abCode)){
|
|
|
- int lastDigit = param.getLastDigit();
|
|
|
- String lastDigitAB = lastDigitAbcode != null? lastDigitAbcode.getOrDefault(lastDigit, "default"): "default";
|
|
|
- switch (lastDigitAB){
|
|
|
- case "random":
|
|
|
- strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyFilterDigit.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "tomson":
|
|
|
- strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomsonFilterDigitV2.class.getSimpleName()));
|
|
|
- break;
|
|
|
- case "score":
|
|
|
- strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
|
|
|
- break;
|
|
|
- default:
|
|
|
- strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyFilterDigit.class.getSimpleName()));
|
|
|
- break;
|
|
|
- }
|
|
|
- }else{
|
|
|
- if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL)) {
|
|
|
- strategies.add(strategyMap.get(QuickFlowPoolWithLevelRecallStrategy.class.getSimpleName()));
|
|
|
- if ("60126".equals(abCode) || "60125".equals(abCode) || "60124".equals(abCode)
|
|
|
- || "60105".equals(abCode) || "60106".equals(abCode) || "60107".equals(abCode)
|
|
|
- || "60113".equals(abCode) || "60114".equals(abCode)
|
|
|
- || "60115".equals(abCode)|| "60117".equals(abCode)|| "60118".equals(abCode)
|
|
|
- || "60119".equals(abCode)){
|
|
|
- strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
|
|
|
- }else {
|
|
|
- strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategy.class.getSimpleName()));
|
|
|
+ // 命中用户黑名单不走流量池
|
|
|
+ if (!hitUserBlacklist) {
|
|
|
+ //2:通过“流量池标记”控制“流量池召回子策略” 其中有9组会走EXPERIMENTAL_FLOW_SET_LEVEL 有1组会走EXPERIMENTAL_FLOW_SET_LEVEL_SCORE
|
|
|
+ if ("60116".equals(abCode)) {
|
|
|
+ int lastDigit = param.getLastDigit();
|
|
|
+ String lastDigitAB = lastDigitAbcode != null ? lastDigitAbcode.getOrDefault(lastDigit, "default") : "default";
|
|
|
+ switch (lastDigitAB) {
|
|
|
+ case "random":
|
|
|
+ strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyFilterDigit.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "tomson":
|
|
|
+ strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomsonFilterDigitV2.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ case "score":
|
|
|
+ strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyFilterDigit.class.getSimpleName()));
|
|
|
+ break;
|
|
|
}
|
|
|
- } else if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE)) {
|
|
|
- strategies.add(strategyMap.get(QuickFlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
|
|
|
} else {
|
|
|
- strategies.add(strategyMap.get(QuickFlowPoolWithScoreRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(FlowPoolWithScoreRecallStrategy.class.getSimpleName()));
|
|
|
+ if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL)) {
|
|
|
+ strategies.add(strategyMap.get(QuickFlowPoolWithLevelRecallStrategy.class.getSimpleName()));
|
|
|
+ if ("60126".equals(abCode) || "60125".equals(abCode) || "60124".equals(abCode)
|
|
|
+ || "60105".equals(abCode) || "60106".equals(abCode) || "60107".equals(abCode)
|
|
|
+ || "60113".equals(abCode) || "60114".equals(abCode)
|
|
|
+ || "60115".equals(abCode) || "60117".equals(abCode) || "60118".equals(abCode)
|
|
|
+ || "60119".equals(abCode)) {
|
|
|
+ strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
|
|
|
+ } else {
|
|
|
+ strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategy.class.getSimpleName()));
|
|
|
+ }
|
|
|
+ } else if (param.getFlowPoolAbtestGroup().equals(FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE)) {
|
|
|
+ strategies.add(strategyMap.get(QuickFlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(FlowPoolWithLevelScoreRecallStrategy.class.getSimpleName()));
|
|
|
+ } else {
|
|
|
+ strategies.add(strategyMap.get(QuickFlowPoolWithScoreRecallStrategy.class.getSimpleName()));
|
|
|
+ strategies.add(strategyMap.get(FlowPoolWithScoreRecallStrategy.class.getSimpleName()));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
// if ("60126".equals(abCode) || "60125".equals(abCode) || "60124".equals(abCode)
|
|
@@ -261,7 +272,9 @@ public class RecallService implements ApplicationContextAware {
|
|
|
case "60115": // 565
|
|
|
case "60117": // 567
|
|
|
case "60118": // 568
|
|
|
- strategies.add(strategyMap.get(FlowPoolLastDayTopRecallStrategy.class.getSimpleName()));
|
|
|
+ if (!hitUserBlacklist) {
|
|
|
+ strategies.add(strategyMap.get(FlowPoolLastDayTopRecallStrategy.class.getSimpleName()));
|
|
|
+ }
|
|
|
strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
strategies.add(strategyMap.get(FestivalRecallStrategyV1.class.getSimpleName()));
|
|
@@ -271,7 +284,9 @@ public class RecallService implements ApplicationContextAware {
|
|
|
break;
|
|
|
case "60110": // 新内容的召回(流量池的Top内容)
|
|
|
strategies.add(strategyMap.get(TopGoodPerformanceVideoRecallStrategy.class.getSimpleName()));
|
|
|
- strategies.add(strategyMap.get(FlowPoolLastDayTopRecallStrategy.class.getSimpleName()));
|
|
|
+ if (!hitUserBlacklist) {
|
|
|
+ strategies.add(strategyMap.get(FlowPoolLastDayTopRecallStrategy.class.getSimpleName()));
|
|
|
+ }
|
|
|
strategies.add(strategyMap.get(SimHotVideoRecallStrategy.class.getSimpleName()));
|
|
|
strategies.add(strategyMap.get(ReturnVideoRecallStrategy.class.getSimpleName()));
|
|
|
break;
|