fix: detecciones

This commit is contained in:
Juan Felipe Zapata Moreno 2026-01-09 09:49:30 -06:00
parent c6f39e33f4
commit ec446beaf8
4 changed files with 63 additions and 53 deletions

View File

@ -194,6 +194,7 @@ public function deteccionesDelDia(Request $request, int $id)
// Filtrar solo VIN, placa, antena y si es robado // Filtrar solo VIN, placa, antena y si es robado
$deteccionesFiltradas = array_map(function($deteccion) { $deteccionesFiltradas = array_map(function($deteccion) {
return [ return [
'tid' => $deteccion['fast_id'] ?? null,
'vin' => $deteccion['vin'] ?? null, 'vin' => $deteccion['vin'] ?? null,
'placa' => $deteccion['placa'] ?? null, 'placa' => $deteccion['placa'] ?? null,
'antena' => $deteccion['antena'] ?? null, 'antena' => $deteccion['antena'] ?? null,

View File

@ -405,7 +405,7 @@ public function buscarPorTag(Request $request)
if (!$resultado['success']) { if (!$resultado['success']) {
return ApiResponse::OK->response([ return ApiResponse::OK->response([
'success' => false, 'success' => false,
'message' => 'Error al registrar vehiculo' 'message' => 'Error, NO se encontró el vehiculo'
]); ]);
} }

View File

@ -46,7 +46,6 @@ public function consultarVehiculoPorTag(?string $criterio = null)
return null; return null;
} }
// Determinar el tipo de búsqueda (intentar primero como tag_number, luego placa, luego VIN)
$url = $this->baseUrl . $this->vehiculosEndpoint; $url = $this->baseUrl . $this->vehiculosEndpoint;
Log::info('ConsultaRepuveConstancia: Consultando', [ Log::info('ConsultaRepuveConstancia: Consultando', [
@ -54,46 +53,48 @@ public function consultarVehiculoPorTag(?string $criterio = null)
'criterio' => $criterio 'criterio' => $criterio
]); ]);
// Intentar buscar por tag_number primero $headers = [
$response = Http::withHeaders([
'Authorization' => 'Bearer ' . $token, 'Authorization' => 'Bearer ' . $token,
'Accept' => 'application/json', 'Accept' => 'application/json',
])->timeout(30)->get($url, [ ];
// Intentar buscar por tag_number primero
$response = Http::withHeaders($headers)->timeout(30)->get($url, [
'tag_number' => $criterio 'tag_number' => $criterio
]); ]);
// Si no lo encuentra por tag_number, intentar por placa
if ($response->successful()) { if ($response->successful()) {
$data = $response->json(); $data = $response->json();
if (isset($data['data']['records']['data']) && !empty($data['data']['records']['data'])) { if (
isset($data['status']) && $data['status'] === 'success'
&& isset($data['data']['records']['data'])
&& !empty($data['data']['records']['data'])
) {
$vehiculoEncontrado = $data['data']['records']['data'][0]; $vehiculoEncontrado = $data['data']['records']['data'][0];
return $this->transformarDatosVehiculo($vehiculoEncontrado); return $this->transformarDatosVehiculo($vehiculoEncontrado);
} }
} }
// Intentar búsqueda por placa // Intentar búsqueda por placa SOLO si el anterior NO encontró nada
$response = Http::withHeaders([ $response = Http::withHeaders($headers)->timeout(30)->get($url, [
'Authorization' => 'Bearer ' . $token,
'Accept' => 'application/json',
])->timeout(30)->get($url, [
'placa' => $criterio 'placa' => $criterio
]); ]);
// Si no lo encuentra por placa, intentar por VIN
if ($response->successful()) { if ($response->successful()) {
$data = $response->json(); $data = $response->json();
if (isset($data['data']['records']['data']) && !empty($data['data']['records']['data'])) { if (
isset($data['status']) && $data['status'] === 'success'
&& isset($data['data']['records']['data'])
&& !empty($data['data']['records']['data'])
) {
$vehiculoEncontrado = $data['data']['records']['data'][0]; $vehiculoEncontrado = $data['data']['records']['data'][0];
return $this->transformarDatosVehiculo($vehiculoEncontrado); return $this->transformarDatosVehiculo($vehiculoEncontrado);
} }
} }
// Intentar búsqueda por VIN // Intentar búsqueda por VIN SOLO si los anteriores NO encontraron nada
$response = Http::withHeaders([ $response = Http::withHeaders($headers)->timeout(30)->get($url, [
'Authorization' => 'Bearer ' . $token, 'vin' => $criterio
'Accept' => 'application/json',
])->timeout(30)->get($url, [
'niv' => $criterio
]); ]);
if (!$response->successful()) { if (!$response->successful()) {
@ -106,29 +107,21 @@ public function consultarVehiculoPorTag(?string $criterio = null)
$data = $response->json(); $data = $response->json();
// Validar estructura de respuesta // Validar estructura de respuesta y que haya datos
if (!isset($data['status']) || $data['status'] !== 'success' || !isset($data['data']['records']['data'])) { if (
Log::warning('ConsultaRepuveConstancia: Respuesta con estructura inválida', [ !isset($data['status']) || $data['status'] !== 'success'
'response' => $data || !isset($data['data']['records']['data'])
]); || empty($data['data']['records']['data'])
return null; ) {
}
// recibir solo el vehículo buscado (o vacío) Log::info('ConsultaRepuveConstancia: Vehículo no encontrado en ningún criterio', [
$vehiculos = $data['data']['records']['data'];
if (empty($vehiculos)) {
Log::info('ConsultaRepuveConstancia: Vehículo no encontrado', [
'criterio' => $criterio 'criterio' => $criterio
]); ]);
return null; return null;
} }
$vehiculoEncontrado = $vehiculos[0]; $vehiculoEncontrado = $data['data']['records']['data'][0];
// Transformar datos al formato esperado
return $this->transformarDatosVehiculo($vehiculoEncontrado); return $this->transformarDatosVehiculo($vehiculoEncontrado);
} catch (Exception $e) { } catch (Exception $e) {
Log::error('ConsultaRepuveConstancia: Error al consultar vehículo', [ Log::error('ConsultaRepuveConstancia: Error al consultar vehículo', [
'criterio' => $criterio, 'criterio' => $criterio,
@ -139,6 +132,7 @@ public function consultarVehiculoPorTag(?string $criterio = null)
} }
} }
/** /**
* Obtener token JWT * Obtener token JWT
*/ */
@ -192,7 +186,6 @@ private function obtenerToken()
Log::info('ConsultaRepuveConstancia: Token obtenido y guardado en caché'); Log::info('ConsultaRepuveConstancia: Token obtenido y guardado en caché');
return $token; return $token;
} catch (Exception $e) { } catch (Exception $e) {
Log::error('ConsultaRepuveConstancia: Excepción al obtener token', [ Log::error('ConsultaRepuveConstancia: Excepción al obtener token', [
'error' => $e->getMessage(), 'error' => $e->getMessage(),

View File

@ -231,27 +231,43 @@ private function actualizarDeteccionRedis(string $fastId, array $datosActuales)
*/ */
private function registrarDeteccion(string $fastId, array $resultado, ?int $arcoId = null, ?string $antena = null) private function registrarDeteccion(string $fastId, array $resultado, ?int $arcoId = null, ?string $antena = null)
{ {
if (!$resultado['success'] || !isset($resultado['vehiculo'])) { // Datos mínimos que siempre tenemos
return; $datosMinimos = [
}
$vehiculo = $resultado['vehiculo'];
// Registrar en MySQL
Detection::create([
'arco_id' => $arcoId, 'arco_id' => $arcoId,
'antena' => $antena, 'antena' => $antena,
'fast_id' => $fastId, 'fast_id' => $fastId,
'vin' => $vehiculo['vin'] ?? null,
'placa' => $vehiculo['placa'] ?? null,
'marca' => $vehiculo['marca'] ?? null,
'modelo' => $vehiculo['modelo'] ?? null,
'color' => $vehiculo['color'] ?? null,
'fecha_deteccion' => now() 'fecha_deteccion' => now()
]); ];
// Registrar en Redis (detecciones del día) // Si encontramos el vehículo, agregamos datos completos
$this->registrarDeteccionDelDia($fastId, $vehiculo, $arcoId, $resultado, $antena); if ($resultado['success'] && isset($resultado['vehiculo'])) {
$vehiculo = $resultado['vehiculo'];
Detection::create(array_merge($datosMinimos, [
'vin' => $vehiculo['vin'] ?? null,
'placa' => $vehiculo['placa'] ?? null,
'marca' => $vehiculo['marca'] ?? null,
'modelo' => $vehiculo['modelo'] ?? null,
'color' => $vehiculo['color'] ?? null,
]));
// También registrar en Redis (detecciones del día)
$this->registrarDeteccionDelDia($fastId, $vehiculo, $arcoId, $resultado, $antena);
} else {
// No encontrado: guardar solo datos mínimos
Detection::create(array_merge($datosMinimos, [
'vin' => null,
'placa' => null,
'marca' => null,
'modelo' => null,
'color' => null,
]));
// Registrar en Redis con datos incompletos
$this->registrarDeteccionDelDia($fastId, [], $arcoId, [
'estado' => 'DESCONOCIDO',
'tiene_reporte_robo' => false
], $antena);
}
} }
/** /**