perf(admin): platform orders list read batch_activation first
This commit is contained in:
@@ -105,6 +105,26 @@ class PlatformOrderController extends Controller
|
|||||||
->count(),
|
->count(),
|
||||||
'total_payable_amount' => (float) ((clone $baseQuery)->sum('payable_amount') ?: 0),
|
'total_payable_amount' => (float) ((clone $baseQuery)->sum('payable_amount') ?: 0),
|
||||||
'total_paid_amount' => (float) ((clone $baseQuery)->sum('paid_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,
|
'failedReasonStats' => $failedReasonStats,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -69,6 +69,16 @@
|
|||||||
<h3>同步失败数</h3>
|
<h3>同步失败数</h3>
|
||||||
<div class="metric-number">{{ $summaryStats['failed_sync_orders'] ?? 0 }}</div>
|
<div class="metric-number">{{ $summaryStats['failed_sync_orders'] ?? 0 }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<h3>可同步订单</h3>
|
||||||
|
<div class="metric-number">{{ $summaryStats['syncable_orders'] ?? 0 }}</div>
|
||||||
|
<div class="muted muted-xs">已支付 + 已生效 + 未同步</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<h3>近24小时批量同步</h3>
|
||||||
|
<div class="metric-number">{{ $summaryStats['batch_synced_24h_orders'] ?? 0 }}</div>
|
||||||
|
<div class="muted muted-xs">基于 meta.batch_activation.at</div>
|
||||||
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3>同步失败原因 TOP5</h3>
|
<h3>同步失败原因 TOP5</h3>
|
||||||
@php $failedReasonStats = $failedReasonStats ?? []; @endphp
|
@php $failedReasonStats = $failedReasonStats ?? []; @endphp
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ class AdminPlatformOrderTest extends TestCase
|
|||||||
->assertSee('筛选条件')
|
->assertSee('筛选条件')
|
||||||
->assertSee('平台订单列表')
|
->assertSee('平台订单列表')
|
||||||
->assertSee('最近批量同步')
|
->assertSee('最近批量同步')
|
||||||
->assertSee('最近24小时批量同步过');
|
->assertSee('最近24小时批量同步过')
|
||||||
|
->assertSee('可同步订单')
|
||||||
|
->assertSee('近24小时批量同步');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_guest_cannot_open_platform_orders_page(): void
|
public function test_guest_cannot_open_platform_orders_page(): void
|
||||||
|
|||||||
Reference in New Issue
Block a user