6.2.1 Consulta viajes por tipo
Este documento mapea el endpoint legacy consultaViajesTipo al nuevo servicio, detalla el mapeo de campos a la base de datos y provee SQL/diagramas de referencia.
1) Legacy → Nuevo Servicio
1.1 Request (legacy)
{
"destino": "",
"tipo": "CONTROL_INTERNO",
"configuracion": "",
"valor1": 1315031,
"valor2": ""
}
1.2 Nuevo servicio
Servicio: Trip Query Service (v1)
Endpoint: POST /trips/_search-by-type
Descripción: Consulta viajes por tipo/configuración y valores asociados (p.ej. CONTROL_INTERNO + valor1 = controlInterno).
Request (nuevo, equivalente):
{
"tipo": "CONTROL_INTERNO",
"configuracion": "",
"valor1": 1315031,
"valor2": "",
"destino": ""
}
Response (nuevo, equivalente al legacy):
{
"AlpRecoleccionViajesCollection": {
"AlpRecoleccionViajes": {
"rowId": 217842603,
"idViaje": 508821,
"controlInterno": 1315031,
"fechaRecoleccion": "2024-06-03T00:00:00.000-05:00",
"origen": "CUAUTITLAN",
"destino": "CUAUTITLAN",
"zona": "QUERETARO",
"tipo": "P",
"ruta": 34,
"operadorEmployeeNumber": 1507783,
"operadorFullName": "CORONA MARTINEZ JOSE PERFECTO",
"tractor": 1647,
"pipa": 1143,
"dolly": "",
"proveedorTransporte": "ALPURA",
"proveedorId": 0,
"volante": 2212044,
"selloDomo": 169927,
"justificacionSelloDomo": "LAVADO",
"sedeSelloDomo": "Planta Cuautitlán",
"selloValvula": "",
"justificacionSelloValvula": "",
"sedeSelloValvula": "",
"litrosRemisionados": 32215,
"fechaEvento": "2024-06-03T00:00:00.000-05:00",
"idTransferencia": 0,
"ticketVigilancia": "",
"numOcTransferencia": "",
"producto": "DIINEZ0001",
"descripcionProducto": "LECHE CRUDA AL 3.6%"
}
}
}
Nota: El endpoint moderno elimina los prefijos
p_*y consolida filtros por tipo/configuración. Paratipo = "CONTROL_INTERNO", elvalor1corresponde al controlInterno.
2) Mapeo a Tablas de Base de Datos
Tablas principales:
ALP_RECOLECCION_VIAJES(maestro del viaje)ALP_DET_RECOLECCION_VIAJES(detalle por socio/visita) — para volanteALP_DET_RECO_TANQUES_VIAJES(tanques/mediciones) — para agregados de litrosRemisionados si aplica
| Campo (response) | Tabla.Columna / Lógica |
|---|---|
rowId | ALP_RECOLECCION_VIAJES.ROW_ID |
idViaje | ALP_RECOLECCION_VIAJES.ID_VIAJE |
controlInterno | ALP_RECOLECCION_VIAJES.CONTROL_INTERNO |
fechaRecoleccion | ALP_RECOLECCION_VIAJES.FECHA_RECOLECCION |
origen / destino / zona | ALP_RECOLECCION_VIAJES.ORIGEN / DESTINO / ZONA |
tipo | ALP_RECOLECCION_VIAJES.TIPO |
ruta | ALP_RECOLECCION_VIAJES.RUTA |
operadorEmployeeNumber | ALP_RECOLECCION_VIAJES.OPERADOR_EMPLOYEE_NUMBER |
operadorFullName | ALP_RECOLECCION_VIAJES.OPERADOR_FULL_NAME |
tractor / pipa / dolly | ALP_RECOLECCION_VIAJES.TRACTOR / PIPA / DOLLY |
proveedorTransporte / proveedorId | ALP_RECOLECCION_VIAJES.PROVEEDOR_TRANSPORTE / PROVEEDOR_ID |
volante | Preferente: ALP_DET_RECOLECCION_VIAJES.VOLANTE (join por ID_VIAJE o CONTROL_INTERNO) |
selloDomo / sedeSelloDomo / justificacionSelloDomo | ALP_RECOLECCION_VIAJES.SELLO_DOMO / SEDE_SELLO_DOMO / JUS_SELLO_DOMO |
selloValvula / sedeSelloValvula / justificacionSelloValvula | ALP_RECOLECCION_VIAJES.SELLO_VALVULA / SEDE_SELLO_VALVULA / JUS_SELLO_VALVULA |
litrosRemisionados | Preferente: ALP_RECOLECCION_VIAJES.LITROS_REMISIONADOS; Fallback: SUM(ALP_DET_RECO_TANQUES_VIAJES.LITROS_REMISIONADOS) por ID_VIAJE |
fechaEvento | ALP_RECOLECCION_VIAJES.FECHA_EVENTO |
idTransferencia | ALP_RECOLECCION_VIAJES.ID_TRANSFERENCIA |
ticketVigilancia | ALP_RECOLECCION_VIAJES.TICKET_VIGILANCIA |
numOcTransferencia | ALP_RECOLECCION_VIAJES.NUM_OC_TRANSFERENCIA |
producto / descripcionProducto | ALP_RECOLECCION_VIAJES.PRODUCTO / DESCRIPCION_PRODUCTO |
3) SQL de referencia (CONTROL_INTERNO + detalle)
Filtra por tipo = CONTROL_INTERNO y valor1 = :controlInterno. Trae
volantedesde el detalle y calculalitrosRemisionadossi el maestro no lo tiene.
WITH det AS (
SELECT
d.ID_VIAJE,
/* Si hay varios volantes, selecciona el más reciente por fecha o el máximo */
MAX(d.VOLANTE) AS VOLANTE
FROM ALP_DET_RECOLECCION_VIAJES d
GROUP BY d.ID_VIAJE
),
tanques AS (
SELECT
t.ID_VIAJE,
SUM(t.LITROS_REMISIONADOS) AS LTS_REM
FROM ALP_DET_RECO_TANQUES_VIAJES t
GROUP BY t.ID_VIAJE
)
SELECT
v.ROW_ID AS rowId,
v.ID_VIAJE AS idViaje,
v.CONTROL_INTERNO AS controlInterno,
v.FECHA_RECOLECCION AS fechaRecoleccion,
v.ORIGEN, v.DESTINO, v.ZONA, v.TIPO, v.RUTA,
v.OPERADOR_EMPLOYEE_NUMBER AS operadorEmployeeNumber,
v.OPERADOR_FULL_NAME AS operadorFullName,
v.TRACTOR, v.PIPA, v.DOLLY,
v.PROVEEDOR_TRANSPORTE AS proveedorTransporte,
v.PROVEEDOR_ID AS proveedorId,
COALESCE(det.VOLANTE, v.VOLANTE) AS volante,
v.SELLO_DOMO AS selloDomo,
v.JUS_SELLO_DOMO AS justificacionSelloDomo,
v.SEDE_SELLO_DOMO AS sedeSelloDomo,
v.SELLO_VALVULA AS selloValvula,
v.JUS_SELLO_VALVULA AS justificacionSelloValvula,
v.SEDE_SELLO_VALVULA AS sedeSelloValvula,
COALESCE(v.LITROS_REMISIONADOS, tanques.LTS_REM) AS litrosRemisionados,
v.FECHA_EVENTO AS fechaEvento,
v.ID_TRANSFERENCIA AS idTransferencia,
v.TICKET_VIGILANCIA AS ticketVigilancia,
v.NUM_OC_TRANSFERENCIA AS numOcTransferencia,
v.PRODUCTO AS producto,
v.DESCRIPCION_PRODUCTO AS descripcionProducto
FROM ALP_RECOLECCION_VIAJES v
LEFT JOIN det ON det.ID_VIAJE = v.ID_VIAJE
LEFT JOIN tanques ON tanques.ID_VIAJE = v.ID_VIAJE
WHERE
:tipo = 'CONTROL_INTERNO'
AND v.CONTROL_INTERNO = :valor1
AND (:destino IS NULL OR v.DESTINO = :destino)
AND (:configuracion IS NULL OR :configuracion = '' OR 1=1)
FETCH FIRST 200 ROWS ONLY;
Notas
- Ajusta el
FETCHoLIMITsegún tu motor.- Si el modelo no tiene
LITROS_REMISIONADOSen maestro, deja solo elSUMde tanques.- Si la lógica de
volantees distinta (por secuencia/fecha), reemplaza elMAXcon la regla apropiada.