diff --git a/app/Logic/ReceiptIssuingOrder/ReceiptIssuingOrderManager.php b/app/Logic/ReceiptIssuingOrder/ReceiptIssuingOrderManager.php index 1ffa736..f7351fd 100644 --- a/app/Logic/ReceiptIssuingOrder/ReceiptIssuingOrderManager.php +++ b/app/Logic/ReceiptIssuingOrder/ReceiptIssuingOrderManager.php @@ -10,6 +10,7 @@ use App\Exceptions\ExclusiveException; use App\Features\InstanceAble; use App\Features\LoginUser; use App\Models\ReceiptIssuingOrder; +use App\Models\ReceiptIssuingOrderSeqNumber; use App\Models\User; use App\Util\DateUtil; use Illuminate\Support\Carbon; @@ -200,10 +201,29 @@ abstract class ReceiptIssuingOrderManager return $this; } + protected function fillSeqNumber(): static + { + if ($this->order->seq_number !== null) { + return $this; + } + + $seq = ReceiptIssuingOrderSeqNumber::lockForUpdate()->first(); + if (!($seq instanceof ReceiptIssuingOrderSeqNumber)) { + throw new AppCommonException("通番取得失敗"); + } + $seq->seq_number++; + $this->order->seq_number = $seq->seq_number; + $seq->save(); + + return $this; + } + protected function save(): static { $this->setStatus() - ->updateCheck(); + ->updateCheck() + ->fillSeqNumber(); + $this->order->save(); return $this; } diff --git a/app/Models/ReceiptIssuingOrder.php b/app/Models/ReceiptIssuingOrder.php index bf3dd56..d02ac67 100644 --- a/app/Models/ReceiptIssuingOrder.php +++ b/app/Models/ReceiptIssuingOrder.php @@ -55,6 +55,7 @@ class ReceiptIssuingOrder extends AppModel const COL_NAME_ACCEPT_PRIVACY_POLICY = "accept_privacy_policy"; const COL_NAME_ACCEPT_CORRECT_ENTRY = "accept_correct_entry"; const COL_NAME_ACCEPT_SITE_POLICY = "accept_site_policy"; + const COL_NAME_SEQ_NUMBER = "seq_number"; protected $casts = [ self::COL_NAME_ORDER_DATETIME => 'datetime', diff --git a/app/Models/ReceiptIssuingOrderSeqNumber.php b/app/Models/ReceiptIssuingOrderSeqNumber.php new file mode 100644 index 0000000..2a0a279 --- /dev/null +++ b/app/Models/ReceiptIssuingOrderSeqNumber.php @@ -0,0 +1,21 @@ +bigInteger("seq_number", false, true)->nullable()->comment("通番"); + }); + Schema::table('receipt_issuing_order_histories', function (Blueprint $table) { + $table->bigInteger("seq_number", false, true)->nullable()->comment("通番"); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('receipt_issuing_orders', function (Blueprint $table) { + $table->dropColumn("seq_number"); + }); + Schema::table('receipt_issuing_order_histories', function (Blueprint $table) { + $table->dropColumn("seq_number"); + }); + } +}; diff --git a/database/migrations/2023_08_01_163700_create_receipt_issuing_order_seq_numbers_table.php b/database/migrations/2023_08_01_163700_create_receipt_issuing_order_seq_numbers_table.php new file mode 100644 index 0000000..18561b1 --- /dev/null +++ b/database/migrations/2023_08_01_163700_create_receipt_issuing_order_seq_numbers_table.php @@ -0,0 +1,43 @@ +schema()); + + ReceiptIssuingOrderSeqNumber::create([ + ReceiptIssuingOrderSeqNumber::COL_NAME_SEQ_NUMBER => 0, + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('receipt_issuing_order_seq_numbers'); + } + + private function schema() + { + + return function (Blueprint $table, MigrationHelper $helper) { + $helper->baseColumn(); + $table->string('seq_number')->comment("通番"); + }; + } +};