proyecto completo - frontend + simulador + start.bat
This commit is contained in:
60
simulador-backend/main.py
Normal file
60
simulador-backend/main.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# main.py
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
import json, asyncio, os
|
||||
from datetime import datetime
|
||||
|
||||
app = FastAPI(title="EcoTrack Simulador")
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
# Carga el JSON de rutas
|
||||
with open("rutas.json", "r", encoding="utf-8") as f:
|
||||
RUTAS = json.load(f)
|
||||
|
||||
# Estado actual del simulador en memoria
|
||||
estado = {}
|
||||
for ruta in RUTAS:
|
||||
estado[ruta["routeId"]] = {
|
||||
"routeId": ruta["routeId"],
|
||||
"name": ruta["name"],
|
||||
"truckId": ruta["truckId"],
|
||||
"status": ruta["status"],
|
||||
"posicionActual": 1,
|
||||
"totalNodos": len(ruta["positions"])
|
||||
}
|
||||
|
||||
@app.get("/rutas")
|
||||
def get_rutas():
|
||||
return list(estado.values())
|
||||
|
||||
@app.get("/rutas/{route_id}")
|
||||
def get_ruta(route_id: str):
|
||||
return estado.get(route_id, {"error": "Ruta no encontrada"})
|
||||
|
||||
@app.get("/")
|
||||
def root():
|
||||
return {"mensaje": "Simulador EcoTrack corriendo", "hora": datetime.now().isoformat()}
|
||||
|
||||
# Simulador — avanza posicionActual cada 90 segundos
|
||||
async def simular():
|
||||
while True:
|
||||
await asyncio.sleep(10)
|
||||
for route_id in estado:
|
||||
pos = estado[route_id]["posicionActual"]
|
||||
total = estado[route_id]["totalNodos"]
|
||||
if pos < total:
|
||||
estado[route_id]["posicionActual"] += 1
|
||||
else:
|
||||
# Reinicia la ruta al terminar
|
||||
estado[route_id]["posicionActual"] = 1
|
||||
print(f"[{datetime.now().strftime('%H:%M:%S')}] Camiones avanzaron un nodo")
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup():
|
||||
asyncio.create_task(simular())
|
||||
Reference in New Issue
Block a user