Jelajahi Sumber

feat:代码整理

zhaohaipeng 7 bulan lalu
induk
melakukan
6a9cb2f9db

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

@@ -1,13 +1,13 @@
 package com.tzld.piaoquan.ad.engine.server.controller;
 
+import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.RankService;
-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.commons.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -57,35 +57,41 @@ public class AdRecommendController {
 
     @RequestMapping("/top1/video/ad/thompson")
     public Map<String, Object> adRecommendTop1VideoAdThompson(@RequestBody RankRecommendRequestParam request) {
-        AdRankItem rankResult = rankService.adItemRankWithVideoAdThompson(request);
-        HashMap map = new HashMap();
-        map.put("code", "0");
-        map.put("msg", "success");
-        HashMap contentMap = new HashMap<>();
-        contentMap.put("adId", rankResult.getAdId());
-        contentMap.put("adScore", rankResult.getScore());
-        map.put("content", contentMap);
-        return map;
+        return this.adRecommendTop1Basic(request);
     }
 
     @RequestMapping("/top1/bid/basic")
     public Map<String, Object> adRecommendTop1BidBasic(@RequestBody BidRankRecommendRequestParam request) {
-        AdPlatformCreativeDTO rankResult = rankService.adBidRank(request);
-        HashMap map = new HashMap();
-        map.put("code", "0");
-        map.put("msg", "success");
-        map.put("content", rankResult);
-        return map;
+        RankRecommendRequestParam rankRecommendRequestParam = new RankRecommendRequestParam();
+
+        BeanUtils.copyProperties(request, rankRecommendRequestParam);
+        rankRecommendRequestParam.setAdIdList(request.getCreativeList());
+
+        return this.adRecommendTop1Basic(rankRecommendRequestParam);
+        // AdPlatformCreativeDTO rankResult = rankService.adBidRank(request);
+        // HashMap map = new HashMap();
+        // map.put("code", "0");
+        // map.put("msg", "success");
+        // map.put("content", rankResult);
+        // return map;
     }
 
     @RequestMapping("/top1/bid/new/pid")
     public Map<String, Object> adRecommendTop1BidNewPid(@RequestBody BidRankRecommendRequestParam request) {
-        AdPlatformCreativeDTO rankResult = rankService.adBidRankNewPid(request);
-        HashMap map = new HashMap();
-        map.put("code", "0");
-        map.put("msg", "success");
-        map.put("content", rankResult);
-        return map;
+        RankRecommendRequestParam rankRecommendRequestParam = new RankRecommendRequestParam();
+
+        BeanUtils.copyProperties(request, rankRecommendRequestParam);
+        rankRecommendRequestParam.setAdIdList(request.getCreativeList());
+
+        return this.adRecommendTop1Basic(rankRecommendRequestParam);
+
+
+        // AdPlatformCreativeDTO rankResult = rankService.adBidRankNewPid(request);
+        // HashMap map = new HashMap();
+        // map.put("code", "0");
+        // map.put("msg", "success");
+        // map.put("content", rankResult);
+        // return map;
     }
 
 }

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

@@ -1,17 +1,10 @@
 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.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);
 }

+ 3 - 5
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyBasic.java

@@ -2,13 +2,13 @@ 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.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.commons.enums.RedisPrefixEnum;
+import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
 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.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;
@@ -47,9 +47,7 @@ public abstract class RankStrategyBasic implements RankStrategy {
         return adRankItems.get(0);
     }
 
-    public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
-        return this.adItemRank(request.getAdIdList(), scoreParam);
-    }
+    protected abstract List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam);
 
     protected Feature getFeature(ScoreParam param, List<AdPlatformCreativeDTO> creativeDTOS) {
         List<String> cidList = creativeDTOS.stream()

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

@@ -1,83 +1,21 @@
 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.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.MapUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.List;
 
 @Slf4j
 @Service
 public class RankStrategyBy679 extends RankStrategyBasic {
 
-    @Autowired
-    private RankStrategyBy680 rankService680;
-
 
     @Override
     public List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam) {
-
-        // LR模型打分结果
-        List<AdRankItem> result = rankService680.adItemRank(creativeDTOS, scoreParam);
-
-        Map<Long, AdDirectionScore> adDirectionScoreMap = creativeDTOS.stream()
-                .collect(Collectors.toMap(AdPlatformCreativeDTO::getCreativeId, AdPlatformCreativeDTO::getAdDirectionScore));
-
-        for (AdRankItem adRankItem : result) {
-
-            this.calcDirectionScore(adRankItem, adDirectionScoreMap.get(adRankItem.getAdId()));
-
-            double s1 = adRankItem.getAdDirectionScore();
-            // 模型的打分结果已经乘CPA,此处不需要重复乘CPA
-            double s2 = adRankItem.getScore();
-            adRankItem.setScore(s1 * s2);
-
-        }
-
-        Collections.sort(result);
-        return result;
-    }
-
-    private void calcDirectionScore(AdRankItem adRankItem, AdDirectionScore adDirectionScore) {
-        if (Objects.isNull(adDirectionScore) || MapUtils.isEmpty(adDirectionScore.getScoreDetail())) {
-            adRankItem.getScoreMap().put("adDirectionScore", 1.0);
-            adRankItem.setAdDirectionScore(1);
-            return;
-        }
-        double exponent = Objects.nonNull(adDirectionScore.getExponent()) ? adDirectionScore.getExponent() : 1;
-        Map<String, String> scoreDetail = adDirectionScore.getScoreDetail();
-
-        double network = Double.parseDouble(scoreDetail.getOrDefault("network", "1"));
-        double phoneModel = Double.parseDouble(scoreDetail.getOrDefault("phoneModel", "1"));
-        double area = Double.parseDouble(scoreDetail.getOrDefault("area", "1"));
-        double peoplePackage = Double.parseDouble(scoreDetail.getOrDefault("peoplePackage", "1"));
-
-
-        double excludeMin = 1.0;
-
-        if (scoreDetail.containsKey("excludeConv") || scoreDetail.containsKey("excludeClick") || scoreDetail.containsKey("excludeView")) {
-            double excludeConv = Double.parseDouble(scoreDetail.getOrDefault("excludeConv", "10000"));
-            double excludeClick = Double.parseDouble(scoreDetail.getOrDefault("excludeClick", "10000"));
-            double excludeView = Double.parseDouble(scoreDetail.getOrDefault("excludeView", "10000"));
-            excludeMin = NumUtil.min(excludeConv, excludeClick, excludeView);
-        }
-
-        double s1 = (network * phoneModel * area * peoplePackage * excludeMin);
-        double s2 = Math.pow(s1, exponent);
-        adRankItem.getScoreMap().put("adDirectionScore", s2);
-        adRankItem.setAdDirectionScore(s2);
-
-        Map<String, String> scoreDetailMap = new HashMap<>(scoreDetail);
-        scoreDetailMap.put("exponent", String.valueOf(exponent));
-        scoreDetailMap.put("excludeMin", String.valueOf(excludeMin));
-        adRankItem.getFeatureMap().putAll(scoreDetailMap);
+        return null;
     }
 
     @Override

+ 8 - 4
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyByWeight.java

@@ -8,10 +8,7 @@ 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;
+import java.util.*;
 
 
 @Component
@@ -23,6 +20,7 @@ public class RankStrategyByWeight extends RankStrategyBasic {
 
     @Override
     public List<AdRankItem> adItemRank(List<AdPlatformCreativeDTO> creativeDTOS, ScoreParam scoreParam) {
+        Set<String> noApiAdVerIds = getNoApiAdVerIds();
 
         List<WeightRandom.ItemWithWeight<AdRankItem>> creativeItemWeights = new ArrayList<>(creativeDTOS.size());
         List<AdRankItem> adRankItems = new ArrayList<>(creativeDTOS.size());
@@ -42,6 +40,12 @@ public class RankStrategyByWeight extends RankStrategyBasic {
             adRankItem.setWeight(dto.getWeight());
             adRankItem.setScore(0d);
             adRankItem.getScoreMap().put("weight", dto.getWeight());
+            if (noApiAdVerIds.contains(dto.getAdVerId())) {
+                adRankItem.getExt().put("isApi", "0");
+            } else {
+                adRankItem.getExt().put("isApi", "1");
+            }
+
 
             adRankItems.add(adRankItem);
 

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

@@ -97,173 +97,44 @@ public class RankServiceImpl implements RankService {
         }
     }
 
-    private AdRankItem rankBy687(RankRecommendRequestParam request) {
-        ScoreParam scoreParam = RequestConvert.requestConvert(request);
-        List<AdRankItem> adRankItems = rankService687.adItemRank(request, scoreParam);
-        logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, "687");
-        return adRankItems.get(0);
-    }
-
-    private AdRankItem rankBy680(RankRecommendRequestParam request) {
-        ScoreParam scoreParam = RequestConvert.requestConvert(request);
-        List<AdRankItem> adRankItems = rankService680.adItemRank(request, scoreParam);
-        logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, "680");
-        return adRankItems.get(0);
-    }
-
-    private AdRankItem rankBy683(RankRecommendRequestParam request) {
-        ScoreParam scoreParam = RequestConvert.requestConvert(request);
-        List<AdRankItem> adRankItems = rankService683.adItemRank(request, scoreParam);
-        logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, "683");
-        return adRankItems.get(0);
-    }
-
-    private AdRankItem rankStrategyXGBAutoUpdateModel688(RankRecommendRequestParam request) {
-        ScoreParam scoreParam = RequestConvert.requestConvert(request);
-        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 = rankStrategyBy679.adItemRank(requestParam, scoreParam);
-        logHubService.scoreLogUpload(scoreParam, requestParam.getAdIdList(), adRankItems, requestParam, "679");
-        double score = adRankItems.get(0).getScore();
-        if (score > 0) {
-            return adRankItems.get(0);
-        }
-        return null;
-    }
-
-    public AdRankItem adItemRankOld(RankRecommendRequestParam request) {
-        ScoreParam param = RequestConvert.requestConvert(request);
-
-        UserAdFeature userAdFeature = featureRemoteService.getUserAdFeature(request.getMid());
-        if (userAdFeature == null) {
-            userAdFeature = new UserAdFeature();
-        }
-        Map<Long, List<AdPlatformCreativeDTO>> groupMap = request
-                .getAdIdList()
-                .stream()
-                .collect(Collectors.groupingBy(AdPlatformCreativeDTO::getCreativeId));
-        Map<Long, AdRankItem> cache = adCreativeFeatureContainer.getAll(new ArrayList<>(groupMap.keySet()));
-        List<AdRankItem> rankItems = Collections.emptyList();
-        if (!cache.isEmpty()) {
-            rankItems = new LinkedList<>(cache.values());
-        }
-        // 避免recommend-feature出问题
-        if (CollectionUtils.isEmpty(rankItems)) {
-            rankItems = new LinkedList<>();
-            for (Long adId : groupMap.keySet()) {
-                AdRankItem item = new AdRankItem();
-                item.setAdId(adId);
-                item.setItemFeature(new AdItemFeature());
-                rankItems.add(item);
-            }
-        }
-        boolean inCpcPidExp = false;
-        boolean inCvrAdjustingExp = false;
-        // if (request.getAdAbExpArr() != null && request.getAdAbExpArr().size() != 0) {
-        //     for (Map<String, Object> map : request.getAdAbExpArr()) {
-        //         if (map.getOrDefault("abExpCode", "").equals(cpcPidExpCode)) {
-        //             inCpcPidExp = true;
-        //         }
-        //         if (map.getOrDefault("abExpCode", "").equals(cvrAdjustingExpCode)) {
-        //             inCvrAdjustingExp = true;
-        //         }
-        //     }
-        // }
-        if (CollectionUtils.isNotEmpty(request.getAdAbExpArr())) {
-            Set<String> abExpCode = request.getAdAbExpArr().stream()
-                    .map(map -> map.get("abExpCode"))
-                    .filter(Objects::nonNull)
-                    .map(Object::toString)
-                    .collect(Collectors.toSet());
-            inCpcPidExp = abExpCode.contains(cpcPidExpCode);
-            inCvrAdjustingExp = abExpCode.contains(cvrAdjustingExpCode);
-        }
-        double lambda = -1d;
-        if (inCpcPidExp) {
-            for (AdRankItem item : rankItems) {
-                try {
-                    AdPlatformCreativeDTO dto = groupMap.get(item.getAdId()).get(0);
-                    item.setBid1(dto.getBid1());
-                    item.setBid2(dto.getBid2());
-                    lambda = PidLambdaForCpcContainer.getPidLambda(item.getAdId());
-                    if (lambda < 0) {
-                        item.setCpa(dto.getCpa());
-                        item.setPidLambda(1);
-                    } else {
-                        if (dto.getCpa() > 1 && lambda <= 1) {
-                            lambda = 2d;
-                        }
-                        item.setCpa(lambda);
-                        item.setPidLambda(1d);
-                    }
-                } catch (Exception e) {
-                    log.error("rankItems info error itemId={}", item.getAdId());
-                    e.printStackTrace();
-                }
-            }
-        } else {
-            for (AdRankItem item : rankItems) {
-                try {
-                    AdPlatformCreativeDTO dto = groupMap.get(item.getAdId()).get(0);
-                    item.setBid1(dto.getBid1());
-                    item.setBid2(dto.getBid2());
-                    item.setCpa(dto.getCpa());
-                    item.setPidLambda(1d);
-                } catch (Exception e) {
-                    log.error("rankItems info error itemId={}", item.getAdId());
-                    e.printStackTrace();
-                }
-            }
-        }
-
-        // 兜底方案
-        List<AdRankItem> rankResult;
-        if (inCvrAdjustingExp) {
-            rankResult = rank(param, userAdFeature, rankItems, ScorerUtils.CVR_ADJUSTING);
-        } else {
-            rankResult = rank(param, userAdFeature, rankItems, ScorerUtils.BASE_CONF);
-        }
-
-        if (!CollectionUtils.isEmpty(rankResult)) {
-            JSONObject object = new JSONObject();
-            object.put("mid", request.getMid());
-            object.put("adid", rankResult.get(0).getAdId());
-            object.put("type", rankResult.get(0).getScore_type());
-            object.put("pctr", rankResult.get(0).getCtr());
-            object.put("pcvr", rankResult.get(0).getCvr());
-            object.put("score", rankResult.get(0).getScore());
-            object.put("pidLambda", rankResult.get(0).getPidLambda());
-            object.put("lrsamples", rankResult.get(0).getLrSampleString());
-            object.put("dataTime", LocalDateTime.now().format(timeFormatter));
-            object.put("creativeId", rankResult.get(0).getAdId());
-            object.put("videoId", request.getVideoId());
-            object.put("pqtId", request.getPqtId());
-            log.info("svc=adItemRank {}", JSONObject.toJSONString(object));
-            object.remove("lrsamples");
-            if (inCpcPidExp) {
-                AdPlatformCreativeDTO dto = groupMap.get(rankResult.get(0).getAdId()).get(0);
-                object.put("cpa", dto.getCpa() * dto.getBid1());
-                object.put("oCpa", dto.getCpa());
-                object.put("realECpm", rankResult.get(0).getEcpm1());
-                log.info("svc=cpc_pid obj={}", JSONObject.toJSONString(object));
-            } else {
-                log.info("svc=pid_log obj={}", JSONObject.toJSONString(object));
-            }
-
-            // 日志上报
-            logHubService.scoreLogUpload(param, request.getAdIdList(), rankResult, request, "531");
-
-            return rankResult.get(0);
-        } else {
-            // 空返回值
-            return new AdRankItem();
-        }
-    }
+    // private AdRankItem rankBy687(RankRecommendRequestParam request) {
+    //     ScoreParam scoreParam = RequestConvert.requestConvert(request);
+    //     List<AdRankItem> adRankItems = rankService687.adItemRank(request, scoreParam);
+    //     logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, "687");
+    //     return adRankItems.get(0);
+    // }
+    //
+    // private AdRankItem rankBy680(RankRecommendRequestParam request) {
+    //     ScoreParam scoreParam = RequestConvert.requestConvert(request);
+    //     List<AdRankItem> adRankItems = rankService680.adItemRank(request, scoreParam);
+    //     logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, "680");
+    //     return adRankItems.get(0);
+    // }
+    //
+    // private AdRankItem rankBy683(RankRecommendRequestParam request) {
+    //     ScoreParam scoreParam = RequestConvert.requestConvert(request);
+    //     List<AdRankItem> adRankItems = rankService683.adItemRank(request, scoreParam);
+    //     logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, "683");
+    //     return adRankItems.get(0);
+    // }
+    //
+    // private AdRankItem rankStrategyXGBAutoUpdateModel688(RankRecommendRequestParam request) {
+    //     ScoreParam scoreParam = RequestConvert.requestConvert(request);
+    //     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 = rankStrategyBy679.adItemRank(requestParam, scoreParam);
+    //     logHubService.scoreLogUpload(scoreParam, requestParam.getAdIdList(), adRankItems, requestParam, "679");
+    //     double score = adRankItems.get(0).getScore();
+    //     if (score > 0) {
+    //         return adRankItems.get(0);
+    //     }
+    //     return null;
+    // }
 
     public AdRankItem adItemRankWithVideoAdThompson(RankRecommendRequestParam request) {
         ScoreParam param = RequestConvert.requestConvert(request);