diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index 9b6de1a..bc490e0 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -105,6 +105,26 @@ class PlatformOrderController extends Controller ->count(), 'total_payable_amount' => (float) ((clone $baseQuery)->sum('payable_amount') ?: 0), 'total_paid_amount' => (float) ((clone $baseQuery)->sum('paid_amount') ?: 0), + 'syncable_orders' => (clone $baseQuery) + ->where('payment_status', 'paid') + ->where('status', 'activated') + ->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL") + ->count(), + 'batch_synced_24h_orders' => (function () use ($baseQuery) { + $since = now()->subHours(24)->format('Y-m-d H:i:s'); + + $q = (clone $baseQuery) + ->whereRaw("JSON_EXTRACT(meta, '$.batch_activation.at') IS NOT NULL"); + + $driver = $q->getQuery()->getConnection()->getDriverName(); + if ($driver === 'sqlite') { + $q->whereRaw("JSON_EXTRACT(meta, '$.batch_activation.at') >= ?", [$since]); + } else { + $q->whereRaw("JSON_UNQUOTE(JSON_EXTRACT(meta, '$.batch_activation.at')) >= ?", [$since]); + } + + return $q->count(); + })(), ], 'failedReasonStats' => $failedReasonStats, ]); diff --git a/resources/views/admin/platform_orders/index.blade.php b/resources/views/admin/platform_orders/index.blade.php index 92fc3e7..dbf4c46 100644 --- a/resources/views/admin/platform_orders/index.blade.php +++ b/resources/views/admin/platform_orders/index.blade.php @@ -69,6 +69,16 @@

同步失败数

{{ $summaryStats['failed_sync_orders'] ?? 0 }}
+
+

可同步订单

+
{{ $summaryStats['syncable_orders'] ?? 0 }}
+
已支付 + 已生效 + 未同步
+
+
+

近24小时批量同步

+
{{ $summaryStats['batch_synced_24h_orders'] ?? 0 }}
+
基于 meta.batch_activation.at
+

同步失败原因 TOP5

@php $failedReasonStats = $failedReasonStats ?? []; @endphp diff --git a/tests/Feature/AdminPlatformOrderTest.php b/tests/Feature/AdminPlatformOrderTest.php index 3100587..a9b79c1 100644 --- a/tests/Feature/AdminPlatformOrderTest.php +++ b/tests/Feature/AdminPlatformOrderTest.php @@ -32,7 +32,9 @@ class AdminPlatformOrderTest extends TestCase ->assertSee('筛选条件') ->assertSee('平台订单列表') ->assertSee('最近批量同步') - ->assertSee('最近24小时批量同步过'); + ->assertSee('最近24小时批量同步过') + ->assertSee('可同步订单') + ->assertSee('近24小时批量同步'); } public function test_guest_cannot_open_platform_orders_page(): void