syncAtmCards(); } /** * Get account information from the API * * @param string $accountNumber * @return array */ private function getAccountInfo(string $accountNumber): array { $url = env('FIORANO_URL') . self::API_BASE_PATH; $path = self::API_INQUIRY_PATH; $data = [ 'accountNo' => $accountNumber ]; $response = Http::post($url . $path, $data); return $response->json(); } /** * Synchronize ATM cards data from Oracle database * * @return void */ private function syncAtmCards(): void { try { $offset = 0; $hasMoreRecords = true; while ($hasMoreRecords) { $cards = $this->fetchCardBatch($offset); $this->processCardBatch($cards); $hasMoreRecords = count($cards) === self::BATCH_SIZE; $offset += self::BATCH_SIZE; } Log::info('Sinkronisasi kartu ATM berhasil diselesaikan'); } catch (Exception $e) { Log::error('BiayaKartu: syncAtmCards: ' . $e->getMessage(), [ 'file' => $e->getFile(), 'line' => $e->getLine() ]); } } /** * Fetch a batch of ATM cards from the database * * @param int $offset * @return \Illuminate\Support\Collection */ private function fetchCardBatch(int $offset) { return DB::connection('oracle') ->table(self::DB_TABLE) ->where('crsts', 1) ->whereNotNull('ACCFLAG') ->where('ACCFLAG', '>', 0) ->skip($offset) ->take(self::BATCH_SIZE) ->get(); } /** * Process a batch of ATM cards * * @param \Illuminate\Support\Collection $cards * @return void */ private function processCardBatch($cards): void { foreach ($cards as $card) { try { $accountInfo = $this->getAccountInfo($card->accflag); $this->updateOrCreateAtmCard($card, $accountInfo); } catch (Exception $e) { Log::warning("Gagal memproses kartu {$card->crdno}: " . $e->getMessage()); } } } /** * Update or create ATM card record * * @param object $card * @param array $accountInfo * @return void */ private function updateOrCreateAtmCard(object $card, array $accountInfo): void { Atmcard::updateOrCreate( ['crdno' => $card->crdno], [ 'accflag' => $card->accflag, 'cracc1' => $card->cracc1, 'cracc2' => $card->cracc2, 'cracc3' => $card->cracc3, 'cracc4' => $card->cracc4, 'cracc5' => $card->cracc5, 'craccnam1' => $card->craccnam1, 'craccnam2' => $card->craccnam2, 'craccnam3' => $card->craccnam3, 'craccnam4' => $card->craccnam4, 'craccnam5' => $card->craccnam5, 'crsts' => $card->crsts, 'cttype' => $card->cttype, 'ctdesc' => $card->ctdesc, 'last_update' => $card->lastupdate, 'branch' => $accountInfo['acctCompany'], 'currency' => $accountInfo['acctCurrency'], ] ); } }