temps tours
This commit is contained in:
Binary file not shown.
Binary file not shown.
@ -10,11 +10,7 @@ from datetime import datetime, timezone
|
|||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from engine.utils import format_temps_decimal
|
from engine.utils import format_temps_decimal
|
||||||
from engine.engine_components.regles import resolve_priority
|
from engine.engine_components import regles
|
||||||
from engine.engine_components.regles import check_interval_rule
|
|
||||||
from engine.engine_components.regles import get_last_valid_lecture_time
|
|
||||||
from engine.engine_components.regles import ts_to_utc
|
|
||||||
from engine.engine_components.regles import update_detail_status_zero
|
|
||||||
|
|
||||||
LOCAL_TZ = ZoneInfo("America/Toronto")
|
LOCAL_TZ = ZoneInfo("America/Toronto")
|
||||||
|
|
||||||
@ -97,7 +93,7 @@ def process_course(cur, cnx, con_id: int):
|
|||||||
|
|
||||||
max_id = max(max_id, rcourse_id)
|
max_id = max(max_id, rcourse_id)
|
||||||
|
|
||||||
dt_utc = ts_to_utc(timestamp)
|
dt_utc = regles.ts_to_utc(timestamp)
|
||||||
dt_local = dt_utc.astimezone(LOCAL_TZ)
|
dt_local = dt_utc.astimezone(LOCAL_TZ)
|
||||||
|
|
||||||
log_debug(f"[READ] id={rcourse_id} utc={dt_utc} loc={chr_loc}")
|
log_debug(f"[READ] id={rcourse_id} utc={dt_utc} loc={chr_loc}")
|
||||||
@ -195,7 +191,7 @@ def process_course(cur, cnx, con_id: int):
|
|||||||
interval_sec = 0
|
interval_sec = 0
|
||||||
|
|
||||||
# Appel de la règle d’intervalle
|
# Appel de la règle d’intervalle
|
||||||
status_interval, rc_interval, rr_interval = check_interval_rule(
|
status_interval, rc_interval, rr_interval = regles.check_interval_rule(
|
||||||
cur,
|
cur,
|
||||||
detail_table,
|
detail_table,
|
||||||
tp_id,
|
tp_id,
|
||||||
@ -208,7 +204,7 @@ def process_course(cur, cnx, con_id: int):
|
|||||||
|
|
||||||
# Si la règle d’intervalle rejette
|
# Si la règle d’intervalle rejette
|
||||||
if status_interval == 0:
|
if status_interval == 0:
|
||||||
update_detail_status_zero(
|
regles.update_detail_status_zero(
|
||||||
cur,
|
cur,
|
||||||
cnx,
|
cnx,
|
||||||
detail_table,
|
detail_table,
|
||||||
@ -226,7 +222,7 @@ def process_course(cur, cnx, con_id: int):
|
|||||||
# -------------------------------------------------
|
# -------------------------------------------------
|
||||||
|
|
||||||
# Appel de la règle tour
|
# Appel de la règle tour
|
||||||
status_tour = check_tour_rule(
|
tour, tempstour,tempstour_str = regles.check_tour_rule(
|
||||||
cur,
|
cur,
|
||||||
detail_table,
|
detail_table,
|
||||||
tp_id,
|
tp_id,
|
||||||
@ -235,37 +231,22 @@ def process_course(cur, cnx, con_id: int):
|
|||||||
det_id
|
det_id
|
||||||
|
|
||||||
)
|
)
|
||||||
|
regles.update_detail(
|
||||||
# Si la règle d’tour rejette
|
cur,
|
||||||
if status_interval == 0:
|
cnx,
|
||||||
update_detail_status_zero(
|
detail_table,
|
||||||
cur,
|
detail_id,
|
||||||
cnx,
|
tour,
|
||||||
detail_table,
|
tempstour,
|
||||||
detail_id, # <-- l'ID que tu as obtenu juste après insert_detail_record
|
tempstour_str
|
||||||
rc_interval, # reason_code retourné par la règle
|
)
|
||||||
rr_interval # reason_ref_id retourné par la règle
|
|
||||||
)
|
|
||||||
# Et on arrête le traitement de cette lecture
|
|
||||||
continue
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#tour, prev_ts = compute_tour(cur, detail_table, tp_id, dossard)
|
|
||||||
|
|
||||||
#if forced_tour is not None:
|
|
||||||
# tour = forced_tour
|
|
||||||
|
|
||||||
#if prev_ts is None:
|
|
||||||
# tempstour = Decimal("0")
|
|
||||||
#else:
|
|
||||||
# tempstour = timestamp - prev_ts
|
|
||||||
|
|
||||||
#tempstour_str = format_temps_decimal(tempstour)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
from engine.logger import log_info, log_debug
|
from engine.logger import log_info, log_debug
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
from engine.utils import format_temps_decimal
|
||||||
# -------------------------------------------------
|
# -------------------------------------------------
|
||||||
# Règle de priorité : remplace, rejette, ou force tour
|
# Règle de priorité : remplace, rejette, ou force tour
|
||||||
# -------------------------------------------------
|
# -------------------------------------------------
|
||||||
@ -111,7 +112,7 @@ def check_interval_rule(cur, detail_table, tp_id, dossard, timestamp, interval_s
|
|||||||
|
|
||||||
log_debug(f"[INTERVAL] tp_id={tp_id} dossard={dossard} interval_sec={interval_sec}")
|
log_debug(f"[INTERVAL] tp_id={tp_id} dossard={dossard} interval_sec={interval_sec}")
|
||||||
|
|
||||||
last_timestamp = get_last_valid_lecture_time(cur, detail_table, tp_id, dossard, timestamp)
|
last_timestamp, last_tour = get_last_valid_lecture_time(cur, detail_table, tp_id, dossard, timestamp)
|
||||||
|
|
||||||
log_debug(f"[INTERVAL] last_valid={last_timestamp} current={timestamp}")
|
log_debug(f"[INTERVAL] last_valid={last_timestamp} current={timestamp}")
|
||||||
|
|
||||||
@ -137,27 +138,26 @@ def check_interval_rule(cur, detail_table, tp_id, dossard, timestamp, interval_s
|
|||||||
def get_last_valid_lecture_time(cur, detail_table, tp_id, dossard, current_ts):
|
def get_last_valid_lecture_time(cur, detail_table, tp_id, dossard, current_ts):
|
||||||
log_debug(f"[get_last_valid_lecture_time] tp={tp_id} dossard={dossard} current={current_ts}")
|
log_debug(f"[get_last_valid_lecture_time] tp={tp_id} dossard={dossard} current={current_ts}")
|
||||||
cur.execute(f"""
|
cur.execute(f"""
|
||||||
SELECT timestamp_read
|
SELECT timestamp_read, tour
|
||||||
FROM `{detail_table}`
|
FROM `{detail_table}`
|
||||||
WHERE tp_id = %s
|
WHERE tp_id = %s
|
||||||
AND cla_info_dossard = %s
|
AND cla_info_dossard = %s
|
||||||
AND status = 1
|
AND status = 1
|
||||||
AND timestamp_read < %s
|
AND timestamp_read < %s
|
||||||
ORDER BY timestamp_read DESC
|
ORDER BY timestamp_read DESC
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""", (tp_id, dossard, current_ts))
|
""", (tp_id, dossard, current_ts))
|
||||||
log_debug(
|
|
||||||
f"SELECT timestamp_read FROM `{detail_table}` "
|
|
||||||
f"WHERE tp_id = {tp_id} AND cla_info_dossard = '{dossard}' "
|
|
||||||
f"AND status = 1 AND timestamp_read < {current_ts} "
|
|
||||||
f"ORDER BY timestamp_read DESC LIMIT 1;"
|
|
||||||
)
|
|
||||||
row = cur.fetchone()
|
row = cur.fetchone()
|
||||||
log_debug(f"[get_last_valid_lecture_time] result={row}")
|
log_debug(f"[get_last_valid_lecture_time] result={row}")
|
||||||
if not row:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return Decimal(str(row["timestamp_read"]))
|
if not row:
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
return (
|
||||||
|
Decimal(str(row["timestamp_read"])),
|
||||||
|
row["tour"]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# -------------------------------------------------
|
# -------------------------------------------------
|
||||||
@ -184,25 +184,48 @@ def check_tour_rule(
|
|||||||
):
|
):
|
||||||
|
|
||||||
|
|
||||||
|
last_timestamp, last_tour = get_last_valid_lecture_time(
|
||||||
|
cur, detail_table, tp_id, dossard, timestamp
|
||||||
|
)
|
||||||
|
|
||||||
|
if last_tour is None:
|
||||||
|
last_tour=0
|
||||||
|
|
||||||
|
if last_timestamp is None:
|
||||||
|
last_timestamp = Decimal("0")
|
||||||
|
|
||||||
|
tour=last_tour+1;
|
||||||
|
tempstour = timestamp - last_timestamp
|
||||||
|
tempstour_str = format_temps_decimal(tempstour)
|
||||||
|
|
||||||
|
return tour, tempstour,tempstour_str
|
||||||
|
|
||||||
|
|
||||||
|
def update_detail(
|
||||||
|
cur,
|
||||||
|
cnx,
|
||||||
|
detail_table,
|
||||||
|
detail_id,
|
||||||
|
tour,
|
||||||
|
tempstour,
|
||||||
|
tempstour_str
|
||||||
|
):
|
||||||
cur.execute(f"""
|
cur.execute(f"""
|
||||||
SELECT tour, timestamp_read
|
UPDATE `{detail_table}`
|
||||||
FROM `{detail_table}`
|
SET tour = %s,
|
||||||
WHERE tp_id = %s
|
tempstour = %s,
|
||||||
AND cla_info_dossard = %s
|
tempstour_str = %s,
|
||||||
AND status = 1
|
reason_code = NULL,
|
||||||
ORDER BY detail_id DESC
|
reason_ref_id = NULL
|
||||||
LIMIT 1
|
WHERE detail_id = %s
|
||||||
""", (tp_id, dossard))
|
""", (
|
||||||
|
tour,
|
||||||
|
tempstour,
|
||||||
|
tempstour_str,
|
||||||
|
detail_id
|
||||||
|
))
|
||||||
|
|
||||||
row = cur.fetchone()
|
cnx.commit()
|
||||||
|
|
||||||
if not row or row["tour"] is None:
|
|
||||||
return 1, None
|
|
||||||
|
|
||||||
last_tour = row["tour"]
|
|
||||||
prev_ts = Decimal(str(row["timestamp_read"]))
|
|
||||||
|
|
||||||
return last_tour + 1, prev_ts
|
|
||||||
|
|
||||||
|
|
||||||
def update_detail_status_zero(cur, cnx, detail_table, detail_id, reason_code, reason_ref_id):
|
def update_detail_status_zero(cur, cnx, detail_table, detail_id, reason_code, reason_ref_id):
|
||||||
@ -218,4 +241,5 @@ def update_detail_status_zero(cur, cnx, detail_table, detail_id, reason_code, re
|
|||||||
WHERE detail_id = %s
|
WHERE detail_id = %s
|
||||||
""", (reason_code, reason_ref_id, detail_id))
|
""", (reason_code, reason_ref_id, detail_id))
|
||||||
|
|
||||||
cnx.commit()
|
cnx.commit()
|
||||||
|
|
||||||
Reference in New Issue
Block a user