|  | @@ -168,7 +168,124 @@ public class RankServiceImpl implements RankService {
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    public AdRankItem videoAdThompsonItemRank(RankRecommendRequestParam request){
 | 
											
												
													
														|  | 
 |  | +        ScoreParam param= RequestConvert.requestConvert(request);
 | 
											
												
													
														|  | 
 |  | +        LocalDateTime currentTime = LocalDateTime.now();
 | 
											
												
													
														|  | 
 |  | +        int currentHour = currentTime.getHour();
 | 
											
												
													
														|  | 
 |  | +        int dayOfWeek = currentTime.getDayOfWeek().getValue();
 | 
											
												
													
														|  | 
 |  | +        param.getRequestContext().setHour(currentHour+"");
 | 
											
												
													
														|  | 
 |  | +        param.getRequestContext().setWeek(dayOfWeek+"");
 | 
											
												
													
														|  | 
 |  | +        param.getRequestContext().setRegion(request.getRegion().replace("省",""));
 | 
											
												
													
														|  | 
 |  | +        param.getRequestContext().setCity(request.getCity().replace("市",""));
 | 
											
												
													
														|  | 
 |  | +        param.getRequestContext().setDay(currentTime.format(dateFormatter));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        UserAdFeature userAdFeature=featureRemoteService.getUserAdFeature(request.getMid());
 | 
											
												
													
														|  | 
 |  | +        if(userAdFeature==null){
 | 
											
												
													
														|  | 
 |  | +            userAdFeature=new UserAdFeature();
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        Map<Long,List<AdPlatformCreativeDTO>> groupMap=request
 | 
											
												
													
														|  | 
 |  | +                .getAdIdList()
 | 
											
												
													
														|  | 
 |  | +                .stream()
 | 
											
												
													
														|  | 
 |  | +                .collect(Collectors.groupingBy(creativeDTO -> creativeDTO.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(rankItems==null|| rankItems.size()==0){
 | 
											
												
													
														|  | 
 |  | +            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;
 | 
											
												
													
														|  | 
 |  | +        if (request.getAdAbExpArr() != null && request.getAdAbExpArr().size() != 0) {
 | 
											
												
													
														|  | 
 |  | +            for (Map<String, Object> map : request.getAdAbExpArr() ) {
 | 
											
												
													
														|  | 
 |  | +                if (map.getOrDefault("abExpCode", "").equals(cpcPidExpCode)) {
 | 
											
												
													
														|  | 
 |  | +                    inCpcPidExp = true;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +        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());
 | 
											
												
													
														|  | 
 |  | +                    item.setCpa(dto.getCpa());
 | 
											
												
													
														|  | 
 |  | +                    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());
 | 
											
												
													
														|  | 
 |  | +                    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);
 | 
											
												
													
														|  | 
 |  | +                    }
 | 
											
												
													
														|  | 
 |  | +                    item.setCpa(dto.getCpa());
 | 
											
												
													
														|  | 
 |  | +                    item.setPidLambda(1d);
 | 
											
												
													
														|  | 
 |  | +                }catch (Exception e){
 | 
											
												
													
														|  | 
 |  | +                    log.error("rankItems info error itemId={}",item.getAdId());
 | 
											
												
													
														|  | 
 |  | +                    e.printStackTrace();
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        // 兜底方案
 | 
											
												
													
														|  | 
 |  | +        List<AdRankItem> rankResult;
 | 
											
												
													
														|  | 
 |  | +        if (inCpcPidExp) {
 | 
											
												
													
														|  | 
 |  | +            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",currentTime.format(timeFormatter));
 | 
											
												
													
														|  | 
 |  | +            object.put("creativeId",rankResult.get(0).getAdId());
 | 
											
												
													
														|  | 
 |  | +            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());
 | 
											
												
													
														|  | 
 |  | +                log.info("svc=cpc_pid obj={}", JSONObject.toJSONString(object));
 | 
											
												
													
														|  | 
 |  | +            }else {
 | 
											
												
													
														|  | 
 |  | +                log.info("svc=pid_log obj={}", JSONObject.toJSONString(object));
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +            return rankResult.get(0);
 | 
											
												
													
														|  | 
 |  | +        }else {
 | 
											
												
													
														|  | 
 |  | +            //空返回值
 | 
											
												
													
														|  | 
 |  | +            return new AdRankItem();
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      @Override
 |  |      @Override
 | 
											
												
													
														|  |      public AdPlatformCreativeDTO adBidRank(BidRankRecommendRequestParam request) {
 |  |      public AdPlatformCreativeDTO adBidRank(BidRankRecommendRequestParam request) {
 | 
											
										
											
												
													
														|  | @@ -265,18 +382,6 @@ public class RankServiceImpl implements RankService {
 | 
											
												
													
														|  |                      item.setCpa(lambda);
 |  |                      item.setCpa(lambda);
 | 
											
												
													
														|  |                      item.setPidLambda(1d);
 |  |                      item.setPidLambda(1d);
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  | -//                if(lambda<0){
 |  | 
 | 
											
												
													
														|  | -//                    item.setCpa(dto.getCpa());
 |  | 
 | 
											
												
													
														|  | -//                    item.setPidLambda(dto.getCpa()*0.6);
 |  | 
 | 
											
												
													
														|  | -//                }else {
 |  | 
 | 
											
												
													
														|  | -//                    if(dto.getCpa()>1&&lambda<=1){
 |  | 
 | 
											
												
													
														|  | -//                        lambda=2d;
 |  | 
 | 
											
												
													
														|  | -//                    }
 |  | 
 | 
											
												
													
														|  | -//                    item.setCpa(dto.getCpa());
 |  | 
 | 
											
												
													
														|  | -//                    item.setPidLambda(lambda);
 |  | 
 | 
											
												
													
														|  | -//                }
 |  | 
 | 
											
												
													
														|  | -//                item.setCpa(dto.getCpa());
 |  | 
 | 
											
												
													
														|  | -//                item.setPidLambda(PidLambdaContainer.getPidLambda(item.getAdId()));
 |  | 
 | 
											
												
													
														|  |                  rankItems.add(item);
 |  |                  rankItems.add(item);
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
 |  |              rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
 | 
											
										
											
												
													
														|  | @@ -362,21 +467,11 @@ public class RankServiceImpl implements RankService {
 | 
											
												
													
														|  |          double lambda=-1d;
 |  |          double lambda=-1d;
 | 
											
												
													
														|  |          for(AdRankItem item:rankItems){
 |  |          for(AdRankItem item:rankItems){
 | 
											
												
													
														|  |              try {
 |  |              try {
 | 
											
												
													
														|  | -//                AdPlatformBidCreativeDTO dto=groupMap.get(item.getAdId()+"").get(0);
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |                  AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
 |  |                  AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
 | 
											
												
													
														|  |                  item.setBid1(dto.getBid1());
 |  |                  item.setBid1(dto.getBid1());
 | 
											
												
													
														|  |                  item.setBid2(dto.getBid2());
 |  |                  item.setBid2(dto.getBid2());
 | 
											
												
													
														|  |                  lambda=PidLambdaV2Container.getPidLambda(item.getAdId());
 |  |                  lambda=PidLambdaV2Container.getPidLambda(item.getAdId());
 | 
											
												
													
														|  | -//                if(lambda<0){
 |  | 
 | 
											
												
													
														|  | -//                    item.setCpa(dto.getCpa());
 |  | 
 | 
											
												
													
														|  | -//                    item.setPidLambda(0.6);
 |  | 
 | 
											
												
													
														|  | -//                }else {
 |  | 
 | 
											
												
													
														|  | -//                    if(dto.getCpa()>1&&lambda<=1){
 |  | 
 | 
											
												
													
														|  | -//                        lambda=2d;
 |  | 
 | 
											
												
													
														|  | -//                    }
 |  | 
 | 
											
												
													
														|  | -//                    item.setCpa(lambda);
 |  | 
 | 
											
												
													
														|  | -//                    item.setPidLambda(1d);
 |  | 
 | 
											
												
													
														|  | -//                }
 |  | 
 | 
											
												
													
														|  |                  if(lambda<0){
 |  |                  if(lambda<0){
 | 
											
												
													
														|  |                      item.setCpa(dto.getCpa());
 |  |                      item.setCpa(dto.getCpa());
 | 
											
												
													
														|  |                      item.setPidLambda(dto.getCpa()*0.6);
 |  |                      item.setPidLambda(dto.getCpa()*0.6);
 | 
											
										
											
												
													
														|  | @@ -403,16 +498,7 @@ public class RankServiceImpl implements RankService {
 | 
											
												
													
														|  |                  item.setAdId(dto.getCreativeId());
 |  |                  item.setAdId(dto.getCreativeId());
 | 
											
												
													
														|  |                  item.setItemFeature(new AdItemFeature());
 |  |                  item.setItemFeature(new AdItemFeature());
 | 
											
												
													
														|  |                  lambda=PidLambdaV2Container.getPidLambda(item.getAdId());
 |  |                  lambda=PidLambdaV2Container.getPidLambda(item.getAdId());
 | 
											
												
													
														|  | -//                if(lambda<0){
 |  | 
 | 
											
												
													
														|  | -//                    item.setCpa(dto.getCpa());
 |  | 
 | 
											
												
													
														|  | -//                    item.setPidLambda(0.6);
 |  | 
 | 
											
												
													
														|  | -//                }else {
 |  | 
 | 
											
												
													
														|  | -//                    if(dto.getCpa()>1&&lambda<=1){
 |  | 
 | 
											
												
													
														|  | -//                        lambda=2d;
 |  | 
 | 
											
												
													
														|  | -//                    }
 |  | 
 | 
											
												
													
														|  | -//                    item.setCpa(lambda);
 |  | 
 | 
											
												
													
														|  | -//                    item.setPidLambda(1d);
 |  | 
 | 
											
												
													
														|  | -//                }
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |                  if(lambda<0){
 |  |                  if(lambda<0){
 | 
											
												
													
														|  |                      item.setCpa(dto.getCpa());
 |  |                      item.setCpa(dto.getCpa());
 | 
											
												
													
														|  |                      item.setPidLambda(dto.getCpa()*0.6);
 |  |                      item.setPidLambda(dto.getCpa()*0.6);
 | 
											
										
											
												
													
														|  | @@ -423,8 +509,6 @@ public class RankServiceImpl implements RankService {
 | 
											
												
													
														|  |                      item.setCpa(dto.getCpa());
 |  |                      item.setCpa(dto.getCpa());
 | 
											
												
													
														|  |                      item.setPidLambda(lambda);
 |  |                      item.setPidLambda(lambda);
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  | -//                item.setCpa(dto.getCpa());
 |  | 
 | 
											
												
													
														|  | -//                item.setPidLambda(PidLambdaContainer.getPidLambda(item.getAdId()));
 |  | 
 | 
											
												
													
														|  |                  rankItems.add(item);
 |  |                  rankItems.add(item);
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
 |  |              rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
 | 
											
										
											
												
													
														|  | @@ -443,8 +527,6 @@ public class RankServiceImpl implements RankService {
 | 
											
												
													
														|  |          result.setPcvr(topItem.getCvr());
 |  |          result.setPcvr(topItem.getCvr());
 | 
											
												
													
														|  |          result.setCreativeCode(groupMap.get(topItem.getAdId()).get(0).getCreativeCode());
 |  |          result.setCreativeCode(groupMap.get(topItem.getAdId()).get(0).getCreativeCode());
 | 
											
												
													
														|  |          double realECpm=0d;
 |  |          double realECpm=0d;
 | 
											
												
													
														|  | -        //经验值 待定
 |  | 
 | 
											
												
													
														|  | -//        realECpm=topItem.getEcpm1();
 |  | 
 | 
											
												
													
														|  |          realECpm=topItem.getEcpm2();
 |  |          realECpm=topItem.getEcpm2();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          if(realECpm>cpmMax/1000d){
 |  |          if(realECpm>cpmMax/1000d){
 | 
											
										
											
												
													
														|  | @@ -464,7 +546,6 @@ public class RankServiceImpl implements RankService {
 | 
											
												
													
														|  |          object.put("pcvr",topItem.getCvr());
 |  |          object.put("pcvr",topItem.getCvr());
 | 
											
												
													
														|  |          object.put("lrsamples",topItem.getLrSampleString());
 |  |          object.put("lrsamples",topItem.getLrSampleString());
 | 
											
												
													
														|  |          object.put("pidLambda",topItem.getPidLambda());
 |  |          object.put("pidLambda",topItem.getPidLambda());
 | 
											
												
													
														|  | -        //临时加入供pid v2使用
 |  | 
 | 
											
												
													
														|  |          object.put("realECpm",realECpm);
 |  |          object.put("realECpm",realECpm);
 | 
											
												
													
														|  |          object.put("creativeId",result.getCreativeId());
 |  |          object.put("creativeId",result.getCreativeId());
 | 
											
												
													
														|  |          //CPA还原
 |  |          //CPA还原
 |