feat: 添加离岗时长记录
- alert_records 添加 duration_minutes 字段 - AlgorithmManager 输出 duration_minutes - AlertRecord 添加 duration_minutes 字段
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user