Browse Source

Merge branch 'refs/heads/dev-xym-add-feature' into pre-master

# Conflicts:
#	ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBasic.java
#	ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy688.java
xueyiming 1 day ago
parent
commit
1818b3f2ab

+ 21 - 52
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBasic.java

@@ -206,14 +206,13 @@ public abstract class RankStrategyBasic implements RankStrategy {
         Map<String, String> userLayer = getUserLayer(request.getMid());
         String layer = userLayer.getOrDefault("layer", "无曝光");
         String clazz = userLayer.getOrDefault("class", "近期未出现");
-        if (StringUtils.isNotEmpty(layer) && layer.equals("已转化")) {
-            layer = "有转化";
-        }
         if (request.getIsFilterUser()) {
             layer = layer + "-炸";
         }
         String userLayerClass = layer + "-" + clazz;
         map.put("user_layer_class", userLayerClass);
+        map.put("layer", layer);
+        map.put("clazz", clazz);
         return map;
     }
 
@@ -270,9 +269,6 @@ public abstract class RankStrategyBasic implements RankStrategy {
         Map<String, String> userLayer = this.getUserLayer(request.getMid());
         String layer = userLayer.getOrDefault("layer", "无曝光");
         String clazz = userLayer.getOrDefault("class", "近期未出现");
-        if (StringUtils.isNotEmpty(layer) && layer.equals("已转化")) {
-            layer = "有转化";
-        }
         //有转化中医层,中医和兴趣教育同时存在过滤兴趣教育行业
         if (Objects.equals(layer, "有转化") && Objects.equals(clazz, "中医") && scoreParam.getExpCodeSet().contains(excludeExp)) {
             List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
@@ -396,17 +392,11 @@ public abstract class RankStrategyBasic implements RankStrategy {
         }
     }
 
-    protected Map<Long, CorrectCpaParam> getCorrectCpaParamMap(RankRecommendRequestParam request, ScoreParam scoreParam) {
+    protected Map<Long, CorrectCpaParam> getCorrectCpaParamMap(RankRecommendRequestParam request, ScoreParam scoreParam, Map<String, String> reqFeature) {
         Map<String, String> userLayer = this.getUserLayer(request.getMid());
 
-        String layer = userLayer.getOrDefault("layer", "无曝光");
-        String clazz = userLayer.getOrDefault("class", "近期未出现");
-        if (StringUtils.isNotEmpty(layer) && layer.equals("已转化")) {
-            layer = "有转化";
-        }
-        if (request.getIsFilterUser()) {
-            layer = layer + "-炸";
-        }
+        String layer = reqFeature.get("layer");
+        String clazz = reqFeature.get("clazz");
         Map<Long, CorrectCpaParam> resultMap = new HashMap<>();
         try {
             if (CollectionUtils.isEmpty(request.getAdIdList())) {
@@ -526,14 +516,11 @@ public abstract class RankStrategyBasic implements RankStrategy {
         }
     }
 
-    protected void calculateCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, ScoreParam scoreParam, String modelName) {
-        log.info("calculateCtcvrScore start");
+    protected void calculateCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, ScoreParam scoreParam, String modelName, Map<String, String> reqFeature) {
         //判断是否走校准试验
-        log.info("calibrationCtcvrExp={}", calibrationCtcvrExp);
-        log.info("scoreParam.getExpCodeSet={}", scoreParam.getExpCodeSet());
         if (scoreParam.getExpCodeSet().contains(calibrationCtcvrExp)) {
             try {
-                calibrationDnnCtcvrScore(items, request.getMid(), request.getIsFilterUser(), modelName);
+                calibrationDnnCtcvrScore(items, modelName, reqFeature);
             } catch (Exception e) {
                 log.error("calibrationDnnCtcvrScore error", e);
             }
@@ -541,19 +528,15 @@ public abstract class RankStrategyBasic implements RankStrategy {
 
         if (scoreParam.getExpCodeSet().contains(calibrationCoefficientExp)) {
             try {
-                calibrationCtcvrScore(items, request);
+                calibrationCtcvrScore(items, request, reqFeature);
             } catch (Exception e) {
                 log.error("calibrationCtcvrScore error", e);
             }
         }
     }
 
-    protected void calibrationCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request) {
-        Map<String, String> userLayer = this.getUserLayer(request.getMid());
-        String layer = userLayer.getOrDefault("layer", "无曝光");
-        String clazz = userLayer.getOrDefault("class", "近期未出现");
-        layer = "已转化".equals(layer) ? "有转化" : layer;
-        String userLayerClass = buildUserLayerClass(request.getIsFilterUser(), layer, clazz);
+    protected void calibrationCtcvrScore(List<AdRankItem> items, RankRecommendRequestParam request, Map<String, String> reqFeature) {
+        String userLayerClass = reqFeature.get("layer") + "-" + reqFeature.get("clazz");
         String cidLayerClassKey = cidLayerKey.replace("{userLayer}", userLayerClass);
 
         // 3. 批量查询Redis
@@ -610,11 +593,6 @@ public abstract class RankStrategyBasic implements RankStrategy {
         }
     }
 
-    private String buildUserLayerClass(boolean isFilterUser, String layer, String clazz) {
-        if (Objects.equals(layer, "已转化")) layer = "有转化";
-        return isFilterUser ? layer + "-炸-" + clazz : layer + "-" + clazz;
-    }
-
 
     protected AdRankItem creativeCovertRankItem(AdPlatformCreativeDTO dto, RankRecommendRequestParam request, Set<String> noApiAdVerIds) {
         AdRankItem adRankItem = new AdRankItem();
@@ -700,43 +678,34 @@ public abstract class RankStrategyBasic implements RankStrategy {
         }
         String key = String.format("ad:engine:mid:layer:%s", mid);
         String value = algRedisHelper.get(key);
-        log.info("getUserLayer value={}", value);
         if (StringUtils.isEmpty(value)) {
             return new HashMap<>();
         }
         try {
-            return JSON.parseObject(value, new TypeReference<Map<String, String>>() {
+            Map<String, String> map = JSON.parseObject(value, new TypeReference<Map<String, String>>() {
             });
+            if (map.containsKey("layer") && Objects.equals(map.get("layer"), "已转化")) {
+                map.put("layer", "有转化");
+            }
+            return map;
         } catch (Exception e) {
             log.error("getUserLayer error. mid: {}, \n", mid, e);
             return new HashMap<>();
         }
     }
 
-    protected void calibrationDnnCtcvrScore(List<AdRankItem> adRankItems, String mid, boolean isFilterUser, String modelName) {
-        log.info("calibrationDnnCtcvrScore start");
-        log.info("modelName: {}", modelName);
+    protected void calibrationDnnCtcvrScore(List<AdRankItem> adRankItems, String modelName, Map<String, String> reqFeature) {
         if (StringUtils.isEmpty(modelName)) {
             return;
         }
-        // 1. 获取用户分层信息
-        Map<String, String> userLayer = getUserLayer(mid);
-        String layer = userLayer.getOrDefault("layer", "无曝光");
-        String clazz = userLayer.getOrDefault("class", "近期未出现");
-        if (Objects.equals(layer, "已转化")) {
-            layer = "有转化";
-        }
-        if (isFilterUser) {
-            layer += "-炸";
-        }
-        // 2. 构建Key模板
+        // 构建Key模板
         String layerKeyTemplate = realLayerCtcvrKey
                 .replace("{model}", modelName)
-                .replace("{layer}", layer)
-                .replace("{class}", clazz);
-        log.info("calibrationDnnCtcvrScore layerKeyTemplate={}", layerKeyTemplate);
+                .replace("{layer}", reqFeature.get("layer"))
+                .replace("{class}", reqFeature.get("clazz"));
+
+
         String value = adRedisHelper.get(layerKeyTemplate);
-        log.info("calibrationDnnCtcvrScore value={}", value);
         JSONObject json = JSONObject.parseObject(value);
         Integer view = json.getInteger("view");
         Double realCtcvr = json.getDouble("ctcvr");

+ 0 - 3
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy687.java

@@ -125,9 +125,6 @@ public class RankStrategyBy687 extends RankStrategyBasic {
 
         String layer = userLayer.getOrDefault("layer", "无曝光");
         String clazz = userLayer.getOrDefault("class", "近期未出现");
-        if (Objects.equals(layer, "已转化")) {
-            layer = "有转化";
-        }
         if (request.getIsFilterUser()) {
             return String.join("-", layer, "炸", clazz);
         } else {

+ 8 - 26
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy688.java

@@ -152,9 +152,7 @@ public class RankStrategyBy688 extends RankStrategyBasic {
 
         boolean isGuaranteedFlow = getIsGuaranteedFlow(scoreParam);
         Map<String, GuaranteeView> map = getGuaranteeViewMap(request, isGuaranteedFlow);
-        long startx = System.currentTimeMillis();
-        Map<Long, CorrectCpaParam> correctCpaMap = getCorrectCpaParamMap(request, scoreParam);
-        log.info("correctCpaMap time:{}ms", System.currentTimeMillis() - startx);
+        Map<Long, CorrectCpaParam> correctCpaMap = getCorrectCpaParamMap(request, scoreParam, reqFeature);
         List<AdRankItem> adRankItems = new ArrayList<>();
         Random random = new Random();
         List<Future<AdRankItem>> futures = new ArrayList<>();
@@ -304,13 +302,12 @@ public class RankStrategyBy688 extends RankStrategyBasic {
             item.getScoreMap().put("ctcvrScore", calibratedScore);
         }
 
-        calculateCtcvrScore(result, request, scoreParam, "dnn");
+        calculateCtcvrScore(result, request, scoreParam, "dnn", reqFeature);
         // loop
         double cpmCoefficient = weightParam.getOrDefault("cpmCoefficient", 0.9);
         boolean isGuaranteeType = false;
         // 查询人群分层信息
-        String peopleLayer = getUserLayerAfterHandle(request);
-        log.info( "addLayerCreativeWeight---RankStrategyBy688 adItemRank peopleLayer: {}", peopleLayer);
+        String peopleLayer = reqFeature.get("layer");
         for (AdRankItem item : result) {
             double bid = item.getCpa();
             if (scoreParam.getExpCodeSet().contains(correctCpaExp1) || scoreParam.getExpCodeSet().contains(correctCpaExp2)) {
@@ -326,7 +323,6 @@ public class RankStrategyBy688 extends RankStrategyBasic {
             String layerAndCreativeWeightMapKey = getLayerAndCreativeWeightMapKey(peopleLayer, String.valueOf(item.getAdId()));
             // 人群分层&创意的权重
             double layerAndCreativeWeight = getLayerAndCreativeWeight(layerAndCreativeWeightMapKey);
-            log.info( "addLayerCreativeWeight---RankStrategyBy688 adItemRank layerAndCreativeWeightMapKey: {}, layerAndCreativeWeight: {}", layerAndCreativeWeightMapKey, layerAndCreativeWeight);
             double scoreCoefficient = creativeScoreCoefficient.getOrDefault(item.getAdId(), 1d);
             double guaranteeScoreCoefficient = getGuaranteeScoreCoefficient(isGuaranteedFlow, item.getExt());
             double score = item.getLrScore() * bid * scoreCoefficient * guaranteeScoreCoefficient * layerAndCreativeWeight;
@@ -366,11 +362,11 @@ public class RankStrategyBy688 extends RankStrategyBasic {
 
     /**
      * 获取人群分层和创意的权重
+     *
      * @param key
      * @return
      */
-    private Double getLayerAndCreativeWeight(String key){
-        log.info( "addLayerCreativeWeight---RankStrategyBy688 getLayerAndCreativeWeight key: {}", key);
+    private Double getLayerAndCreativeWeight(String key) {
         if (StringUtils.isBlank(key)) {
             return 1d;
         }
@@ -379,32 +375,18 @@ public class RankStrategyBy688 extends RankStrategyBasic {
 
     /**
      * 获取人群分层和创意的权重key
+     *
      * @param layer
      * @param creativeId
      * @return
      */
-    private String getLayerAndCreativeWeightMapKey(String layer, String creativeId){
-        if ( StringUtils.isBlank(layer) || StringUtils.isBlank(creativeId)) {
+    private String getLayerAndCreativeWeightMapKey(String layer, String creativeId) {
+        if (StringUtils.isBlank(layer) || StringUtils.isBlank(creativeId)) {
             return null;
         }
         return layer + "_" + creativeId;
     }
 
-    /**
-     * 获取处理后的人群分层
-     * @param request
-     * @return
-     */
-    private String getUserLayerAfterHandle(RankRecommendRequestParam request){
-        Map<String, String> userLayer = this.getUserLayer(request.getMid());
-        String layer = userLayer.getOrDefault("layer", "无曝光");
-        if (StringUtils.isNotEmpty(layer) && layer.equals("已转化")) {
-            layer = "有转化";
-        }
-        return layer;
-    }
-
-
 
     private void handleB1Feature(Map<String, String> b1Feature, Map<String, String> cidFeatureMap, String cid) {
         cidFeatureMap.put("cid_" + cid, "0.1");