149 lines
4.7 KiB
PHP
149 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\Log;
|
|
use App\Services\ShjFiveService;
|
|
|
|
/**
|
|
* SHJ-5 空き待ち通知処理コマンド
|
|
*
|
|
* 駐輪場の空き状況を確認し、空き待ち予約者への通知処理を実行する
|
|
* バックグラウンドで実行される定期バッチ処理
|
|
*/
|
|
class ShjFiveCommand extends Command
|
|
{
|
|
/**
|
|
* コンソールコマンドの名前とシグネチャ
|
|
*
|
|
* 引数なし - 全ての駐輪場を対象に処理を実行
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'shj:5';
|
|
|
|
/**
|
|
* コンソールコマンドの説明
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'SHJ-5 空き待ち通知処理 - 駐輪場の空き状況確認と空き待ち者への通知を実行';
|
|
|
|
/**
|
|
* SHJ-5サービスクラス
|
|
*
|
|
* @var ShjFiveService
|
|
*/
|
|
protected $shjFiveService;
|
|
|
|
/**
|
|
* コンストラクタ
|
|
*
|
|
* @param ShjFiveService $shjFiveService
|
|
*/
|
|
public function __construct(ShjFiveService $shjFiveService)
|
|
{
|
|
parent::__construct();
|
|
$this->shjFiveService = $shjFiveService;
|
|
}
|
|
|
|
/**
|
|
* コンソールコマンドを実行
|
|
*
|
|
* 処理フロー:
|
|
* 1. バッチログ開始記録
|
|
* 2. 駐輪場の空き状況を取得する
|
|
* 3. 空き状況判定
|
|
* 4. 空き待ち者の情報を取得する
|
|
* 5. 取得件数判定
|
|
* 6. 空き待ち者への通知、またはオペレーターキュー追加処理
|
|
* 7. バッチ処理ログを作成する
|
|
* 8. 処理結果返却
|
|
*
|
|
* @return int
|
|
*/
|
|
public function handle()
|
|
{
|
|
try {
|
|
// 開始ログ出力
|
|
$startTime = now();
|
|
$this->info('SHJ-5 空き待ち通知処理を開始します。');
|
|
|
|
Log::info('SHJ-5 空き待ち通知処理開始', [
|
|
'start_time' => $startTime
|
|
]);
|
|
|
|
// SHJ-5メイン処理実行
|
|
$result = $this->shjFiveService->executeParkVacancyNotification();
|
|
|
|
$endTime = now();
|
|
$this->info('SHJ-5 空き待ち通知処理が完了しました。');
|
|
$this->info("処理時間: {$startTime->diffInSeconds($endTime)}秒");
|
|
|
|
// 処理結果表示
|
|
$this->displayProcessResult($result);
|
|
|
|
// バッチログはShjFiveServiceが自動的にSHJ-8経由で作成
|
|
|
|
Log::info('SHJ-5 空き待ち通知処理完了', [
|
|
'end_time' => $endTime,
|
|
'duration_seconds' => $startTime->diffInSeconds($endTime),
|
|
'result' => $result
|
|
]);
|
|
|
|
return $result['success'] ? self::SUCCESS : self::FAILURE;
|
|
|
|
} catch (\Exception $e) {
|
|
$this->error('SHJ-5 空き待ち通知処理で予期しないエラーが発生しました: ' . $e->getMessage());
|
|
|
|
// エラー時もShjFiveServiceが自動的にバッチログを作成
|
|
|
|
Log::error('SHJ-5 空き待ち通知処理例外エラー', [
|
|
'exception' => $e->getMessage(),
|
|
'trace' => $e->getTraceAsString()
|
|
]);
|
|
|
|
return self::FAILURE;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 処理結果を表示
|
|
*
|
|
* @param array $result 処理結果
|
|
* @return void
|
|
*/
|
|
private function displayProcessResult(array $result): void
|
|
{
|
|
$this->line('');
|
|
$this->info('=== 処理結果 ===');
|
|
|
|
if ($result['success']) {
|
|
$this->info("✓ 処理実行成功: " . $result['message']);
|
|
} else {
|
|
$this->error("✗ 処理実行失敗: " . $result['message']);
|
|
}
|
|
|
|
$this->line('');
|
|
$this->info('=== 処理統計 ===');
|
|
$this->line(" 処理対象駐輪場数: " . ($result['processed_parks_count'] ?? 0));
|
|
$this->line(" 空きあり駐輪場数: " . ($result['vacant_parks_count'] ?? 0));
|
|
$this->line(" 空き待ち者総数: " . ($result['total_waiting_users'] ?? 0));
|
|
$this->line(" 通知送信成功: " . ($result['notification_success_count'] ?? 0) . "件");
|
|
$this->line(" オペレーターキュー追加: " . ($result['operator_queue_count'] ?? 0) . "件");
|
|
$this->line(" エラー件数: " . ($result['error_count'] ?? 0) . "件");
|
|
$this->line(" 処理時間: " . ($result['duration_seconds'] ?? 0) . "秒");
|
|
|
|
// エラー詳細があれば表示
|
|
if (!empty($result['errors'])) {
|
|
$this->line('');
|
|
$this->warn('=== エラー詳細 ===');
|
|
foreach ($result['errors'] as $index => $error) {
|
|
$this->line(" " . ($index + 1) . ". " . $error);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|