forked from TDTP/admin_transporte_backend
actualizacion into develop/Ronald
commit
68c4f6a272
|
@ -68,6 +68,20 @@ Content-Type: application/json
|
|||
}
|
||||
|
||||
|
||||
###
|
||||
# @name get_info_device2
|
||||
POST {{server}}/dispositivos/getInfoDevice/
|
||||
Authorization: Bearer {{token}}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"GetInfoDevice": {
|
||||
"idDispositivo": "00000000160f3b42b8:27:eb:0f:3b:42",
|
||||
"KeyAutorizacion":"token"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
###
|
||||
|
|
|
@ -8,8 +8,8 @@ POST {{server}}/auth/
|
|||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"rut": "22222222-2",
|
||||
"password": "usuario2"
|
||||
"rut": "11111111-1",
|
||||
"password": "usuario1"
|
||||
}
|
||||
|
||||
###
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
|
||||
ALTER TABLE rol_linea drop CONSTRAINT IF EXISTS rol_linea_id_linea_fkey;
|
||||
|
||||
-----
|
||||
|
||||
ALTER TABLE linea_paradero drop CONSTRAINT IF EXISTS linea_paradero_id_linea_fkey;
|
||||
|
||||
-----
|
||||
|
@ -51,6 +47,10 @@ delete from linea_paradero;
|
|||
|
||||
-----
|
||||
|
||||
delete from linea;
|
||||
|
||||
-----
|
||||
|
||||
update linea
|
||||
set vigente = false
|
||||
where id_red in (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' )
|
||||
|
@ -202,11 +202,10 @@ set id_comuna = (select id_comuna from comuna_georeferencia as c where ST_Contai
|
|||
where id_comuna is not null;
|
||||
-----
|
||||
|
||||
delete from rol_linea where id_linea not in (select id_linea from linea);
|
||||
|
||||
-----
|
||||
|
||||
ALTER TABLE rol_linea ADD CONSTRAINT rol_linea_id_linea_fkey FOREIGN KEY (id_linea) REFERENCES linea(id_linea);
|
||||
insert into dispositivo
|
||||
select 'QRCode-'||id_paradero , id_paradero , true, null, 3
|
||||
from paradero as p where id_paradero
|
||||
not in (select id_paradero from dispositivo as d where id_tipo_dispositivo=3 and d.id_paradero = p.id_paradero);
|
||||
|
||||
-----
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.decorators import action
|
||||
from django.http import JsonResponse
|
||||
from django.db.models import F
|
||||
from django.db import connection
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from rest_framework.decorators import action
|
||||
from api import models, serializers
|
||||
from os import getenv
|
||||
import redis
|
||||
|
@ -55,7 +56,8 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
|||
input = json.loads(request.body)
|
||||
getInfoDevice = input['GetInfoDevice']
|
||||
|
||||
record = models.Paradero.objects \
|
||||
cursor = connection.cursor()
|
||||
paradero = models.Paradero.objects \
|
||||
.filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \
|
||||
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
|
||||
.first()
|
||||
|
@ -64,58 +66,160 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
|||
db_port = getenv('DB_REDIS_PORT')
|
||||
r = redis.Redis(host=db_host, port=db_port, decode_responses=True)
|
||||
|
||||
key = f'stop_id:{record.nro_paradero}'
|
||||
key = f'stop_id:{paradero.nro_paradero}'
|
||||
json_trayectos = r.get(key)
|
||||
trayectos = []
|
||||
if json_trayectos != None:
|
||||
trayectos = json.loads(json_trayectos)
|
||||
else:
|
||||
trayectos = []
|
||||
|
||||
key = f'stop_id:none'
|
||||
json_trayectos = r.get(key)
|
||||
trayectos_none = []
|
||||
if json_trayectos != None:
|
||||
trayectos_none = json.loads(json_trayectos)
|
||||
|
||||
lineas = {}
|
||||
lineas_agrupadas = {}
|
||||
for t in trayectos:
|
||||
# agregar al listado los trayecto en donde no se registro el paradero
|
||||
"""
|
||||
json_trayectos = r.get('stop_id:none')
|
||||
trayectos_none = []
|
||||
if json_trayectos != None:
|
||||
trayectos_none = json.loads(json_trayectos)
|
||||
|
||||
pk_linea = f'{t["route_id"]}-{t["direction_id"]}'
|
||||
if pk_linea not in lineas:
|
||||
lineas[pk_linea] = models.Linea.objects.filter(id_linea=pk_linea).first()
|
||||
for trayecto in trayectos_none:
|
||||
trayecto['stop_id'] = 'none'
|
||||
trayecto['hora_llegada'] = None
|
||||
trayectos.append(trayecto)
|
||||
|
||||
linea = lineas[pk_linea]
|
||||
"""
|
||||
lineas = models.Linea.objects.filter(lineaparadero__id_paradero = paradero.id_paradero).order_by('route_short_name')
|
||||
detalle_lineas = []
|
||||
for linea in lineas:
|
||||
llegadas = []
|
||||
|
||||
if linea == None:
|
||||
logging.error(pk_linea)
|
||||
for trayecto in trayectos:
|
||||
id_linea = f"{trayecto['route_id']}-{trayecto['direction_id']}"
|
||||
stop_id = trayecto['stop_id']
|
||||
patente = trayecto['vehicle_license_plate']
|
||||
trayecto['stop_id_alterno'] = None
|
||||
|
||||
if linea != None:
|
||||
if pk_linea not in lineas_agrupadas:
|
||||
lineas_agrupadas[pk_linea] = {
|
||||
if id_linea == linea.id_linea:
|
||||
hora_llegada = trayecto['hora_llegada']
|
||||
distancia_km = None
|
||||
|
||||
# si no trae latitud ni longitud: buscar en trayectos_none por patente
|
||||
# y sobreescribir latitud y longitud
|
||||
if trayecto['latitude'] == 0 and trayecto['longitude'] == 0:
|
||||
for trayecto_none in trayectos_none:
|
||||
if patente == trayecto_none['vehicle_license_plate']:
|
||||
trayecto['longitude'] = trayecto_none['longitude']
|
||||
trayecto['latitude'] = trayecto_none['latitude']
|
||||
trayecto['stop_id_alterno'] = 'none'
|
||||
break
|
||||
|
||||
if trayecto['latitude'] != 0 and trayecto['longitude'] != 0:
|
||||
trip_id = trayecto['trip_id']
|
||||
velocidad_promedio = 80
|
||||
p_lon = trayecto['longitude']
|
||||
p_lat = trayecto['latitude']
|
||||
|
||||
sql = "select hora_llegada, distancia_km from fn_gtfs_calcula_distancia_tiempo_llegada(%s,%s,%s,%s,%s)"
|
||||
cursor.execute(sql, [trip_id, stop_id, velocidad_promedio, p_lon, p_lat])
|
||||
row = cursor.fetchone()
|
||||
|
||||
if patente == 'FDCB32':
|
||||
print(f'SQL: {sql}', flush=True)
|
||||
print(f'params: {[trip_id, stop_id, velocidad_promedio, p_lon, p_lat]}', flush=True)
|
||||
print(f'row: {row}', flush=True)
|
||||
|
||||
if row != None:
|
||||
hora_llegada = row[0].strftime('%H:%M:%S')
|
||||
distancia_km = row[1]
|
||||
|
||||
llegadas.append({
|
||||
'patente': trayecto['vehicle_license_plate'],
|
||||
'Planificada': trayecto['hora_llegada'],
|
||||
'Latitud': trayecto['latitude'],
|
||||
'Longitud': trayecto['longitude'],
|
||||
'stop_id_alterno': trayecto['stop_id_alterno'],
|
||||
'EstimadaGPS': hora_llegada,
|
||||
'DistanciaGPS': distancia_km,
|
||||
'Mensajelinea': None,
|
||||
})
|
||||
|
||||
llegadas_ordendas = sorted(llegadas, key=lambda x: x['DistanciaGPS'])
|
||||
|
||||
item = {
|
||||
'Linea': linea.route_long_name,
|
||||
'Descripcion': linea.route_short_name,
|
||||
'TipoLocomocion': linea.route_type.descripcion,
|
||||
'colorFondo': linea.route_color,
|
||||
'colorTexto': linea.route_text_color,
|
||||
'Llegadas': []
|
||||
'Llegadas': llegadas_ordendas
|
||||
}
|
||||
detalle_lineas.append(item)
|
||||
|
||||
lineas_agrupadas[pk_linea]['Llegadas'].append({
|
||||
'patente': t['vehicle_license_plate'],
|
||||
'Planificada': None,
|
||||
'EstimadaGPS': t['hora_llegada'],
|
||||
'DistanciaGPS': None,
|
||||
'Mensajelinea': None,
|
||||
})
|
||||
# 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.filter(id_linea=pk_linea).first()
|
||||
|
||||
# linea = lineas[pk_linea]
|
||||
|
||||
# if linea == None:
|
||||
# print(pk_linea, flush=True)
|
||||
|
||||
# if linea != None:
|
||||
# if pk_linea not in lineas_agrupadas:
|
||||
# lineas_agrupadas[pk_linea] = {
|
||||
# 'Linea': linea.route_long_name,
|
||||
# 'Descripcion': linea.route_short_name,
|
||||
# 'TipoLocomocion': linea.route_type.descripcion,
|
||||
# 'colorFondo': linea.route_color,
|
||||
# 'colorTexto': linea.route_text_color,
|
||||
# 'Llegadas': []
|
||||
# }
|
||||
|
||||
# sql = "select hora_llegada, distancia_km from fn_gtfs_calcula_distancia_tiempo_llegada(%s,%s,%s,%s,%s)"
|
||||
|
||||
# trip_id = t['trip_id']
|
||||
# paradero_id = t['stop_id']
|
||||
# velocidad_promedio = 30
|
||||
# p_lon = t['longitude']
|
||||
# p_lat = t['latitude']
|
||||
|
||||
# cursor.execute(sql, [trip_id, paradero_id, velocidad_promedio, p_lon, p_lat])
|
||||
# row = cursor.fetchone()
|
||||
# hora_llegada = None
|
||||
# distancia_km = None
|
||||
# if row != None:
|
||||
# hora_llegada = row[0].strftime('%H:%M:%S')
|
||||
# distancia_km = row[1]
|
||||
|
||||
# lineas_agrupadas[pk_linea]['Llegadas'].append({
|
||||
# 'patente': t['vehicle_license_plate'],
|
||||
# 'Planificada': t['hora_llegada'],
|
||||
# 'EstimadaGPS': hora_llegada,
|
||||
# 'DistanciaGPS': distancia_km,
|
||||
# 'Mensajelinea': None,
|
||||
# })
|
||||
|
||||
|
||||
detalle_lineas = []
|
||||
for pk_linea in lineas_agrupadas:
|
||||
detalle_lineas.append(lineas_agrupadas[pk_linea])
|
||||
# detalle_lineas = []
|
||||
# for pk_linea in lineas_agrupadas:
|
||||
# detalle_lineas.append(lineas_agrupadas[pk_linea])
|
||||
|
||||
save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
|
||||
# save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
|
||||
|
||||
cursor.close()
|
||||
return JsonResponse({
|
||||
"GetInfoDeviceResponse": {
|
||||
"DetalleLineas": detalle_lineas,
|
||||
"MensajeParadero": "No considerar, uso futuro",
|
||||
"NroParadero": record.nro_paradero,
|
||||
"NombreParadero": record.nombre_paradero
|
||||
"NroParadero": paradero.nro_paradero,
|
||||
"NombreParadero": paradero.nombre_paradero,
|
||||
"proto": trayectos,
|
||||
}
|
||||
})
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
from rest_framework import viewsets
|
||||
# from rest_framework.response import Response
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.filters import OrderingFilter
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
|
@ -46,6 +46,57 @@ class LineaViewSet(viewsets.ModelViewSet):
|
|||
return JsonResponse(list(paraderos), safe=False)
|
||||
|
||||
|
||||
# @action(detail=False, methods=['get'])
|
||||
def ___buses(self, request, pk=None):
|
||||
pk = request.GET['id_linea']
|
||||
|
||||
# 1. obtener todas los paraderos de redis
|
||||
# 2. consultar en cada paradero si hay una linea que corresponda a la consultada
|
||||
# 3. si existe se agrega el vehiculo
|
||||
|
||||
db_host = getenv('DB_REDIS_HOST')
|
||||
db_port = getenv('DB_REDIS_PORT')
|
||||
r = redis.Redis(host=db_host, port=db_port, decode_responses=True)
|
||||
|
||||
fileproto = r.get('fileproto')
|
||||
paraderos_redis = r.keys('stop_id:*')
|
||||
object_buses = {}
|
||||
for key_paradero in paraderos_redis:
|
||||
string_trayectos = r.get(key_paradero)
|
||||
array_trayectos = json.loads(string_trayectos)
|
||||
|
||||
for trayecto in array_trayectos:
|
||||
patente = trayecto['vehicle_license_plate']
|
||||
id_linea = f"{trayecto['route_id']}-{trayecto['direction_id']}"
|
||||
|
||||
if id_linea == pk and key_paradero == 'stop_id:none':
|
||||
print(trayecto, flush=True)
|
||||
object_buses[patente] = {
|
||||
'Patente_vehiculo': trayecto["vehicle_license_plate"],
|
||||
'latitude': trayecto["latitude"],
|
||||
'longitude': trayecto["longitude"],
|
||||
'speed': trayecto["speed"]
|
||||
}
|
||||
|
||||
if id_linea == pk and patente not in object_buses:
|
||||
object_buses[patente] = {
|
||||
'Patente_vehiculo': trayecto["vehicle_license_plate"],
|
||||
'latitude': trayecto["latitude"],
|
||||
'longitude': trayecto["longitude"],
|
||||
'speed': trayecto["speed"]
|
||||
}
|
||||
|
||||
array_buses = []
|
||||
for patente in object_buses:
|
||||
array_buses.append(object_buses[patente])
|
||||
|
||||
return Response({
|
||||
'fileproto': fileproto,
|
||||
'buses': array_buses
|
||||
})
|
||||
|
||||
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def buses(self, request, pk=None):
|
||||
pk = request.GET['id_linea']
|
||||
|
@ -80,6 +131,23 @@ class LineaViewSet(viewsets.ModelViewSet):
|
|||
'speed': trayecto["speed"]
|
||||
}
|
||||
|
||||
key = f'stop_id:none'
|
||||
data = r.get(key)
|
||||
|
||||
if data != None:
|
||||
array_trayectos = json.loads(data)
|
||||
for trayecto in array_trayectos:
|
||||
key_route = f'{trayecto["route_id"]}-{trayecto["direction_id"]}'
|
||||
if key_route == pk:
|
||||
patente = trayecto["vehicle_license_plate"]
|
||||
if (patente not in obj_buses) or (patente in obj_buses and obj_buses[patente]['longitude'] == 0 and obj_buses[patente]['latitude'] == 0):
|
||||
obj_buses[patente] = {
|
||||
'Patente_vehiculo': trayecto["vehicle_license_plate"],
|
||||
'latitude': trayecto["latitude"],
|
||||
'longitude': trayecto["longitude"],
|
||||
'speed': trayecto["speed"]
|
||||
}
|
||||
|
||||
for patente in obj_buses:
|
||||
array_buses.append(obj_buses[patente])
|
||||
|
||||
|
@ -97,8 +165,6 @@ class LineaViewSet(viewsets.ModelViewSet):
|
|||
.filter(id_linea=pk) \
|
||||
.first()
|
||||
|
||||
logging.error(linea)
|
||||
|
||||
detalle_buses = []
|
||||
paraderos = models.Paradero.objects \
|
||||
.filter(vigente=True, lineaparadero__id_linea=pk) \
|
||||
|
|
|
@ -3,6 +3,7 @@ from rest_framework import viewsets
|
|||
from rest_framework.decorators import action
|
||||
from api.serializers import ParaderoSerializer
|
||||
from api.models import Paradero, Dispositivo
|
||||
from decouple import config
|
||||
import logging
|
||||
|
||||
class ParaderoViewSet(viewsets.ModelViewSet):
|
||||
|
@ -41,7 +42,8 @@ class ParaderoViewSet(viewsets.ModelViewSet):
|
|||
|
||||
url = None
|
||||
if record != None:
|
||||
url = f'https://transporte-paradero.hz.kursor.cl/rutaParadero/?id={record.id_dispositivo}'
|
||||
base_url = config('URL_PARADERO', 'http://localhost/')
|
||||
url = f'{base_url}{record.id_dispositivo}'
|
||||
|
||||
|
||||
# url = f'{referer}/public/infoStop?codigoParadero={pk}'
|
||||
|
|
Loading…
Reference in New Issue