Преглед на файлове

Merge branch 'master' into 20251224_feature_fjy_ad_chubuchu_v2

yaodaoseng преди 4 дни
родител
ревизия
eec1079f9d

+ 9 - 3
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/feature/FeatureService.java

@@ -30,7 +30,8 @@ public class FeatureService {
 
     public Feature getFeature(Collection<String> cidList, Collection<String> adVerIdList, List<Long> skuIdList, ScoreParam param) {
         AdRequestContext context = param.getRequestContext();
-
+        log.info("getFeature, cidListSize:{}, adVerIdListSize:{}, skuIdListSize:{}", cidList.size(), adVerIdList.size(), skuIdList.size());
+        long start = System.currentTimeMillis();
         List<FeatureKeyProto> protos = new ArrayList<>();
         for (String cidStr : cidList) {
 
@@ -63,7 +64,8 @@ public class FeatureService {
                 protos.add(genWithCidAndVid("alg_cid_feature_vid_cf", cidStr, param.getVideoId().toString()));
             }
         }
-
+        long stage1 = System.currentTimeMillis();
+        log.info("getFeature, protosSize:{}, 耗时1:{}", protos.size(), stage1 - start);
         // skuid
         for (Long skuId : skuIdList) {
             if (StringUtils.isNotEmpty(param.getMid())) {
@@ -93,7 +95,11 @@ public class FeatureService {
             protos.add(genWithMid("mid_return_video_cate", param.getMid()));
             protos.add(genWithMid("mid_share_video_cate", param.getMid()));
         }
-        return this.invokeFeatureService(protos);
+        long stage2 = System.currentTimeMillis();
+        log.info("getFeature, protosSize:{}, 耗时2:{}", protos.size(), stage2 - stage1);
+        Feature feature = this.invokeFeatureService(protos);
+        log.info("getFeature, 耗时3:{}", System.currentTimeMillis() - stage2);
+        return feature;
     }
 
     public Feature getPredictFeature(PredictContext context) {

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/FeaturePrinterStrategy.java

@@ -41,7 +41,7 @@ public class FeaturePrinterStrategy extends RankStrategyBasic {
         adRankItem.setCampaignId(dto.getCampaignId());
         adRankItem.setCpm(ObjUtil.nullOrDefault(dto.getCpm(), 90).doubleValue());
         adRankItem.setSkuId(dto.getSkuId());
-        if (noApiAdVerIds.contains(dto.getAdVerId())) {
+        if (noApiAdVerIds != null && noApiAdVerIds.contains(dto.getAdVerId())) {
             adRankItem.getExt().put("isApi", "0");
         } else {
             adRankItem.getExt().put("isApi", "1");

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

@@ -1,9 +1,7 @@
 package com.tzld.piaoquan.ad.engine.service.score.strategy;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.commons.enums.CrowdLayerEnum;
@@ -183,6 +181,7 @@ public abstract class RankStrategyBasic implements RankStrategy {
 //    }
 
     protected Feature getFeature(ScoreParam param, RankRecommendRequestParam request) {
+        long startTime = System.currentTimeMillis();
         List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
         Feature finalFeature = null;
 
@@ -222,17 +221,28 @@ public abstract class RankStrategyBasic implements RankStrategy {
 
             // 等待所有任务完成并合并结果
             for (Future<Feature> future : futures) {
-                Feature batchFeature = future.get();  // 获取每个任务的结果
-                if (finalFeature == null) {
-                    finalFeature = batchFeature;
-                } else {
-                    // 合并特征
-                    finalFeature.merge(batchFeature);
+                try {
+                    Feature batchFeature = future.get();  // 获取每个任务的结果
+                    if (batchFeature != null) {
+                        if (finalFeature == null) {
+                            finalFeature = batchFeature;
+                        } else {
+                            // 合并特征
+                            finalFeature.merge(batchFeature);
+                        }
+                    }
+                } catch (ExecutionException e) {
+                    log.error("获取特征批次失败: {}", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
+                    // 继续处理其他批次,不中断整个流程
                 }
             }
-        } catch (InterruptedException | ExecutionException e) {
+        } catch (InterruptedException e) {
+            log.error("getFeature interrupted", e);
+            Thread.currentThread().interrupt();
+        } catch (Exception e) {
             log.error("getFeature error", e);
         }
+        log.info("getFeature time: {}", System.currentTimeMillis() - startTime);
         return finalFeature;
     }
 
@@ -915,6 +925,13 @@ public abstract class RankStrategyBasic implements RankStrategy {
 
     protected void putMetaFeature(AdRankItem adRankItem, Feature feature, Map<String, String> reqFeature,
                                   Map<String, String> sceneFeatureMap, RankRecommendRequestParam request) {
+        if (feature == null) {
+            log.warn("putMetaFeature: feature is null, skip processing. adVerId={}", adRankItem.getAdVerId());
+            adRankItem.getMetaFeatureMap().put("reqFeature", reqFeature);
+            adRankItem.getMetaFeatureMap().put("sceneFeature", sceneFeatureMap);
+            return;
+        }
+
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();
         Map<String, Map<String, Map<String, String>>> allAdVerFeature = feature.getAdVerFeature();

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

@@ -71,6 +71,10 @@ public class RankStrategyBy679 extends RankStrategyBasic {
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();

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

@@ -81,6 +81,10 @@ public class RankStrategyBy680 extends RankStrategyBasic {
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();

+ 4 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy683.java

@@ -92,7 +92,10 @@ public class RankStrategyBy683 extends RankStrategyBasic {
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
-
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();

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

@@ -67,6 +67,10 @@ public class RankStrategyBy687 extends RankStrategyBasic {
 
         // 获取所有创意对应的客户列表
         Feature feature = this.getFeature(scoreParam, request);
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         List<AdRankItem> rankItems = new ArrayList<>(recallCreativeList.size());
         for (AdPlatformCreativeDTO dto : recallCreativeList) {

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

@@ -92,7 +92,10 @@ public class RankStrategyBy688 extends RankStrategyBasic {
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
-
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();