Przeglądaj źródła

testing risk region filter video

supeng 3 dni temu
rodzic
commit
78a2bd55ce

+ 1 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/RecommendParam.java

@@ -37,6 +37,7 @@ public class RecommendParam {
     private String city;
     private Set<String> abExpCodes;
     private boolean riskUser;
+    private boolean testingRiskRegion;
 
     private Integer categoryId;
 

+ 15 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java

@@ -94,6 +94,11 @@ public class RecommendService {
     @ApolloJsonValue("${none.user.risk.exclude.apptype:[]}")
     private Set<Integer> noneUserRiskExcludeAppTypes;
 
+    @ApolloJsonValue("${testing.risk.province:[]}")
+    private Set<String> testingRiskProvince;
+    @ApolloJsonValue("${testing.risk.city:[]}")
+    private Set<String> testingRiskCity;
+
     public static final String channelGroupPrefix = "alg_recsys_user_channel_group";
     /**
      * wx_user_info 表信息
@@ -398,7 +403,15 @@ public class RecommendService {
                     || isNoneUserRisk;
             param.setRiskUser(riskUser);
         }
-
+        //根据地域屏蔽视频
+        boolean isTestingRiskProvince = Objects.nonNull(testingRiskProvince) && !testingRiskProvince.isEmpty()
+                && Objects.nonNull(param.getProvince()) && !Objects.equals("", param.getProvince().trim())
+                && testingRiskProvince.contains(param.getProvince());
+        boolean isTestingRiskCity = Objects.nonNull(testingRiskCity) && !testingRiskCity.isEmpty()
+                && Objects.nonNull(param.getCity()) && !Objects.equals("", param.getCity().trim())
+                && testingRiskCity.contains(param.getCity());
+        boolean isTestingRiskRegion = isTestingRiskProvince || isTestingRiskCity;
+        param.setTestingRiskRegion(isTestingRiskRegion);
 
         if (request.hasMachineInfo()) {
             MachineInfoProto machineInfoProto = request.getMachineInfo();
@@ -566,6 +579,7 @@ public class RecommendService {
         recallParam.setUid(param.getUid());
         // 风险过滤
         recallParam.setRiskUser(param.isRiskUser());
+        recallParam.setTestingRiskRegion(param.isTestingRiskRegion());
         recallParam.setAbExpCodes(param.getAbExpCodes());
 
         recallParam.setProvince(param.getProvince());

+ 2 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FilterParam.java

@@ -27,4 +27,6 @@ public class FilterParam {
 
     private boolean riskUser;
 
+    private boolean testingRiskRegion;
+
 }

+ 42 - 5
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/strategy/RiskVideoStrategy.java

@@ -33,6 +33,12 @@ public class RiskVideoStrategy implements FilterStrategy {
     @ApolloJsonValue("${risk.video.tag:[]}")
     private List<Long> riskVideoTagIds;
 
+    /**
+     * 安全测试 风险标签
+     */
+    @ApolloJsonValue("${testing.risk.video.tag:[]}")
+    private List<Long> testingRiskVideoTagIds;
+
     @Autowired
     private RedisTemplate<String, String> redisTemplate;
 
@@ -69,6 +75,27 @@ public class RiskVideoStrategy implements FilterStrategy {
                 }
             });
 
+    private LoadingCache<String, Set<Long>> testingRiskVideoCache = CacheBuilder.newBuilder()
+            .maximumSize(10)
+            .refreshAfterWrite(600, TimeUnit.SECONDS)
+            .expireAfterWrite(600, TimeUnit.SECONDS)
+            .expireAfterAccess(600, TimeUnit.SECONDS)
+            .build(new CacheLoader<String, Set<Long>>() {
+                @Override
+                public Set<Long> load(String key) {
+                    Set<Long> riskVideoIdSet = new HashSet<>();
+                    if (Objects.nonNull(testingRiskVideoTagIds) && !testingRiskVideoTagIds.isEmpty()) {
+                        //数量有限,一次查询,后续考虑优化
+                        List<WxVideoTagRel> rels = repository.findAllByTagIdIn(testingRiskVideoTagIds);
+                        Set<Long> tagVideoIds = CommonCollectionUtils.toSet(rels, WxVideoTagRel::getVideoId);
+                        if (Objects.nonNull(tagVideoIds) && !tagVideoIds.isEmpty()) {
+                            riskVideoIdSet = tagVideoIds;
+                        }
+                    }
+                    return riskVideoIdSet;
+                }
+            });
+
     @Override
     public List<Long> filter(FilterParam param) {
         if (param == null) {
@@ -78,14 +105,24 @@ public class RiskVideoStrategy implements FilterStrategy {
             return param.getVideoIds();
         }
 
-        if (!param.isRiskUser()) {
+        if (!param.isRiskUser() && !param.isTestingRiskRegion()) {
             return param.getVideoIds();
         }
 
-        Set<Long> riskVids = riskVideoCache.getUnchecked("");
-        List<Long> videoIds = param.getVideoIds().stream()
-                .filter(l -> !riskVids.contains(l))
-                .collect(Collectors.toList());
+        List<Long> videoIds = param.getVideoIds();
+        if (param.isRiskUser()) {
+            Set<Long> riskVids = riskVideoCache.getUnchecked("");
+            videoIds = videoIds.stream()
+                    .filter(l -> !riskVids.contains(l))
+                    .collect(Collectors.toList());
+        }
+
+        if (param.isTestingRiskRegion()) {
+            Set<Long> riskVids = testingRiskVideoCache.getUnchecked("");
+            videoIds = videoIds.stream()
+                    .filter(l -> !riskVids.contains(l))
+                    .collect(Collectors.toList());
+        }
 
         log.info("RiskVideoStrategy \t param={} \t before={} \t after={}",
                 JSONUtils.toJson(param),

+ 1 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/FilterParamFactory.java

@@ -19,6 +19,7 @@ public class FilterParamFactory {
 
         // 风险过滤
         filterParam.setRiskUser(param.isRiskUser());
+        filterParam.setTestingRiskRegion(param.isTestingRiskRegion());
         filterParam.setRegionCode(param.getRegionCode());
         filterParam.setAbExpCodes(param.getAbExpCodes());
         filterParam.setCityCode(param.getCityCode());

+ 1 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallParam.java

@@ -34,6 +34,7 @@ public class RecallParam {
     private String clientIp;
 
     private boolean riskUser;
+    private boolean testingRiskRegion;
     private String rootSourceId;
     private Integer userShareDepth;
 

+ 2 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java

@@ -136,7 +136,8 @@ public class RecallService implements ApplicationContextAware {
         }
 
         // 命中用户黑名单不走流量池
-        if (!param.isRiskUser()) {
+        // 命中安全测试风险地域不走流量池
+        if (!param.isRiskUser() && !param.isTestingRiskRegion()) {
             strategies.add(strategyMap.get(QuickFlowPoolWithLevelRecallStrategy.class.getSimpleName()));
             strategies.add(strategyMap.get(FlowPoolWithLevelRecallStrategyTomson.class.getSimpleName()));
             strategies.add(strategyMap.get(DouHotFlowPoolRecallStrategy.class.getSimpleName()));