平台订单详情:退款治理区块按 amounts.tolerance 口径触发并修复测试

This commit is contained in:
萝卜
2026-03-13 16:15:16 +00:00
parent 4d8dc86639
commit 485b69857e
4 changed files with 11 additions and 7 deletions

View File

@@ -68,16 +68,20 @@
@php
$paidAmountFloat = (float) ($order->paid_amount ?? 0);
$tol = (float) config('saasshop.amounts.tolerance', 0.01);
$tolCents = (int) round($tol * 100);
$tolCents = max(1, $tolCents);
// 若订单疑似退款不一致:
// - 非 refunded 但退款总额已达/超已付 => 给出“可一键标记为已退款”的治理动作(不自动写回执)
// - 非 refunded 但退款总额已达/超已付 + 容差 => 给出“可一键标记为已退款”的治理动作(不自动写回执)
$canMarkRefunded = $paidAmountFloat > 0
&& $order->payment_status !== 'refunded'
&& round($refundTotal * 100) >= round($paidAmountFloat * 100);
&& round($refundTotal * 100) >= (round($paidAmountFloat * 100) + $tolCents);
// - refunded 但退款总额不足 => 提供降级动作:标记为部分退款/已支付(仍不自动写回执)
// - refunded 但退款总额 + 容差 < 已付 => 提供降级动作:标记为部分退款/已支付(仍不自动写回执)
$canFixRefundedButNotEnough = $paidAmountFloat > 0
&& $order->payment_status === 'refunded'
&& (round($refundTotal * 100) + 1) < round($paidAmountFloat * 100);
&& (round($refundTotal * 100) + $tolCents) < round($paidAmountFloat * 100);
// 统一口径:与 refund_inconsistent 筛选一致(模型方法)
$isRefundInconsistent = (bool) $order->isRefundInconsistent();