zhaohaipeng 7 месяцев назад
Родитель
Сommit
b7fe6d3f18

+ 23 - 0
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/enums/RedisPrefixEnum.java

@@ -0,0 +1,23 @@
+package com.tzld.piaoquan.ad.engine.commons.enums;
+
+public enum RedisPrefixEnum {
+
+    ADVANCE_SHOW_AD_FLAG("ad:advance:show:ad:flag:%s", "是否提前出广告标识,0-否;1-是"),
+    ;
+    private String prefix;
+    private String desc;
+
+    RedisPrefixEnum(String prefix, String desc) {
+        this.prefix = prefix;
+        this.desc = desc;
+    }
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+}

+ 54 - 0
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/redis/AdRedisHelper.java

@@ -0,0 +1,54 @@
+package com.tzld.piaoquan.ad.engine.commons.redis;
+
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@Component
+public class AdRedisHelper {
+    private final static Logger log = LoggerFactory.getLogger(AdRedisHelper.class);
+
+    @Resource(name = "adRedisTemplate")
+    private RedisTemplate<String, String> redisTemplate;
+
+    public Set<String> sMembers(String key) {
+        return redisTemplate.opsForSet().members(key);
+    }
+
+    public boolean set(String key, String value, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+            } else {
+                redisTemplate.opsForValue().set(key, value);
+            }
+            return true;
+        } catch (Exception e) {
+            log.error("adRedisHelper set error", e);
+            return false;
+        }
+    }
+
+    public String get(String key) {
+        String val = redisTemplate.opsForValue().get(key);
+        if (StringUtils.isNotBlank(val)) {
+            return val;
+        }
+        return null;
+    }
+
+    public boolean del(String key) {
+        return Boolean.TRUE.equals(redisTemplate.delete(key));
+    }
+
+    public boolean containsKey(String key) {
+        return Boolean.TRUE.equals(redisTemplate.hasKey(key));
+    }
+
+}

+ 0 - 1
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/redis/AlgorithmRedisHelper.java

@@ -1,6 +1,5 @@
 package com.tzld.piaoquan.ad.engine.commons.redis;
 
-import com.google.common.collect.Collections2;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

+ 22 - 0
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/redis/RedisTemplateConfig.java

@@ -50,6 +50,28 @@ public class RedisTemplateConfig {
         return new LettuceConnectionFactory(algorithmRedisConfig, lettuceClientConfiguration);
     }
 
+    @Bean(name = "adRedisFactory")
+    public RedisTemplate<String, String> adRedisTemplate(@Qualifier("adRedisFactory") RedisConnectionFactory adRedisFactory) {
+        return buildRedisTemplateByString(adRedisFactory);
+    }
+
+    @Bean
+    @ConfigurationProperties(prefix = "spring.redis-ad")
+    public RedisStandaloneConfiguration adRedisConfig() {
+        return new RedisStandaloneConfiguration();
+    }
+
+    @Bean("adRedisFactory")
+    public LettuceConnectionFactory adRedisFactory(GenericObjectPoolConfig<LettucePoolingClientConfiguration> config, RedisStandaloneConfiguration adRedisConfig) {
+        LettuceClientConfiguration lettuceClientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build();
+        return new LettuceConnectionFactory(adRedisConfig, lettuceClientConfiguration);
+    }
+
+    @Bean(name = "adRedisTemplate")
+    public RedisTemplate<String, String> getAdRedisTemplate(@Qualifier("adRedisFactory") RedisConnectionFactory algorithmRedisFactory) {
+        return buildRedisTemplateByString(algorithmRedisFactory);
+    }
+
     /**
      * 构建redisTemplate 使用string序列化
      *

+ 21 - 12
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/predict/impl/PredictModelServiceImpl.java

@@ -4,14 +4,15 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 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.DateUtils;
-import com.tzld.piaoquan.ad.engine.commons.util.JSONUtils;
+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;
 import com.tzld.piaoquan.ad.engine.service.predict.config.RoiModelConfig;
 import com.tzld.piaoquan.ad.engine.service.predict.constant.RuleRedisKeyConst;
-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.container.AbTestConfigContainer;
 import com.tzld.piaoquan.ad.engine.service.predict.container.ThresholdModelContainer;
 import com.tzld.piaoquan.ad.engine.service.predict.container.TopOneVideoContainer;
@@ -20,6 +21,7 @@ import com.tzld.piaoquan.ad.engine.service.predict.param.RoiThresholdPredictMode
 import com.tzld.piaoquan.ad.engine.service.predict.param.ThresholdPredictModelParam;
 import com.tzld.piaoquan.ad.engine.service.predict.param.request.RoiPredictModelRequestParam;
 import com.tzld.piaoquan.ad.engine.service.predict.param.request.ThresholdPredictModelRequestParam;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -27,6 +29,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 //
@@ -54,8 +58,6 @@ public class PredictModelServiceImpl implements PredictModelService {
     @Value("${ad.predict.share0.exp.code:000}")
     private String adPredictNoShareUserExpCode;
 
-//    @Value("${ad.predict.90d.share0.exp.code:612}")
-//    private String adPredict90DNoShareUserExpCode;
 
     @Value("${ad.predict.immersion.exp.code:607}")
     private String adPredictImmersionExpCode;
@@ -70,6 +72,9 @@ public class PredictModelServiceImpl implements PredictModelService {
     @Value("${user.source.layer.ad.rate.exp.ids:673,676}")
     private String userSourceLayerAdRateExpIds;
 
+    @Autowired
+    private AdRedisHelper adRedisHelper;
+
     List<Integer> appIdArr = Arrays.asList(new Integer[]{0, 3, 4, 5, 6, 17, 18, 19, 21, 22});
 
 
@@ -121,13 +126,17 @@ public class PredictModelServiceImpl implements PredictModelService {
                 result.put("no_ad_strategy", "no_ad_time_with_time_plan");
                 return result;
             } else if (
-                    (!condition1 || (condition1 && !condition2))
-                            &&
-                            (0 <= hourOfDay && hourOfDay < 8)) {
-                // 0点到8点 && (未开启555 || 555配置不包含abcode)
-                result.put("ad_predict", 1);
-                result.put("no_ad_strategy", "no_ad_time_with_fixed_time");
-                return result;
+                    (!condition1 || !condition2) && 0 <= hourOfDay && hourOfDay < 8) {
+
+                String day = DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now());
+                String redisKey = String.format(RedisPrefixEnum.ADVANCE_SHOW_AD_FLAG.getPrefix(), day);
+                String flag = adRedisHelper.get(redisKey);
+                if (StringUtils.equals("0", flag)) {
+                    // 0点到8点 && (未开启555 || 555配置不包含abcode)
+                    result.put("ad_predict", 1);
+                    result.put("no_ad_strategy", "no_ad_time_with_fixed_time");
+                    return result;
+                }
             }
             String abtestId = null;
             String abTestConfigTag = null;