74 lines
1.9 KiB
PHP
74 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\VehicleFake;
|
|
use App\Models\Detection;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class ArcoSimuladorService
|
|
{
|
|
public function simularPasoVehiculo(): array
|
|
{
|
|
$vehiculo = VehicleFake::inRandomOrder()->first();
|
|
|
|
if (!$vehiculo) {
|
|
return [
|
|
'success' => false,
|
|
'message' => 'No hay vehículos disponibles para simular'
|
|
];
|
|
}
|
|
|
|
$epc = $this->generarEPC($vehiculo->vin);
|
|
|
|
Detection::create([
|
|
'epc' => $epc,
|
|
'vin' => $vehiculo->vin,
|
|
'placa' => $vehiculo->placa,
|
|
'marca' => $vehiculo->marca,
|
|
'modelo' => $vehiculo->modelo,
|
|
'color' => $vehiculo->color,
|
|
'fecha_deteccion' => now()
|
|
]);
|
|
|
|
return [
|
|
'success' => true,
|
|
'vehiculo' => [
|
|
'placa' => $vehiculo->placa,
|
|
'vin' => $vehiculo->vin,
|
|
'marca' => $vehiculo->marca,
|
|
'modelo' => $vehiculo->modelo,
|
|
'color' => $vehiculo->color,
|
|
'epc' => $epc
|
|
],
|
|
'mensaje' => 'Detección registrada localmente'
|
|
];
|
|
}
|
|
|
|
public function iniciarSimulacionContinua(int $minSegundos = 5, int $maxSegundos = 30): void
|
|
{
|
|
while (true) {
|
|
$this->simularPasoVehiculo();
|
|
|
|
$espera = rand($minSegundos, $maxSegundos);
|
|
Log::info("Esperando {$espera} segundos para próxima simulación...");
|
|
|
|
sleep($espera);
|
|
}
|
|
}
|
|
|
|
private function generarEPC(string $vin): string
|
|
{
|
|
$prefijo = 'E280117000000';
|
|
$sufijo = substr(strtoupper($vin), -8);
|
|
$relleno = str_pad($sufijo, 11, '0', STR_PAD_LEFT);
|
|
|
|
return $prefijo . $relleno;
|
|
}
|
|
|
|
public function obtenerTiempoAleatorio(int $min = 5, int $max = 30): int
|
|
{
|
|
return rand($min, $max);
|
|
}
|
|
}
|