nifangxu пре 1 месец
родитељ
комит
83e884371b
1 измењених фајлова са 108 додато и 5 уклоњено
  1. 108 5
      core/alarm_plan.py

+ 108 - 5
core/alarm_plan.py

@@ -662,7 +662,38 @@ class AlarmPlan:
 
     # 卫生间频次统计
     def handle_bathroom_stay_frequency(self):
-        return
+        try:
+            dev_id = self.dev_id_
+            device:Device = dev_map_find(dev_id)
+            if not device:
+                return
+
+            start_dt, end_dt = helper.get_query_time_range(self.param_)
+            params = {
+                "dev_id"    : self.dev_id_,
+                "event_type": event_desc_map[EventType.STAY_DETECTION.value],
+                "start_dt": start_dt,
+                "end_dt": end_dt
+            }
+            userdata = {
+                "start_dt"  : start_dt,
+                "end_dt"  : end_dt
+            }
+            db_req_que.put(DBRequest(
+                sql=sqls.sql_query_events_by_datetime,
+                params=params,
+                callback=self.cb_bathroom_stay_frequency,
+                userdata=userdata))
+
+        except json.JSONDecodeError as e:
+            tb_info = traceback.extract_tb(e.__traceback__)
+            for frame in tb_info:
+                LOGERR(f"[{frame.filename}:{frame.lineno}] @{frame.name}(), error:{e}, {e.doc}")
+        except Exception as e:
+            tb_info = traceback.extract_tb(e.__traceback__)
+            for frame in tb_info:
+                LOGERR(f"[{frame.filename}:{frame.lineno}] @{frame.name}(), error: {e}")
+
 
 
     # 异常消失
@@ -682,10 +713,10 @@ class AlarmPlan:
 
                 for row in result:
                     dev_id: str         = row.get("dev_id")
-                    event_uuid: str           = row.get("uuid")
+                    event_uuid: str     = row.get("uuid")
                     plan_uuid: str      = row.get("plan_uuid")
                     event_type: int     = row.get("event_type")
-                    info: dict           = json.loads(row["info"]) if row.get("info") else {}
+                    info: dict          = json.loads(row["info"]) if row.get("info") else {}
                     is_handle: str      = row.get("is_handle")
                     create_time: str    = row.get("create_time")
                     update_time: str    = row.get("update_time")
@@ -744,10 +775,10 @@ class AlarmPlan:
 
                 for row in result:
                     dev_id: str         = row.get("dev_id")
-                    event_uuid: str           = row.get("uuid")
+                    event_uuid: str     = row.get("uuid")
                     plan_uuid: str      = row.get("plan_uuid")
                     event_type: int     = row.get("event_type")
-                    info: dict           = json.loads(row["info"]) if row.get("info") else {}
+                    info: dict          = json.loads(row["info"]) if row.get("info") else {}
                     is_handle: str      = row.get("is_handle")
                     create_time: str    = row.get("create_time")
                     update_time: str    = row.get("update_time")
@@ -926,3 +957,75 @@ class AlarmPlan:
                 LOGERR(f"[{frame.filename}:{frame.lineno}] @{frame.name}(), error: {e}")
             return
 
+
+
+    # 如厕频次统计回调
+    def cb_bathroom_stay_frequency(self, result, userdata):
+        try:
+            if result:
+                count = 0
+                event_list = []
+
+                for row in result:
+                    dev_id: str         = row.get("dev_id")
+                    event_uuid: str     = row.get("uuid")
+                    plan_uuid: str      = row.get("plan_uuid")
+                    event_type: int     = row.get("event_type")
+                    info: dict          = json.loads(row["info"]) if row.get("info") else {}
+                    is_handle: str      = row.get("is_handle")
+                    create_time: str    = row.get("create_time")
+                    update_time: str    = row.get("update_time")
+                    is_deleted: str     = row.get("is_deleted")
+                    remark: str         = row.get("remark")
+
+                    event_list.append(info)
+
+                this_event_uuid = str(uuid.uuid4())
+                last_info = {
+                    "start_time"    : userdata["start_dt"],
+                    "end_time"      : userdata["end_dt"],
+                    "count"         : len(event_list),
+                    "event_list"    : event_list
+                }
+
+                # 入库
+                event_uuid = str(uuid.uuid4())
+                params = {
+                    "dev_id": dev_id,
+                    "uuid": this_event_uuid,
+                    "plan_uuid": self.plan_uuid_,
+                    "event_type": event_desc_map[self.event_type_],
+                    "info": json.dumps(last_info, ensure_ascii=False),
+                    "is_handle": 0,
+                    "create_time": get_bj_time_s(),
+                    "is_deleted": 0,
+                    "remark": json.dumps({}, ensure_ascii=False) 
+                }
+                db_req_que.put(DBRequest(sql=sqls.sql_insert_events, params=params, callback=None))
+
+                # 通知
+                mqtt_send.alarm_event(dev_id, self.dev_name_, this_event_uuid, plan_uuid, event_desc_map[self.event_type_], last_info, "events")
+
+                LOGINFO(f"EventAttr_ToiletingFrequency succeed")
+            else:
+                LOGDBG("EventAttr_ToiletingFrequency, empty result")
+
+        except json.JSONDecodeError as e:
+            tb_info = traceback.extract_tb(e.__traceback__)
+            for frame in tb_info:
+                LOGERR(f"[{frame.filename}:{frame.lineno}] @{frame.name}(), error:{e}, {e.doc}")
+        except Exception as e:
+            tb_info = traceback.extract_tb(e.__traceback__)
+            for frame in tb_info:
+                LOGERR(f"[{frame.filename}:{frame.lineno}] @{frame.name}(), error: {e}")
+            return
+
+
+
+
+
+
+
+
+
+