|  | @@ -0,0 +1,157 @@
 | 
	
		
			
				|  |  | +package com.tzld.piaoquan.ad.engine.service.predict.helper;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import com.google.common.reflect.TypeToken;
 | 
	
		
			
				|  |  | +import com.tzld.piaoquan.ad.engine.commons.util.JSONUtils;
 | 
	
		
			
				|  |  | +import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Value;
 | 
	
		
			
				|  |  | +import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +@Component
 | 
	
		
			
				|  |  | +public class NewExpInfoHelper {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static Map<String,Set<String>> appExpIdCache=new HashMap<>();
 | 
	
		
			
				|  |  | +    public static Map<String,Exp> expIdAndRangeCache=new HashMap<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Value("${new.exp,config.v2:[]}")
 | 
	
		
			
				|  |  | +    private void setNewExpInfo(String str){
 | 
	
		
			
				|  |  | +        List<ExpConfig> expConfigs= JSONUtils.fromJson(str, new TypeToken<List<ExpConfig>>() {
 | 
	
		
			
				|  |  | +        }, Collections.emptyList());
 | 
	
		
			
				|  |  | +        for (ExpConfig expConfig : expConfigs) {
 | 
	
		
			
				|  |  | +            String appId=expConfig.getAppType();
 | 
	
		
			
				|  |  | +            for (Layer layer : expConfig.layers) {
 | 
	
		
			
				|  |  | +                if (layer.layerId.equals("ad-server")){
 | 
	
		
			
				|  |  | +                    Set<String> expIdSet=new HashSet<>();
 | 
	
		
			
				|  |  | +                    for (Exp exp : layer.getExps()) {
 | 
	
		
			
				|  |  | +                        expIdSet.add(exp.getExpId());
 | 
	
		
			
				|  |  | +                        expIdAndRangeCache.put(exp.getExpId(),exp);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    appExpIdCache.put(appId,expIdSet);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static int getNewExpGroup(HttpServletRequest httpServletRequest){
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            Map<String, String> expMap = JSONUtils.fromJson(httpServletRequest.getHeader("newGroupInfo"), new TypeToken<Map<String, String>>() {
 | 
	
		
			
				|  |  | +            }, Collections.emptyMap());
 | 
	
		
			
				|  |  | +            String groupStr=expMap.get("group");
 | 
	
		
			
				|  |  | +            Map<String, String> groupMap = JSONUtils.fromJson(groupStr, new TypeToken<Map<String, String>>() {
 | 
	
		
			
				|  |  | +            }, Collections.emptyMap());
 | 
	
		
			
				|  |  | +            return Integer.parseInt(groupMap.getOrDefault("ad-server","-1"));
 | 
	
		
			
				|  |  | +        }catch (Exception e){
 | 
	
		
			
				|  |  | +            return -1;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static boolean checkInNewExpGroupAndSetParamIfIn(String appId, int groupNumber, String expId, ThresholdPredictModelParam modelParam){
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            if(appExpIdCache.get(appId)==null||!appExpIdCache.get(appId).contains(expId)){
 | 
	
		
			
				|  |  | +                return false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(expIdAndRangeCache.get(expId).getRange()[0]<=groupNumber&&expIdAndRangeCache.get(expId).getRange()[1]>=groupNumber){
 | 
	
		
			
				|  |  | +                for(Map.Entry<String,Object> entry:expIdAndRangeCache.get(expId).getParam().entrySet()){
 | 
	
		
			
				|  |  | +                    modelParam.getExtraParam().put(entry.getKey(),entry.getValue());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                return true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  | +        }catch (Exception e){
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    public static class ExpConfig {
 | 
	
		
			
				|  |  | +        private String appType;
 | 
	
		
			
				|  |  | +        private List<Layer> layers;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public String getAppType() {
 | 
	
		
			
				|  |  | +            return appType;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setAppType(String appType) {
 | 
	
		
			
				|  |  | +            this.appType = appType;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public List<Layer> getLayers() {
 | 
	
		
			
				|  |  | +            return layers;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setLayers(List<Layer> layers) {
 | 
	
		
			
				|  |  | +            this.layers = layers;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static class Layer {
 | 
	
		
			
				|  |  | +        private String layerId;
 | 
	
		
			
				|  |  | +        private int bucketNum;
 | 
	
		
			
				|  |  | +        private List<Exp> exps;
 | 
	
		
			
				|  |  | +        private Map<String, String> groupRule;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public String getLayerId() {
 | 
	
		
			
				|  |  | +            return layerId;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setLayerId(String layerId) {
 | 
	
		
			
				|  |  | +            this.layerId = layerId;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public int getBucketNum() {
 | 
	
		
			
				|  |  | +            return bucketNum;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setBucketNum(int bucketNum) {
 | 
	
		
			
				|  |  | +            this.bucketNum = bucketNum;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public List<Exp> getExps() {
 | 
	
		
			
				|  |  | +            return exps;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setExps(List<Exp> exps) {
 | 
	
		
			
				|  |  | +            this.exps = exps;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public Map<String, String> getGroupRule() {
 | 
	
		
			
				|  |  | +            return groupRule;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setGroupRule(Map<String, String> groupRule) {
 | 
	
		
			
				|  |  | +            this.groupRule = groupRule;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static class Exp {
 | 
	
		
			
				|  |  | +        private String expId;
 | 
	
		
			
				|  |  | +        private int[] range;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        private Map<String,Object> param;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public String getExpId() {
 | 
	
		
			
				|  |  | +            return expId;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setExpId(String expId) {
 | 
	
		
			
				|  |  | +            this.expId = expId;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public int[] getRange() {
 | 
	
		
			
				|  |  | +            return range;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setRange(int[] range) {
 | 
	
		
			
				|  |  | +            this.range = range;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public Map<String, Object> getParam() {
 | 
	
		
			
				|  |  | +            return param;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public void setParam(Map<String, Object> param) {
 | 
	
		
			
				|  |  | +            this.param = param;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |