From e14ae2ef9cd6182a6f0261905cebc32d19fe2c64 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 29 May 2025 21:57:53 +0700 Subject: [PATCH] refactor(webstatement): optimize ATM transaction processing - Ubah mekanisme pengolahan batch transaksi ATM agar lebih efisien dan hemat memori. - Hapus proses `upsert` secara langsung dan ganti dengan pendekatan berikut: 1. Iterasi data batch dalam chunk kecil untuk menghindari konsumsi memori berlebih. 2. Hapus data yang sudah ada berdasarkan `transaction_id` untuk menghindari konflik saat insert ulang. 3. Gunakan metode `insert` untuk memasukkan data sekaligus per chunk. - Tambahkan logika reset batch setelah selesai pengolahan. - Tingkatkan skalabilitas dan stabilitas alur pengolahan data dengan mengurangi beban memori saat pemrosesan data besar. Signed-off-by: Daeng Deni Mardaeni --- app/Jobs/ProcessAtmTransactionJob.php | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/Jobs/ProcessAtmTransactionJob.php b/app/Jobs/ProcessAtmTransactionJob.php index e007f57..7f1a15d 100644 --- a/app/Jobs/ProcessAtmTransactionJob.php +++ b/app/Jobs/ProcessAtmTransactionJob.php @@ -223,14 +223,19 @@ { try { if (!empty($this->atmTransactionBatch)) { - // Bulk insert/update ATM transactions - AtmTransaction::upsert( - $this->atmTransactionBatch, - ['transaction_id'], // Unique key - array_values(array_diff(self::HEADER_MAP, ['id'])) // Update columns (all except transaction_id) - ); + // Process in smaller chunks for better memory management + foreach ($this->atmTransactionBatch as $entry) { + // Extract all stmt_entry_ids from the current chunk + $entryIds = array_column($entry, 'transaction_id'); - // Reset batch after processing + // Delete existing records with these IDs to avoid conflicts + AtmTransaction::whereIn('transaction_id', $entryIds)->delete(); + + // Insert all records in the chunk at once + AtmTransaction::insert($entry); + } + + // Reset entry batch after processing $this->atmTransactionBatch = []; } } catch (Exception $e) {