fix(admin-dashboard): paid_pending count aligns with unsynced scope

This commit is contained in:
萝卜
2026-03-16 19:23:42 +08:00
parent 7c318ef59c
commit 763c706cf3
2 changed files with 22 additions and 2 deletions

View File

@@ -55,7 +55,8 @@ class DashboardController extends Controller
'platform_orders_paid_pending' => PlatformOrder::query() 'platform_orders_paid_pending' => PlatformOrder::query()
->where('payment_status', 'paid') ->where('payment_status', 'paid')
->where('status', 'pending') ->where('status', 'pending')
// 口径对齐“待生效”语义:排除明确的同步失败(失败单应该去同步失败治理) // 口径对齐“待生效”语义sync_status=unsynced未同步 + 非失败
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL")
->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NULL") ->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NULL")
->count(), ->count(),
// 可同步沿用平台订单列表口径paid+activated+未同步+无失败),且排除续费缺订阅脏数据 // 可同步沿用平台订单列表口径paid+activated+未同步+无失败),且排除续费缺订阅脏数据

View File

@@ -59,6 +59,25 @@ class AdminDashboardBillingWorkbenchQuickLinksShouldShowCountsTest extends TestC
'paid_amount' => 9, 'paid_amount' => 9,
]); ]);
// 脏数据兜底:即使 status=pending + paid但若 meta 已写入 subscription_activation视为已同步不应计入“待生效(unsynced)”集合。
PlatformOrder::query()->create([
'merchant_id' => $merchantId,
'plan_id' => null,
'site_subscription_id' => null,
'created_by_admin_id' => $platformAdminId ?: null,
'order_no' => 'PO_DASHBOARD_PAID_PENDING_BUT_ALREADY_SYNCED',
'order_type' => 'new_purchase',
'status' => 'pending',
'payment_status' => 'paid',
'payable_amount' => 9,
'paid_amount' => 9,
'meta' => [
'subscription_activation' => [
'subscription_id' => 123,
],
],
]);
PlatformOrder::query()->create([ PlatformOrder::query()->create([
'merchant_id' => $merchantId, 'merchant_id' => $merchantId,
'plan_id' => null, 'plan_id' => null,
@@ -81,7 +100,7 @@ class AdminDashboardBillingWorkbenchQuickLinksShouldShowCountsTest extends TestC
// Debug确保我们构造的数据在 DB 里 // Debug确保我们构造的数据在 DB 里
$this->assertSame(1, PlatformOrder::query()->where('payment_status', 'unpaid')->where('status', 'pending')->count()); $this->assertSame(1, PlatformOrder::query()->where('payment_status', 'unpaid')->where('status', 'pending')->count());
$this->assertSame(2, PlatformOrder::query()->where('payment_status', 'paid')->where('status', 'pending')->count()); $this->assertSame(3, PlatformOrder::query()->where('payment_status', 'paid')->where('status', 'pending')->count());
$res = $this->get('/admin'); $res = $this->get('/admin');
$res->assertOk(); $res->assertOk();