From 2d67c167ed0da295a021ec035c28ed5ee3c8690b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Sun, 15 Mar 2026 06:14:52 +0000 Subject: [PATCH] platform orders: add renewal missing subscription governance card --- .../Admin/PlatformOrderController.php | 11 +++++++ .../admin/platform_orders/index.blade.php | 8 +++++ ...MissingSubscriptionSummaryCardLinkTest.php | 31 +++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 tests/Feature/AdminPlatformOrderRenewalMissingSubscriptionSummaryCardLinkTest.php diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index 83218bd..50245cd 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -255,6 +255,8 @@ class PlatformOrderController extends Controller 'bmpa_error_keyword' => trim((string) $request->query('bmpa_error_keyword', '')), // 只看“可同步订阅”的订单:已支付 + 已生效 + 未同步(用于运营快速处理) 'syncable_only' => (string) $request->query('syncable_only', ''), + // 只看“续费但未绑定订阅”的脏数据(可治理) + 'renewal_missing_subscription' => (string) $request->query('renewal_missing_subscription', ''), // 只看最近 24 小时批量同步过的订单(可治理追踪) 'batch_synced_24h' => (string) $request->query('batch_synced_24h', ''), // 只看最近 24 小时批量“标记支付并生效(BMPA)”过的订单(可治理追踪) @@ -420,6 +422,10 @@ class PlatformOrderController extends Controller ->orWhereNotNull('site_subscription_id'); }) ->count(), + 'renewal_missing_subscription_orders' => (clone $baseQuery) + ->where('order_type', 'renewal') + ->whereNull('site_subscription_id') + ->count(), 'batch_synced_24h_orders' => (function () use ($baseQuery) { $since = now()->subHours(24)->format('Y-m-d H:i:s'); @@ -2112,6 +2118,11 @@ class PlatformOrderController extends Controller ->orWhereNotNull('site_subscription_id'); }); }) + ->when(($filters['renewal_missing_subscription'] ?? '') !== '', function (Builder $builder) { + // 只看“续费但未绑定订阅”的脏数据(可治理) + $builder->where('order_type', 'renewal') + ->whereNull('site_subscription_id'); + }) ->when(($filters['batch_synced_24h'] ?? '') !== '', function (Builder $builder) { // 只看最近 24 小时批量同步过的订单(基于 meta.batch_activation.at) $since = now()->subHours(24)->format('Y-m-d H:i:s'); diff --git a/resources/views/admin/platform_orders/index.blade.php b/resources/views/admin/platform_orders/index.blade.php index bc3cf35..90a03fd 100644 --- a/resources/views/admin/platform_orders/index.blade.php +++ b/resources/views/admin/platform_orders/index.blade.php @@ -419,6 +419,14 @@
已支付 + 已生效 + 未同步(续费单需已绑定订阅)
+
+

续费缺订阅

+ +
renewal + site_subscription_id 为空(需治理)
+
+

近24小时批量同步

diff --git a/tests/Feature/AdminPlatformOrderRenewalMissingSubscriptionSummaryCardLinkTest.php b/tests/Feature/AdminPlatformOrderRenewalMissingSubscriptionSummaryCardLinkTest.php new file mode 100644 index 0000000..3d0de87 --- /dev/null +++ b/tests/Feature/AdminPlatformOrderRenewalMissingSubscriptionSummaryCardLinkTest.php @@ -0,0 +1,31 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_platform_orders_page_shows_renewal_missing_subscription_summary_card_link(): void + { + $this->loginAsPlatformAdmin(); + + $this->get('/admin/platform-orders') + ->assertOk() + ->assertSee('续费缺订阅') + ->assertSee('renewal_missing_subscription=1'); + } +}