$queueName ]); $jobIds = []; $data = []; foreach ($this->listAccount() as $clientName => $accounts) { foreach ($accounts as $accountNumber) { foreach ($this->listPeriod() as $period) { $job = new ExportStatementJob( $accountNumber, $period, $this->getAccountBalance($accountNumber, $period), $clientName // Pass the client name to the job ); // Dispatch job dengan queue name yang spesifik $jobIds[] = app(Dispatcher::class)->dispatch($job->onQueue($queueName)); $data[] = [ 'client_name' => $clientName, 'account_number' => $accountNumber, 'period' => $period, 'queue_name' => $queueName ]; } } } Log::info('Statement export jobs queued successfully', [ 'total_jobs' => count($jobIds), 'queue_name' => $queueName ]); return response()->json([ 'message' => 'Statement export jobs have been queued', 'queue_name' => $queueName, 'jobs' => array_map(function ($index, $jobId) use ($data) { return [ 'job_id' => $jobId, 'client_name' => $data[$index]['client_name'], 'account_number' => $data[$index]['account_number'], 'period' => $data[$index]['period'], 'queue_name' => $data[$index]['queue_name'], 'file_name' => "{$data[$index]['client_name']}_{$data[$index]['account_number']}_{$data[$index]['period']}.csv" ]; }, array_keys($jobIds), $jobIds) ]); } function listAccount(){ return [ 'PLUANG' => [ '1080426085', '1080425781', ], 'OY' => [ '1081647484', '1081647485', ], 'INDORAYA' => [ '1083123710', '1083123711', '1083123712', '1083123713', '1083123714', '1083123715', '1083123716', '1083123718', '1083123719', '1083123721', '1083123722', '1083123723', '1083123724', '1083123726', '1083123727', '1083123728', '1083123730', '1083123731', '1083123732', '1083123734', '1083123735', ], 'TDC' => [ '1086677889', '1086677890', '1086677891', '1086677892', '1086677893', '1086677894', '1086677895', '1086677896', '1086677897', ], 'ASIA_PARKING' => [ '1080119298', '1080119361', '1080119425', '1080119387', '1082208069', ], 'DAU' => [ '1085151668', ], 'EGR' => [ '1085368601', ], 'SARANA_PACTINDO' => [ '1078333878', ], 'SWADAYA_PANDU' => [ '0081272689', ], "AWAN_LINTANG_SOLUSI"=> [ "1084269430" ], "MONETA"=> [ "1085667890" ], "SILOT" => [ "1083972676" ] ]; } function listPeriod(){ return [ date('Ymd', strtotime('-1 day')) ]; } function getAccountBalance($accountNumber, $period) { $accountBalance = AccountBalance::where('account_number', $accountNumber) ->where('period', '<', $period) ->orderBy('period', 'desc') ->first(); return $accountBalance->actual_balance ?? 0; } /** * Print statement rekening dengan queue name yang dapat dikustomisasi * * @param string $accountNumber * @param string|null $period * @param Request $request * @return \Illuminate\Http\JsonResponse */ function printStatementRekening($accountNumber, $period = null, Request $request = null) { $queueName = $request ? $request->get('queue_name', 'default') : 'default'; $period = $period ?? date('Ym'); $balance = AccountBalance::where('account_number', $accountNumber) ->when($period === '202505', function($query) { return $query->where('period', '>=', '20250512') ->orderBy('period', 'asc'); }, function($query) use ($period) { // Get balance from last day of previous month $firstDayOfMonth = Carbon::createFromFormat('Ym', $period)->startOfMonth(); $lastDayPrevMonth = $firstDayOfMonth->copy()->subDay()->format('Ymd'); return $query->where('period', $lastDayPrevMonth); }) ->first() ->actual_balance ?? '0.00'; $clientName = 'client1'; try { Log::info("Starting statement export for account: {$accountNumber}, period: {$period}, client: {$clientName}", [ 'account_number' => $accountNumber, 'period' => $period, 'client_name' => $clientName, 'queue_name' => $queueName ]); // Validate inputs if (empty($accountNumber) || empty($period) || empty($clientName)) { throw new \Exception('Required parameters missing'); } // Dispatch the job dengan queue name yang spesifik $job = ExportStatementPeriodJob::dispatch($accountNumber, $period, $balance, $clientName) ->onQueue($queueName); Log::info("Statement export job dispatched successfully", [ 'job_id' => $job->job_id ?? null, 'account' => $accountNumber, 'period' => $period, 'client' => $clientName, 'queue_name' => $queueName ]); return response()->json([ 'success' => true, 'message' => 'Statement export job queued successfully', 'data' => [ 'job_id' => $job->job_id ?? null, 'account_number' => $accountNumber, 'period' => $period, 'client_name' => $clientName, 'queue_name' => $queueName ] ]); } catch (\Exception $e) { Log::error("Failed to export statement", [ 'error' => $e->getMessage(), 'account' => $accountNumber, 'period' => $period, 'queue_name' => $queueName ]); return response()->json([ 'success' => false, 'message' => 'Failed to queue statement export job', 'error' => $e->getMessage(), 'queue_name' => $queueName ]); } } }