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