['x' => 23.25, 'y' => 53], // Rak 01-05 Umum 'rak_100' => ['x' => 30.25, 'y' => 53], // Rak 06-14 Filsafat 'rak_200' => ['x' => 23.25, 'y' => 69], // Rak 15-32 Agama 'rak_300' => ['x' => 30.25, 'y' => 69], // Rak 33-44 Sosial 'rak_400' => ['x' => 43.5, 'y' => 50.25], // Rak 45 Bahasa 'rak_500' => ['x' => 43.5, 'y' => 56.25], // Rak 46-48 Murni 'rak_600' => ['x' => 43.5, 'y' => 62.25], // Rak 49-68 Terapan 'rak_700' => ['x' => 43.5, 'y' => 68.75], // Rak 71-74 Seni 'rak_800' => ['x' => 43.5, 'y' => 75.25], // Rak 77-79 Sastra 'rak_900' => ['x' => 43.5, 'y' => 81.75], // Rak 69-84 Sejarah 'rak_baru' => ['x' => 28.5, 'y' => 88.75], // Rak 75-76 Baru ]; } /** * Prediksi kode rak berdasarkan nomor panggil (duplikasi logika controller). */ private function getKodeRak(?string $nomor_panggil): string { if (empty($nomor_panggil)) { return 'none'; } $kode_utama = (int) substr(trim($nomor_panggil), 0, 3); return match (true) { $kode_utama >= 0 && $kode_utama <= 99 => 'rak_000', $kode_utama >= 100 && $kode_utama <= 199 => 'rak_100', $kode_utama >= 200 && $kode_utama <= 299 => 'rak_200', $kode_utama >= 300 && $kode_utama <= 399 => 'rak_300', $kode_utama >= 400 && $kode_utama <= 499 => 'rak_400', $kode_utama >= 500 && $kode_utama <= 599 => 'rak_500', $kode_utama >= 600 && $kode_utama <= 699 => 'rak_600', $kode_utama >= 700 && $kode_utama <= 799 => 'rak_700', $kode_utama >= 800 && $kode_utama <= 899 => 'rak_800', $kode_utama >= 900 && $kode_utama <= 999 => 'rak_900', default => 'rak_baru', }; } public function run(): void { $koordinat = $this->getKoordinatRak(); $bukus = DB::table('buku')->get(); foreach ($bukus as $buku) { $kodeRak = $this->getKodeRak($buku->nomor_panggil); if ($kodeRak !== 'none' && isset($koordinat[$kodeRak])) { // Tambahkan sedikit random offset agar pin tidak menumpuk $offsetX = (rand(-15, 15) / 10); $offsetY = (rand(-10, 10) / 10); DB::table('buku') ->where('id_buku', $buku->id_buku) ->update([ 'lokasi_x' => round($koordinat[$kodeRak]['x'] + $offsetX, 2), 'lokasi_y' => round($koordinat[$kodeRak]['y'] + $offsetY, 2), ]); } } $this->command->info('Koordinat lokasi rak berhasil di-seed untuk ' . $bukus->count() . ' buku.'); } }