feat(admin): subscription show filter related orders by sync status
This commit is contained in:
@@ -21,32 +21,60 @@ class SiteSubscriptionController extends Controller
|
||||
|
||||
$subscription->loadMissing(['merchant', 'plan']);
|
||||
|
||||
$platformOrdersQuery = PlatformOrder::query()
|
||||
$baseOrdersQuery = PlatformOrder::query()
|
||||
->where('site_subscription_id', $subscription->id);
|
||||
|
||||
$platformOrders = (clone $platformOrdersQuery)
|
||||
// 可治理摘要:订阅下的订单同步情况(基于全量关联订单,不受页面筛选影响)
|
||||
$summaryStats = [
|
||||
'total_orders' => (clone $baseOrdersQuery)->count(),
|
||||
'synced_orders' => (clone $baseOrdersQuery)
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NOT NULL")
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NULL")
|
||||
->count(),
|
||||
'failed_orders' => (clone $baseOrdersQuery)
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NOT NULL")
|
||||
->count(),
|
||||
'unsynced_orders' => (clone $baseOrdersQuery)
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL")
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NULL")
|
||||
->count(),
|
||||
'syncable_orders' => (clone $baseOrdersQuery)
|
||||
->where('payment_status', 'paid')
|
||||
->where('status', 'activated')
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL")
|
||||
->count(),
|
||||
];
|
||||
|
||||
// 页面列表筛选:仅影响“关联平台订单”列表展示,不影响摘要统计
|
||||
$orderSyncStatus = trim((string) $request->query('order_sync_status', ''));
|
||||
|
||||
$displayOrdersQuery = (clone $baseOrdersQuery);
|
||||
if ($orderSyncStatus === 'synced') {
|
||||
$displayOrdersQuery
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NOT NULL")
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NULL");
|
||||
} elseif ($orderSyncStatus === 'failed') {
|
||||
$displayOrdersQuery
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NOT NULL");
|
||||
} elseif ($orderSyncStatus === 'unsynced') {
|
||||
$displayOrdersQuery
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL")
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NULL");
|
||||
} elseif ($orderSyncStatus === 'syncable') {
|
||||
$displayOrdersQuery
|
||||
->where('payment_status', 'paid')
|
||||
->where('status', 'activated')
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL");
|
||||
}
|
||||
|
||||
$platformOrders = $displayOrdersQuery
|
||||
->latest('id')
|
||||
->paginate(10)
|
||||
->withQueryString();
|
||||
|
||||
// 可治理摘要:订阅下的订单同步情况
|
||||
$summaryStats = [
|
||||
'total_orders' => (clone $platformOrdersQuery)->count(),
|
||||
'synced_orders' => (clone $platformOrdersQuery)
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NOT NULL")
|
||||
->count(),
|
||||
'failed_orders' => (clone $platformOrdersQuery)
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NOT NULL")
|
||||
->count(),
|
||||
'unsynced_orders' => (clone $platformOrdersQuery)
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL")
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NULL")
|
||||
->count(),
|
||||
'syncable_orders' => (clone $platformOrdersQuery)
|
||||
->where('payment_status', 'paid')
|
||||
->where('status', 'activated')
|
||||
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL")
|
||||
->count(),
|
||||
$summaryStats = $summaryStats + [
|
||||
'current_order_sync_status' => $orderSyncStatus,
|
||||
];
|
||||
|
||||
$endsAt = $subscription->ends_at;
|
||||
|
||||
Reference in New Issue
Block a user