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
|
Content-Type: application/json
|
||||||
|
|
||||||
{
|
{
|
||||||
"rut": "22222222-2",
|
"rut": "11111111-1",
|
||||||
"password": "usuario2"
|
"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;
|
ALTER TABLE linea_paradero drop CONSTRAINT IF EXISTS linea_paradero_id_linea_fkey;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
@ -47,7 +43,11 @@ where stop_id not in (select id_paradero::text from paradero);
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
delete from linea_paradero;
|
delete from linea_paradero;
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
delete from linea;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -202,11 +202,10 @@ set id_comuna = (select id_comuna from comuna_georeferencia as c where ST_Contai
|
||||||
where id_comuna is not null;
|
where id_comuna is not null;
|
||||||
-----
|
-----
|
||||||
|
|
||||||
delete from rol_linea where id_linea not in (select id_linea from 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);
|
||||||
ALTER TABLE rol_linea ADD CONSTRAINT rol_linea_id_linea_fkey FOREIGN KEY (id_linea) REFERENCES linea(id_linea);
|
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
|
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
|
from rest_framework.decorators import action
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
|
from django.db import connection
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from rest_framework.decorators import action
|
|
||||||
from api import models, serializers
|
from api import models, serializers
|
||||||
from os import getenv
|
from os import getenv
|
||||||
import redis
|
import redis
|
||||||
|
@ -55,7 +56,8 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
input = json.loads(request.body)
|
input = json.loads(request.body)
|
||||||
getInfoDevice = input['GetInfoDevice']
|
getInfoDevice = input['GetInfoDevice']
|
||||||
|
|
||||||
record = models.Paradero.objects \
|
cursor = connection.cursor()
|
||||||
|
paradero = models.Paradero.objects \
|
||||||
.filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \
|
.filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \
|
||||||
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
|
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
|
||||||
.first()
|
.first()
|
||||||
|
@ -64,58 +66,160 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
db_port = getenv('DB_REDIS_PORT')
|
db_port = getenv('DB_REDIS_PORT')
|
||||||
r = redis.Redis(host=db_host, port=db_port, decode_responses=True)
|
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)
|
json_trayectos = r.get(key)
|
||||||
|
trayectos = []
|
||||||
if json_trayectos != None:
|
if json_trayectos != None:
|
||||||
trayectos = json.loads(json_trayectos)
|
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 = {}
|
# agregar al listado los trayecto en donde no se registro el paradero
|
||||||
lineas_agrupadas = {}
|
"""
|
||||||
for t in trayectos:
|
json_trayectos = r.get('stop_id:none')
|
||||||
|
trayectos_none = []
|
||||||
pk_linea = f'{t["route_id"]}-{t["direction_id"]}'
|
if json_trayectos != None:
|
||||||
if pk_linea not in lineas:
|
trayectos_none = json.loads(json_trayectos)
|
||||||
lineas[pk_linea] = models.Linea.objects.filter(id_linea=pk_linea).first()
|
|
||||||
|
for trayecto in trayectos_none:
|
||||||
linea = lineas[pk_linea]
|
trayecto['stop_id'] = 'none'
|
||||||
|
trayecto['hora_llegada'] = None
|
||||||
if linea == None:
|
trayectos.append(trayecto)
|
||||||
logging.error(pk_linea)
|
|
||||||
|
|
||||||
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': []
|
|
||||||
}
|
|
||||||
|
|
||||||
lineas_agrupadas[pk_linea]['Llegadas'].append({
|
|
||||||
'patente': t['vehicle_license_plate'],
|
|
||||||
'Planificada': None,
|
|
||||||
'EstimadaGPS': t['hora_llegada'],
|
|
||||||
'DistanciaGPS': None,
|
|
||||||
'Mensajelinea': None,
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
lineas = models.Linea.objects.filter(lineaparadero__id_paradero = paradero.id_paradero).order_by('route_short_name')
|
||||||
detalle_lineas = []
|
detalle_lineas = []
|
||||||
for pk_linea in lineas_agrupadas:
|
for linea in lineas:
|
||||||
detalle_lineas.append(lineas_agrupadas[pk_linea])
|
llegadas = []
|
||||||
|
|
||||||
save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
|
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 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_ordendas
|
||||||
|
}
|
||||||
|
detalle_lineas.append(item)
|
||||||
|
|
||||||
|
# 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])
|
||||||
|
|
||||||
|
# save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
|
||||||
|
|
||||||
|
cursor.close()
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
"GetInfoDeviceResponse": {
|
"GetInfoDeviceResponse": {
|
||||||
"DetalleLineas": detalle_lineas,
|
"DetalleLineas": detalle_lineas,
|
||||||
"MensajeParadero": "No considerar, uso futuro",
|
"MensajeParadero": "No considerar, uso futuro",
|
||||||
"NroParadero": record.nro_paradero,
|
"NroParadero": paradero.nro_paradero,
|
||||||
"NombreParadero": record.nombre_paradero
|
"NombreParadero": paradero.nombre_paradero,
|
||||||
|
"proto": trayectos,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
from rest_framework import viewsets
|
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.decorators import action
|
||||||
from rest_framework.filters import OrderingFilter
|
from rest_framework.filters import OrderingFilter
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
@ -46,6 +46,57 @@ class LineaViewSet(viewsets.ModelViewSet):
|
||||||
return JsonResponse(list(paraderos), safe=False)
|
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'])
|
@action(detail=False, methods=['get'])
|
||||||
def buses(self, request, pk=None):
|
def buses(self, request, pk=None):
|
||||||
pk = request.GET['id_linea']
|
pk = request.GET['id_linea']
|
||||||
|
@ -79,6 +130,23 @@ class LineaViewSet(viewsets.ModelViewSet):
|
||||||
'longitude': trayecto["longitude"],
|
'longitude': trayecto["longitude"],
|
||||||
'speed': trayecto["speed"]
|
'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:
|
for patente in obj_buses:
|
||||||
array_buses.append(obj_buses[patente])
|
array_buses.append(obj_buses[patente])
|
||||||
|
@ -97,8 +165,6 @@ class LineaViewSet(viewsets.ModelViewSet):
|
||||||
.filter(id_linea=pk) \
|
.filter(id_linea=pk) \
|
||||||
.first()
|
.first()
|
||||||
|
|
||||||
logging.error(linea)
|
|
||||||
|
|
||||||
detalle_buses = []
|
detalle_buses = []
|
||||||
paraderos = models.Paradero.objects \
|
paraderos = models.Paradero.objects \
|
||||||
.filter(vigente=True, lineaparadero__id_linea=pk) \
|
.filter(vigente=True, lineaparadero__id_linea=pk) \
|
||||||
|
|
|
@ -3,6 +3,7 @@ from rest_framework import viewsets
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from api.serializers import ParaderoSerializer
|
from api.serializers import ParaderoSerializer
|
||||||
from api.models import Paradero, Dispositivo
|
from api.models import Paradero, Dispositivo
|
||||||
|
from decouple import config
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
class ParaderoViewSet(viewsets.ModelViewSet):
|
class ParaderoViewSet(viewsets.ModelViewSet):
|
||||||
|
@ -41,7 +42,8 @@ class ParaderoViewSet(viewsets.ModelViewSet):
|
||||||
|
|
||||||
url = None
|
url = None
|
||||||
if record != 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}'
|
# url = f'{referer}/public/infoStop?codigoParadero={pk}'
|
||||||
|
|
Loading…
Reference in New Issue