From ec446beaf8c723768b3c0639ff999f3284d37fbb Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Fri, 9 Jan 2026 09:49:30 -0600 Subject: [PATCH] fix: detecciones --- app/Http/Controllers/Api/ArcoController.php | 1 + .../Controllers/Api/VehicleController.php | 2 +- app/Services/ConsultaRepuveConstancia.php | 65 +++++++++---------- app/Services/VehicleService.php | 48 +++++++++----- 4 files changed, 63 insertions(+), 53 deletions(-) diff --git a/app/Http/Controllers/Api/ArcoController.php b/app/Http/Controllers/Api/ArcoController.php index 71f72ce..63d527f 100644 --- a/app/Http/Controllers/Api/ArcoController.php +++ b/app/Http/Controllers/Api/ArcoController.php @@ -194,6 +194,7 @@ public function deteccionesDelDia(Request $request, int $id) // Filtrar solo VIN, placa, antena y si es robado $deteccionesFiltradas = array_map(function($deteccion) { return [ + 'tid' => $deteccion['fast_id'] ?? null, 'vin' => $deteccion['vin'] ?? null, 'placa' => $deteccion['placa'] ?? null, 'antena' => $deteccion['antena'] ?? null, diff --git a/app/Http/Controllers/Api/VehicleController.php b/app/Http/Controllers/Api/VehicleController.php index d5be922..91659eb 100644 --- a/app/Http/Controllers/Api/VehicleController.php +++ b/app/Http/Controllers/Api/VehicleController.php @@ -405,7 +405,7 @@ public function buscarPorTag(Request $request) if (!$resultado['success']) { return ApiResponse::OK->response([ 'success' => false, - 'message' => 'Error al registrar vehiculo' + 'message' => 'Error, NO se encontró el vehiculo' ]); } diff --git a/app/Services/ConsultaRepuveConstancia.php b/app/Services/ConsultaRepuveConstancia.php index 34fd9dc..d209505 100644 --- a/app/Services/ConsultaRepuveConstancia.php +++ b/app/Services/ConsultaRepuveConstancia.php @@ -46,7 +46,6 @@ public function consultarVehiculoPorTag(?string $criterio = null) return null; } - // Determinar el tipo de búsqueda (intentar primero como tag_number, luego placa, luego VIN) $url = $this->baseUrl . $this->vehiculosEndpoint; Log::info('ConsultaRepuveConstancia: Consultando', [ @@ -54,46 +53,48 @@ public function consultarVehiculoPorTag(?string $criterio = null) 'criterio' => $criterio ]); - // Intentar buscar por tag_number primero - $response = Http::withHeaders([ + $headers = [ 'Authorization' => 'Bearer ' . $token, 'Accept' => 'application/json', - ])->timeout(30)->get($url, [ + ]; + + // Intentar buscar por tag_number primero + $response = Http::withHeaders($headers)->timeout(30)->get($url, [ 'tag_number' => $criterio ]); - // Si no lo encuentra por tag_number, intentar por placa if ($response->successful()) { $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]; return $this->transformarDatosVehiculo($vehiculoEncontrado); } } - // Intentar búsqueda por placa - $response = Http::withHeaders([ - 'Authorization' => 'Bearer ' . $token, - 'Accept' => 'application/json', - ])->timeout(30)->get($url, [ + // Intentar búsqueda por placa SOLO si el anterior NO encontró nada + $response = Http::withHeaders($headers)->timeout(30)->get($url, [ 'placa' => $criterio ]); - // Si no lo encuentra por placa, intentar por VIN if ($response->successful()) { $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]; return $this->transformarDatosVehiculo($vehiculoEncontrado); } } - // Intentar búsqueda por VIN - $response = Http::withHeaders([ - 'Authorization' => 'Bearer ' . $token, - 'Accept' => 'application/json', - ])->timeout(30)->get($url, [ - 'niv' => $criterio + // Intentar búsqueda por VIN SOLO si los anteriores NO encontraron nada + $response = Http::withHeaders($headers)->timeout(30)->get($url, [ + 'vin' => $criterio ]); if (!$response->successful()) { @@ -106,29 +107,21 @@ public function consultarVehiculoPorTag(?string $criterio = null) $data = $response->json(); - // Validar estructura de respuesta - if (!isset($data['status']) || $data['status'] !== 'success' || !isset($data['data']['records']['data'])) { - Log::warning('ConsultaRepuveConstancia: Respuesta con estructura inválida', [ - 'response' => $data - ]); - return null; - } + // Validar estructura de respuesta y que haya datos + if ( + !isset($data['status']) || $data['status'] !== 'success' + || !isset($data['data']['records']['data']) + || empty($data['data']['records']['data']) + ) { - // recibir solo el vehículo buscado (o vacío) - $vehiculos = $data['data']['records']['data']; - - if (empty($vehiculos)) { - Log::info('ConsultaRepuveConstancia: Vehículo no encontrado', [ + Log::info('ConsultaRepuveConstancia: Vehículo no encontrado en ningún criterio', [ 'criterio' => $criterio ]); return null; } - $vehiculoEncontrado = $vehiculos[0]; - - // Transformar datos al formato esperado + $vehiculoEncontrado = $data['data']['records']['data'][0]; return $this->transformarDatosVehiculo($vehiculoEncontrado); - } catch (Exception $e) { Log::error('ConsultaRepuveConstancia: Error al consultar vehículo', [ 'criterio' => $criterio, @@ -139,6 +132,7 @@ public function consultarVehiculoPorTag(?string $criterio = null) } } + /** * Obtener token JWT */ @@ -192,7 +186,6 @@ private function obtenerToken() Log::info('ConsultaRepuveConstancia: Token obtenido y guardado en caché'); return $token; - } catch (Exception $e) { Log::error('ConsultaRepuveConstancia: Excepción al obtener token', [ 'error' => $e->getMessage(), diff --git a/app/Services/VehicleService.php b/app/Services/VehicleService.php index a7c2829..dc26d9b 100644 --- a/app/Services/VehicleService.php +++ b/app/Services/VehicleService.php @@ -231,27 +231,43 @@ private function actualizarDeteccionRedis(string $fastId, array $datosActuales) */ private function registrarDeteccion(string $fastId, array $resultado, ?int $arcoId = null, ?string $antena = null) { - if (!$resultado['success'] || !isset($resultado['vehiculo'])) { - return; - } - - $vehiculo = $resultado['vehiculo']; - - // Registrar en MySQL - Detection::create([ + // Datos mínimos que siempre tenemos + $datosMinimos = [ 'arco_id' => $arcoId, 'antena' => $antena, '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() - ]); + ]; - // Registrar en Redis (detecciones del día) - $this->registrarDeteccionDelDia($fastId, $vehiculo, $arcoId, $resultado, $antena); + // Si encontramos el vehículo, agregamos datos completos + 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); + } } /**