- **Penambahan Logika Pengambilan Data:** - Menambahkan proses pengambilan data account dari model `Account` sebelum memanggil API Fiorano. - Melakukan pencarian data berdasarkan nomor rekening (`account_number`) melalui query pada model. - Jika data ditemukan, mengembalikan informasi account berupa response format yang menyerupai hasil dari API. - **Optimisasi Response:** - Menyusun data response lengkap dari model `Account`, seperti kode cabang (`branch_code`), mata uang (`currency`), kategori pembukaan (`open_category`), dan properti lain yang relevan. - Field response menyertakan nilai default atau diisi dengan data lain yang ada dalam model. - **Fallback API Fiorano:** - Jika data dari database tidak ditemukan, tetap menggunakan mekanisme existing untuk melakukan request ke API Fiorano. - Tidak ada perubahan lain pada struktur permintaan atau penanganan response Fiorano. - **Komentar dan Dokumentasi:** - Memperbarui komentar pada fungsi `getAccountInfo` untuk mencerminkan logika terbaru. - Menjelaskan fallback ke API jika data model tidak tersedia melalui komentar inline agar lebih mudah dipahami. - **Peningkatan Efisiensi:** - Mengurangi frekuensi panggilan API Fiorano dengan memanfaatkan data lokal terlebih dahulu, sehingga mempercepat proses eksekusi job. Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
133 lines
4.1 KiB
PHP
133 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace Modules\Webstatement\Jobs;
|
|
|
|
use Exception;
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Foundation\Bus\Dispatchable;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use Illuminate\Queue\SerializesModels;
|
|
use Illuminate\Support\Facades\Http;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Modules\Webstatement\Models\Atmcard;
|
|
|
|
class UpdateAtmCardBranchCurrencyJob implements ShouldQueue
|
|
{
|
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
|
|
/**
|
|
* API constants
|
|
*/
|
|
private const API_BASE_PATH = '/restgateway/services/IGATEToCoreBankingServices';
|
|
private const API_INQUIRY_PATH = '/InquiryBalanceService';
|
|
|
|
/**
|
|
* The ATM card to update.
|
|
*
|
|
* @var Atmcard
|
|
*/
|
|
protected $card;
|
|
|
|
/**
|
|
* Create a new job instance.
|
|
*
|
|
* @param Atmcard $card
|
|
* @return void
|
|
*/
|
|
public function __construct(Atmcard $card)
|
|
{
|
|
$this->card = $card;
|
|
}
|
|
|
|
/**
|
|
* Execute the job.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function handle(): void
|
|
{
|
|
try {
|
|
if ($this->needBranchAndCurrencyUpdate()) {
|
|
$accountInfo = $this->getAccountInfo($this->card->accflag);
|
|
if ($accountInfo && isset($accountInfo['responseCode']) && $accountInfo['responseCode'] === '00') {
|
|
$this->updateBranchAndCurrency($accountInfo);
|
|
Log::info("Berhasil memperbarui branch dan currency untuk kartu {$this->card->crdno}");
|
|
} else {
|
|
Log::warning("Gagal mendapatkan informasi akun untuk kartu {$this->card->crdno}. Response: " .
|
|
json_encode($accountInfo ?? ['error' => 'No response']));
|
|
}
|
|
}
|
|
} catch (Exception $e) {
|
|
Log::error("Error saat memperbarui branch dan currency untuk kartu {$this->card->crdno}: " . $e->getMessage(), [
|
|
'file' => $e->getFile(),
|
|
'line' => $e->getLine()
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if branch and currency update is needed
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function needBranchAndCurrencyUpdate(): bool
|
|
{
|
|
return empty($this->card->branch) || empty($this->card->currency);
|
|
}
|
|
|
|
/**
|
|
* Get account information from Account model or API
|
|
*
|
|
* @param string $accountNumber
|
|
* @return array|null
|
|
*/
|
|
private function getAccountInfo(string $accountNumber): ?array
|
|
{
|
|
try {
|
|
// Coba dapatkan data dari model Account terlebih dahulu
|
|
$account = \Modules\Webstatement\Models\Account::where('account_number', $accountNumber)->first();
|
|
|
|
if ($account) {
|
|
// Jika account ditemukan, format data sesuai dengan format response dari API
|
|
return [
|
|
'responseCode' => '00',
|
|
'acctCompany' => $account->branch_code,
|
|
'acctCurrency' => $account->currency,
|
|
'openCategory' => $account->open_category
|
|
// Tambahkan field lain yang mungkin diperlukan
|
|
];
|
|
}
|
|
|
|
// Jika tidak ditemukan di database, ambil dari Fiorano API
|
|
$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();
|
|
} catch (Exception $e) {
|
|
Log::error("Gagal mendapatkan informasi akun: " . $e->getMessage());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update branch and currency information for the card
|
|
*
|
|
* @param array $accountInfo
|
|
* @return void
|
|
*/
|
|
private function updateBranchAndCurrency(array $accountInfo): void
|
|
{
|
|
$cardData = [
|
|
'branch' => !empty($accountInfo['acctCompany']) ? $accountInfo['acctCompany'] : null,
|
|
'currency' => !empty($accountInfo['acctCurrency']) ? $accountInfo['acctCurrency'] : null,
|
|
];
|
|
|
|
$this->card->update($cardData);
|
|
}
|
|
}
|