177 lines
6.4 KiB
PHP
177 lines
6.4 KiB
PHP
<?php
|
||
|
||
namespace App\Console\Commands;
|
||
|
||
use Illuminate\Console\Command;
|
||
use Illuminate\Support\Facades\Log;
|
||
use App\Services\ShjMailSendService;
|
||
|
||
/**
|
||
* SHJ メール送信処理コマンド
|
||
*
|
||
* メールテンプレートを使用したメール送信処理を実行する
|
||
* バックグラウンドで実行される定期バッチ処理
|
||
*/
|
||
class ShjMailSendCommand extends Command
|
||
{
|
||
/**
|
||
* コンソールコマンドの名前とシグネチャ
|
||
*
|
||
* 引数:
|
||
* - mail_address: メールアドレス (必須)
|
||
* - backup_mail_address: 予備メールアドレス (必須)
|
||
* - mail_template_id: メールテンプレートID (必須)
|
||
*
|
||
* @var string
|
||
*/
|
||
protected $signature = 'shj:mail-send {mail_address : メールアドレス} {backup_mail_address : 予備メールアドレス} {mail_template_id : メールテンプレートID}';
|
||
|
||
/**
|
||
* コンソールコマンドの説明
|
||
*
|
||
* @var string
|
||
*/
|
||
protected $description = 'SHJ メール送信処理 - テンプレートに基づくメール送信を実行';
|
||
|
||
/**
|
||
* SHJメール送信サービスクラス
|
||
*
|
||
* @var ShjMailSendService
|
||
*/
|
||
protected $shjMailSendService;
|
||
|
||
/**
|
||
* コンストラクタ
|
||
*
|
||
* @param ShjMailSendService $shjMailSendService
|
||
*/
|
||
public function __construct(ShjMailSendService $shjMailSendService)
|
||
{
|
||
parent::__construct();
|
||
$this->shjMailSendService = $shjMailSendService;
|
||
}
|
||
|
||
/**
|
||
* コンソールコマンドを実行
|
||
*
|
||
* 処理フロー:
|
||
* 1. 入力パラメーターをチェックする
|
||
* 2. メール送信テンプレート情報を取得する
|
||
* 3. メールを送信する
|
||
* 4. 処理結果を返却する
|
||
*
|
||
* @return int
|
||
*/
|
||
public function handle()
|
||
{
|
||
try {
|
||
// 開始ログ出力
|
||
$startTime = now();
|
||
$this->info('SHJ メール送信処理を開始します。');
|
||
Log::info('SHJ メール送信処理開始', [
|
||
'start_time' => $startTime,
|
||
'mail_address' => $this->argument('mail_address'),
|
||
'backup_mail_address' => $this->argument('backup_mail_address'),
|
||
'mail_template_id' => $this->argument('mail_template_id')
|
||
]);
|
||
|
||
// 引数取得
|
||
$mailAddress = $this->argument('mail_address');
|
||
$backupMailAddress = $this->argument('backup_mail_address');
|
||
$mailTemplateId = $this->argument('mail_template_id');
|
||
|
||
// 【処理1】パラメータ検証
|
||
if (!$this->validateParameters($mailAddress, $backupMailAddress, $mailTemplateId)) {
|
||
$this->error('パラメータが不正です。');
|
||
return self::FAILURE;
|
||
}
|
||
|
||
// SHJメール送信処理実行
|
||
$result = $this->shjMailSendService->executeMailSend($mailAddress, $backupMailAddress, $mailTemplateId);
|
||
|
||
// 処理結果確認
|
||
if ($result['success']) {
|
||
$endTime = now();
|
||
$this->info('SHJ メール送信処理が正常に完了しました。');
|
||
$this->info("処理時間: {$startTime->diffInSeconds($endTime)}秒");
|
||
|
||
Log::info('SHJ メール送信処理完了', [
|
||
'end_time' => $endTime,
|
||
'duration_seconds' => $startTime->diffInSeconds($endTime),
|
||
'result' => $result
|
||
]);
|
||
|
||
return self::SUCCESS;
|
||
} else {
|
||
$this->error('SHJ メール送信処理でエラーが発生しました: ' . $result['message']);
|
||
Log::error('SHJ メール送信処理エラー', [
|
||
'error' => $result['message'],
|
||
'details' => $result['details'] ?? null
|
||
]);
|
||
|
||
return self::FAILURE;
|
||
}
|
||
|
||
} catch (\Exception $e) {
|
||
$this->error('SHJ メール送信処理で予期しないエラーが発生しました: ' . $e->getMessage());
|
||
Log::error('SHJ メール送信処理例外エラー', [
|
||
'exception' => $e->getMessage(),
|
||
'trace' => $e->getTraceAsString()
|
||
]);
|
||
|
||
return self::FAILURE;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 【処理1】パラメータの妥当性を検証
|
||
*
|
||
* 仕様書に基づく検証内容:
|
||
* - メールアドレス: 「メールアドレス」「予備メールアドレス」いずれか必須
|
||
* - メールテンプレートID: 必須
|
||
*
|
||
* @param mixed $mailAddress メールアドレス
|
||
* @param mixed $backupMailAddress 予備メールアドレス
|
||
* @param mixed $mailTemplateId メールテンプレートID
|
||
* @return bool 検証結果
|
||
*/
|
||
private function validateParameters($mailAddress, $backupMailAddress, $mailTemplateId): bool
|
||
{
|
||
// メールテンプレートIDチェック
|
||
if (empty($mailTemplateId)) {
|
||
$this->error('メールテンプレートIDは必須です。');
|
||
return false;
|
||
}
|
||
|
||
// 数値形式チェック(メールテンプレートID)
|
||
if (!is_numeric($mailTemplateId)) {
|
||
$this->error('メールテンプレートIDは数値である必要があります。');
|
||
return false;
|
||
}
|
||
|
||
// 正の整数チェック(メールテンプレートID)
|
||
if ($mailTemplateId <= 0) {
|
||
$this->error('メールテンプレートIDは正の整数である必要があります。');
|
||
return false;
|
||
}
|
||
|
||
// メールアドレスチェック(いずれか必須)
|
||
if (empty($mailAddress) && empty($backupMailAddress)) {
|
||
$this->error('メールアドレスまたは予備メールアドレスのいずれかは必須です。');
|
||
return false;
|
||
}
|
||
|
||
// メールアドレス形式チェック
|
||
if (!empty($mailAddress) && !filter_var($mailAddress, FILTER_VALIDATE_EMAIL)) {
|
||
$this->error('メールアドレスの形式が正しくありません。');
|
||
return false;
|
||
}
|
||
|
||
if (!empty($backupMailAddress) && !filter_var($backupMailAddress, FILTER_VALIDATE_EMAIL)) {
|
||
$this->error('予備メールアドレスの形式が正しくありません。');
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
} |