feat: 添加离岗时长记录

- alert_records 添加 duration_minutes 字段
- AlgorithmManager 输出 duration_minutes
- AlertRecord 添加 duration_minutes 字段
This commit is contained in:
2026-01-30 17:26:12 +08:00
parent f570245589
commit f90ff60f6c
2 changed files with 10 additions and 5 deletions

View File

@@ -155,9 +155,9 @@ class LeavePostAlgorithm:
"track_id": roi_id, "track_id": roi_id,
"camera_id": camera_id, "camera_id": camera_id,
"bbox": bbox, "bbox": bbox,
"off_duty_duration": elapsed, "duration_minutes": elapsed_minutes,
"alert_type": "leave_post", "alert_type": "leave_post",
"message": f"离岗超过 {elapsed_minutes} 分钟", "message": f"离岗 {elapsed_minutes} 分钟",
}) })
self.alert_cooldowns[cooldown_key] = now self.alert_cooldowns[cooldown_key] = now

View File

@@ -48,6 +48,7 @@ class AlertRecord:
status: str = "pending" status: str = "pending"
created_at: datetime = field(default_factory=datetime.now) created_at: datetime = field(default_factory=datetime.now)
processed_at: Optional[datetime] = None processed_at: Optional[datetime] = None
duration_minutes: Optional[float] = None
class SQLiteManager: class SQLiteManager:
@@ -121,7 +122,8 @@ class SQLiteManager:
image_path TEXT, image_path TEXT,
status TEXT DEFAULT 'pending', status TEXT DEFAULT 'pending',
created_at TEXT NOT NULL, created_at TEXT NOT NULL,
processed_at TEXT processed_at TEXT,
duration_minutes REAL
) )
""") """)
@@ -242,8 +244,9 @@ class SQLiteManager:
INSERT OR REPLACE INTO alert_records ( INSERT OR REPLACE INTO alert_records (
alert_id, camera_id, roi_id, alert_type, alert_id, camera_id, roi_id, alert_type,
target_class, confidence, bbox, message, target_class, confidence, bbox, message,
image_path, status, created_at, processed_at image_path, status, created_at, processed_at,
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) duration_minutes
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", ( """, (
record['alert_id'], record['alert_id'],
record['camera_id'], record['camera_id'],
@@ -257,6 +260,7 @@ class SQLiteManager:
record.get('status', 'pending'), record.get('status', 'pending'),
record['created_at'], record['created_at'],
record.get('processed_at'), record.get('processed_at'),
record.get('duration_minutes'),
)) ))
self._conn.commit() self._conn.commit()
@@ -290,6 +294,7 @@ class SQLiteManager:
'status': alert.status, 'status': alert.status,
'created_at': alert.created_at.isoformat(), 'created_at': alert.created_at.isoformat(),
'processed_at': alert.processed_at.isoformat() if alert.processed_at else None, 'processed_at': alert.processed_at.isoformat() if alert.processed_at else None,
'duration_minutes': alert.duration_minutes,
} }
self._write_queue.put(record) self._write_queue.put(record)