218 lines
8.6 KiB
PHP
218 lines
8.6 KiB
PHP
<?php
|
||
|
||
namespace App\Console\Commands;
|
||
|
||
use Illuminate\Console\Command;
|
||
use Illuminate\Support\Facades\Log;
|
||
use App\Services\ShjTwelveService;
|
||
|
||
/**
|
||
* SHJ-12 未払い者通知処理コマンド
|
||
*
|
||
* 定期契約マスタより未払い者を取得し、通知処理またはオペレーターキュー追加を実行する
|
||
* バックグラウンドで実行される定期バッチ処理
|
||
*/
|
||
class ShjTwelveCommand extends Command
|
||
{
|
||
/**
|
||
* コンソールコマンドの名前とシグネチャ
|
||
*
|
||
* 引数: なし
|
||
* オプション: なし
|
||
*
|
||
* @var string
|
||
*/
|
||
protected $signature = 'shj:12';
|
||
|
||
/**
|
||
* コンソールコマンドの説明
|
||
*
|
||
* @var string
|
||
*/
|
||
protected $description = 'SHJ-12 未払い者通知処理 - 定期契約マスタより未払い者を取得し通知処理を実行';
|
||
|
||
/**
|
||
* SHJ-12サービスクラス
|
||
*
|
||
* @var ShjTwelveService
|
||
*/
|
||
protected $shjTwelveService;
|
||
|
||
/**
|
||
* コンストラクタ
|
||
*
|
||
* @param ShjTwelveService $shjTwelveService
|
||
*/
|
||
public function __construct(ShjTwelveService $shjTwelveService)
|
||
{
|
||
parent::__construct();
|
||
$this->shjTwelveService = $shjTwelveService;
|
||
}
|
||
|
||
/**
|
||
* コンソールコマンドを実行
|
||
*
|
||
* 処理フロー:
|
||
* 1. 定期契約マスタより未払い者を取得する
|
||
* 2. 取得件数判定
|
||
* 3. 未払い者への通知、またはオペレーターキュー追加処理
|
||
* 4. バッチ処理ログを作成する
|
||
*
|
||
* @return int
|
||
*/
|
||
public function handle()
|
||
{
|
||
try {
|
||
// 開始ログ出力
|
||
$startTime = now();
|
||
$this->info('SHJ-12 未払い者通知処理を開始します。');
|
||
Log::info('SHJ-12 未払い者通知処理開始', [
|
||
'start_time' => $startTime
|
||
]);
|
||
|
||
// 【処理1】定期契約マスタより未払い者を取得する
|
||
$this->info('【処理1】定期契約マスタより未払い者を取得しています...');
|
||
$unpaidUsers = $this->shjTwelveService->getUnpaidUsers();
|
||
|
||
// 【判断1】取得件数判定
|
||
$unpaidCount = count($unpaidUsers);
|
||
$this->info("取得件数: {$unpaidCount}件");
|
||
|
||
if ($unpaidCount === 0) {
|
||
// 未払い者なしの結果を設定する
|
||
$this->info('未払い者なしのため処理を終了します。');
|
||
|
||
// バッチ処理ログを作成(SHJ-8仕様に合わせ job_name と status_comment を追加)
|
||
$this->shjTwelveService->createBatchLog(
|
||
'success',
|
||
[
|
||
'job_name' => 'SHJ-12未払い者アラート',
|
||
'status_comment' => '未払い者なし'
|
||
],
|
||
'未払い者なし',
|
||
0,
|
||
0,
|
||
0
|
||
);
|
||
|
||
Log::info('SHJ-12 未払い者通知処理完了(対象なし)', [
|
||
'end_time' => now(),
|
||
'duration_seconds' => $startTime->diffInSeconds(now())
|
||
]);
|
||
|
||
return self::SUCCESS;
|
||
}
|
||
|
||
// 【処理2】未払い者への通知、またはオペレーターキュー追加処理
|
||
$this->info('【処理2】未払い者への通知処理を実行しています...');
|
||
$processResult = $this->shjTwelveService->processUnpaidUserNotifications($unpaidUsers);
|
||
|
||
// 処理結果確認
|
||
if ($processResult['success']) {
|
||
$endTime = now();
|
||
$this->info('SHJ-12 未払い者通知処理が正常に完了しました。');
|
||
$this->info("処理時間: {$startTime->diffInSeconds($endTime)}秒");
|
||
$this->info("処理対象件数: {$unpaidCount}件");
|
||
$this->info("メール送信成功: {$processResult['mail_success_count']}件");
|
||
$this->info("メール送信失敗: {$processResult['mail_error_count']}件");
|
||
$this->info("キュー登録成功: {$processResult['queue_success_count']}件");
|
||
$this->info("キュー登録失敗: {$processResult['queue_error_count']}件");
|
||
|
||
// 【処理3】バッチ処理ログを作成する
|
||
$statusComment = $processResult['status_comment'];
|
||
$batchComments = $processResult['batch_comments'];
|
||
$totalSuccessCount = $processResult['mail_success_count'] + $processResult['queue_success_count'];
|
||
$totalErrorCount = $processResult['mail_error_count'] + $processResult['queue_error_count'];
|
||
|
||
// status_commentに詳細エラー情報を付加
|
||
$finalMessage = $statusComment;
|
||
if (!empty($batchComments)) {
|
||
$finalMessage .= "\n" . $batchComments;
|
||
}
|
||
|
||
// SHJ-8仕様に合わせ、job_name と status_comment を parameters に追加
|
||
$batchLogParameters = array_merge($processResult['parameters'], [
|
||
'job_name' => 'SHJ-12未払い者アラート',
|
||
'status_comment' => $statusComment
|
||
]);
|
||
|
||
$this->shjTwelveService->createBatchLog(
|
||
'success',
|
||
$batchLogParameters,
|
||
$finalMessage,
|
||
$unpaidCount,
|
||
$totalSuccessCount,
|
||
$totalErrorCount
|
||
);
|
||
|
||
Log::info('SHJ-12 未払い者通知処理完了', [
|
||
'end_time' => $endTime,
|
||
'duration_seconds' => $startTime->diffInSeconds($endTime),
|
||
'processed_count' => $unpaidCount,
|
||
'mail_success_count' => $processResult['mail_success_count'],
|
||
'mail_error_count' => $processResult['mail_error_count'],
|
||
'queue_success_count' => $processResult['queue_success_count'],
|
||
'queue_error_count' => $processResult['queue_error_count']
|
||
]);
|
||
|
||
return self::SUCCESS;
|
||
} else {
|
||
$this->error('SHJ-12 未払い者通知処理でエラーが発生しました: ' . $processResult['message']);
|
||
|
||
// エラー時のバッチログ作成
|
||
$statusComment = $processResult['status_comment'] ?? 'システムエラー';
|
||
$batchComments = $processResult['batch_comments'] ?? '';
|
||
$finalMessage = $statusComment;
|
||
if (!empty($batchComments)) {
|
||
$finalMessage .= "\n" . $batchComments;
|
||
}
|
||
|
||
// SHJ-8仕様に合わせ、job_name と status_comment を parameters に追加
|
||
$batchLogParameters = array_merge($processResult['parameters'] ?? [], [
|
||
'job_name' => 'SHJ-12未払い者アラート',
|
||
'status_comment' => $statusComment
|
||
]);
|
||
|
||
$this->shjTwelveService->createBatchLog(
|
||
'error',
|
||
$batchLogParameters,
|
||
$finalMessage,
|
||
$unpaidCount,
|
||
($processResult['mail_success_count'] ?? 0) + ($processResult['queue_success_count'] ?? 0),
|
||
($processResult['mail_error_count'] ?? 0) + ($processResult['queue_error_count'] ?? 0)
|
||
);
|
||
|
||
Log::error('SHJ-12 未払い者通知処理エラー', [
|
||
'error' => $processResult['message'],
|
||
'details' => $processResult['details'] ?? null
|
||
]);
|
||
|
||
return self::FAILURE;
|
||
}
|
||
|
||
} catch (\Exception $e) {
|
||
$this->error('SHJ-12 未払い者通知処理で予期しないエラーが発生しました: ' . $e->getMessage());
|
||
|
||
// 例外時のバッチログ作成(SHJ-8仕様に合わせ job_name と status_comment を追加)
|
||
$this->shjTwelveService->createBatchLog(
|
||
'error',
|
||
[
|
||
'job_name' => 'SHJ-12未払い者アラート',
|
||
'status_comment' => 'システムエラー'
|
||
],
|
||
'システムエラー: ' . $e->getMessage(),
|
||
0,
|
||
0,
|
||
1
|
||
);
|
||
|
||
Log::error('SHJ-12 未払い者通知処理例外エラー', [
|
||
'exception' => $e->getMessage(),
|
||
'trace' => $e->getTraceAsString()
|
||
]);
|
||
|
||
return self::FAILURE;
|
||
}
|
||
}
|
||
}
|