|
|
@@ -3,13 +3,12 @@ package com.tzld.piaoquan.ad.engine.service.predict.impl;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.alibaba.fastjson.TypeReference;
|
|
|
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
|
|
|
import com.tzld.piaoquan.ad.engine.commons.enums.AppTypeEnum;
|
|
|
import com.tzld.piaoquan.ad.engine.commons.enums.RedisPrefixEnum;
|
|
|
import com.tzld.piaoquan.ad.engine.commons.redis.AdRedisHelper;
|
|
|
import com.tzld.piaoquan.ad.engine.commons.redis.AlgorithmRedisHelper;
|
|
|
-import com.tzld.piaoquan.ad.engine.commons.util.AbUtil;
|
|
|
import com.tzld.piaoquan.ad.engine.commons.util.DateUtils;
|
|
|
-import com.tzld.piaoquan.ad.engine.service.log.LogHubService;
|
|
|
import com.tzld.piaoquan.ad.engine.service.predict.PredictModelService;
|
|
|
import com.tzld.piaoquan.ad.engine.service.predict.config.AbConfig;
|
|
|
import com.tzld.piaoquan.ad.engine.service.predict.config.NewExpUserGroupConfig;
|
|
|
@@ -29,6 +28,7 @@ import com.tzld.piaoquan.ad.engine.commons.feign.manager.service.HolidayService;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.collections4.MapUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.jetbrains.annotations.Nullable;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
@@ -44,8 +44,6 @@ import java.util.*;
|
|
|
@Service
|
|
|
public class PredictModelServiceImpl implements PredictModelService {
|
|
|
private final static Logger log = LoggerFactory.getLogger(PredictModelServiceImpl.class);
|
|
|
- @Value("${ad.own.experiment.tier:ab_test002}")
|
|
|
- private String adOwnExperimentTier;
|
|
|
|
|
|
@Autowired
|
|
|
private AbTestConfigContainer abTestConfigContainer;
|
|
|
@@ -62,25 +60,39 @@ public class PredictModelServiceImpl implements PredictModelService {
|
|
|
@Autowired
|
|
|
RoiModelConfig roiModelConfig;
|
|
|
|
|
|
+ // @Autowired
|
|
|
+ // private PredictServiceV2 predictServiceV2;
|
|
|
+ // @Autowired
|
|
|
+ // private RootSessionIdPredict rootSessionIdPredict;
|
|
|
@Autowired
|
|
|
- private PredictServiceV2 predictServiceV2;
|
|
|
+ private UserLayerRootSessionIdPredict userLayerRootSessionIdPredict;
|
|
|
@Autowired
|
|
|
- private RootSessionIdPredict rootSessionIdPredict;
|
|
|
+ private PredictStrategyBy673 predictStrategyBy673;
|
|
|
@Autowired
|
|
|
- private UserLayerRootSessionIdPredict userLayerRootSessionIdPredict;
|
|
|
-
|
|
|
+ private PredictStrategyBy667 predictStrategyBy667;
|
|
|
@Autowired
|
|
|
- private UserService userService;
|
|
|
-
|
|
|
+ private PredictStrategyBy599 predictStrategyBy599;
|
|
|
+ @Autowired
|
|
|
+ private PredictStrategyBy817 predictStrategyBy817;
|
|
|
+ @Autowired
|
|
|
+ private PredictStrategyBy819 predictStrategyBy819;
|
|
|
+ @Autowired
|
|
|
+ private PredictStrategyBy820 predictStrategyBy820;
|
|
|
@Autowired
|
|
|
- private LogHubService logHubService;
|
|
|
+ private PredictStrategyBy823 predictStrategyBy823;
|
|
|
|
|
|
- @Value("${ad.predict.share0.exp.code:000}")
|
|
|
- private String adPredictNoShareUserExpCode;
|
|
|
+ @Autowired
|
|
|
+ private UserService userService;
|
|
|
|
|
|
+ // @Value("${ad.own.experiment.tier:ab_test002}")
|
|
|
+ // private String adOwnExperimentTier;
|
|
|
+ // @Autowired
|
|
|
+ // private LogHubService logHubService;
|
|
|
+ // @Value("${ad.predict.share0.exp.code:000}")
|
|
|
+ // private String adPredictNoShareUserExpCode;
|
|
|
|
|
|
- @Value("${ad.predict.immersion.exp.code:607}")
|
|
|
- private String adPredictImmersionExpCode;
|
|
|
+ // @Value("${ad.predict.immersion.exp.code:607}")
|
|
|
+ // private String adPredictImmersionExpCode;
|
|
|
|
|
|
@Value("${ad.predict.param.testIds:0}")
|
|
|
private String testIds;
|
|
|
@@ -101,9 +113,13 @@ public class PredictModelServiceImpl implements PredictModelService {
|
|
|
@Value("#{'${show.ad.whitelist.mid:}'.split(',')}")
|
|
|
private Set<String> showAdWhitelistMidSet;
|
|
|
|
|
|
+ @Value("${experiment.817.ad.hour:5,8}")
|
|
|
+ private String experiment817WithAdHour;
|
|
|
+
|
|
|
@Autowired
|
|
|
private AdRedisHelper adRedisHelper;
|
|
|
|
|
|
+ // List<Integer> appIdArr = Arrays.asList(new Integer[]{0, 3, 4, 5, 6, 17, 18, 19, 21, 22});
|
|
|
@Autowired
|
|
|
private HolidayService holidayService;
|
|
|
|
|
|
@@ -139,6 +155,237 @@ public class PredictModelServiceImpl implements PredictModelService {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ List<Map<String, Object>> mapList = (List) requestParam.getAbExpInfo().get("ab_test002");
|
|
|
+
|
|
|
+ // 该用户所有实验合集
|
|
|
+ Set<String> expCodes = new HashSet<>();
|
|
|
+ for (Map<String, Object> map : mapList) {
|
|
|
+ String expCode = map.getOrDefault("abExpCode", "").toString();
|
|
|
+ expCodes.add(expCode);
|
|
|
+ }
|
|
|
+ boolean execute817 = false;
|
|
|
+ // 不出广告时间判定
|
|
|
+ int hourOfDay = DateUtils.getCurrentHour();
|
|
|
+ if (0 <= hourOfDay && hourOfDay < 8 && !isAdvanceShowAd()) {
|
|
|
+ // 0点到8点 && 不是节日
|
|
|
+ boolean isIn817Time = false;
|
|
|
+ try {
|
|
|
+ String[] split = experiment817WithAdHour.split(",");
|
|
|
+ if (Integer.parseInt(split[0]) <= hourOfDay && hourOfDay < Integer.parseInt(split[1])) {
|
|
|
+ isIn817Time = true;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("experiment817WithAdHour配置异常", e);
|
|
|
+ }
|
|
|
+ // 在 817实验时间范围 && 817实验开启
|
|
|
+ if (isIn817Time && expCodes.contains("817")) {
|
|
|
+ execute817 = true;
|
|
|
+ } else {
|
|
|
+ result.put("ad_predict", 1);
|
|
|
+ result.put("no_ad_strategy", "no_ad_time_with_fixed_time");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 新老实验和填充requestParam参数(老实验可能直接返回结果)
|
|
|
+ Map<String, Object> result1 = getParamAndFill(requestParam, result);
|
|
|
+ if (result1 != null) {
|
|
|
+ result1.put("ad_predict", 1);
|
|
|
+ return result1;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ PredictContext predictContext = ConvertUtil.predictParam2Context(requestParam);
|
|
|
+ // 817熔断
|
|
|
+ if (execute817) {
|
|
|
+ return predictStrategyBy817.predict(predictContext);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 823熔断
|
|
|
+ if (predictStrategyBy823.in823Ab(requestParam, expCodes, hourOfDay)) {
|
|
|
+ Map<String, Object> resultMap = predictStrategyBy823.predict(predictContext);
|
|
|
+ predictStrategyBy823.addConfigExt(requestParam, resultMap);
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 819只做参数填充
|
|
|
+ Map<String, Object> predictExtInfo = null;
|
|
|
+ if (expCodes.contains("819")) {
|
|
|
+ predictExtInfo = predictStrategyBy819.predict(predictContext);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> userLayerPredict = userLayerRootSessionIdPredict.predict(predictContext);
|
|
|
+ if (MapUtils.isNotEmpty(userLayerPredict)) {
|
|
|
+ // 填充 819 参数
|
|
|
+ if (MapUtils.isNotEmpty(predictExtInfo)) {
|
|
|
+ userLayerPredict.putAll(predictExtInfo);
|
|
|
+ }
|
|
|
+ return userLayerPredict;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (expCodes.contains("820")) {
|
|
|
+ Map<String, Object> userLayerPredict820 = predictStrategyBy820.predict(predictContext);
|
|
|
+ if (MapUtils.isNotEmpty(userLayerPredict820)) {
|
|
|
+ // 填充 819 参数
|
|
|
+ if (MapUtils.isNotEmpty(predictExtInfo)) {
|
|
|
+ userLayerPredict820.putAll(predictExtInfo);
|
|
|
+ }
|
|
|
+ return userLayerPredict820;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (expCodes.contains("673")) {
|
|
|
+ Map<String, Object> predictResult = predictStrategyBy673.predict(predictContext);
|
|
|
+ if (Objects.nonNull(predictResult)) {
|
|
|
+ // 填充 819 参数
|
|
|
+ if (MapUtils.isNotEmpty(predictExtInfo)) {
|
|
|
+ predictResult.putAll(predictExtInfo);
|
|
|
+ }
|
|
|
+ return predictResult;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> predictResult;
|
|
|
+ if (expCodes.contains("599")) {
|
|
|
+ predictResult = predictStrategyBy599.predict(predictContext);
|
|
|
+ } else if (expCodes.contains("667")) {
|
|
|
+ predictResult = predictStrategyBy667.predict(predictContext);
|
|
|
+ } else {
|
|
|
+ predictResult = predictStrategyBy599.predict(predictContext);
|
|
|
+ }
|
|
|
+ // 填充 819 参数
|
|
|
+ if (MapUtils.isNotEmpty(predictResult) && MapUtils.isNotEmpty(predictExtInfo)) {
|
|
|
+ predictResult.putAll(predictExtInfo);
|
|
|
+ }
|
|
|
+ return predictResult;
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("svc=adPredict appType={} group={} newGroup={} pqtId={}"
|
|
|
+ , requestParam.getAppType(), requestParam.getAbTestCode(), requestParam.getNewExpGroup(), requestParam.getPqtId(), e);
|
|
|
+ result.put("ad_predict", 1);
|
|
|
+ result.put("no_ad_strategy", "error");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private @Nullable Map<String, Object> getParamAndFill(ThresholdPredictModelRequestParam requestParam, Map<String, Object> result) {
|
|
|
+ String abtestId = null;
|
|
|
+ String abTestConfigTag = null;
|
|
|
+ Map<String, Object> abtestParam = null;
|
|
|
+ String midGroup = null;
|
|
|
+ String shareType = null;
|
|
|
+
|
|
|
+ String[] appIdArr = oldExpGroupAppId.split(",");
|
|
|
+ // 新老实验系统
|
|
|
+ List<String> appIdList = Arrays.asList(appIdArr);
|
|
|
+ if (appIdList.contains(requestParam.getAppType().toString())) {
|
|
|
+ String[] abParamArr = abConfig.getAbParams(requestParam.getAbTestCode(), requestParam.getAbExpInfo());
|
|
|
+ if (abParamArr == null) {
|
|
|
+ abParamArr = NewExpUserGroupConfig.newExpUserGroupMap.get(requestParam.getAppType().toString());
|
|
|
+ if (abParamArr == null) {
|
|
|
+ result.put("msg", "abConfig_error");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ abtestId = abParamArr[0];
|
|
|
+ abTestConfigTag = abParamArr[1];
|
|
|
+ HashMap<String, Map<String, Object>> abConfigMap = abConfig.getAbConfigMap();
|
|
|
+ abtestParam = abConfigMap.getOrDefault(abtestId + "-" + abTestConfigTag, null);
|
|
|
+ if (abtestParam == null) {
|
|
|
+ result.put("msg", "abConfig_error");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ // Determine the group to which mid belongs
|
|
|
+ String groupClassKey = (String) abtestParam.get("group_class_key");
|
|
|
+ String midGroupKeyName = RuleRedisKeyConst.KEY_NAME_PREFIX_MID_GROUP + groupClassKey + ":" + requestParam.getMid();
|
|
|
+ midGroup = redisHelper.getString(midGroupKeyName);
|
|
|
+
|
|
|
+ // 没有时为新用户或者无分享用户
|
|
|
+ shareType = midGroup;
|
|
|
+ if (midGroup == null) {
|
|
|
+ midGroup = "mean_group";
|
|
|
+ shareType = "noShare";
|
|
|
+ }
|
|
|
+ String[] noAdMidGroupList = new String[0];
|
|
|
+ noAdMidGroupList = ((JSONArray) abtestParam.get("no_ad_mid_group_list")).toArray(noAdMidGroupList);
|
|
|
+
|
|
|
+ boolean inNoAdGroup = false;
|
|
|
+ for (String group : noAdMidGroupList) {
|
|
|
+ if (group.equals(midGroup)) {
|
|
|
+ inNoAdGroup = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 不出广告组
|
|
|
+ if (inNoAdGroup) {
|
|
|
+ // User is in the no-ad group, no ad should be shown
|
|
|
+ result.put("mid_group", midGroup);
|
|
|
+ result.put("ad_predict", 1);
|
|
|
+ result.put("no_ad_strategy", "no_ad_mid_group_with_video");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ // top1广告不出视频
|
|
|
+ Map<String, List<String>> noAdGroupWithVideoMapping = (Map) abtestParam.getOrDefault("no_ad_group_with_video_mapping", new HashMap<>());
|
|
|
+ if (noAdGroupWithVideoMapping.keySet().contains(midGroup)
|
|
|
+ &&
|
|
|
+ topOneVideoContainer.inNoAdTopVideo(requestParam.getAppType().longValue(), requestParam.getVideoId())
|
|
|
+ ) {
|
|
|
+ result.put("mid_group", midGroup);
|
|
|
+ result.put("ad_predict", 1);
|
|
|
+ result.put("no_ad_strategy", "no_ad_mid_group_with_video");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ String midGroupKeyName = RuleRedisKeyConst.KEY_NAME_PREFIX_MID_GROUP + "class1:" + requestParam.getMid();
|
|
|
+ midGroup = redisHelper.getString(midGroupKeyName);
|
|
|
+ shareType = midGroup;
|
|
|
+ if (midGroup == null) {
|
|
|
+ midGroup = "mean_group";
|
|
|
+ shareType = "noShare";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 市-中文
|
|
|
+ requestParam.setRegion(requestParam.getRegion().replace("省", ""));
|
|
|
+ requestParam.setCity(requestParam.getCity().replace("市", ""));
|
|
|
+ requestParam.setShareType(shareType);
|
|
|
+ String userLayer = userService.getUserLayer4Level(requestParam.getMid());
|
|
|
+ requestParam.setUserLayer(userLayer);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Map<String, Object> adPredictOld(ThresholdPredictModelRequestParam requestParam) {
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("pqtId", requestParam.getPqtId());
|
|
|
+
|
|
|
+ // 白名单用户固定出广告
|
|
|
+ if (CollectionUtils.isNotEmpty(showAdWhitelistMidSet) && showAdWhitelistMidSet.contains(requestParam.getMid())) {
|
|
|
+ result.put("ad_predict", 2);
|
|
|
+ result.put("ad_strategy", "show_ad_whitelist");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ String[] withoutAdVideoIdsArr = withoutAdVideoIds.split(",");
|
|
|
+ for (String videoId : withoutAdVideoIdsArr) {
|
|
|
+ if (videoId.equals(requestParam.getVideoId() + "")) {
|
|
|
+ if (requestParam.getAppType().equals(0)
|
|
|
+ || requestParam.getAppType().equals(4)
|
|
|
+ || requestParam.getAppType().equals(5)
|
|
|
+ || requestParam.getAppType().equals(21)
|
|
|
+ ) {
|
|
|
+ result = new HashMap<>();
|
|
|
+ result.put("ad_predict", 1);
|
|
|
+ result.put("no_ad_strategy", "no_ad_with_video_in_white_list");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
List<Map<String, Object>> mapList = (List) requestParam.getAbExpInfo().get("ab_test002");
|
|
|
|
|
|
Map<String, List<JSONObject>> configMap = new HashMap<>();
|
|
|
@@ -173,13 +420,13 @@ public class PredictModelServiceImpl implements PredictModelService {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- if (AbUtil.isInAbExp(expCodes, requestParam.getAppType(), requestParam.getNewExpGroup(), "713")) {
|
|
|
- PredictContext context = ConvertUtil.predictParam2Context(requestParam);
|
|
|
- Map<String, Object> resultMap = predictServiceV2.predict(context);
|
|
|
- logHubService.crowdChooseLogUpload(context);
|
|
|
- resultMap.put("pqtId", requestParam.getPqtId());
|
|
|
- return resultMap;
|
|
|
- }
|
|
|
+ // if (AbUtil.isInAbExp(expCodes, requestParam.getAppType(), requestParam.getNewExpGroup(), "713")) {
|
|
|
+ // PredictContext context = ConvertUtil.predictParam2Context(requestParam);
|
|
|
+ // Map<String, Object> resultMap = predictServiceV2.predict(context);
|
|
|
+ // logHubService.crowdChooseLogUpload(context);
|
|
|
+ // resultMap.put("pqtId", requestParam.getPqtId());
|
|
|
+ // return resultMap;
|
|
|
+ // }
|
|
|
|
|
|
String abtestId = null;
|
|
|
String abTestConfigTag = null;
|
|
|
@@ -265,77 +512,90 @@ public class PredictModelServiceImpl implements PredictModelService {
|
|
|
// 市-中文
|
|
|
requestParam.setRegion(requestParam.getRegion().replace("省", ""));
|
|
|
requestParam.setCity(requestParam.getCity().replace("市", ""));
|
|
|
- // 设置信息
|
|
|
- ThresholdPredictModelParam modelParam = ThresholdPredictModelParam.builder()
|
|
|
- .build();
|
|
|
- BeanUtils.copyProperties(requestParam, modelParam);
|
|
|
- modelParam.setDate(new Date());
|
|
|
- modelParam.setAbtestId(abtestId);
|
|
|
- modelParam.setAbTestConfigTag(abTestConfigTag);
|
|
|
- modelParam.setAbtestParam(abtestParam);
|
|
|
- modelParam.setMidGroup(midGroup);
|
|
|
- modelParam.setExtraParam(new HashMap<>());
|
|
|
- modelParam.addUserExtraFuture("shareType", shareType);
|
|
|
- setExtraParam(modelParam);
|
|
|
-
|
|
|
requestParam.setShareType(shareType);
|
|
|
String userLayer = userService.getUserLayer4Level(requestParam.getMid());
|
|
|
requestParam.setUserLayer(userLayer);
|
|
|
|
|
|
// 先走rootSessionId 实验
|
|
|
- Map<String, Object> predict = rootSessionIdPredict.predict(ConvertUtil.predictParam2Context(requestParam));
|
|
|
- if (MapUtils.isNotEmpty(predict)) {
|
|
|
- return predict;
|
|
|
- }
|
|
|
+ // Map<String, Object> predict = rootSessionIdPredict.predict(ConvertUtil.predictParam2Context(requestParam));
|
|
|
+ // if (MapUtils.isNotEmpty(predict)) {
|
|
|
+ // return predict;
|
|
|
+ // }
|
|
|
|
|
|
Map<String, Object> userLayerPredict = userLayerRootSessionIdPredict.predict(ConvertUtil.predictParam2Context(requestParam));
|
|
|
if (MapUtils.isNotEmpty(userLayerPredict)) {
|
|
|
return userLayerPredict;
|
|
|
}
|
|
|
|
|
|
- String appTypeStr = requestParam.getAppType().toString();
|
|
|
-
|
|
|
- List<String> userSourceAndLayerAdRateExpIds = Arrays.asList(userSourceLayerAdRateExpIds.split(","));
|
|
|
- boolean inAdRateExp = this.checkInAnyExpIdsAndNewAb(expCodes, userSourceAndLayerAdRateExpIds, appTypeStr, requestParam.getNewExpGroup(), modelParam);
|
|
|
- if (inAdRateExp) {
|
|
|
- result = ThresholdModelContainer.getThresholdPredictModel("random673").predict(modelParam);
|
|
|
- // 如果676实验返回结果,表示未命中规则即对应的用户来源和所属层存在配置,使用676实验的结果,否则继续走599实验
|
|
|
- if (Objects.nonNull(result)) {
|
|
|
- return result;
|
|
|
+ if (expCodes.contains("673")) {
|
|
|
+ Map<String, Object> predictResult = predictStrategyBy673.predict(ConvertUtil.predictParam2Context(requestParam));
|
|
|
+ if (Objects.nonNull(predictResult)) {
|
|
|
+ return predictResult;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 新老实验系统兼容
|
|
|
- if (expCodes.contains("599") ||
|
|
|
- (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
- requestParam.getAppType().toString(), requestParam.getNewExpGroup(), "599", modelParam))) {
|
|
|
- // NewExpInfoHelper.flagId 647
|
|
|
- result = ThresholdModelContainer.
|
|
|
- getThresholdPredictModel("random")
|
|
|
- .predict(modelParam);
|
|
|
- } else if (expCodes.contains("667") ||
|
|
|
- (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
- requestParam.getAppType().toString(), requestParam.getNewExpGroup(), "667", modelParam))) {
|
|
|
- // NewExpInfoHelper.flagId 647
|
|
|
- result = ThresholdModelContainer.
|
|
|
- getThresholdPredictModel("random667")
|
|
|
- .predict(modelParam);
|
|
|
- } else if (inExpList(expCodes, adPredictImmersionExpCode)
|
|
|
- ||
|
|
|
- (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
- requestParam.getAppType().toString(), requestParam.getNewExpGroup(), "607", modelParam))) {
|
|
|
- // adPredictImmersionExpCode 607 631
|
|
|
- result = ThresholdModelContainer.
|
|
|
- getThresholdPredictModel("immersion")
|
|
|
- .predict(modelParam);
|
|
|
+ if (expCodes.contains("599")) {
|
|
|
+ return predictStrategyBy599.predict(ConvertUtil.predictParam2Context(requestParam));
|
|
|
+ } else if (expCodes.contains("667")) {
|
|
|
+ return predictStrategyBy667.predict(ConvertUtil.predictParam2Context(requestParam));
|
|
|
} else {
|
|
|
- Object thresholdMixFunc = abtestParam.getOrDefault("threshold_mix_func", "basic");
|
|
|
- result = ThresholdModelContainer.
|
|
|
- getThresholdPredictModel(thresholdMixFunc.toString())
|
|
|
- .predict(modelParam);
|
|
|
+ return predictStrategyBy599.predict(ConvertUtil.predictParam2Context(requestParam));
|
|
|
}
|
|
|
|
|
|
- return result;
|
|
|
+ // 设置信息
|
|
|
+ // ThresholdPredictModelParam modelParam = ThresholdPredictModelParam.builder()
|
|
|
+ // .build();
|
|
|
+ // BeanUtils.copyProperties(requestParam, modelParam);
|
|
|
+ // modelParam.setDate(new Date());
|
|
|
+ // modelParam.setAbtestId(abtestId);
|
|
|
+ // modelParam.setAbTestConfigTag(abTestConfigTag);
|
|
|
+ // modelParam.setAbtestParam(abtestParam);
|
|
|
+ // modelParam.setMidGroup(midGroup);
|
|
|
+ // modelParam.setExtraParam(new HashMap<>());
|
|
|
+ // modelParam.addUserExtraFuture("shareType", shareType);
|
|
|
+ // setExtraParam(modelParam);
|
|
|
+
|
|
|
+ // String appTypeStr = requestParam.getAppType().toString();
|
|
|
+ //
|
|
|
+ // List<String> userSourceAndLayerAdRateExpIds = Arrays.asList(userSourceLayerAdRateExpIds.split(","));
|
|
|
+ // boolean inAdRateExp = this.checkInAnyExpIdsAndNewAb(expCodes, userSourceAndLayerAdRateExpIds, appTypeStr, requestParam.getNewExpGroup(), modelParam);
|
|
|
+ // if (inAdRateExp) {
|
|
|
+ // result = ThresholdModelContainer.getThresholdPredictModel("random673").predict(modelParam);
|
|
|
+ // // 如果676实验返回结果,表示未命中规则即对应的用户来源和所属层存在配置,使用676实验的结果,否则继续走599实验
|
|
|
+ // if (Objects.nonNull(result)) {
|
|
|
+ // return result;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // // 新老实验系统兼容
|
|
|
+ // if (expCodes.contains("599") ||
|
|
|
+ // (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
+ // requestParam.getAppType().toString(), requestParam.getNewExpGroup(), "599", modelParam))) {
|
|
|
+ // // NewExpInfoHelper.flagId 647
|
|
|
+ // result = ThresholdModelContainer.
|
|
|
+ // getThresholdPredictModel("random")
|
|
|
+ // .predict(modelParam);
|
|
|
+ // } else if (expCodes.contains("667") ||
|
|
|
+ // (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
+ // requestParam.getAppType().toString(), requestParam.getNewExpGroup(), "667", modelParam))) {
|
|
|
+ // // NewExpInfoHelper.flagId 647
|
|
|
+ // result = ThresholdModelContainer.
|
|
|
+ // getThresholdPredictModel("random667")
|
|
|
+ // .predict(modelParam);
|
|
|
+ // } else if (inExpList(expCodes, adPredictImmersionExpCode)
|
|
|
+ // ||
|
|
|
+ // (expCodes.contains(NewExpInfoHelper.flagId) && NewExpInfoHelper.checkInNewExpGroupAndSetParamIfIn(
|
|
|
+ // requestParam.getAppType().toString(), requestParam.getNewExpGroup(), "607", modelParam))) {
|
|
|
+ // // adPredictImmersionExpCode 607 631
|
|
|
+ // result = ThresholdModelContainer.
|
|
|
+ // getThresholdPredictModel("immersion")
|
|
|
+ // .predict(modelParam);
|
|
|
+ // } else {
|
|
|
+ // Object thresholdMixFunc = abtestParam.getOrDefault("threshold_mix_func", "basic");
|
|
|
+ // result = ThresholdModelContainer.
|
|
|
+ // getThresholdPredictModel(thresholdMixFunc.toString())
|
|
|
+ // .predict(modelParam);
|
|
|
+ // }
|
|
|
+ // return result;
|
|
|
} catch (Exception e) {
|
|
|
log.error("svc=adPredict appType={} group={} newGroup={} pqtId={}"
|
|
|
, requestParam.getAppType(), requestParam.getAbTestCode(), requestParam.getNewExpGroup(), requestParam.getPqtId(), e);
|