|
@@ -363,50 +363,55 @@ public abstract class RankStrategyBasic implements RankStrategy {
|
|
|
* @return 保量权重系数
|
|
|
*/
|
|
|
protected double calculateGuaranteeWeightWithCrowd(GuaranteeView guaranteeView, Map<String, String> reqFeature) {
|
|
|
- // 空值检查:如果保量视图为空,返回默认权重
|
|
|
- if (guaranteeView == null) {
|
|
|
- return 1.0;
|
|
|
- }
|
|
|
-
|
|
|
- // 判断是否配置了保量人群代码
|
|
|
- String guaranteeCrowdCode = guaranteeView.getGuaranteeCrowdCode();
|
|
|
- if (StringUtils.isEmpty(guaranteeCrowdCode)) {
|
|
|
- // 保量人群代码无值,走原有逻辑
|
|
|
- return calculateGuaranteedWeight(guaranteeView);
|
|
|
- }
|
|
|
- // 判断是否勾选了全部人群
|
|
|
- if (isFullCrowd(guaranteeCrowdCode)) {
|
|
|
- // 勾选了全部人群,走原有逻辑
|
|
|
- return calculateGuaranteedWeight(guaranteeView);
|
|
|
- }
|
|
|
+ try {
|
|
|
+ // 空值检查:如果保量视图为空,返回默认权重
|
|
|
+ if (guaranteeView == null) {
|
|
|
+ return 1.0;
|
|
|
+ }
|
|
|
|
|
|
- // 保量人群代码有值,进行人群匹配判断
|
|
|
- String userLayer = reqFeature.getOrDefault("layer", "");
|
|
|
+ // 判断是否配置了保量人群代码
|
|
|
+ String guaranteeCrowdCode = guaranteeView.getGuaranteeCrowdCode();
|
|
|
+ if (StringUtils.isEmpty(guaranteeCrowdCode)) {
|
|
|
+ // 保量人群代码无值,走原有逻辑
|
|
|
+ return calculateGuaranteedWeight(guaranteeView);
|
|
|
+ }
|
|
|
+ // 判断是否勾选了全部人群
|
|
|
+ if (isFullCrowd(guaranteeCrowdCode)) {
|
|
|
+ // 勾选了全部人群,走原有逻辑
|
|
|
+ return calculateGuaranteedWeight(guaranteeView);
|
|
|
+ }
|
|
|
|
|
|
- // 获取用户人群对应的CrowdLayerEnum code
|
|
|
- Integer userCrowdCode = getUserCrowdCode(userLayer);
|
|
|
- if (userCrowdCode == null) {
|
|
|
- log.error("RankStrategyBasic calculateGuaranteeWeightWithCrowd 无法获取用户人群代码,userLayer={}", userLayer);
|
|
|
- return 1.0;
|
|
|
- }
|
|
|
+ // 保量人群代码有值,进行人群匹配判断
|
|
|
+ String userLayer = reqFeature.getOrDefault("layer", "");
|
|
|
|
|
|
- // 判断用户人群是否在保量人群范围内
|
|
|
- boolean isUserInGuaranteeCrowd = isUserInGuaranteeCrowd(guaranteeCrowdCode, userCrowdCode);
|
|
|
+ // 获取用户人群对应的CrowdLayerEnum code
|
|
|
+ Integer userCrowdCode = getUserCrowdCode(userLayer);
|
|
|
+ if (userCrowdCode == null) {
|
|
|
+ log.error("RankStrategyBasic calculateGuaranteeWeightWithCrowd 无法获取用户人群代码,userLayer={}", userLayer);
|
|
|
+ return 1.0;
|
|
|
+ }
|
|
|
|
|
|
- if (isUserInGuaranteeCrowd) {
|
|
|
- // 到这里,就是用户在保量人群中,且广告主勾选的不是全部人群
|
|
|
- // 计算保量权重
|
|
|
- double baseWeight = calculateGuaranteedWeight(guaranteeView);
|
|
|
- // 额外加权
|
|
|
- // 对勾选了保量人群,且不是勾选了全部的保量人群的广告进行额外加权
|
|
|
- double finalWeight = baseWeight * guaranteeCrowdWeightCoefficient;
|
|
|
- log.debug("RankStrategyBasic 保量人群加权: userLayer={}, guaranteeCrowdCode={}, baseWeight={}, coefficient={}, finalWeight={}",
|
|
|
- userLayer, guaranteeCrowdCode, baseWeight, guaranteeCrowdWeightCoefficient, finalWeight);
|
|
|
- return finalWeight;
|
|
|
- } else {
|
|
|
- // 用户不在保量人群范围内,权重设为1
|
|
|
- log.debug("RankStrategyBasic 用户不在保量人群范围内: userLayer={}, guaranteeCrowdCode={}", userLayer, guaranteeCrowdCode);
|
|
|
- return 1.0;
|
|
|
+ // 判断用户人群是否在保量人群范围内
|
|
|
+ boolean isUserInGuaranteeCrowd = isUserInGuaranteeCrowd(guaranteeCrowdCode, userCrowdCode);
|
|
|
+
|
|
|
+ if (isUserInGuaranteeCrowd) {
|
|
|
+ // 到这里,就是用户在保量人群中,且广告主勾选的不是全部人群
|
|
|
+ // 计算保量权重
|
|
|
+ double baseWeight = calculateGuaranteedWeight(guaranteeView);
|
|
|
+ // 额外加权
|
|
|
+ // 对勾选了保量人群,且不是勾选了全部的保量人群的广告进行额外加权
|
|
|
+ double finalWeight = baseWeight * guaranteeCrowdWeightCoefficient;
|
|
|
+ log.debug("RankStrategyBasic 保量人群加权: userLayer={}, guaranteeCrowdCode={}, baseWeight={}, coefficient={}, finalWeight={}",
|
|
|
+ userLayer, guaranteeCrowdCode, baseWeight, guaranteeCrowdWeightCoefficient, finalWeight);
|
|
|
+ return finalWeight;
|
|
|
+ } else {
|
|
|
+ // 用户不在保量人群范围内,权重设为1
|
|
|
+ log.debug("RankStrategyBasic 用户不在保量人群范围内: userLayer={}, guaranteeCrowdCode={}", userLayer, guaranteeCrowdCode);
|
|
|
+ return 1.0;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("RankStrategyBasic calculateGuaranteeWeightWithCrowd error", e);
|
|
|
+ return calculateGuaranteedWeight(guaranteeView);
|
|
|
}
|
|
|
}
|
|
|
|