Forráskód Böngészése

Merge branch 'feature_20260605_funnel_log_risk_fields' of algorithm/recommend-server into master

yangxiaohui 1 hete
szülő
commit
1033c20458

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

@@ -38,6 +38,10 @@ public class RecommendParam {
     private Set<String> abExpCodes;
     private boolean riskUser;
     private boolean testingRiskRegion;
+    // funnel 日志固定字段, 拆 riskUser OR 链的子条件
+    private boolean ifNewUser;
+    private boolean ifRiskMid;
+    private boolean ifRiskUid;
 
     private Integer categoryId;
 

+ 13 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java

@@ -433,11 +433,14 @@ public class RecommendService {
 
             //0 4产品之外,hotsencetype 1089进入,没有mid和uid 或 mid/uid为新用户时,推荐返回过滤掉风险视频
             boolean isNoneUserRisk = isNoneUserRisk(request, param);
-            boolean riskUser = riskScenes.contains(request.getHotSceneType())
-                    || riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserUid).contains(param.getUid())
-                    || riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserMid).contains(param.getMid())
-                    || isNoneUserRisk;
+            boolean hitRiskScene = riskScenes.contains(request.getHotSceneType());
+            boolean hitRiskUidCache = riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserUid).contains(param.getUid());
+            boolean hitRiskMidCache = riskUserCache.getUnchecked(RedisKeyConstants.Recommend.riskUserMid).contains(param.getMid());
+            boolean riskUser = hitRiskScene || hitRiskUidCache || hitRiskMidCache || isNoneUserRisk;
             param.setRiskUser(riskUser);
+            param.setIfNewUser(isNoneUserRisk);
+            param.setIfRiskMid(hitRiskMidCache);
+            param.setIfRiskUid(hitRiskUidCache);
         }
         //根据地域屏蔽视频
         boolean isTestingRiskProvince = Objects.nonNull(testingRiskProvince) && !testingRiskProvince.isEmpty()
@@ -650,9 +653,15 @@ public class RecommendService {
             ctx.setMid(Strings.nullToEmpty(request.getMid()));
             ctx.setAppType(request.getAppType());
             ctx.setNewExpGroup(Strings.nullToEmpty(request.getNewExpGroup()));
+            ctx.setHotSceneType(request.getHotSceneType());
         }
         if (param != null) {
             ctx.setAbExpCodes(param.getAbExpCodes());
+            ctx.setProvince(Strings.nullToEmpty(param.getProvince()));
+            ctx.setCity(Strings.nullToEmpty(param.getCity()));
+            ctx.setIfNewUser(param.isIfNewUser());
+            ctx.setIfRiskMid(param.isIfRiskMid());
+            ctx.setIfRiskUid(param.isIfRiskUid());
         }
         return ctx;
     }

+ 8 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/funnel/FunnelAggregator.java

@@ -34,6 +34,14 @@ public class FunnelAggregator {
         row.put("newExpGroup", StringUtils.defaultString(ctx.getNewExpGroup()));
         row.put("abExpCode", JSON.toJSONString(ctx.getAbExpCodes()));
 
+        // 固定字段: 风险/地域上下文
+        row.put("scenetype", ctx.getHotSceneType() == null ? "" : String.valueOf(ctx.getHotSceneType()));
+        row.put("province", StringUtils.defaultString(ctx.getProvince()));
+        row.put("city", StringUtils.defaultString(ctx.getCity()));
+        row.put("if_new_user", String.valueOf(ctx.isIfNewUser()));
+        row.put("if_risk_mid", String.valueOf(ctx.isIfRiskMid()));
+        row.put("if_risk_uid", String.valueOf(ctx.isIfRiskUid()));
+
         // step 1-3 + filter reasons
         row.put("step_1_recall", JSON.toJSONString(buildStep1(ctx)));
         row.put("step_2_filtered", JSON.toJSONString(buildStep2(ctx)));

+ 8 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/funnel/FunnelContext.java

@@ -32,6 +32,14 @@ public class FunnelContext {
     private String newExpGroup;
     private Set<String> abExpCodes;
 
+    // ===== 固定字段: 风险/地域上下文 =====
+    private Long   hotSceneType;
+    private String province;
+    private String city;
+    private boolean ifNewUser;
+    private boolean ifRiskMid;
+    private boolean ifRiskUid;
+
     /** Step 1-3: 召回 / 过滤 / 截断(per pushFrom,字段在 RecallVideoEntry 上分组) */
     private ConcurrentMap<String, List<RecallVideoEntry>> stages123RecallByStrategy = new ConcurrentHashMap<>();