diff --git a/docs/rest/dispositivo.rest b/docs/rest/dispositivo.rest index f004705..e8da7b7 100644 --- a/docs/rest/dispositivo.rest +++ b/docs/rest/dispositivo.rest @@ -1,5 +1,6 @@ @server = http://localhost:4000/api +# @server = https://transporte.hz.kursor.cl/api @token = {{login.response.body.$.token}} ### diff --git a/project/api/views/dispositivo.py b/project/api/views/dispositivo.py index 23e2f17..f7ca1dd 100755 --- a/project/api/views/dispositivo.py +++ b/project/api/views/dispositivo.py @@ -6,6 +6,8 @@ from django.db import connection from django_filters.rest_framework import DjangoFilterBackend from rest_framework.decorators import action from .. import models, serializers +from os import getenv +import redis import json import logging @@ -55,31 +57,51 @@ class DispositivoViewSet(viewsets.ModelViewSet): .annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \ .first() - query = "SELECT json_data \ - from gtfs_posiciones_json \ - where stop_id = %s" + db_host = getenv('DB_REDIS_HOST') + db_port = getenv('DB_REDIS_PORT') + r = redis.Redis(host=db_host, port=db_port, decode_responses=True) - params = [ record.nro_paradero ] + key = f'stop_id:{record.nro_paradero}' + json_trayectos = r.get(key) + if json_trayectos != None: + trayectos = json.loads(json_trayectos) + else: + trayectos = [] - with connection.cursor() as cursor: - cursor.execute(query, params) - row = cursor.fetchone() - connection.close() + lineas = {} + lineas_agrupadas = {} + for t in trayectos: + + pk_linea = f'{t["route_id"]}-{t["direction_id"]}' + if pk_linea not in lineas: + lineas[pk_linea] = models.Linea.objects.get(id_linea=pk_linea) + + linea = lineas[pk_linea] + + if pk_linea not in lineas_agrupadas: + lineas_agrupadas[pk_linea] = { + 'Linea': pk_linea, + 'Descripcion': linea.route_long_name, + 'TipoLocomocion': linea.route_type.descripcion, + 'colorFondo': linea.route_color, + 'colorTexto': linea.route_text_color, + 'Llegadas': [] + } + + lineas_agrupadas[pk_linea]['Llegadas'].append({ + 'patente': t['vehicle_license_plate'], + 'Planificada': None, + 'EstimadaGPS': t['hora_llegada'], + 'DistanciaGPS': None, + 'Mensajelinea': None, + }) + detalle_lineas = [] + for pk_linea in lineas_agrupadas: + detalle_lineas.append(lineas_agrupadas[pk_linea]) - for linea in row[0]: - # logging.error(linea['linea']) - data_linea = { - 'Linea': linea['linea'], - 'Descripcion': linea['Descripcion'], - 'TipoLocomocion': linea['tipo_locomocion'], - 'colorFondo': linea['colorFondo'], - 'colorLetra': linea['colorLetra'], - 'Llegadas': linea['Llegadas'] - } - detalle_lineas.append(data_linea) return JsonResponse({ "GetInfoDeviceResponse": {