From 4c010711b69982a58d2766ad1ce405b69778e404 Mon Sep 17 00:00:00 2001 From: "sosuke.iwabuchi" Date: Thu, 30 Nov 2023 14:13:13 +0900 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E7=B4=84=E5=AE=8C=E4=BA=86=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SeasonTicketContractTerminateComplete.php | 108 ++++++++++++++++++ app/Console/Kernel.php | 1 + .../SeasonTicketContractTerminateComplete.php | 17 +++ app/Email/Members/TerminateOrderComplete.php | 7 +- 4 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 app/Console/Commands/SeasonTicketContractTerminateComplete.php create mode 100644 app/Console/Schedules/SeasonTicketContractTerminateComplete.php diff --git a/app/Console/Commands/SeasonTicketContractTerminateComplete.php b/app/Console/Commands/SeasonTicketContractTerminateComplete.php new file mode 100644 index 0000000..3f3b6d4 --- /dev/null +++ b/app/Console/Commands/SeasonTicketContractTerminateComplete.php @@ -0,0 +1,108 @@ + + */ + private Collection $managers; + /** + * Create a new command instance. + * + * @return void + */ + public function __construct() + { + parent::__construct(); + $this->managers = collect(); + } + + /** + * Execute the console command. + * + * @return int + */ + public function service(): int + { + try { + $db = DBUtil::instance(); + $db->beginTransaction(); + + $targets = $this->getTargets(); + + $this->outputInfo(sprintf("取得対象 %d件", $targets->count())); + + // データハンドリング + foreach ($targets as $data) { + $this->handleData($data); + } + + // コミット + $this->commit(); + + $db->commit(); + } catch (Exception $e) { + $db->rollBack(); + throw $e; + } + + return self::RESULTCODE_SUCCESS; + } + + private function getTargets() + { + $access = SeasonTicketContract::getAccess(); + $query = SeasonTicketContract::getQuery() + ->where(SeasonTicketContract::FIELD_CONTRACT_END_DATE, DateUtil::now()->setTime(0, 0)); + return $access->all($query); + } + + + private function handleData(SeasonTicketContract $data) + { + $email = new TerminateOrderComplete($data); + $manager = new EmailManager($email); + $this->managers->push($manager); + } + + private function commit() + { + foreach ($this->managers as $manager) { + $manager->confirm(); + } + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 4739ae8..14bf912 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -17,6 +17,7 @@ class Kernel extends ConsoleKernel Schedules\BankAccountRegisterRemaind::register($schedule); Schedules\SeasonTikcetContractSelectionFillCandidates::register($schedule); Schedules\SeasonTikcetContractSelectionSetResult::register($schedule); + Schedules\SeasonTicketContractTerminateComplete::register($schedule); } /** diff --git a/app/Console/Schedules/SeasonTicketContractTerminateComplete.php b/app/Console/Schedules/SeasonTicketContractTerminateComplete.php new file mode 100644 index 0000000..7797743 --- /dev/null +++ b/app/Console/Schedules/SeasonTicketContractTerminateComplete.php @@ -0,0 +1,17 @@ +command(Command::class) + ->at("00:05") + ->description("解約完了通知"); + } +} diff --git a/app/Email/Members/TerminateOrderComplete.php b/app/Email/Members/TerminateOrderComplete.php index fb1d913..db61fc5 100644 --- a/app/Email/Members/TerminateOrderComplete.php +++ b/app/Email/Members/TerminateOrderComplete.php @@ -11,11 +11,10 @@ class TerminateOrderComplete extends Members public function __construct( private SeasonTicketContract $seasonTicketContract, - private TerminateApplication $app, ?Customer $customer = null, ) { if ($customer === null) { - $customer = $app->getCustomer(); + $customer = $seasonTicketContract->getCustomer(); } parent::__construct($customer); } @@ -33,9 +32,9 @@ class TerminateOrderComplete extends Members public function getMemberParams(): array { return [ - 'parking_name' => $this->app->parkingName, + 'parking_name' => $this->seasonTicketContract->parkingName, 'vehicle_no' => $this->seasonTicketContract->vehicleNo, - 'terminate_date' => $this->app->terminateDate->format('Y/m/d'), + 'terminate_date' => $this->seasonTicketContract->contractEndDate->format('Y/m/d'), ]; } }