|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|