From 369f24a8e2a9e4ae31d32aa30dea5265f24250a3 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 29 May 2025 21:57:23 +0700 Subject: [PATCH] refactor(webstatement): optimalkan pemrosesan batch transfer dana - Mengubah mekanisme pemrosesan `transferBatch` menjadi berbasis chunk untuk mengoptimalkan penggunaan memori. - Menambahkan logika penghapusan data lama dengan `_id` terkait sebelum menyisipkan data baru untuk menghindari konflik. - Mengganti metode `upsert` dengan kombinasi `delete` dan `insert` untuk lebih fleksibel dalam penanganan data. - Memastikan batch transfer diatur ulang setelah selesai diproses. Signed-off-by: Daeng Deni Mardaeni --- app/Jobs/ProcessFundsTransferDataJob.php | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/Jobs/ProcessFundsTransferDataJob.php b/app/Jobs/ProcessFundsTransferDataJob.php index 91c1beb..3bfcfb7 100644 --- a/app/Jobs/ProcessFundsTransferDataJob.php +++ b/app/Jobs/ProcessFundsTransferDataJob.php @@ -186,14 +186,19 @@ { try { if (!empty($this->transferBatch)) { - // Bulk insert/update funds transfers - TempFundsTransfer::upsert( - $this->transferBatch, - ['_id'], // Unique key - array_diff((new TempFundsTransfer())->getFillable(), ['_id']) // Update columns - ); + // Process in smaller chunks for better memory management + foreach ($this->transferBatch as $entry) { + // Extract all stmt_entry_ids from the current chunk + $entryIds = array_column($entry, '_id'); - // Reset transfer batch after processing + // Delete existing records with these IDs to avoid conflicts + TempFundsTransfer::whereIn('_id', $entryIds)->delete(); + + // Insert all records in the chunk at once + TempFundsTransfer::insert($entry); + } + + // Reset entry batch after processing $this->transferBatch = []; } } catch (Exception $e) {