diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index af36161..e485d42 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -260,6 +260,21 @@ class PlatformOrderController extends Controller } return $sum; }), + 'receipt_orders' => (clone $baseQuery)->whereRaw("JSON_EXTRACT(meta, '$.payment_receipts[0].amount') IS NOT NULL")->count(), + 'total_receipt_amount' => (clone $baseQuery)->get()->sum(function ($o) { + // 优先读 meta.payment_summary.total_amount,回退汇总 meta.payment_receipts[].amount + $total = (float) (data_get($o->meta, 'payment_summary.total_amount') ?? 0); + if ($total > 0) { + return $total; + } + + $receipts = (array) (data_get($o->meta, 'payment_receipts', []) ?? []); + $sum = 0.0; + foreach ($receipts as $r) { + $sum += (float) (data_get($r, 'amount') ?? 0); + } + return $sum; + }), ], 'failedReasonStats' => $failedReasonStats, ]); @@ -333,6 +348,21 @@ class PlatformOrderController extends Controller 'admin_id' => $admin->id, ]; data_set($meta, 'payment_receipts', $receipts); + + // 扁平统计:避免在列表/汇总处频繁遍历支付回执数组(可治理) + $totalPaid = 0.0; + foreach ($receipts as $r) { + $totalPaid += (float) (data_get($r, 'amount') ?? 0); + } + $latest = count($receipts) > 0 ? end($receipts) : null; + data_set($meta, 'payment_summary', [ + 'count' => count($receipts), + 'total_amount' => $totalPaid, + 'last_at' => (string) (data_get($latest, 'paid_at') ?? ''), + 'last_amount' => (float) (data_get($latest, 'amount') ?? 0), + 'last_channel' => (string) (data_get($latest, 'channel') ?? ''), + ]); + $order->meta = $meta; } @@ -390,6 +420,21 @@ class PlatformOrderController extends Controller ]; data_set($meta, 'payment_receipts', $receipts); + + // 扁平统计:避免在列表/汇总处频繁遍历支付回执数组(可治理) + $totalPaid = 0.0; + foreach ($receipts as $r) { + $totalPaid += (float) (data_get($r, 'amount') ?? 0); + } + $latest = count($receipts) > 0 ? end($receipts) : null; + data_set($meta, 'payment_summary', [ + 'count' => count($receipts), + 'total_amount' => $totalPaid, + 'last_at' => (string) (data_get($latest, 'paid_at') ?? ''), + 'last_amount' => (float) (data_get($latest, 'amount') ?? 0), + 'last_channel' => (string) (data_get($latest, 'channel') ?? ''), + ]); + $order->meta = $meta; $order->save(); diff --git a/resources/views/admin/platform_orders/index.blade.php b/resources/views/admin/platform_orders/index.blade.php index 2f7f4f3..ede68a0 100644 --- a/resources/views/admin/platform_orders/index.blade.php +++ b/resources/views/admin/platform_orders/index.blade.php @@ -130,6 +130,11 @@