zhaohaipeng 5 місяців тому
батько
коміт
fa11b4b6d5
38 змінених файлів з 362 додано та 149 видалено
  1. 1 1
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/convert/FeatureConvert.java
  2. 3 3
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/convert/RequestConvert.java
  3. 1 1
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/dto/AdDirectionScore.java
  4. 1 1
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/dto/AdPlatformCreativeDTO.java
  5. 1 1
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/param/MachineInfoParam.java
  6. 2 2
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/param/RankRecommendRequestParam.java
  7. 1 1
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/param/RecommendRequestParam.java
  8. 1 1
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/param/StatisticsLogParam.java
  9. 1 0
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/ScoreParam.java
  10. 1 4
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/VlogRovFMScorer.java
  11. 1 4
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/VlogRovLRScorer.java
  12. 1 4
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/XGBoostScorer.java
  13. 1 4
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/XGBoostScorer683.java
  14. 129 0
      ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/util/WeightRandom.java
  15. 2 2
      ad-engine-server/src/main/java/com/tzld/piaoquan/ad/engine/server/controller/AdRecommendController.java
  16. 1 1
      ad-engine-server/src/main/resources/ad_score_config_20240626.conf
  17. 1 1
      ad-engine-server/src/main/resources/ad_score_config_20240813.conf
  18. 1 1
      ad-engine-server/src/main/resources/ad_score_config_xgboost.conf
  19. 1 1
      ad-engine-server/src/main/resources/ad_score_config_xgboost_20240909.conf
  20. 1 1
      ad-engine-server/src/main/resources/ad_score_config_xgboost_683.conf
  21. 2 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/log/LogHubService.java
  22. 2 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/log/impl/LogHubServiceImpl.java
  23. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/param/ThresholdPredictModelParam.java
  24. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/param/request/ThresholdPredictModelRequestParam.java
  25. 1 5
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/remote/FeatureRemoteService.java
  26. 2 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService.java
  27. 7 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategy.java
  28. 27 7
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBasic.java
  29. 15 20
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy679.java
  30. 14 11
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy680.java
  31. 14 11
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy683.java
  32. 15 11
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy687.java
  33. 14 11
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy688.java
  34. 68 0
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyByWeight.java
  35. 2 2
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/BidRankRecommendRequestParam.java
  36. 3 3
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/RankServiceThompsonImpl.java
  37. 1 1
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VideoAdThompsonScorerV2.java
  38. 21 24
      ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/impl/RankServiceImpl.java

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/convert/FeatureConvert.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/convert/FeatureConvert.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.convert;
+package com.tzld.piaoquan.ad.engine.commons.convert;
 
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdActionFeature;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdItemFeature;

+ 3 - 3
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/convert/RequestConvert.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/convert/RequestConvert.java

@@ -1,9 +1,9 @@
-package com.tzld.piaoquan.ad.engine.service.score.convert;
+package com.tzld.piaoquan.ad.engine.commons.convert;
 
+import com.tzld.piaoquan.ad.engine.commons.param.RecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.util.AbUtil;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRequestContext;
 

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/dto/AdDirectionScore.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/dto/AdDirectionScore.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.dto;
+package com.tzld.piaoquan.ad.engine.commons.dto;
 
 import lombok.Builder;
 import lombok.Data;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/dto/AdPlatformCreativeDTO.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/dto/AdPlatformCreativeDTO.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.dto;
+package com.tzld.piaoquan.ad.engine.commons.dto;
 
 import lombok.Builder;
 import lombok.Data;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/MachineInfoParam.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/param/MachineInfoParam.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.param;
+package com.tzld.piaoquan.ad.engine.commons.param;
 
 import lombok.Data;
 

+ 2 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/RankRecommendRequestParam.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/param/RankRecommendRequestParam.java

@@ -1,6 +1,6 @@
-package com.tzld.piaoquan.ad.engine.service.score.param;
+package com.tzld.piaoquan.ad.engine.commons.param;
 
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/RecommendRequestParam.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/param/RecommendRequestParam.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.param;
+package com.tzld.piaoquan.ad.engine.commons.param;
 
 import lombok.Data;
 import lombok.ToString;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/StatisticsLogParam.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/param/StatisticsLogParam.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.ad.engine.service.score.param;
+package com.tzld.piaoquan.ad.engine.commons.param;
 
 import lombok.Data;
 

+ 1 - 0
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/ScoreParam.java

@@ -20,6 +20,7 @@ public class ScoreParam {
     private Integer newExpGroup;
     private String adAbGroup;
     private String pqtId;
+
     private Map<String, Object> extraParam = new HashMap<>();
 
     private Set<String> expCodeSet;

+ 1 - 4
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogRovFMScorer.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/VlogRovFMScorer.java

@@ -1,9 +1,6 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.commons.score;
 
 
-import com.tzld.piaoquan.ad.engine.commons.score.BaseFMModelScorer;
-import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
-import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
 import com.tzld.piaoquan.ad.engine.commons.score.model.FMModel;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;

+ 1 - 4
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/VlogRovLRScorer.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/VlogRovLRScorer.java

@@ -1,9 +1,6 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.commons.score;
 
 
-import com.tzld.piaoquan.ad.engine.commons.score.BaseLRV2ModelScorer;
-import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
-import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
 import com.tzld.piaoquan.ad.engine.commons.score.model.LRV2Model;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;

+ 1 - 4
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/XGBoostScorer.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/XGBoostScorer.java

@@ -1,9 +1,6 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.commons.score;
 
 
-import com.tzld.piaoquan.ad.engine.commons.score.BaseXGBoostModelScorer;
-import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
-import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
 import com.tzld.piaoquan.ad.engine.commons.score.model.XGBoostModel;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;

+ 1 - 4
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/XGBoostScorer683.java → ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/score/XGBoostScorer683.java

@@ -1,9 +1,6 @@
-package com.tzld.piaoquan.ad.engine.service.score;
+package com.tzld.piaoquan.ad.engine.commons.score;
 
 
-import com.tzld.piaoquan.ad.engine.commons.score.BaseXGBoostModelScorer;
-import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
-import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
 import com.tzld.piaoquan.ad.engine.commons.score.model.XGBoostModel683;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;

+ 129 - 0
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/util/WeightRandom.java

@@ -0,0 +1,129 @@
+package com.tzld.piaoquan.ad.engine.commons.util;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+/**
+ * 基于com.alibaba.nacos.client.naming.utils.Chooser 实现
+ *
+ * @param <T>
+ */
+public class WeightRandom<T> {
+
+    private final static Logger log = LoggerFactory.getLogger(WeightRandom.class);
+
+    private final List<T> items = new ArrayList<>();
+    private double[] weights;
+
+    public WeightRandom(List<ItemWithWeight<T>> itemsWithWeight) {
+        this.calWeights(itemsWithWeight);
+    }
+
+    /**
+     * 计算权重,初始化或者重新定义权重时使用
+     */
+    public void calWeights(List<ItemWithWeight<T>> itemsWithWeight) {
+        items.clear();
+
+        // 计算权重总和
+        double originWeightSum = 0;
+        for (ItemWithWeight<T> itemWithWeight : itemsWithWeight) {
+            double weight = itemWithWeight.getWeight();
+            if (weight <= 0) {
+                continue;
+            }
+
+            items.add(itemWithWeight.getItem());
+            if (Double.isInfinite(weight)) {
+                weight = 10000.0D;
+            }
+            if (Double.isNaN(weight)) {
+                weight = 1.0D;
+            }
+            originWeightSum += weight;
+        }
+
+        // 计算每个item的实际权重比例
+        double[] actualWeightRatios = new double[items.size()];
+        int index = 0;
+        for (ItemWithWeight<T> itemWithWeight : itemsWithWeight) {
+            double weight = itemWithWeight.getWeight();
+            if (weight <= 0) {
+                continue;
+            }
+            actualWeightRatios[index++] = weight / originWeightSum;
+        }
+
+        // 计算每个item的权重范围
+        // 权重范围起始位置
+        weights = new double[items.size()];
+        double weightRangeStartPos = 0;
+        for (int i = 0; i < index; i++) {
+            weights[i] = weightRangeStartPos + actualWeightRatios[i];
+            weightRangeStartPos += actualWeightRatios[i];
+        }
+    }
+
+    /**
+     * 基于权重随机算法选择
+     */
+    public T choose() {
+        double random = ThreadLocalRandom.current().nextDouble();
+        int index = Arrays.binarySearch(weights, random);
+        if (index < 0) {
+            index = -index - 1;
+        } else {
+            return items.get(index);
+        }
+
+        if (index < weights.length && random < weights[index]) {
+            return items.get(index);
+        }
+
+        // 通常不会走到这里,为了保证能得到正确的返回,这里随便返回一个
+        return items.get(0);
+    }
+
+    public static <T> T getItemByWeight(List<ItemWithWeight<T>> adItemWeight) {
+        // 权重go
+        WeightRandom<T> weightRandom = new WeightRandom<>(adItemWeight);
+        return weightRandom.choose();
+    }
+
+    public static class ItemWithWeight<T> {
+        T item;
+        double weight;
+
+        public ItemWithWeight() {
+        }
+
+        public ItemWithWeight(T item, double weight) {
+            this.item = item;
+            this.weight = weight;
+        }
+
+        public T getItem() {
+            return item;
+        }
+
+        public void setItem(T item) {
+            this.item = item;
+        }
+
+        public double getWeight() {
+            return weight;
+        }
+
+        public void setWeight(double weight) {
+            this.weight = weight;
+        }
+    }
+
+}
+

+ 2 - 2
ad-engine-server/src/main/java/com/tzld/piaoquan/ad/engine/server/controller/AdRecommendController.java

@@ -1,9 +1,9 @@
 package com.tzld.piaoquan.ad.engine.server.controller;
 
 import com.tzld.piaoquan.ad.engine.service.score.RankService;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.BidRankRecommendRequestParam;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;

+ 1 - 1
ad-engine-server/src/main/resources/ad_score_config_20240626.conf

@@ -1,6 +1,6 @@
 scorer-config = {
   lr-rov-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.VlogRovFMScorer"
+    scorer-name = "com.tzld.piaoquan.ad.engine.commons.score.VlogRovFMScorer"
     scorer-priority = 99
     model-path = "zhangbo/model_bkb8_v4.txt"
   }

+ 1 - 1
ad-engine-server/src/main/resources/ad_score_config_20240813.conf

@@ -1,6 +1,6 @@
 scorer-config = {
   lr-rov-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.XGBoostScorer"
+    scorer-name = "com.tzld.piaoquan.ad.engine.commons.score.XGBoostScorer"
     scorer-priority = 99
     model-path = "zhangbo/model.tar.gz"
   }

+ 1 - 1
ad-engine-server/src/main/resources/ad_score_config_xgboost.conf

@@ -1,6 +1,6 @@
 scorer-config = {
   lr-rov-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.XGBoostScorer"
+    scorer-name = "com.tzld.piaoquan.ad.engine.commons.score.XGBoostScorer"
     scorer-priority = 99
     model-path = "zhangbo/model_xgb_1000.tar.gz"
   }

+ 1 - 1
ad-engine-server/src/main/resources/ad_score_config_xgboost_20240909.conf

@@ -1,6 +1,6 @@
 scorer-config = {
   lr-rov-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.XGBoostScorer683"
+    scorer-name = "com.tzld.piaoquan.ad.engine.commons.score.XGBoostScorer683"
     scorer-priority = 99
     model-path = "zhangbo/model_xgb_351_1000_v2.tar.gz"
   }

+ 1 - 1
ad-engine-server/src/main/resources/ad_score_config_xgboost_683.conf

@@ -1,6 +1,6 @@
 scorer-config = {
   lr-rov-score-config = {
-    scorer-name = "com.tzld.piaoquan.ad.engine.service.score.XGBoostScorer683"
+    scorer-name = "com.tzld.piaoquan.ad.engine.commons.score.XGBoostScorer683"
     scorer-priority = 99
     model-path = "zhangbo/model_xgb_351_1000.tar.gz"
   }

+ 2 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/log/LogHubService.java

@@ -1,8 +1,8 @@
 package com.tzld.piaoquan.ad.engine.service.log;
 
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.param.RecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 
 import java.util.List;

+ 2 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/log/impl/LogHubServiceImpl.java

@@ -6,8 +6,8 @@ import com.google.common.collect.Sets;
 import com.tzld.commons.aliyun.log.AliyunLogManager;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.service.log.LogHubService;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.param.RecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRequestContext;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/param/ThresholdPredictModelParam.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.ad.engine.service.predict.param;
 
 import com.alibaba.fastjson.JSONObject;
-import com.tzld.piaoquan.ad.engine.service.score.param.MachineInfoParam;
+import com.tzld.piaoquan.ad.engine.commons.param.MachineInfoParam;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/param/request/ThresholdPredictModelRequestParam.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.ad.engine.service.predict.param.request;
 
 import com.alibaba.fastjson.JSONObject;
-import com.tzld.piaoquan.ad.engine.service.score.param.MachineInfoParam;
+import com.tzld.piaoquan.ad.engine.commons.param.MachineInfoParam;
 import lombok.Data;
 
 /**

+ 1 - 5
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/remote/FeatureRemoteService.java

@@ -1,24 +1,20 @@
 package com.tzld.piaoquan.ad.engine.service.remote;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdActionFeature;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
 import com.tzld.piaoquan.ad.engine.commons.util.CommonCollectionUtils;
-import com.tzld.piaoquan.ad.engine.service.score.convert.FeatureConvert;
+import com.tzld.piaoquan.ad.engine.commons.convert.FeatureConvert;
 import com.tzld.piaoquan.recommend.feature.client.FeatureClient;
 import com.tzld.piaoquan.recommend.feature.model.feature.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.NumberUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.Collections;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 

+ 2 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService.java

@@ -1,9 +1,9 @@
 package com.tzld.piaoquan.ad.engine.service.score;
 
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.BidRankRecommendRequestParam;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
 

+ 7 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategy.java

@@ -1,11 +1,17 @@
 package com.tzld.piaoquan.ad.engine.service.score;
 
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 
 import java.util.List;
 
 public interface RankStrategy {
+
+    AdRankItem adItemRank(RankRecommendRequestParam request);
+
     List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam);
+
+    List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam);
 }

+ 27 - 7
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyXGBBasic.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBasic.java

@@ -1,13 +1,16 @@
 package com.tzld.piaoquan.ad.engine.service.score;
 
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
+import com.tzld.piaoquan.ad.engine.commons.convert.RequestConvert;
 import com.tzld.piaoquan.ad.engine.commons.enums.RedisPrefixEnum;
 import com.tzld.piaoquan.ad.engine.commons.redis.AdRedisHelper;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
 import com.tzld.piaoquan.ad.engine.service.feature.FeatureService;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.service.log.LogHubService;
+import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -18,7 +21,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 @Slf4j
-public abstract class RankStrategyXGBBasic implements RankStrategy {
+public abstract class RankStrategyBasic implements RankStrategy {
 
     @ApolloJsonValue("${no.postback.conversion.adverids:[]}")
     private Set<String> noPostbackConversionAdVerIds;
@@ -28,16 +31,33 @@ public abstract class RankStrategyXGBBasic implements RankStrategy {
     private FeatureService featureService;
     @Autowired
     protected AdRedisHelper adRedisHelper;
+    @Autowired
+    private LogHubService logHubService;
+
+    public abstract String strategy();
+
+
+    public AdRankItem adItemRank(RankRecommendRequestParam request) {
+        ScoreParam scoreParam = RequestConvert.requestConvert(request);
+
+        List<AdRankItem> adRankItems = this.adItemRank(request.getAdIdList(), scoreParam);
 
+        logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, this.strategy());
+
+        return adRankItems.get(0);
+    }
+
+    public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
+        return this.adItemRank(request.getAdIdList(), scoreParam);
+    }
 
-    protected Feature getFeature(ScoreParam param, RankRecommendRequestParam request) {
-        List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
-        List<String> cidList = adIdList.stream()
+    protected Feature getFeature(ScoreParam param, List<AdPlatformCreativeDTO> creativeDTOS) {
+        List<String> cidList = creativeDTOS.stream()
                 .map(AdPlatformCreativeDTO::getCreativeId)
                 .map(Object::toString)
                 .collect(Collectors.toList());
 
-        List<String> adVerIdList = adIdList.stream()
+        List<String> adVerIdList = creativeDTOS.stream()
                 .map(AdPlatformCreativeDTO::getAdVerId)
                 .filter(StringUtils::isNotBlank)
                 .distinct()

+ 15 - 20
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/TacticsAndLRModelScoreRankService.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy679.java

@@ -1,11 +1,9 @@
-package com.tzld.piaoquan.ad.engine.service.score.deprecated;
+package com.tzld.piaoquan.ad.engine.service.score;
 
+import com.tzld.piaoquan.ad.engine.commons.dto.AdDirectionScore;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.util.NumUtil;
-import com.tzld.piaoquan.ad.engine.service.score.RankService680;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdDirectionScore;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -17,26 +15,19 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Service
-public class TacticsAndLRModelScoreRankService {
+public class RankStrategyBy679 extends RankStrategyBasic {
 
     @Autowired
-    private RankService680 rankService680;
+    private RankStrategyBy680 rankService680;
 
-    public List<AdRankItem> adItemRank(RankRecommendRequestParam requestParam, ScoreParam scoreParam) {
+
+    @Override
+    public List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam) {
 
         // LR模型打分结果
-        List<AdRankItem> result = rankService680.adItemRank(requestParam, scoreParam);
-
-        // List<JSONObject> collect = result.stream().map(item -> {
-        //     JSONObject json = new JSONObject();
-        //     json.put("cid", item.getAdId());
-        //     json.put("score", item.getScore());
-        //     json.put("modelScore", item.getLrScore());
-        //     json.put("allfeature", item.getFeatureMap());
-        //     return json;
-        // }).collect(Collectors.toList());
-
-        Map<Long, AdDirectionScore> adDirectionScoreMap = requestParam.getAdIdList().stream()
+        List<AdRankItem> result = rankService680.adItemRank(creativeDTOS, scoreParam);
+
+        Map<Long, AdDirectionScore> adDirectionScoreMap = creativeDTOS.stream()
                 .collect(Collectors.toMap(AdPlatformCreativeDTO::getCreativeId, AdPlatformCreativeDTO::getAdDirectionScore));
 
         for (AdRankItem adRankItem : result) {
@@ -89,4 +80,8 @@ public class TacticsAndLRModelScoreRankService {
         adRankItem.getFeatureMap().putAll(scoreDetailMap);
     }
 
+    @Override
+    public String strategy() {
+        return "679";
+    }
 }

+ 14 - 11
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService680.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy680.java

@@ -6,8 +6,7 @@ import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
 import com.tzld.piaoquan.ad.engine.commons.thread.ThreadPoolFactory;
 import com.tzld.piaoquan.ad.engine.commons.util.*;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -29,7 +28,7 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Component
-public class RankService680 extends RankStrategyXGBBasic {
+public class RankStrategyBy680 extends RankStrategyBasic {
 
 
     private Map<String, double[]> bucketsMap = new HashMap<>();
@@ -43,7 +42,7 @@ public class RankService680 extends RankStrategyXGBBasic {
     private Map<String, Double> weightMap;
 
     @Override
-    public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
+    public List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam) {
 
         Map<String, Double> weightParam = ObjUtil.nullOrDefault(weightMap, new HashMap<>());
 
@@ -59,7 +58,7 @@ public class RankService680 extends RankStrategyXGBBasic {
         long start = System.currentTimeMillis();
         // 特征处理
         // feature1
-        Feature feature = this.getFeature(scoreParam, request);
+        Feature feature = this.getFeature(scoreParam, creativeDTOS);
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();
@@ -87,15 +86,15 @@ public class RankService680 extends RankStrategyXGBBasic {
         List<AdRankItem> adRankItems = new ArrayList<>();
         Random random = new Random();
         List<Future<AdRankItem>> futures = new ArrayList<>();
-        CountDownLatch cdl1 = new CountDownLatch(request.getAdIdList().size());
-        for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
+        CountDownLatch cdl1 = new CountDownLatch(creativeDTOS.size());
+        for (AdPlatformCreativeDTO dto : creativeDTOS) {
             Future<AdRankItem> future = ThreadPoolFactory.feature().submit(() -> {
                 AdRankItem adRankItem = new AdRankItem();
                 try {
                     adRankItem.setAdId(dto.getCreativeId());
                     adRankItem.setCreativeCode(dto.getCreativeCode());
                     adRankItem.setAdVerId(dto.getAdVerId());
-                    adRankItem.setVideoId(request.getVideoId());
+                    adRankItem.setVideoId(scoreParam.getVideoId());
                     adRankItem.setCpa(dto.getCpa());
                     adRankItem.setId(dto.getAdId());
                     adRankItem.setCampaignId(dto.getCampaignId());
@@ -245,7 +244,7 @@ public class RankService680 extends RankStrategyXGBBasic {
         log.info("cost={}, feature1={}, feature2={}, feature31={}, feature32={}, feature4={}, getScorerPipeline={}, " +
                         "adIdSize={}, adRankItemsSize={}",
                 time5 - start, time1 - start, time2 - time1, time31 - time2, time3 - time31, time4 - time3,
-                time5 - time4, request.getAdIdList().size(), adRankItems.size());
+                time5 - time4, creativeDTOS.size(), adRankItems.size());
 
         result.sort(ComparatorUtil.equalsRandomComparator());
 
@@ -484,7 +483,7 @@ public class RankService680 extends RankStrategyXGBBasic {
             for (String tagsField : tagsFieldList) {
                 if (StringUtils.isNotEmpty(feature.get(tagsField))) {
                     String tags = feature.get(tagsField);
-                    //Double[] doubles = ExtractorUtils.funcC34567ForTags(tags, title);
+                    // Double[] doubles = ExtractorUtils.funcC34567ForTags(tags, title);
                     Double[] doubles;
                     if (scoreParam.getExpCodeSet().contains(word2vecExp)) {
                         doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
@@ -567,7 +566,7 @@ public class RankService680 extends RankStrategyXGBBasic {
             return;
         }
         synchronized (this) {
-            InputStream resourceStream = RankService680.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
+            InputStream resourceStream = RankStrategyBy680.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
             if (resourceStream != null) {
                 try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
                     Map<String, double[]> bucketsMap = new HashMap<>();
@@ -619,4 +618,8 @@ public class RankService680 extends RankStrategyXGBBasic {
         return newFeatureMap;
     }
 
+    @Override
+    public String strategy() {
+        return "680";
+    }
 }

+ 14 - 11
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService683.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy683.java

@@ -5,8 +5,7 @@ import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
 import com.tzld.piaoquan.ad.engine.commons.thread.ThreadPoolFactory;
 import com.tzld.piaoquan.ad.engine.commons.util.*;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -27,14 +26,14 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Component
-public class RankService683 extends RankStrategyXGBBasic {
+public class RankStrategyBy683 extends RankStrategyBasic {
 
     private Map<String, double[]> bucketsMap = new HashMap<>();
 
     private Map<String, Double> bucketsLen = new HashMap<>();
 
     @Override
-    public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
+    public List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam) {
         Set<String> noApiAdVerIds = getNoApiAdVerIds();
 
         long ts = System.currentTimeMillis() / 1000;
@@ -42,7 +41,7 @@ public class RankService683 extends RankStrategyXGBBasic {
         long start = System.currentTimeMillis();
         // 特征处理
         // feature1
-        Feature feature = this.getFeature(scoreParam, request);
+        Feature feature = this.getFeature(scoreParam, creativeDTOS);
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();
@@ -67,18 +66,18 @@ public class RankService683 extends RankStrategyXGBBasic {
         Map<String, String> sceneFeatureMap = this.handleSceneFeature(ts);
         long time1 = System.currentTimeMillis();
 
-        List<AdRankItem> adRankItems = new ArrayList<>(request.getAdIdList().size());
+        List<AdRankItem> adRankItems = new ArrayList<>(creativeDTOS.size());
         Random random = new Random();
         List<Future<AdRankItem>> futures = new ArrayList<>();
-        CountDownLatch cdl1 = new CountDownLatch(request.getAdIdList().size());
-        for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
+        CountDownLatch cdl1 = new CountDownLatch(creativeDTOS.size());
+        for (AdPlatformCreativeDTO dto : creativeDTOS) {
             Future<AdRankItem> future = ThreadPoolFactory.feature().submit(() -> {
                 AdRankItem adRankItem = new AdRankItem();
                 try {
                     adRankItem.setAdId(dto.getCreativeId());
                     adRankItem.setCreativeCode(dto.getCreativeCode());
                     adRankItem.setAdVerId(dto.getAdVerId());
-                    adRankItem.setVideoId(request.getVideoId());
+                    adRankItem.setVideoId(scoreParam.getVideoId());
                     adRankItem.setCpa(dto.getCpa());
                     adRankItem.setId(dto.getAdId());
                     adRankItem.setCampaignId(dto.getCampaignId());
@@ -226,7 +225,7 @@ public class RankService683 extends RankStrategyXGBBasic {
         log.info("cost={}, feature1={}, feature2={}, feature31={}, feature32={}, feature4={}, getScorerPipeline={}, " +
                         "adIdSize={}, adRankItemsSize={}",
                 time5 - start, time1 - start, time2 - time1, time31 - time2, time3 - time31, time4 - time3,
-                time5 - time4, request.getAdIdList().size(), adRankItems.size());
+                time5 - time4, creativeDTOS.size(), adRankItems.size());
 
         result.sort(ComparatorUtil.equalsRandomComparator());
 
@@ -546,7 +545,7 @@ public class RankService683 extends RankStrategyXGBBasic {
             return;
         }
         synchronized (this) {
-            InputStream resourceStream = RankService683.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
+            InputStream resourceStream = RankStrategyBy683.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
             if (resourceStream != null) {
                 try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
                     Map<String, double[]> bucketsMap = new HashMap<>();
@@ -600,4 +599,8 @@ public class RankService683 extends RankStrategyXGBBasic {
         return newFeatureMap;
     }
 
+    @Override
+    public String strategy() {
+        return "683";
+    }
 }

+ 15 - 11
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService687.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy687.java

@@ -1,12 +1,11 @@
 package com.tzld.piaoquan.ad.engine.service.score;
 
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
 import com.tzld.piaoquan.ad.engine.commons.thread.ThreadPoolFactory;
 import com.tzld.piaoquan.ad.engine.commons.util.*;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -27,7 +26,7 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Service
-public class RankService687 extends RankStrategyXGBBasic {
+public class RankStrategyBy687 extends RankStrategyBasic {
 
     private Map<String, double[]> bucketsMap = new HashMap<>();
 
@@ -37,7 +36,7 @@ public class RankService687 extends RankStrategyXGBBasic {
     private boolean similarityConcurrent;
 
     @Override
-    public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
+    public List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam) {
         Set<String> noApiAdVerIds = getNoApiAdVerIds();
 
         long ts = System.currentTimeMillis() / 1000;
@@ -49,7 +48,7 @@ public class RankService687 extends RankStrategyXGBBasic {
 
         long start = System.currentTimeMillis();
         // 特征处理
-        Feature feature = this.getFeature(scoreParam, request);
+        Feature feature = this.getFeature(scoreParam, creativeDTOS);
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();
@@ -74,15 +73,15 @@ public class RankService687 extends RankStrategyXGBBasic {
         Map<String, String> sceneFeatureMap = this.handleSceneFeature(ts);
         long time1 = System.currentTimeMillis();
 
-        List<AdRankItem> adRankItems = new ArrayList<>(request.getAdIdList().size());
+        List<AdRankItem> adRankItems = new ArrayList<>(creativeDTOS.size());
         Random random = new Random();
         if (similarityConcurrent) {
-            for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
+            for (AdPlatformCreativeDTO dto : creativeDTOS) {
                 AdRankItem adRankItem = new AdRankItem();
                 adRankItem.setAdId(dto.getCreativeId());
                 adRankItem.setCreativeCode(dto.getCreativeCode());
                 adRankItem.setAdVerId(dto.getAdVerId());
-                adRankItem.setVideoId(request.getVideoId());
+                adRankItem.setVideoId(scoreParam.getVideoId());
                 adRankItem.setCpa(dto.getCpa());
                 adRankItem.setId(dto.getAdId());
                 adRankItem.setCampaignId(dto.getCampaignId());
@@ -149,13 +148,13 @@ public class RankService687 extends RankStrategyXGBBasic {
                 log.error("handleE1AndE2Feature and handleD3AndB1Feature wait timeout", e);
             }
         } else {
-            for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
+            for (AdPlatformCreativeDTO dto : creativeDTOS) {
                 long time20 = System.currentTimeMillis();
                 AdRankItem adRankItem = new AdRankItem();
                 adRankItem.setAdId(dto.getCreativeId());
                 adRankItem.setCreativeCode(dto.getCreativeCode());
                 adRankItem.setAdVerId(dto.getAdVerId());
-                adRankItem.setVideoId(request.getVideoId());
+                adRankItem.setVideoId(scoreParam.getVideoId());
                 adRankItem.setCpa(dto.getCpa());
                 adRankItem.setId(dto.getAdId());
                 adRankItem.setCampaignId(dto.getCampaignId());
@@ -579,7 +578,7 @@ public class RankService687 extends RankStrategyXGBBasic {
             return;
         }
         synchronized (this) {
-            InputStream resourceStream = RankService687.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
+            InputStream resourceStream = RankStrategyBy687.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
             if (resourceStream != null) {
                 try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
                     Map<String, double[]> bucketsMap = new HashMap<>();
@@ -632,4 +631,9 @@ public class RankService687 extends RankStrategyXGBBasic {
 
         return newFeatureMap;
     }
+
+    @Override
+    public String strategy() {
+        return "687";
+    }
 }

+ 14 - 11
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyXGBAutoUpdateModel688.java → ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBy688.java

@@ -1,12 +1,11 @@
 package com.tzld.piaoquan.ad.engine.service.score;
 
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
 import com.tzld.piaoquan.ad.engine.commons.thread.ThreadPoolFactory;
 import com.tzld.piaoquan.ad.engine.commons.util.*;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
@@ -28,7 +27,7 @@ import java.util.stream.Collectors;
 
 @Slf4j
 @Component
-public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
+public class RankStrategyBy688 extends RankStrategyBasic {
 
 
     private Map<String, double[]> bucketsMap = new HashMap<>();
@@ -39,7 +38,7 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
     private String word2vecExp;
 
     @Override
-    public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
+    public List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam) {
 
         Set<String> noApiAdVerIds = getNoApiAdVerIds();
 
@@ -53,7 +52,7 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
         long start = System.currentTimeMillis();
         // 特征处理
         // feature1
-        Feature feature = this.getFeature(scoreParam, request);
+        Feature feature = this.getFeature(scoreParam, creativeDTOS);
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();
@@ -81,15 +80,15 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
         List<AdRankItem> adRankItems = new ArrayList<>();
         Random random = new Random();
         List<Future<AdRankItem>> futures = new ArrayList<>();
-        CountDownLatch cdl1 = new CountDownLatch(request.getAdIdList().size());
-        for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
+        CountDownLatch cdl1 = new CountDownLatch(creativeDTOS.size());
+        for (AdPlatformCreativeDTO dto : creativeDTOS) {
             Future<AdRankItem> future = ThreadPoolFactory.feature().submit(() -> {
                 AdRankItem adRankItem = new AdRankItem();
                 try {
                     adRankItem.setAdId(dto.getCreativeId());
                     adRankItem.setCreativeCode(dto.getCreativeCode());
                     adRankItem.setAdVerId(dto.getAdVerId());
-                    adRankItem.setVideoId(request.getVideoId());
+                    adRankItem.setVideoId(scoreParam.getVideoId());
                     adRankItem.setCpa(dto.getCpa());
                     adRankItem.setId(dto.getAdId());
                     adRankItem.setCampaignId(dto.getCampaignId());
@@ -237,7 +236,7 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
         log.info("cost={}, feature1={}, feature2={}, feature31={}, feature32={}, feature4={}, getScorerPipeline={}, " +
                         "adIdSize={}, adRankItemsSize={}",
                 time5 - start, time1 - start, time2 - time1, time31 - time2, time3 - time31, time4 - time3,
-                time5 - time4, request.getAdIdList().size(), adRankItems.size());
+                time5 - time4, creativeDTOS.size(), adRankItems.size());
 
         result.sort(ComparatorUtil.equalsRandomComparator());
 
@@ -476,7 +475,7 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
             for (String tagsField : tagsFieldList) {
                 if (StringUtils.isNotEmpty(feature.get(tagsField))) {
                     String tags = feature.get(tagsField);
-                    //Double[] doubles = ExtractorUtils.funcC34567ForTags(tags, title);
+                    // Double[] doubles = ExtractorUtils.funcC34567ForTags(tags, title);
                     Double[] doubles;
                     if (scoreParam.getExpCodeSet().contains(word2vecExp)) {
                         doubles = ExtractorUtils.funcC34567ForTagsNew(tags, title);
@@ -559,7 +558,7 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
             return;
         }
         synchronized (this) {
-            InputStream resourceStream = RankStrategyXGBAutoUpdateModel688.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
+            InputStream resourceStream = RankStrategyBy688.class.getClassLoader().getResourceAsStream("20240718_ad_bucket_688.txt");
             if (resourceStream != null) {
                 try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceStream))) {
                     Map<String, double[]> bucketsMap = new HashMap<>();
@@ -611,4 +610,8 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
         return newFeatureMap;
     }
 
+    @Override
+    public String strategy() {
+        return "688";
+    }
 }

+ 68 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyByWeight.java

@@ -0,0 +1,68 @@
+package com.tzld.piaoquan.ad.engine.service.score;
+
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
+import com.tzld.piaoquan.ad.engine.commons.util.ComparatorUtil;
+import com.tzld.piaoquan.ad.engine.commons.util.ObjUtil;
+import com.tzld.piaoquan.ad.engine.commons.util.WeightRandom;
+import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Random;
+
+
+@Component
+public class RankStrategyByWeight extends RankStrategyBasic {
+    @Override
+    public String strategy() {
+        return "";
+    }
+
+    @Override
+    public List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam) {
+
+        List<WeightRandom.ItemWithWeight<AdRankItem>> creativeItemWeights = new ArrayList<>(creativeDTOS.size());
+        List<AdRankItem> adRankItems = new ArrayList<>(creativeDTOS.size());
+        Random random = new Random();
+        double originWeightSum = 0;
+        for (AdPlatformCreativeDTO dto : creativeDTOS) {
+            AdRankItem adRankItem = new AdRankItem();
+            adRankItem.setAdId(dto.getCreativeId());
+            adRankItem.setCreativeCode(dto.getCreativeCode());
+            adRankItem.setAdVerId(dto.getAdVerId());
+            adRankItem.setVideoId(scoreParam.getVideoId());
+            adRankItem.setCpa(dto.getCpa());
+            adRankItem.setId(dto.getAdId());
+            adRankItem.setCampaignId(dto.getCampaignId());
+            adRankItem.setCpm(ObjUtil.nullOrDefault(dto.getCpm(), 90).doubleValue());
+            adRankItem.setRandom(random.nextInt(1000));
+            adRankItem.setWeight(dto.getWeight());
+            adRankItem.setScore(0d);
+            adRankItem.getScoreMap().put("weight", dto.getWeight());
+
+            adRankItems.add(adRankItem);
+
+            originWeightSum += dto.getWeight();
+            WeightRandom.ItemWithWeight<AdRankItem> itemWithWeight = new WeightRandom.ItemWithWeight<AdRankItem>();
+            itemWithWeight.setItem(adRankItem);
+            itemWithWeight.setWeight(adRankItem.getWeight());
+            creativeItemWeights.add(itemWithWeight);
+        }
+
+        AdRankItem adRankItem = WeightRandom.getItemByWeight(creativeItemWeights);
+
+        for (AdRankItem rankItem : adRankItems) {
+            rankItem.getScoreMap().put("weightSum", originWeightSum);
+            if (Objects.equals(rankItem.getAdId(), adRankItem.getAdId())) {
+                rankItem.setScore(rankItem.getWeight() / originWeightSum);
+            }
+        }
+
+        adRankItems.sort(ComparatorUtil.equalsRandomComparator());
+
+        return adRankItems;
+    }
+}

+ 2 - 2
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/BidRankRecommendRequestParam.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.ad.engine.service.score.deprecated;
 
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.param.RecommendRequestParam;
 import lombok.Data;
 
 import java.util.List;

+ 3 - 3
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/RankServiceThompsonImpl.java

@@ -5,9 +5,9 @@ import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
 import com.tzld.piaoquan.ad.engine.commons.util.CommonCollectionUtils;
 import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
 import com.tzld.piaoquan.ad.engine.service.score.RankService;
-import com.tzld.piaoquan.ad.engine.service.score.convert.RequestConvert;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.convert.RequestConvert;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
 import org.slf4j.Logger;

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/deprecated/VideoAdThompsonScorerV2.java

@@ -5,7 +5,7 @@ import com.google.gson.Gson;
 import com.tzld.piaoquan.ad.engine.commons.redis.AlgorithmRedisHelper;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.util.ComparatorUtil;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.math3.distribution.BetaDistribution;

+ 21 - 24
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/impl/RankServiceImpl.java

@@ -9,17 +9,17 @@ import com.tzld.piaoquan.ad.engine.service.predict.helper.NewExpInfoHelper;
 import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
 import com.tzld.piaoquan.ad.engine.service.remote.FeatureRemoteService;
 import com.tzld.piaoquan.ad.engine.service.score.*;
-import com.tzld.piaoquan.ad.engine.service.score.convert.RequestConvert;
+import com.tzld.piaoquan.ad.engine.commons.convert.RequestConvert;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.BidRankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.RankServiceThompsonImpl;
-import com.tzld.piaoquan.ad.engine.service.score.deprecated.TacticsAndLRModelScoreRankService;
+import com.tzld.piaoquan.ad.engine.service.score.RankStrategyBy679;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.VideoAdThompsonScorerV2;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.container.AdCreativeFeatureContainer;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.container.PidLambdaContainer;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.container.PidLambdaForCpcContainer;
 import com.tzld.piaoquan.ad.engine.service.score.deprecated.container.PidLambdaV2Container;
-import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
-import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
+import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
+import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdItemFeature;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
@@ -56,15 +56,17 @@ public class RankServiceImpl implements RankService {
     private AdCreativeFeatureContainer adCreativeFeatureContainer;
 
     @Autowired
-    private RankService680 rankService680;
+    private RankStrategyBy680 rankService680;
     @Autowired
-    private RankService683 rankService683;
+    private RankStrategyBy683 rankService683;
     @Autowired
-    private RankService687 rankService687;
+    private RankStrategyBy687 rankService687;
     @Autowired
-    private RankStrategyXGBAutoUpdateModel688 rankStrategyXGBAutoUpdateModel688;
+    private RankStrategyBy688 rankStrategyBy688;
     @Autowired
-    private TacticsAndLRModelScoreRankService tacticsAndFmModelScoreRankService;
+    private RankStrategyBy679 rankStrategyBy679;
+    @Autowired
+    private RankStrategyByWeight rankStrategyByWeight;
 
     @Value("${ad.model.cpm.max:200}")
     Double cpmMax = 200d;
@@ -75,28 +77,23 @@ public class RankServiceImpl implements RankService {
     @Value("${ad.cvr.adjusting.exp:652}")
     private String cvrAdjustingExpCode;
 
-    @Value("${fm.model.score.exp.code:680}")
-    private String fmModelScoreExpCode;
-
-    @Value("${tactics.fm.mode.score.exp.code:679}")
-    private String tacticsAndFmModelScoreExpCode;
 
     public AdRankItem adItemRank(RankRecommendRequestParam requestParam) {
         Set<String> expCodeSet = AbUtil.unfoldAllExpCode(requestParam.getAdAbExpArr());
         Long appType = requestParam.getAppType();
         Integer newExpGroup = requestParam.getNewExpGroup();
-        if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, fmModelScoreExpCode)) {
-            return rankBy680(requestParam);
+        if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "680")) {
+            return rankService680.adItemRank(requestParam);
         } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "683")) {
-            return rankBy683(requestParam);
+            return rankService683.adItemRank(requestParam);
         } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "687")) {
-            return rankBy687(requestParam);
-        } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, tacticsAndFmModelScoreExpCode)) {
-            return rankBy679(requestParam);
+            return rankService687.adItemRank(requestParam);
+        } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "679")) {
+            return rankStrategyBy679.adItemRank(requestParam);
         } else if (AbUtil.isInAbExp(expCodeSet, appType, newExpGroup, "688")) {
-            return rankStrategyXGBAutoUpdateModel688(requestParam);
+            return rankStrategyBy688.adItemRank(requestParam);
         } else {
-            return adItemRankWithVideoAdThompson(requestParam);
+            return rankStrategyByWeight.adItemRank(requestParam);
         }
     }
 
@@ -123,14 +120,14 @@ public class RankServiceImpl implements RankService {
 
     private AdRankItem rankStrategyXGBAutoUpdateModel688(RankRecommendRequestParam request) {
         ScoreParam scoreParam = RequestConvert.requestConvert(request);
-        List<AdRankItem> adRankItems = rankStrategyXGBAutoUpdateModel688.adItemRank(request, scoreParam);
+        List<AdRankItem> adRankItems = rankStrategyBy688.adItemRank(request, scoreParam);
         logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, "688");
         return adRankItems.get(0);
     }
 
     private AdRankItem rankBy679(RankRecommendRequestParam requestParam) {
         ScoreParam scoreParam = RequestConvert.requestConvert(requestParam);
-        List<AdRankItem> adRankItems = tacticsAndFmModelScoreRankService.adItemRank(requestParam, scoreParam);
+        List<AdRankItem> adRankItems = rankStrategyBy679.adItemRank(requestParam, scoreParam);
         logHubService.scoreLogUpload(scoreParam, requestParam.getAdIdList(), adRankItems, requestParam, "679");
         double score = adRankItems.get(0).getScore();
         if (score > 0) {