Kaynağa Gözat

节日查询优化

yaodaoseng 1 hafta önce
ebeveyn
işleme
020ff4f9a1

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

@@ -8,6 +8,7 @@ public enum RedisPrefixEnum {
     AD_USER_ROR_BEHAVIOR_COPY("ad:user:ror:behavior_copy:%s", "用户ror行为特征副本"),
     AD_USER_FISSION_RATE_BEHAVIOR("ad:user:fission:rate:behavior:%s", "用户fission_rate行为特征"),
     AD_USER_FISSION_RATE_BEHAVIOR_COPY("ad:user:fission:rate:behavior_copy:%s", "用户fission_rate行为特征副本"),
+    ADVANCE_HOLIDAY_FLAG("ad:advance:holiday:show:ad:flag:%s", "是否是节日,0-否;1-是"),
     ;
     private String prefix;
     private String desc;

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

@@ -775,34 +775,42 @@ public class PredictModelServiceImpl implements PredictModelService {
      *
      * @return true-当前时间在6点之后且为节日,false-不满足条件
      */
-    public boolean isEarlyMorningHoliday() {
-        try {
-            // 获取当前小时
-            int currentHour = DateUtils.getCurrentHour();
-
-            // 判断时间是否在6点之后
-            if (currentHour >= 6) {
-                log.info("当前时间{}点在6点之后,开始检查是否为节日", currentHour);
-
-                // 调用节日服务判断今日是否为节日
-                boolean isHoliday = holidayService.isTodayHoliday();
-
-                if (isHoliday) {
-                    log.info("当前时间{}点6点之后且今日是节日,返回true", currentHour);
-                    return true;
-                } else {
-                    log.info("当前时间{}点在6点之后但今日不是节日,返回false", currentHour);
-                    return false;
-                }
-            } else {
-                log.debug("当前时间{}点不在6点之后,返回false", currentHour);
-                return false;
-            }
-
-        } catch (Exception e) {
-            log.error("判断早晨节日时间异常", e);
-            // 异常情况下返回false,确保系统稳定性
-            return false;
-        }
-    }
+	    public boolean isEarlyMorningHoliday() {
+	        try {
+	            // 获取当前小时,6点之前直接返回 false,无需查询节日服务或缓存
+	            int currentHour = DateUtils.getCurrentHour();
+	            if (currentHour < 6) {
+	                return false;
+	            }
+
+	            String day = DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now());
+	            String redisKey = String.format(RedisPrefixEnum.ADVANCE_HOLIDAY_FLAG.getPrefix(), day);
+	            String flag = adRedisHelper.get(redisKey);
+
+	            // 先从缓存读取当日节日标记
+	            if (StringUtils.isNotBlank(flag)) {
+	                boolean isHoliday = StringUtils.equals("1", flag);
+	                return isHoliday;
+	            }
+
+	            // 调用节日服务判断今日是否为节日
+	            boolean isHoliday = holidayService.isTodayHoliday();
+
+	            // 查询结果回种缓存,保存 10 小时
+	            String cacheVal = isHoliday ? "1" : "0";
+	            boolean cacheResult = adRedisHelper.set(redisKey, cacheVal, 10 * 60 * 60);
+	            log.info("写入早晨节日标记缓存: {} -> {}, ttl=10h, success={}", redisKey, cacheVal, cacheResult);
+
+	            if (isHoliday) {
+	                return true;
+	            } else {
+	                return false;
+	            }
+
+	        } catch (Exception e) {
+	            log.error("判断早晨节日时间异常", e);
+	            // 异常情况下返回false,确保系统稳定性
+	            return false;
+	        }
+	    }
 }