Quellcode durchsuchen

ADD: user block list

sunxy vor 1 Jahr
Ursprung
Commit
d8ef63c1b8

+ 2 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/strategy/BlacklistContainer.java

@@ -209,7 +209,8 @@ public class BlacklistContainer {
         }).collect(Collectors.toList());
     }
 
-    private String matchUserBlacklistTypeEnum(String uid, Long hotSceneType, String cityCode, String clientIP, String mid, String usedScene) {
+    public String matchUserBlacklistTypeEnum(String uid, Long hotSceneType, String cityCode, String clientIP, String mid,
+                                             String usedScene) {
         try {
             LOG.info("计算用户黑名单类型,判断参数: uid={}, hotSceneType={}, cityCode={}, clientIP={}, mid={}", uid, hotSceneType, cityCode, clientIP, mid);
             if (StringUtils.isNotBlank(uid)) {

+ 51 - 36
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java

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