feat(scud): добавление таблицы scud_events_raw и сохранение детальной ленты проходов
This commit is contained in:
@@ -237,4 +237,40 @@ def delete_snapshots_by_date(date_str: str) -> int:
|
||||
cursor.execute("DELETE FROM scud_logs WHERE log_date = ? OR snapshot_id LIKE ?", (date_str, f"%{date_str.replace('.', '')}%"))
|
||||
cnt = cursor.rowcount
|
||||
conn.commit()
|
||||
return cnt
|
||||
return cnt
|
||||
|
||||
def save_raw_events_to_db(df_raw_events: pd.DataFrame, date_str: str) -> int:
|
||||
"""
|
||||
Сохраняет ленту сырых физических проходов турникетов в таблицу scud_events_raw.
|
||||
Перезаписывает сырые события за указанную дату для исключения дубликатов.
|
||||
"""
|
||||
if df_raw_events is None or df_raw_events.empty:
|
||||
return 0
|
||||
|
||||
records = [
|
||||
(
|
||||
date_str,
|
||||
str(r.get('TimeVal', '')),
|
||||
int(r.get('HozOrgan', 0)),
|
||||
str(r.get('Сотрудник', '')),
|
||||
str(r.get('fio_clean', '')),
|
||||
str(r.get('Подразделение', '')),
|
||||
int(r.get('Event', 0)),
|
||||
int(r.get('Mode', 0)),
|
||||
str(r.get('Direction', 'OTHER'))
|
||||
)
|
||||
for _, r in df_raw_events.iterrows()
|
||||
]
|
||||
|
||||
with get_connection() as conn:
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("DELETE FROM scud_events_raw WHERE log_date = ?", (date_str,))
|
||||
cursor.executemany("""
|
||||
INSERT INTO scud_events_raw (
|
||||
log_date, time_val, hoz_organ, fio, fio_clean,
|
||||
department, event_code, mode, direction
|
||||
)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
""", records)
|
||||
conn.commit()
|
||||
return len(records)
|
||||
Reference in New Issue
Block a user