From 3974820ada3c33c7cfd9d4e2b6f77ba662088196 Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Tue, 7 Apr 2026 13:06:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84(alarm=5Fevent=5Fservice):=20?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=94=B9=E7=94=A8?= =?UTF-8?q?=20AlarmStatus/HandleStatus=20=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/alarm_event_service.py | 50 ++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/app/services/alarm_event_service.py b/app/services/alarm_event_service.py index c0e8dd2..048986e 100644 --- a/app/services/alarm_event_service.py +++ b/app/services/alarm_event_service.py @@ -8,7 +8,7 @@ from typing import Optional, List, Dict, Any, Tuple from sqlalchemy import func, cast, Date, Integer, extract, text -from app.constants import ALARM_TYPE_DEFAULT_LEVEL +from app.constants import ALARM_TYPE_DEFAULT_LEVEL, AlarmStatus, HandleStatus from app.models import AlarmEvent, AlarmEventExt, AlarmLlmAnalysis, get_session from app.services.oss_storage import get_oss_storage from app.utils.logger import logger @@ -119,8 +119,8 @@ class AlarmEventService: last_frame_time=None, alarm_level=alarm_level, confidence_score=confidence, - alarm_status="NEW", - handle_status="UNHANDLED", + alarm_status=AlarmStatus.NEW, + handle_status=HandleStatus.UNHANDLED, edge_node_id=mqtt_data.get("device_id"), ) @@ -231,8 +231,8 @@ class AlarmEventService: duration_ms=ext_data.get("duration_ms"), alarm_level=alarm_level, confidence_score=confidence, - alarm_status="NEW", - handle_status="UNHANDLED", + alarm_status=AlarmStatus.NEW, + handle_status=HandleStatus.UNHANDLED, snapshot_url=data.get("snapshot_url"), edge_node_id=ext_data.get("edge_node_id"), area_id=data.get("area_id") or ext_data.get("area_id"), @@ -309,8 +309,8 @@ class AlarmEventService: duration_ms=duration_ms, alarm_level=alarm_level, confidence_score=confidence, - alarm_status="NEW", - handle_status="UNHANDLED", + alarm_status=AlarmStatus.NEW, + handle_status=HandleStatus.UNHANDLED, snapshot_url=snapshot_url, edge_node_id=data.get("device_id"), ) @@ -509,12 +509,12 @@ class AlarmEventService: # 待处理数 pending_count = db.query(AlarmEvent).filter( - AlarmEvent.handle_status == "UNHANDLED" + AlarmEvent.handle_status == HandleStatus.UNHANDLED ).count() # 已处理数 handled_count = db.query(AlarmEvent).filter( - AlarmEvent.handle_status.in_(["DONE", "IGNORED"]) + AlarmEvent.handle_status.in_([HandleStatus.DONE, HandleStatus.IGNORED]) ).count() # 平均响应时间(只算近7天已处理的,排除>6h的异常值) @@ -670,8 +670,8 @@ class AlarmEventService: yesterday_count = db.query(AlarmEvent).filter( AlarmEvent.event_time >= yesterday_start, AlarmEvent.event_time < today_start ).count() - pending_count = db.query(AlarmEvent).filter(AlarmEvent.handle_status == "UNHANDLED").count() - handled_count = db.query(AlarmEvent).filter(AlarmEvent.handle_status.in_(["DONE", "IGNORED"])).count() + pending_count = db.query(AlarmEvent).filter(AlarmEvent.handle_status == HandleStatus.UNHANDLED).count() + handled_count = db.query(AlarmEvent).filter(AlarmEvent.handle_status.in_([HandleStatus.DONE, HandleStatus.IGNORED])).count() from sqlalchemy.sql.expression import literal_column stats_since = today_start - timedelta(days=7) @@ -785,7 +785,7 @@ class AlarmEventService: unhandled_count = ( db.query(AlarmEvent) .filter(AlarmEvent.device_id == row.device_id) - .filter(AlarmEvent.handle_status == "UNHANDLED") + .filter(AlarmEvent.handle_status == HandleStatus.UNHANDLED) .count() ) @@ -845,34 +845,34 @@ class AlarmEventService: alarm.last_frame_time = beijing_now().replace(microsecond=0) # 先到先得:已被人工处理到终态的不覆盖 - terminal_statuses = ("CLOSED", "FALSE") - terminal_handle = ("DONE", "IGNORED") + terminal_statuses = (AlarmStatus.CLOSED, AlarmStatus.FALSE) + terminal_handle = (HandleStatus.DONE, HandleStatus.IGNORED) if alarm.alarm_status in terminal_statuses or alarm.handle_status in terminal_handle: logger.info(f"告警已为终态({alarm.alarm_status}/{alarm.handle_status}),仅更新时长: {alarm_id}") elif resolve_type == "person_returned": - alarm.alarm_status = "CLOSED" - alarm.handle_status = "DONE" + alarm.alarm_status = AlarmStatus.CLOSED + alarm.handle_status = HandleStatus.DONE alarm.handle_remark = "人员回岗自动关闭" alarm.handled_at = beijing_now() elif resolve_type == "non_work_time": - alarm.alarm_status = "CLOSED" - alarm.handle_status = "DONE" + alarm.alarm_status = AlarmStatus.CLOSED + alarm.handle_status = HandleStatus.DONE alarm.handle_remark = "非工作时间自动关闭" alarm.handled_at = beijing_now() elif resolve_type == "intrusion_cleared": - alarm.alarm_status = "CLOSED" - alarm.handle_status = "DONE" + alarm.alarm_status = AlarmStatus.CLOSED + alarm.handle_status = HandleStatus.DONE alarm.handle_remark = "入侵消失自动关闭(持续无人180秒)" alarm.handled_at = beijing_now() elif resolve_type == "vehicle_left": - alarm.alarm_status = "CLOSED" - alarm.handle_status = "DONE" + alarm.alarm_status = AlarmStatus.CLOSED + alarm.handle_status = HandleStatus.DONE alarm.handle_remark = "车辆离开自动关闭" alarm.handled_at = beijing_now() elif resolve_type == "congestion_cleared": - alarm.alarm_status = "CLOSED" - alarm.handle_status = "DONE" + alarm.alarm_status = AlarmStatus.CLOSED + alarm.handle_status = HandleStatus.DONE alarm.handle_remark = "拥堵消散自动关闭" alarm.handled_at = beijing_now() @@ -895,7 +895,7 @@ class AlarmEventService: alarm = db.query(AlarmEvent).filter(AlarmEvent.alarm_id == alarm_id).first() if not alarm: return False - return alarm.alarm_status in ("CLOSED", "FALSE") or alarm.handle_status in ("DONE", "IGNORED") + return alarm.alarm_status in (AlarmStatus.CLOSED, AlarmStatus.FALSE) or alarm.handle_status in (HandleStatus.DONE, HandleStatus.IGNORED) except Exception: return False finally: