feat(platform-orders): 支付回执扁平统计与列表摘要回执总览
This commit is contained in:
@@ -260,6 +260,21 @@ class PlatformOrderController extends Controller
|
|||||||
}
|
}
|
||||||
return $sum;
|
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,
|
'failedReasonStats' => $failedReasonStats,
|
||||||
]);
|
]);
|
||||||
@@ -333,6 +348,21 @@ class PlatformOrderController extends Controller
|
|||||||
'admin_id' => $admin->id,
|
'admin_id' => $admin->id,
|
||||||
];
|
];
|
||||||
data_set($meta, 'payment_receipts', $receipts);
|
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->meta = $meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,6 +420,21 @@ class PlatformOrderController extends Controller
|
|||||||
];
|
];
|
||||||
|
|
||||||
data_set($meta, 'payment_receipts', $receipts);
|
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->meta = $meta;
|
||||||
$order->save();
|
$order->save();
|
||||||
|
|
||||||
|
|||||||
@@ -130,6 +130,11 @@
|
|||||||
<div class="metric-number">¥{{ number_format((float) ($summaryStats['total_refunded_amount'] ?? 0), 2) }}</div>
|
<div class="metric-number">¥{{ number_format((float) ($summaryStats['total_refunded_amount'] ?? 0), 2) }}</div>
|
||||||
<div class="muted muted-xs">基于 meta.refund_summary.total_amount(缺省回退汇总)</div>
|
<div class="muted muted-xs">基于 meta.refund_summary.total_amount(缺省回退汇总)</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<h3>有回执订单 / 回执总额</h3>
|
||||||
|
<div class="metric-number">{{ $summaryStats['receipt_orders'] ?? 0 }} / ¥{{ number_format((float) ($summaryStats['total_receipt_amount'] ?? 0), 2) }}</div>
|
||||||
|
<div class="muted muted-xs">基于 meta.payment_summary.total_amount(缺省回退汇总)</div>
|
||||||
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3>同步失败原因 TOP5</h3>
|
<h3>同步失败原因 TOP5</h3>
|
||||||
@php $failedReasonStats = $failedReasonStats ?? []; @endphp
|
@php $failedReasonStats = $failedReasonStats ?? []; @endphp
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class AdminPlatformOrderTest extends TestCase
|
|||||||
->assertSee('近24小时批量同步')
|
->assertSee('近24小时批量同步')
|
||||||
->assertSee('部分退款 / 已退款')
|
->assertSee('部分退款 / 已退款')
|
||||||
->assertSee('退款总额')
|
->assertSee('退款总额')
|
||||||
|
->assertSee('有回执订单 / 回执总额')
|
||||||
->assertSee('快捷筛选')
|
->assertSee('快捷筛选')
|
||||||
->assertSee('待支付')
|
->assertSee('待支付')
|
||||||
->assertSee('待生效')
|
->assertSee('待生效')
|
||||||
|
|||||||
Reference in New Issue
Block a user