shjElevenService = $shjElevenService; } /** * コンソールコマンドを実行 * * 処理フロー: * 1. 集計単位每个の契約台数を算出する * 2. 取得件数判定 * 3. ゾーンマスタを取得する * 4. 取得判定とゾーンマスタ登録 * 5. 契約台数チェック(限界台数超過判定) * 6. 契約台数を反映する * 7. バッチ処理ログを作成する * * @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) { // 対象なしの結果を設定する $this->info('契約台数算出対象なしのため処理を終了します。'); // バッチ処理ログを作成 $this->shjElevenService->createBatchLog( 'success', [], '契約台数算出対象なし', 0, 0, 0 ); Log::info('SHJ-11 現在契約台数集計完了(対象なし)', [ 'end_time' => now(), 'duration_seconds' => $startTime->diffInSeconds(now()) ]); return self::SUCCESS; } // 【処理2・3】ゾーンマスタ処理(取得・登録・更新) $this->info('【処理2】ゾーンマスタ処理を実行しています...'); $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']}件"); // 【処理4】バッチ処理ログを作成する $this->shjElevenService->createBatchLog( 'success', $processResult['parameters'], '現在契約台数集計処理完了', $countResults, $processResult['created_zones'] + $processResult['updated_zones'], 0 ); 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'] ]); return self::SUCCESS; } else { $this->error('SHJ-11 現在契約台数集計でエラーが発生しました: ' . $processResult['message']); // エラー時のバッチログ作成 $this->shjElevenService->createBatchLog( 'error', $processResult['parameters'] ?? [], $processResult['message'], $countResults, $processResult['created_zones'] ?? 0, 1 ); Log::error('SHJ-11 現在契約台数集計エラー', [ 'error' => $processResult['message'], 'details' => $processResult['details'] ?? null ]); return self::FAILURE; } } catch (\Exception $e) { $this->error('SHJ-11 現在契約台数集計で予期しないエラーが発生しました: ' . $e->getMessage()); // 例外時のバッチログ作成 $this->shjElevenService->createBatchLog( 'error', [], 'システムエラー: ' . $e->getMessage(), 0, 0, 1 ); Log::error('SHJ-11 現在契約台数集計例外エラー', [ 'exception' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); return self::FAILURE; } } }