so-manager-dev.com/app/Jobs/ProcessSettlementJob.php
Your Name 10a917b556
All checks were successful
Deploy so-manager (auto) / deploy (push) Successful in 24s
【更新】SHJ関連の修正
2025-10-10 19:55:46 +09:00

143 lines
4.2 KiB
PHP

<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use App\Services\ShjFourBService;
/**
* SHJ-4B 決済トランザクション処理ジョブ
*
* SHJ-4Aで登録された決済情報を基に定期契約の更新処理を行う
*/
class ProcessSettlementJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* ジョブの実行可能回数
*
* @var int
*/
public $tries = 3;
/**
* ジョブの実行間隔(秒)
*
* @var array
*/
public $backoff = [60, 300, 900];
/**
* 使用するキュー名
*
* @var string
*/
public $queue = 'settlement';
/**
* 決済トランザクションID
*
* @var int
*/
protected $settlementTransactionId;
/**
* 追加のコンテキスト情報
*
* @var array
*/
protected $context;
/**
* コンストラクタ
*
* @param int $settlementTransactionId 決済トランザクションID
* @param array $context 追加のコンテキスト情報
*/
public function __construct(int $settlementTransactionId, array $context = [])
{
$this->settlementTransactionId = $settlementTransactionId;
$this->context = $context;
}
/**
* ジョブを実行
*
* SHJ-4Bサービスを使用して決済トランザクション処理を実行
*
* @return void
*/
public function handle()
{
$startTime = now();
try {
Log::info('SHJ-4B ProcessSettlementJob開始', [
'settlement_transaction_id' => $this->settlementTransactionId,
'context' => $this->context,
'start_time' => $startTime,
]);
// SHJ-4Bサービスを使用して決済トランザクション処理を実行
// バッチログはShjFourBServiceが自動的にSHJ-8経由で作成
$shjFourBService = app(ShjFourBService::class);
$result = $shjFourBService->processSettlementTransaction(
$this->settlementTransactionId,
$this->context
);
// 処理結果のログ記録
if ($result['success']) {
Log::info('SHJ-4B ProcessSettlementJob完了', [
'settlement_transaction_id' => $this->settlementTransactionId,
'execution_time' => now()->diffInSeconds($startTime),
'result' => $result,
]);
} else {
// ビジネスロジック上の問題(エラーではない)
Log::warning('SHJ-4B ProcessSettlementJob要手動対応', [
'settlement_transaction_id' => $this->settlementTransactionId,
'result' => $result,
]);
}
} catch (\Throwable $e) {
Log::error('SHJ-4B ProcessSettlementJob失敗', [
'settlement_transaction_id' => $this->settlementTransactionId,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
// エラー時もShjFourBServiceが自動的にバッチログを作成
// ジョブを失敗させて再試行を促す
throw $e;
}
}
/**
* ジョブが失敗した場合の処理
*
* @param \Throwable $exception
* @return void
*/
public function failed(\Throwable $exception)
{
Log::error('SHJ-4B ProcessSettlementJob最終失敗', [
'settlement_transaction_id' => $this->settlementTransactionId,
'context' => $this->context,
'error' => $exception->getMessage(),
'attempts' => $this->attempts(),
]);
// バッチログはShjFourBServiceが既に作成済み
// 最終失敗時の追加処理があればここに記述
// 例:管理者への通知、障害キューへの登録など
}
}