diff --git a/app/Http/Controllers/Admin/SiteSubscriptionController.php b/app/Http/Controllers/Admin/SiteSubscriptionController.php index 006028c..a373993 100644 --- a/app/Http/Controllers/Admin/SiteSubscriptionController.php +++ b/app/Http/Controllers/Admin/SiteSubscriptionController.php @@ -45,6 +45,25 @@ class SiteSubscriptionController extends Controller ->count(), ]; + // 同步失败原因聚合(Top3):订阅维度快速判断“常见失败原因” + $failedReasonRows = (clone $baseOrdersQuery) + ->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NOT NULL") + ->selectRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') as reason, count(*) as cnt") + ->groupBy('reason') + ->orderByDesc('cnt') + ->limit(3) + ->get(); + + $failedReasonStats = $failedReasonRows->map(function ($row) { + $reason = (string) ($row->reason ?? ''); + $reason = trim($reason, "\" "); + + return [ + 'reason' => $reason !== '' ? $reason : '(空)', + 'count' => (int) ($row->cnt ?? 0), + ]; + })->values()->all(); + // 页面列表筛选:仅影响“关联平台订单”列表展示,不影响摘要统计 $orderSyncStatus = trim((string) $request->query('order_sync_status', '')); @@ -93,6 +112,7 @@ class SiteSubscriptionController extends Controller 'subscription' => $subscription, 'platformOrders' => $platformOrders, 'summaryStats' => $summaryStats, + 'failedReasonStats' => $failedReasonStats, 'statusLabels' => $this->statusLabels(), 'expiryLabel' => $expiryLabel, ]); diff --git a/resources/views/admin/site_subscriptions/show.blade.php b/resources/views/admin/site_subscriptions/show.blade.php index 4ce8d7e..22982cc 100644 --- a/resources/views/admin/site_subscriptions/show.blade.php +++ b/resources/views/admin/site_subscriptions/show.blade.php @@ -115,6 +115,20 @@
{{ $summaryStats['unsynced_orders'] ?? 0 }}
无 activation 且无 error
+ +
+

失败原因Top3

+ @php $failedReasonStats = $failedReasonStats ?? []; @endphp + @if(count($failedReasonStats) > 0) +
+ @foreach($failedReasonStats as $item) +
{{ $item['reason'] }} ({{ $item['count'] }})
+ @endforeach +
+ @else +
暂无失败原因聚合数据
+ @endif +
diff --git a/tests/Feature/AdminSiteSubscriptionShowTest.php b/tests/Feature/AdminSiteSubscriptionShowTest.php index 1a77bcc..48d1503 100644 --- a/tests/Feature/AdminSiteSubscriptionShowTest.php +++ b/tests/Feature/AdminSiteSubscriptionShowTest.php @@ -90,6 +90,7 @@ class AdminSiteSubscriptionShowTest extends TestCase ->assertSee('关联订单总数') ->assertSee('可同步(已支付+已生效+未同步)') ->assertSee('未同步(无记录)') + ->assertSee('失败原因Top3') ->assertSee('关联平台订单') ->assertSee('PO_SUB_SHOW_0001') ->assertSee('同步时间')