From bdea18c976ea56c5a014e3223f3976ce33b293fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Sun, 15 Mar 2026 02:03:04 +0000 Subject: [PATCH] PlatformOrder store: require subscription for renewal orders --- .../Admin/PlatformOrderController.php | 11 ++-- ...formOrderCreateDefaultsPreselectedTest.php | 3 +- ...houldRequireSubscriptionForRenewalTest.php | 54 +++++++++++++++++++ 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 tests/Feature/AdminPlatformOrderStoreShouldRequireSubscriptionForRenewalTest.php diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index 6c876a9..ed7de7b 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -78,8 +78,7 @@ class PlatformOrderController extends Controller 'plans' => $plans, 'siteSubscription' => $siteSubscription, 'billingCycleLabels' => $this->billingCycleLabels(), - // order_type label 映射已下沉到 PlatformOrder::orderTypeLabel();这里不再透传 orderTypeLabels - // 'orderTypeLabels' => $this->orderTypeLabels(), + 'orderTypeLabels' => $this->orderTypeLabels(), 'defaults' => $defaults, ]); } @@ -91,7 +90,13 @@ class PlatformOrderController extends Controller $data = $request->validate([ 'merchant_id' => ['required', 'integer', 'exists:merchants,id'], 'plan_id' => ['required', 'integer', 'exists:plans,id'], - 'site_subscription_id' => ['nullable', 'integer', 'exists:site_subscriptions,id'], + // 治理口径:续费单必须绑定订阅(否则无法做到“续期/延长到期”这一核心闭环) + 'site_subscription_id' => [ + Rule::requiredIf(fn () => (string) $request->input('order_type') === 'renewal'), + 'nullable', + 'integer', + 'exists:site_subscriptions,id', + ], 'order_type' => ['required', Rule::in(array_keys($this->orderTypeLabels()))], 'quantity' => ['required', 'integer', 'min:1', 'max:120'], 'discount_amount' => ['nullable', 'numeric', 'min:0'], diff --git a/tests/Feature/AdminPlatformOrderCreateDefaultsPreselectedTest.php b/tests/Feature/AdminPlatformOrderCreateDefaultsPreselectedTest.php index 4e4acb0..3e75b07 100644 --- a/tests/Feature/AdminPlatformOrderCreateDefaultsPreselectedTest.php +++ b/tests/Feature/AdminPlatformOrderCreateDefaultsPreselectedTest.php @@ -68,7 +68,8 @@ class AdminPlatformOrderCreateDefaultsPreselectedTest extends TestCase // 预选 merchant/plan/order_type $res->assertSee('