99 lines
2.3 KiB
Python
99 lines
2.3 KiB
Python
from engine.logger import log_info, log_debug
|
|
import mysql.connector
|
|
def insert_detail_record(
|
|
cur,
|
|
cnx,
|
|
con_id: int,
|
|
dossard: str,
|
|
lecture: dict,
|
|
tp_id: int,
|
|
tp_name: str,
|
|
controller_location: str,
|
|
priority: int,
|
|
controller_name: str,
|
|
dt_local,
|
|
status=1,
|
|
reason_code=None,
|
|
reason_ref_id=None,
|
|
tour=None,
|
|
tempstour=None,
|
|
tempstour_str=None # <-- AJOUT OBLIGATOIRE
|
|
):
|
|
|
|
if isinstance(dt_local, tuple):
|
|
dt_local = dt_local[1]
|
|
|
|
detail_table = f"resultv2_{con_id}_detail"
|
|
|
|
sql = f"""
|
|
INSERT INTO `{detail_table}`
|
|
(con_id, tp_id, tp_name,
|
|
cla_info_dossard, rcourse_id,
|
|
timestamp_read,
|
|
timestamp_read_local,
|
|
timestamp_read_local_str,
|
|
raw_tag,
|
|
reader_location, controller_priority,
|
|
controller_name,
|
|
source,
|
|
status, reason_code, reason_ref_id,
|
|
tour, TempsTour, tempstour_str)
|
|
VALUES (%s, %s, %s,
|
|
%s, %s,
|
|
%s,
|
|
%s,
|
|
%s,
|
|
%s,
|
|
%s, %s,
|
|
%s,
|
|
%s,
|
|
%s, %s, %s,
|
|
%s, %s, %s)
|
|
"""
|
|
|
|
timestamp_read_local_unix = f"{dt_local.timestamp():.2f}"
|
|
|
|
timestamp_read_local_str = (
|
|
f"{dt_local.strftime('%Y-%m-%d %H:%M:%S')}."
|
|
f"{dt_local.microsecond // 10000:02d}"
|
|
)
|
|
|
|
if isinstance(tempstour, tuple):
|
|
tempstour = None
|
|
|
|
data = (
|
|
con_id,
|
|
tp_id,
|
|
tp_name,
|
|
dossard,
|
|
lecture["rcourse_id"],
|
|
lecture["chrinfo_time"],
|
|
timestamp_read_local_unix,
|
|
timestamp_read_local_str,
|
|
lecture["chrinfo_tag"],
|
|
controller_location,
|
|
priority,
|
|
controller_name,
|
|
"LIVE",
|
|
status,
|
|
reason_code,
|
|
reason_ref_id,
|
|
tour,
|
|
tempstour,
|
|
tempstour_str
|
|
)
|
|
|
|
|
|
try:
|
|
cur.execute(sql, data)
|
|
cnx.commit()
|
|
return cur.lastrowid
|
|
except mysql.connector.IntegrityError as e:
|
|
# Duplicate key = lecture déjà traitée → on ignore et on continue
|
|
if e.errno == 1062:
|
|
log_info(f"[DUPLICATE IGNORED] lecture déjà enregistrée ({e.msg})")
|
|
return # on sort proprement, SANS échec
|
|
|
|
# Sinon, vraie erreur → on relance
|
|
raise
|