Prechádzať zdrojové kódy

fix(core): 调度器时间区间改为半开区间,修复相邻时段误判重叠

sansan 4 týždňov pred
rodič
commit
ddd3f4dcaf
1 zmenil súbory, kde vykonal 8 pridanie a 8 odobranie
  1. 8 8
      trendradar/core/scheduler.py

+ 8 - 8
trendradar/core/scheduler.py

@@ -246,11 +246,11 @@ class Scheduler:
             是否在范围内
         """
         if start <= end:
-            # 正常范围,如 08:00-09:00
-            return start <= now_hhmm <= end
+            # 正常范围,如 08:00-09:00(半开区间 [start, end))
+            return start <= now_hhmm < end
         else:
-            # 跨日范围,如 22:00-07:00
-            return now_hhmm >= start or now_hhmm <= end
+            # 跨日范围,如 22:00-07:00(半开区间 [start, end))
+            return now_hhmm >= start or now_hhmm < end
 
     def _merge_with_default(self, period_key: Optional[str]) -> Dict[str, Any]:
         """合并默认配置和时间段配置"""
@@ -408,16 +408,16 @@ class Scheduler:
             if s <= e:
                 return [(s, e)]
             else:
-                # 跨日:拆分为 [start, 23:59] 和 [00:00, end]
-                return [(s, 24 * 60 - 1), (0, e)]
+                # 跨日:拆分为 [start, 24:00) 和 [00:00, end)
+                return [(s, 24 * 60), (0, e)]
 
         segs1 = expand_range(s1, e1)
         segs2 = expand_range(s2, e2)
 
         for a_start, a_end in segs1:
             for b_start, b_end in segs2:
-                # 两个区间有重叠的条件
-                if a_start <= b_end and b_start <= a_end:
+                # 两个半开区间有重叠的条件
+                if a_start < b_end and b_start < a_end:
                     return True
         return False