|
@@ -15,7 +15,6 @@ 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.param.RankRecommendRequestParam;
|
|
|
-import org.joda.time.LocalTime;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
@@ -23,9 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
-import java.time.DayOfWeek;
|
|
|
-import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -33,7 +31,8 @@ import java.util.stream.Collectors;
|
|
|
public class RankServiceImpl implements RankService {
|
|
|
|
|
|
private final static Logger log = LoggerFactory.getLogger(RankServiceImpl.class);
|
|
|
-
|
|
|
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
|
|
|
+ DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss");
|
|
|
@Autowired
|
|
|
FeatureRemoteService featureRemoteService;
|
|
|
|
|
@@ -41,13 +40,15 @@ public class RankServiceImpl implements RankService {
|
|
|
RankServiceThompsonImpl rankServiceThompson;
|
|
|
|
|
|
public AdRankItem adItemRank(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){
|
|
@@ -57,33 +58,36 @@ public class RankServiceImpl implements RankService {
|
|
|
getAllAdFeatureList(
|
|
|
CommonCollectionUtils.toList(request.getAdIdList(),id->id.toString())
|
|
|
);
|
|
|
- //不判空
|
|
|
- for(AdRankItem item:rankItems){
|
|
|
- item.setBid1(1d);
|
|
|
- item.setBid2(1d);
|
|
|
- item.setCpa(75d);
|
|
|
- }
|
|
|
-
|
|
|
- //兜底方案
|
|
|
- List<AdRankItem> rankResult;
|
|
|
+ //避免recommend-feature出问题
|
|
|
if(rankItems==null|| rankItems.size()==0){
|
|
|
rankItems=new LinkedList<>();
|
|
|
for(Long adId:request.getAdIdList()){
|
|
|
AdRankItem item=new AdRankItem();
|
|
|
- item.setBid1(1d);
|
|
|
- item.setBid2(1d);
|
|
|
- item.setCpa(75d);
|
|
|
item.setAdId(adId);
|
|
|
item.setItemFeature(new AdItemFeature());
|
|
|
rankItems.add(item);
|
|
|
}
|
|
|
- rankResult=rankServiceThompson.rank(param, userAdFeature, rankItems,null);
|
|
|
- }else {
|
|
|
-
|
|
|
- rankResult=rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
|
|
|
}
|
|
|
- log.info("svc=adItemRank rankResult={}", JSONObject.toJSONString(rankResult));
|
|
|
+ for(AdRankItem item:rankItems){
|
|
|
+ item.setBid1(1d);
|
|
|
+ item.setBid2(1d);
|
|
|
+ item.setCpa(75d);
|
|
|
+ }
|
|
|
+
|
|
|
+ //兜底方案
|
|
|
+ List<AdRankItem> rankResult=rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
|
|
|
+
|
|
|
if (!CollectionUtils.isEmpty(rankResult)) {
|
|
|
+// log.info("svc=adItemRank request={} rankResult={} dataTime={}", JSONObject.toJSONString(request),JSONObject.toJSONString(rankResult),currentTime.format(timeFormatter));
|
|
|
+ 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("lrsamples",rankResult.get(0).getLrSampleString());
|
|
|
+ object.put("dataTime",currentTime.format(timeFormatter));
|
|
|
+ log.info("svc=adItemRank {}", JSONObject.toJSONString(object));
|
|
|
return rankResult.get(0);
|
|
|
}else {
|
|
|
//空返回值
|
|
@@ -95,6 +99,16 @@ public class RankServiceImpl implements RankService {
|
|
|
public AdPlatformBidCreativeDTO adBidRank(BidRankRecommendRequestParam 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();
|
|
@@ -119,8 +133,6 @@ public class RankServiceImpl implements RankService {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
- log.info("svc=adItemRank param={} userAdFeature={} rankItems={}",
|
|
|
- JSONObject.toJSONString(param),JSONObject.toJSONString(userAdFeature),JSONObject.toJSONString(rankItems));
|
|
|
List<AdRankItem> rankResult;
|
|
|
if(rankItems==null|| rankItems.size()==0){
|
|
|
rankItems=new LinkedList<>();
|
|
@@ -137,7 +149,6 @@ public class RankServiceImpl implements RankService {
|
|
|
}else {
|
|
|
rankResult=rank(param, userAdFeature, rankItems,ScorerUtils.BASE_CONF);
|
|
|
}
|
|
|
- log.info("svc=adBidRank rankResult={}", JSONObject.toJSONString(rankResult));
|
|
|
|
|
|
AdRankItem topItem=rankResult.get(0);
|
|
|
|
|
@@ -155,6 +166,16 @@ public class RankServiceImpl implements RankService {
|
|
|
}else {
|
|
|
result.setEcpm2(rankResult.get(1).getEcpm1());
|
|
|
}
|
|
|
+ JSONObject object=new JSONObject();
|
|
|
+ object.put("mid",request.getMid());
|
|
|
+ object.put("adid",result.getCreativeId());
|
|
|
+ object.put("type",topItem.getScore_type());
|
|
|
+ object.put("pctr",topItem.getCtr());
|
|
|
+ object.put("pcvr",topItem.getCvr());
|
|
|
+ object.put("lrsamples",topItem.getLrSampleString());
|
|
|
+ object.put("dataTime",currentTime.format(timeFormatter));
|
|
|
+ log.info("svc=adBidRank {}", JSONObject.toJSONString(object));
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
|