Browse Source

ADD: 判断是否在允许强插的时间范围内

sunxy 1 year ago
parent
commit
e91fd20d28

+ 46 - 9
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/processor/RankProcessorBoost.java

@@ -2,8 +2,11 @@ package com.tzld.piaoquan.recommend.server.service.rank.processor;
 
 import com.tzld.piaoquan.recommend.server.model.Video;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -19,26 +22,60 @@ public class RankProcessorBoost {
         if (CollectionUtils.isEmpty(rovList) || rulesMap == null || rulesMap.isEmpty()) {
             return;
         }
-        Map<String, Double> densityRules = new HashMap<>();
+        Map<String, String> densityRules = new HashMap<>();
+        Map<String, String> dateMap = new HashMap<>();
         for (Map.Entry<String, Map<String, String>> entry : rulesMap.entrySet()) {
             String key = entry.getKey();
             Map<String, String> value = entry.getValue();
             if (value.containsKey("boost")) {
-                densityRules.put(key, Double.valueOf(value.get("boost")));
+                densityRules.put(key, value.get("boost"));
+            }
+            if (value.containsKey("boost_date")) {
+                dateMap.put(key, value.get("boost_date"));
             }
         }
 
-
-        for (Map.Entry<String, Double> entry : densityRules.entrySet()) {
-            rovList.stream().filter(video -> video.getTags().contains(entry.getKey()))
-                    .forEach(video -> video.setSortScore(
-                            BigDecimal.valueOf(video.getSortScore())
-                                    .multiply(BigDecimal.valueOf(entry.getValue()))
-                                    .doubleValue()));
+        for (Map.Entry<String, String> entry : densityRules.entrySet()) {
+            String dateRange = dateMap.get(entry.getKey());
+            if (StringUtils.isNotBlank(dateRange)) {
+                String[] dateRangeArray = dateRange.split("-");
+                if (dateRangeArray.length != 2) {
+                    continue;
+                }
+                String start = dateRangeArray[0];
+                String end = dateRangeArray[1];
+                String nowHour = DateTimeFormatter.ofPattern("yyyyMMddHH").format(LocalDateTime.now());
+                if (!ifFilter(start, end, nowHour)) {
+                    continue;
+                }
+            }
+            try {
+                String value = entry.getValue();
+                String[] boostArray = value.split("-");
+                if (boostArray.length != 2) {
+                    continue;
+                }
+                double min = Double.parseDouble(boostArray[0]);
+                double max = Double.parseDouble(boostArray[1]);
+                // 生成min到max之间的随机数
+                double randomValue = min + (Math.random() * (max - min));
+                rovList.stream().filter(video -> video.getTags().contains(entry.getKey()))
+                        .forEach(video -> video.setSortScore(
+                                BigDecimal.valueOf(video.getSortScore())
+                                        .multiply(BigDecimal.valueOf(randomValue))
+                                        .doubleValue()));
+            } catch (Exception ignored) {
+            }
         }
         rovList.sort((o1, o2) -> Double.compare(o2.getSortScore(), o1.getSortScore()));
 
     }
 
+    public static boolean ifFilter(String start, String end, String dateHour) {
+        if (StringUtils.isBlank(start) || StringUtils.isBlank(end) || StringUtils.isBlank(dateHour)) {
+            return false;
+        }
+        return dateHour.compareTo(start) >= 0 && dateHour.compareTo(end) < 0;
+    }
 
 }

+ 22 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/rank/processor/RankProcessorInsert.java

@@ -62,6 +62,21 @@ public class RankProcessorInsert {
             return;
         }
 
+        // 判断是否在允许强插的时间范围内
+        String dateRange = rulesMap.get(tagName).get("insert_date");
+        if (StringUtils.isNotBlank(dateRange)) {
+            String[] dateRangeArray = dateRange.split("-");
+            if (dateRangeArray.length != 2) {
+                return;
+            }
+            String start = dateRangeArray[0];
+            String end = dateRangeArray[1];
+            String nowHour = new SimpleDateFormat("yyyyMMddHH").format(new Date());
+            if (!ifFilter(start, end, nowHour)) {
+                return;
+            }
+        }
+
         // 获取需要插入的视频
         Video insertTagVideo = null;
         int tagVideoIndex = -1;
@@ -108,4 +123,11 @@ public class RankProcessorInsert {
 
     }
 
+    public static boolean ifFilter(String start, String end, String dateHour) {
+        if (StringUtils.isBlank(start) || StringUtils.isBlank(end) || StringUtils.isBlank(dateHour)) {
+            return false;
+        }
+        return dateHour.compareTo(start) >= 0 && dateHour.compareTo(end) < 0;
+    }
+
 }