فهرست منبع

update ab configMap

gufengshou1 1 سال پیش
والد
کامیت
eb3a604366

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

@@ -1,11 +1,14 @@
 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.AdPlatformBidCreativeDTO;
+import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -19,6 +22,7 @@ public class AdRecommendController {
 
     private final static Logger log = LoggerFactory.getLogger(AdRecommendController.class);
     @Autowired
+    @Qualifier("rankServiceImpl")
     RankService rankService;
 
     @RequestMapping("/top1/basic")
@@ -34,4 +38,10 @@ public class AdRecommendController {
         return map;
     }
 
+    @RequestMapping("/top1/bid/basic")
+    public AdPlatformBidCreativeDTO adRecommendTop1BidBasic(@RequestBody BidRankRecommendRequestParam request){
+        AdPlatformBidCreativeDTO rankResult = rankService.adBidRank(request);
+        return rankResult;
+    }
+
 }

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

@@ -1,11 +1,20 @@
 package com.tzld.piaoquan.ad.engine.service.score;
 
+import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
+import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
+import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformBidCreativeDTO;
+import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
+import com.tzld.piaoquan.recommend.feature.domain.ad.base.UserAdFeature;
 
+import java.util.List;
 import java.util.Map;
 
 public interface RankService {
 
     AdRankItem adItemRank(RankRecommendRequestParam request);
+    AdPlatformBidCreativeDTO adBidRank(BidRankRecommendRequestParam request);
+
+    List<AdRankItem> rank (ScoreParam param, UserAdFeature userAdFeature, List<AdRankItem> rankItems, String configFile);
 }

+ 2 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/convert/RequestConvert.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.ad.engine.service.score.convert;
 
+import com.tzld.piaoquan.ad.engine.service.score.param.RecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRequestContext;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
@@ -9,7 +10,7 @@ import java.time.format.DateTimeFormatter;
 
 public class RequestConvert {
 
-    public static ScoreParam requestConvert(RankRecommendRequestParam request){
+    public static ScoreParam requestConvert(RecommendRequestParam request){
         AdRequestContext context=new AdRequestContext();
         context.setApptype(request.getAppType().toString());
         context.setMachineinfoBrand(request.getMachineInfo().getBrand());

+ 48 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/dto/AdPlatformBidCreativeDTO.java

@@ -0,0 +1,48 @@
+package com.tzld.piaoquan.ad.engine.service.score.dto;
+
+import com.alibaba.fastjson.JSON;
+import lombok.Builder;
+import lombok.Data;
+import lombok.ToString;
+
+@Builder
+@Data
+@ToString
+public class AdPlatformBidCreativeDTO {
+
+    private Long creativeId;
+
+    private String creativeCode;
+
+    private Integer bidType;
+
+    private Double pctr;
+
+    private Double pcvr;
+
+    private Double cpa;
+
+    private Double bid1;
+
+    private Double bid2;
+
+    private Double ecpm1;
+
+    private Double ecpm2;
+
+    public static void main(String[] args) {
+        System.out.println(JSON.toJSONString(AdPlatformBidCreativeDTO.builder()
+                .creativeId(3366L)
+                .creativeCode("CREATIVE_17036704789851370")
+                .bidType(2)
+                .pctr(3.2)
+                .pcvr(1.2)
+                .cpa(40.1)
+                .bid1(1.3)
+                .bid2(2.1)
+                .ecpm1(0.1)
+                .ecpm2(0.2)
+                .build()));
+    }
+
+}

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

@@ -1,5 +1,9 @@
 package com.tzld.piaoquan.ad.engine.service.score.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.JsonObject;
+import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformBidCreativeDTO;
+import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
 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;
@@ -12,11 +16,13 @@ import com.tzld.piaoquan.ad.engine.service.score.convert.RequestConvert;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class RankServiceImpl implements RankService {
@@ -26,6 +32,9 @@ public class RankServiceImpl implements RankService {
     @Autowired
     FeatureRemoteService featureRemoteService;
 
+    @Autowired
+    RankServiceThompsonImpl rankServiceThompson;
+
     public AdRankItem adItemRank(RankRecommendRequestParam request){
 
         ScoreParam param= RequestConvert.requestConvert(request);
@@ -38,25 +47,84 @@ public class RankServiceImpl implements RankService {
                         CommonCollectionUtils.toList(request.getAdIdList(),id->id.toString())
                 );
         //兜底方案
+        List<AdRankItem> rankResult;
         if(rankItems==null|| rankItems.size()==0){
-            AdItemFeature feature=new AdItemFeature();
-            feature.setAdId(request.getAdIdList().get(0).toString());
-            AdRankItem adRankItem=new AdRankItem();
-            adRankItem.setAdId(request.getAdIdList().get(0));
-            adRankItem.setItemFeature(feature);
-            rankItems=new ArrayList<>();
-            rankItems.add(adRankItem);
+            rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
+        }else {
+            rankResult=rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
         }
-        List<AdRankItem> rankResult = ScorerUtils
-                .getScorerPipeline(
-                        ScorerUtils.BASE_CONF)
-                .scoring(param, userAdFeature, rankItems);
-
-
+        log.info("svc=adItemRank rankResult={}", JSONObject.toJSONString(rankResult));
         if (!CollectionUtils.isEmpty(rankResult)) {
            return rankResult.get(0);
         }else {
-            return null;
+            //空返回值
+            return new AdRankItem();
         }
     }
+
+    @Override
+    public AdPlatformBidCreativeDTO adBidRank(BidRankRecommendRequestParam request) {
+
+        ScoreParam param= RequestConvert.requestConvert(request);
+        UserAdFeature userAdFeature=featureRemoteService.getUserAdFeature(request.getMid());
+        if(userAdFeature==null){
+            userAdFeature=new UserAdFeature();
+        }
+        Map<String,List<AdPlatformBidCreativeDTO>> groupMap=request
+                                        .getCreativeList()
+                                            .stream()
+                .                                  collect(Collectors.groupingBy(creativeDTO -> creativeDTO.getCreativeId()+""));
+
+        List<AdRankItem> rankItems=featureRemoteService.
+                getAllAdFeatureList(
+                        new ArrayList<>(groupMap.keySet())
+                );
+        for(AdRankItem item:rankItems){
+            try {
+                AdPlatformBidCreativeDTO dto=groupMap.get(item.getAdId()+"").get(0);
+                item.setBid1(dto.getBid1());
+                item.setBid2(dto.getBid2());
+                item.setCpa(dto.getCpa());
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+        List<AdRankItem> rankResult;
+        if(rankItems==null|| rankItems.size()==0){
+            rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
+        }else {
+            rankResult=rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
+        }
+        log.info("svc=adBidRank rankResult={}", JSONObject.toJSONString(rankResult));
+
+        AdRankItem topItem=rankResult.get(0);
+
+        AdPlatformBidCreativeDTO result=AdPlatformBidCreativeDTO
+                .builder()
+                .build();
+        BeanUtils.copyProperties(topItem,result);
+        result.setCreativeId(topItem.getAdId());
+        result.setCreativeCode(groupMap.get(topItem.getAdId()+"").get(0).getCreativeCode());
+        if(rankResult.size()<=1){
+            //经验值 待定
+            result.setEcpm2(topItem.getEcpm1()*0.9);
+        }else {
+            result.setEcpm2(rankResult.get(1).getEcpm1());
+        }
+
+
+        rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
+        return result;
+    }
+
+
+
+    public List<AdRankItem> rank (ScoreParam param, UserAdFeature userAdFeature, List<AdRankItem> rankItems,String configFile){
+        List<AdRankItem> rankResult = ScorerUtils
+                .getScorerPipeline(configFile)
+                .scoring(param, userAdFeature, rankItems);
+        return rankResult;
+    }
+
+
 }

+ 18 - 11
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/impl/RankServiceThompsonImpl.java

@@ -6,6 +6,8 @@ import com.tzld.piaoquan.ad.engine.commons.util.CommonCollectionUtils;
 import com.tzld.piaoquan.ad.engine.service.score.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.AdPlatformBidCreativeDTO;
+import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.service.score.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdItemFeature;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
@@ -34,17 +36,6 @@ public class RankServiceThompsonImpl implements RankService {
         List<AdRankItem> rankItems = featureRemoteService.getAllAdFeatureList(
                 CommonCollectionUtils.toList(request.getAdIdList(), id -> id.toString())
         );
-
-        //兜底方案
-        if (rankItems == null || rankItems.size() == 0) {
-            AdItemFeature feature = new AdItemFeature();
-            feature.setAdId(request.getAdIdList().get(0).toString());
-            AdRankItem adRankItem = new AdRankItem();
-            adRankItem.setAdId(request.getAdIdList().get(0));
-            adRankItem.setItemFeature(feature);
-            rankItems = new ArrayList<>();
-            rankItems.add(adRankItem);
-        }
         List<AdRankItem> rankResult = ScorerUtils
                 .getScorerPipeline(ScorerUtils.THOMPSON_CONF)
                 .scoring(param, userAdFeature, rankItems);
@@ -55,4 +46,20 @@ public class RankServiceThompsonImpl implements RankService {
             return null;
         }
     }
+
+    @Override
+    public AdPlatformBidCreativeDTO adBidRank(BidRankRecommendRequestParam request) {
+        return null;
+    }
+
+    public List<AdRankItem> rank (ScoreParam param, UserAdFeature userAdFeature, List<AdRankItem> rankItems,String configFile){
+        if(configFile==null){
+            configFile=ScorerUtils.THOMPSON_CONF;
+        }
+        List<AdRankItem> rankResult = ScorerUtils
+                .getScorerPipeline(configFile)
+                .scoring(param, userAdFeature, rankItems);
+        return rankResult;
+    }
+
 }

+ 13 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/BidRankRecommendRequestParam.java

@@ -0,0 +1,13 @@
+package com.tzld.piaoquan.ad.engine.service.score.param;
+
+import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformBidCreativeDTO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BidRankRecommendRequestParam extends RecommendRequestParam{
+
+     List<AdPlatformBidCreativeDTO> creativeList;
+
+}

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

@@ -5,7 +5,7 @@ import lombok.Data;
 import java.util.List;
 
 @Data
-public class RankRecommendRequestParam {
+public class RankRecommendRequestParam extends RecommendRequestParam{
      MachineInfoParam machineInfo;
      Long appType;
      String mid;

+ 12 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/param/RecommendRequestParam.java

@@ -0,0 +1,12 @@
+package com.tzld.piaoquan.ad.engine.service.score.param;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class RecommendRequestParam {
+    MachineInfoParam machineInfo;
+    Long appType;
+    String mid;
+}