From 6800ee3d596bb8580c5414696a73811cad4b0cc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Tue, 10 Mar 2026 20:48:01 +0000 Subject: [PATCH] feat(admin): platform orders add reconciliation delta card --- .../Admin/PlatformOrderController.php | 58 +++++++++---------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/Admin/PlatformOrderController.php b/app/Http/Controllers/Admin/PlatformOrderController.php index c1cc85e..1c3ce10 100644 --- a/app/Http/Controllers/Admin/PlatformOrderController.php +++ b/app/Http/Controllers/Admin/PlatformOrderController.php @@ -166,6 +166,28 @@ class PlatformOrderController extends Controller ]; })->values()->all(); + // 运营摘要中的 meta 汇总(refund/payment)需要遍历订单 meta。 + // 为避免重复 get(),在当前筛选范围内一次性拉取所需字段。 + $metaOrders = (clone $baseQuery)->get(['id', 'paid_amount', 'meta']); + $totalRefundedAmount = (float) $metaOrders->sum(function ($o) { + // 优先读 meta.refund_summary.total_amount,回退汇总 meta.refund_receipts[].amount + $total = (float) (data_get($o->meta, 'refund_summary.total_amount') ?? 0); + if ($total > 0) { + return $total; + } + + $refunds = (array) (data_get($o->meta, 'refund_receipts', []) ?? []); + $sum = 0.0; + foreach ($refunds as $r) { + $sum += (float) (data_get($r, 'amount') ?? 0); + } + return $sum; + }); + + $totalReceiptAmount = (float) $this->sumReceiptAmount($metaOrders); + $totalPayableAmount = (float) ((clone $baseQuery)->sum('payable_amount') ?: 0); + $totalPaidAmount = (float) ((clone $baseQuery)->sum('paid_amount') ?: 0); + return view('admin.platform_orders.index', [ 'orders' => $orders, 'filters' => $filters, @@ -207,8 +229,8 @@ class PlatformOrderController extends Controller ->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation.subscription_id') IS NULL") ->whereRaw("JSON_EXTRACT(meta, '$.subscription_activation_error.message') IS NULL") ->count(), - 'total_payable_amount' => (float) ((clone $baseQuery)->sum('payable_amount') ?: 0), - 'total_paid_amount' => (float) ((clone $baseQuery)->sum('paid_amount') ?: 0), + 'total_payable_amount' => $totalPayableAmount, + 'total_paid_amount' => $totalPaidAmount, 'syncable_orders' => (clone $baseQuery) ->where('payment_status', 'paid') ->where('status', 'activated') @@ -246,37 +268,11 @@ class PlatformOrderController extends Controller })(), 'partially_refunded_orders' => (clone $baseQuery)->where('payment_status', 'partially_refunded')->count(), 'refunded_orders' => (clone $baseQuery)->where('payment_status', 'refunded')->count(), - 'total_refunded_amount' => (clone $baseQuery)->get()->sum(function ($o) { - // 优先读 meta.refund_summary.total_amount,回退汇总 meta.refund_receipts[].amount - $total = (float) (data_get($o->meta, 'refund_summary.total_amount') ?? 0); - if ($total > 0) { - return $total; - } - - $refunds = (array) (data_get($o->meta, 'refund_receipts', []) ?? []); - $sum = 0.0; - foreach ($refunds as $r) { - $sum += (float) (data_get($r, 'amount') ?? 0); - } - return $sum; - }), + 'total_refunded_amount' => $totalRefundedAmount, '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; - }), + 'total_receipt_amount' => $totalReceiptAmount, // 对账差额:回执总额 - 订单已付总额(当前筛选范围) - 'reconciliation_delta' => (float) ($this->sumReceiptAmount((clone $baseQuery)->get()) - (float) ((clone $baseQuery)->sum('paid_amount') ?: 0)), + 'reconciliation_delta' => (float) ($totalReceiptAmount - $totalPaidAmount), 'reconciliation_delta_note' => '回执总额 - 订单已付总额', ], 'failedReasonStats' => $failedReasonStats,