diff --git a/app/services/alarm_event_service.py b/app/services/alarm_event_service.py index 2d32710..f5674dc 100644 --- a/app/services/alarm_event_service.py +++ b/app/services/alarm_event_service.py @@ -11,11 +11,12 @@ from sqlalchemy import func from app.models import AlarmEvent, AlarmEventExt, AlarmLlmAnalysis, get_session from app.services.oss_storage import get_oss_storage from app.utils.logger import logger +from app.utils.timezone import beijing_now def generate_alarm_id() -> str: """生成告警ID: ALM + YYYYMMDDHHmmss + 8位uuid""" - timestamp = datetime.now(timezone.utc).strftime("%Y%m%d%H%M%S") + timestamp = beijing_now().strftime("%Y%m%d%H%M%S") unique_id = uuid.uuid4().hex[:8].upper() return f"ALM{timestamp}{unique_id}" @@ -64,9 +65,9 @@ class AlarmEventService: try: event_time = datetime.fromisoformat(timestamp_str.replace("Z", "+00:00")) except ValueError: - event_time = datetime.now(timezone.utc) + event_time = beijing_now() else: - event_time = datetime.now(timezone.utc) + event_time = beijing_now() # 解析 first_frame_time(告警首次触发时间) first_frame_str = mqtt_data.get("first_frame_time") @@ -169,9 +170,9 @@ class AlarmEventService: try: event_time = datetime.fromisoformat(event_time_str.replace("Z", "+00:00")) except ValueError: - event_time = datetime.now(timezone.utc) + event_time = beijing_now() else: - event_time = datetime.now(timezone.utc) + event_time = beijing_now() # 置信度 confidence = data.get("confidence_score") @@ -251,11 +252,11 @@ class AlarmEventService: try: event_time = datetime.fromisoformat(trigger_time.replace("Z", "+00:00")) except ValueError: - event_time = datetime.now(timezone.utc) + event_time = beijing_now() elif isinstance(trigger_time, datetime): event_time = trigger_time else: - event_time = datetime.now(timezone.utc) + event_time = beijing_now() confidence = data.get("confidence") if confidence is not None: @@ -414,8 +415,8 @@ class AlarmEventService: alarm.handle_remark = remark if handler: alarm.handler = handler - alarm.handled_at = datetime.now(timezone.utc) - alarm.updated_at = datetime.now(timezone.utc) + alarm.handled_at = beijing_now() + alarm.updated_at = beijing_now() db.commit() db.refresh(alarm) @@ -557,26 +558,26 @@ class AlarmEventService: parsed_time = datetime.fromisoformat(last_frame_time.replace("Z", "+00:00")) alarm.last_frame_time = parsed_time.replace(microsecond=0) except Exception: - alarm.last_frame_time = datetime.now(timezone.utc).replace(microsecond=0) + alarm.last_frame_time = beijing_now().replace(microsecond=0) # 如果是人员回岗,标记为自动关闭 if resolve_type == "person_returned": alarm.alarm_status = "CLOSED" alarm.handle_status = "DONE" alarm.handle_remark = "人员回岗自动关闭" - alarm.handled_at = datetime.now(timezone.utc) + alarm.handled_at = beijing_now() elif resolve_type == "non_work_time": alarm.alarm_status = "CLOSED" alarm.handle_status = "DONE" alarm.handle_remark = "非工作时间自动关闭" - alarm.handled_at = datetime.now(timezone.utc) + alarm.handled_at = beijing_now() elif resolve_type == "intrusion_cleared": alarm.alarm_status = "CLOSED" alarm.handle_status = "DONE" alarm.handle_remark = "入侵消失自动关闭(持续无人180秒)" - alarm.handled_at = datetime.now(timezone.utc) + alarm.handled_at = beijing_now() - alarm.updated_at = datetime.now(timezone.utc) + alarm.updated_at = beijing_now() db.commit() logger.info(f"告警已更新结束信息: {alarm_id}, duration={duration_ms}ms, type={resolve_type}")