Ver código fonte

新增基于计划类型检查检测区域

nifangxu 1 semana atrás
pai
commit
4ba79ef980
2 arquivos alterados com 13 adições e 11 exclusões
  1. 7 8
      core/alarm_plan_helper.py
  2. 6 3
      core/alarm_plan_manager.py

+ 7 - 8
core/alarm_plan_helper.py

@@ -126,17 +126,16 @@ def check_plan_rect_valid(event_type: int, rect: list) -> bool:
     检查指定事件类型是否要求有有效的检测区域。
     返回 True 表示 rect 合法;False 表示应跳过。
     """
-    no_rect_event_types = {
-        EventType.CLEAN_EXPIRE_EVENTS.value,
-        EventType.TOILETING_FREQUENCY.value,
-        EventType.NIGHT_TOILETING_FREQUENCY.value,
-        EventType.TOILETING_FREQUENCY_ABNORMAL.value,
-        EventType.NIGHT_TOILETING_FREQUENCY_ABNORMAL.value,
-        EventType.BATHROOM_STAY_FREQUENCY.value,
+    required_rect_event_types = {
+        EventType.STAY_DETECTION.value,         # 停留事件
+        EventType.RETENTION_DETECTION.value,    # 滞留事件
+        EventType.TOILETING_DETECTION.value,    # 如厕事件
+        EventType.TARGET_ABSENCE.value,         # 异常消失
+        EventType.SLEEP_MONITORING.value,       # 睡眠检测
     }
 
     # 对不依赖检测区域的类型,直接放行
-    if event_type in no_rect_event_types:
+    if event_type not in required_rect_event_types:
         return True
 
     # 其他事件需要有合法的 rect

+ 6 - 3
core/alarm_plan_manager.py

@@ -266,15 +266,15 @@ class AlarmPlanManager:
                 enable: int     = bool(row["enable"])
                 region          = row["region"]
                 rect            = helper.region_to_rect(region)
-                if not helper.check_plan_rect_valid(event_type, rect):
-                    LOGWARN(f"skip plan {plan_uuid}: invalid rect={rect} for event_type={event_type}")
-                    continue
                 threshold_time: int = row["threshold_time"]
                 merge_time: int = row["merge_time"]
                 param: dict     = json.loads(row["param"])
 
                 event_val: int  = row["event_val"]
                 event_type      = event_val
+                if not helper.check_plan_rect_valid(event_type, rect):
+                    LOGWARN(f"skip plan {plan_uuid}: invalid rect={rect} for event_type={event_type}")
+                    continue
                 event_str: str  = row["event_str"]
                 event_desc: str = row["event_desc"]
                 tenant_id: int  = row.get("tenant_id") or 0
@@ -392,6 +392,9 @@ def cb_handle_query_all_alarm_plan_info(result, userdata):
             param: dict = json.loads(row["param"]) if row.get("param") else {}
             event_val: int   = row["event_val"]
             event_type      = event_val
+            if not helper.check_plan_rect_valid(event_type, rect):
+                    LOGWARN(f"skip plan {plan_uuid}: invalid rect={rect} for event_type={event_type}")
+                    continue
             event_str: str   = row["event_str"]
             event_desc: str  = row["event_desc"]
             tenant_id: int  = row.get("tenant_id", 0)