43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
"""
|
|
Simulador sencillo de avance de rutas.
|
|
Uso:
|
|
python -m app.simulator RUTA-01
|
|
|
|
Avanza positionId 1..8 y genera alertas en 2, 4 y 8.
|
|
Ideal para demo si quieren enseñar backend actualizando estados sin GPS real.
|
|
"""
|
|
import sys
|
|
import time
|
|
from datetime import datetime
|
|
|
|
from app.database import SessionLocal
|
|
from app.models import Alert, Route
|
|
|
|
|
|
def main(route_id: str):
|
|
with SessionLocal() as db:
|
|
route = db.get(Route, route_id)
|
|
if not route:
|
|
print(f"Ruta {route_id} no encontrada")
|
|
return
|
|
|
|
for position_id in range(1, 9):
|
|
route.current_position_id = position_id
|
|
route.status = "EN_RUTA" if position_id < 8 else "FINALIZADA"
|
|
route.updated_at = datetime.utcnow()
|
|
|
|
if position_id == 2:
|
|
db.add(Alert(type="ROUTE_START", title="Ruta iniciada", message=f"El camión {route.truck_id} salió a ruta.", route_id=route.route_id, truck_id=route.truck_id, priority=1))
|
|
if position_id == 4:
|
|
db.add(Alert(type="TRUCK_PROXIMITY", title="Camión cercano", message="El camión está a menos de 15 minutos de tu zona.", route_id=route.route_id, truck_id=route.truck_id, priority=2))
|
|
if position_id == 8:
|
|
db.add(Alert(type="ROUTE_COMPLETED", title="Servicio finalizado", message=f"La ruta {route.route_id} concluyó la jornada.", route_id=route.route_id, truck_id=route.truck_id, priority=1))
|
|
|
|
db.commit()
|
|
print(f"{route.route_id}: positionId {position_id} actualizado")
|
|
time.sleep(3)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main(sys.argv[1] if len(sys.argv) > 1 else "RUTA-01")
|