shjElevenService = $shjElevenService; } /** * コンソールコマンドを実行 * * 処理フロー(仕様書準拠): * 【処理1】集計単位每个の契約台数を算出する * 【判断1】取得件数判定 * - 取得件数 = 0 → 【処理4】バッチログ作成(「全駐輪場契約なし」)→ 終了 * - 取得件数 ≥ 1 → 【処理2】ゾーンマスタ処理(循環)→ 終了 * * ※【処理4】は各レコードの処理ごとにService層で呼び出される * * @return int */ public function handle() { try { // 開始ログ出力 $startTime = now(); $this->info('SHJ-11 現在契約台数集計を開始します。'); Log::info('SHJ-11 現在契約台数集計開始', [ 'start_time' => $startTime ]); // 【処理1】集計単位每个の契約台数を算出する $this->info('【処理1】集計単位每个の契約台数を算出しています...'); $contractCounts = $this->shjElevenService->calculateContractCounts(); // 【判断1】取得件数判定 $countResults = count($contractCounts); $this->info("取得件数: {$countResults}件"); if ($countResults === 0) { // 【判断1】取得件数 = 0 の場合 $this->info('対象なしのため処理を終了します。'); // 【処理4】bat_job_logに直接書き込み(取得件数=0時) $batchLogResult = $this->shjElevenService->writeBatJobLogForNoContracts(); // bat_job_log書き込み結果をチェック if (!$batchLogResult['success']) { $this->warn('bat_job_log書き込みで異常が発生しました'); if (isset($batchLogResult['error_message'])) { $this->warn('error_message: ' . $batchLogResult['error_message']); } Log::warning('bat_job_log書き込み失敗(対象なし)', [ 'error_message' => $batchLogResult['error_message'] ?? null ]); } Log::info('SHJ-11 現在契約台数集計完了(対象なし)', [ 'end_time' => now(), 'duration_seconds' => $startTime->diffInSeconds(now()), 'bat_job_log_success' => $batchLogResult['success'] ]); return self::SUCCESS; } // 【判断1】取得件数 ≥ 1 の場合 // 【処理2・3・4】ゾーンマスタ処理(各レコードごとに処理4を実行) $this->info('【処理2】ゾーンマスタ処理を実行しています...'); $this->info('※各レコードごとに【処理4】バッチログを作成します'); $processResult = $this->shjElevenService->processZoneManagement($contractCounts); // 処理結果確認 if ($processResult['success']) { $endTime = now(); $this->info('SHJ-11 現在契約台数集計が正常に完了しました。'); $this->info("処理時間: {$startTime->diffInSeconds($endTime)}秒"); $this->info("処理対象件数: {$countResults}件"); $this->info("ゾーン新規作成件数: {$processResult['created_zones']}件"); $this->info("ゾーン更新件数: {$processResult['updated_zones']}件"); $this->info("限界台数超過件数: {$processResult['over_capacity_count']}件"); if (!empty($processResult['batch_log_errors'])) { $this->warn("バッチログエラー件数: " . count($processResult['batch_log_errors']) . "件"); } Log::info('SHJ-11 現在契約台数集計完了', [ 'end_time' => $endTime, 'duration_seconds' => $startTime->diffInSeconds($endTime), 'processed_count' => $countResults, 'created_zones' => $processResult['created_zones'], 'updated_zones' => $processResult['updated_zones'], 'over_capacity_count' => $processResult['over_capacity_count'], 'batch_log_errors' => count($processResult['batch_log_errors']) ]); return self::SUCCESS; } else { $this->error('SHJ-11 現在契約台数集計でエラーが発生しました: ' . $processResult['message']); Log::error('SHJ-11 現在契約台数集計エラー', [ 'error' => $processResult['message'], 'details' => $processResult['details'] ?? null ]); return self::FAILURE; } } catch (\Exception $e) { $this->error('SHJ-11 現在契約台数集計で予期しないエラーが発生しました: ' . $e->getMessage()); Log::error('SHJ-11 現在契約台数集計例外エラー', [ 'exception' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); return self::FAILURE; } } }