From 429df7035c1f1539d18679b5aeb5f2344f205cd6 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 26 May 2025 08:28:28 +0700 Subject: [PATCH] fix(webstatement): optimalkan proses pembersihan data dan update balance Melakukan perbaikan serta optimisasi pada proses pembersihan data dan pengolahan saldo akun. Perubahan utama: - **ProcessStmtEntryDataJob**: - Mengganti `str_replace` dengan `preg_replace` untuk pembersihan `trans_reference`, sehingga lebih fleksibel dalam menghapus karakter setelah `\` (termasuk keseluruhan pattern yang lebih kompleks). - Mengevaluasi penghapusan potensi substring logic yang tidak digunakan, memperkuat pembersihan menjadi lebih konsisten. - **ProcessAccountDataJob**: - Mengganti penggunaan `firstOrNew` dan `save` dengan `updateOrInsert` untuk mengurangi jumlah query ke database. - Menambahkan pembuatan data `created_at` dan `updated_at` untuk memastikan data yang di-update memiliki timestamp konsisten. - Menjamin default value pada `actual_balance` dan `cleared_balance` apabila data masukan kosong agar sistem tetap dapat berjalan tanpa error. Perubahan ini dilakukan untuk meningkatkan efisiensi proses pengolahan data, mengurangi overhead query, serta memastikan data yang diproses tetap konsisten dan lebih aman. Signed-off-by: Daeng Deni Mardaeni --- app/Jobs/ProcessAccountDataJob.php | 25 ++++++++++++++++--------- app/Jobs/ProcessStmtEntryDataJob.php | 8 +++++++- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/Jobs/ProcessAccountDataJob.php b/app/Jobs/ProcessAccountDataJob.php index 71bd8da..e88b105 100644 --- a/app/Jobs/ProcessAccountDataJob.php +++ b/app/Jobs/ProcessAccountDataJob.php @@ -90,17 +90,24 @@ // Store the opening balances in the AccountBalance model for this period if (isset($data['open_actual_bal']) || isset($data['open_cleared_bal'])) { - $accountBalance = AccountBalance::firstOrNew([ + // Prepare balance data for bulk insert/update + $balanceData = [ 'account_number' => $data['account_number'], - 'period' => $this->period - ]); + 'period' => $this->period, + 'actual_balance' => empty($data['open_actual_bal']) ? 0 : $data['open_actual_bal'], + 'cleared_balance' => empty($data['open_cleared_bal']) ? 0 : $data['open_cleared_bal'], + 'created_at' => now(), + 'updated_at' => now() + ]; - // Set the balances - $accountBalance->actual_balance = $data['open_actual_bal'] ?? 0; - $accountBalance->cleared_balance = $data['open_cleared_bal'] ?? 0; - - $accountBalance->save(); - Log::info("Saved balance for account {$data['account_number']} for period {$this->period}"); + // Use updateOrInsert to reduce queries + AccountBalance::updateOrInsert( + [ + 'account_number' => $data['account_number'], + 'period' => $this->period + ], + $balanceData + ); } $processedCount++; diff --git a/app/Jobs/ProcessStmtEntryDataJob.php b/app/Jobs/ProcessStmtEntryDataJob.php index b572509..b539609 100644 --- a/app/Jobs/ProcessStmtEntryDataJob.php +++ b/app/Jobs/ProcessStmtEntryDataJob.php @@ -73,7 +73,13 @@ if ($data['stmt_entry_id'] !== 'stmt_entry_id') { // Bersihkan trans_reference dari \\BNK jika ada if (isset($data['trans_reference'])) { - $data['trans_reference'] = str_replace('\\BNK', '', $data['trans_reference']); + $cleanedRef = preg_replace('/\\\\.*$/', '', $data['trans_reference']); + //$firstTwoChars = substr($cleanedRef, 0, 2); + /*$data['trans_reference'] = (in_array($firstTwoChars, ['FT', 'TT','AA'])) + ? substr($cleanedRef, 0, 12) + : $cleanedRef;*/ + + $data['trans_reference'] = $cleanedRef; } StmtEntry::updateOrCreate(