|
@@ -3,6 +3,7 @@ package com.tzld.piaoquan.ad.engine.service.score.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.AdCreativeFeatureContainer;
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.AdCreativeFeatureContainer;
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaContainer;
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaContainer;
|
|
|
|
+import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaForCpcContainer;
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaV2Container;
|
|
import com.tzld.piaoquan.ad.engine.service.score.container.PidLambdaV2Container;
|
|
import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
|
|
import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
|
|
import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
|
|
import com.tzld.piaoquan.ad.engine.service.score.param.BidRankRecommendRequestParam;
|
|
@@ -46,6 +47,8 @@ public class RankServiceImpl implements RankService {
|
|
Double cpmMax=200d;
|
|
Double cpmMax=200d;
|
|
@Value("${ad.model.cpm.min:30}")
|
|
@Value("${ad.model.cpm.min:30}")
|
|
Double cpmMin=30d;
|
|
Double cpmMin=30d;
|
|
|
|
+ @Value("${ad.pid.cpc.exp:30}")
|
|
|
|
+ private String cpcPidExpCode;
|
|
|
|
|
|
public AdRankItem adItemRank(RankRecommendRequestParam request){
|
|
public AdRankItem adItemRank(RankRecommendRequestParam request){
|
|
ScoreParam param= RequestConvert.requestConvert(request);
|
|
ScoreParam param= RequestConvert.requestConvert(request);
|
|
@@ -66,7 +69,6 @@ public class RankServiceImpl implements RankService {
|
|
.getAdIdList()
|
|
.getAdIdList()
|
|
.stream()
|
|
.stream()
|
|
.collect(Collectors.groupingBy(creativeDTO -> creativeDTO.getCreativeId()));
|
|
.collect(Collectors.groupingBy(creativeDTO -> creativeDTO.getCreativeId()));
|
|
-// Map<Long, AdRankItem> cache=adCreativeFeatureContainer.getAll(request.getAdIdList());
|
|
|
|
Map<Long, AdRankItem> cache=adCreativeFeatureContainer.getAll(new ArrayList<>(groupMap.keySet()));
|
|
Map<Long, AdRankItem> cache=adCreativeFeatureContainer.getAll(new ArrayList<>(groupMap.keySet()));
|
|
List<AdRankItem> rankItems=Collections.emptyList();
|
|
List<AdRankItem> rankItems=Collections.emptyList();
|
|
if(!cache.isEmpty()){
|
|
if(!cache.isEmpty()){
|
|
@@ -82,42 +84,63 @@ public class RankServiceImpl implements RankService {
|
|
rankItems.add(item);
|
|
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;
|
|
double lambda=-1d;
|
|
- for(AdRankItem item:rankItems){
|
|
|
|
- try {
|
|
|
|
-// AdPlatformBidCreativeDTO dto=groupMap.get(item.getAdId()+"").get(0);
|
|
|
|
- AdPlatformCreativeDTO dto=groupMap.get(item.getAdId()).get(0);
|
|
|
|
- item.setBid1(dto.getBid1());
|
|
|
|
- item.setBid2(dto.getBid2());
|
|
|
|
-// lambda=PidLambdaContainer.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);
|
|
|
|
-// }
|
|
|
|
- item.setCpa(dto.getCpa());
|
|
|
|
- item.setPidLambda(1d);
|
|
|
|
- }catch (Exception e){
|
|
|
|
- log.error("rankItems info error itemId={}",item.getAdId());
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
|
+ 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();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-// for(AdRankItem item:rankItems){
|
|
|
|
-// item.setBid1(1d);
|
|
|
|
-// item.setBid2(1d);
|
|
|
|
-// item.setCpa(75d);
|
|
|
|
-// item.setPidLambda(1d);
|
|
|
|
-// }
|
|
|
|
- //兜底方案
|
|
|
|
- List<AdRankItem> rankResult=rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
|
|
|
|
|
|
+
|
|
|
|
+ // 兜底方案
|
|
|
|
+ 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)) {
|
|
if (!CollectionUtils.isEmpty(rankResult)) {
|
|
-// log.info("svc=adItemRank request={} rankResult={} dataTime={}", JSONObject.toJSONString(request),JSONObject.toJSONString(rankResult),currentTime.format(timeFormatter));
|
|
|
|
JSONObject object=new JSONObject();
|
|
JSONObject object=new JSONObject();
|
|
object.put("mid",request.getMid());
|
|
object.put("mid",request.getMid());
|
|
object.put("adid",rankResult.get(0).getAdId());
|
|
object.put("adid",rankResult.get(0).getAdId());
|
|
@@ -128,9 +151,17 @@ public class RankServiceImpl implements RankService {
|
|
object.put("pidLambda",rankResult.get(0).getPidLambda());
|
|
object.put("pidLambda",rankResult.get(0).getPidLambda());
|
|
object.put("lrsamples",rankResult.get(0).getLrSampleString());
|
|
object.put("lrsamples",rankResult.get(0).getLrSampleString());
|
|
object.put("dataTime",currentTime.format(timeFormatter));
|
|
object.put("dataTime",currentTime.format(timeFormatter));
|
|
|
|
+ object.put("creativeId",rankResult.get(0).getAdId());
|
|
log.info("svc=adItemRank {}", JSONObject.toJSONString(object));
|
|
log.info("svc=adItemRank {}", JSONObject.toJSONString(object));
|
|
object.remove("lrsamples");
|
|
object.remove("lrsamples");
|
|
- log.info("svc=pid_log obj={}", JSONObject.toJSONString(object));
|
|
|
|
|
|
+ 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);
|
|
return rankResult.get(0);
|
|
}else {
|
|
}else {
|
|
//空返回值
|
|
//空返回值
|
|
@@ -138,6 +169,8 @@ public class RankServiceImpl implements RankService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public AdPlatformCreativeDTO adBidRank(BidRankRecommendRequestParam request) {
|
|
public AdPlatformCreativeDTO adBidRank(BidRankRecommendRequestParam request) {
|
|
|
|
|
|
@@ -170,7 +203,6 @@ 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());
|
|
@@ -286,6 +318,7 @@ 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使用
|
|
//临时加入供pid v2使用
|
|
object.put("realECpm",realECpm);
|
|
object.put("realECpm",realECpm);
|
|
object.put("creativeId",result.getCreativeId());
|
|
object.put("creativeId",result.getCreativeId());
|