|
|
@@ -621,6 +621,8 @@ class CustomClass extends BaseClass
|
|
|
/**
|
|
|
* 隔天/无原单售后返充余额(不依赖销售单 balanceTk 拆分)
|
|
|
* 用途:成功页「返充到客户余额」;无原单时 $order 可为空。
|
|
|
+ * 入账规则:实付退回算本金,同步 +balance 与 +balancePay,并写总流水 + 充值余额流水;
|
|
|
+ * 不进赠送余额(赠送仅来自充值活动),以保持 balance ≈ balancePay + balanceGive。
|
|
|
*/
|
|
|
public static function nextDayRefundReturnBalance($custom, $amount, $refund, $order = null)
|
|
|
{
|
|
|
@@ -633,6 +635,8 @@ class CustomClass extends BaseClass
|
|
|
if (empty($hd)) {
|
|
|
util::fail('花店信息缺失,编号5363');
|
|
|
}
|
|
|
+
|
|
|
+ // —— 总余额 ——
|
|
|
$customBalance = bcadd((string)($custom->balance ?? '0'), $amount, 2);
|
|
|
$custom->balance = $customBalance;
|
|
|
$custom->isDebt = bccomp($customBalance, '0', 2) < 0 ? 1 : 0;
|
|
|
@@ -647,6 +651,17 @@ class CustomClass extends BaseClass
|
|
|
util::fail('余额错误,请联系管理员,编号' . $hdId);
|
|
|
}
|
|
|
|
|
|
+ // —— 充值本金:线下/无原单返充视为实付退回,进 balancePay(不进赠送)——
|
|
|
+ $customBalancePay = bcadd((string)($custom->balancePay ?? '0'), $amount, 2);
|
|
|
+ $custom->balancePay = $customBalancePay;
|
|
|
+ $custom->save(false, ['balancePay']);
|
|
|
+ $hdBalancePay = bcadd((string)($hd->balancePay ?? '0'), $amount, 2);
|
|
|
+ $hd->balancePay = $hdBalancePay;
|
|
|
+ $hd->save(false, ['balancePay']);
|
|
|
+ if (floatval($customBalancePay) !== floatval($hdBalancePay)) {
|
|
|
+ util::fail('充值余额错误,请联系管理员,编号' . $hdId);
|
|
|
+ }
|
|
|
+
|
|
|
$refundSn = $refund->refundSn ?? '';
|
|
|
$orderId = intval($refund->orderId ?? 0);
|
|
|
$saleOrderSn = !empty($order) ? ($order->orderSn ?? '') : '';
|
|
|
@@ -658,33 +673,46 @@ class CustomClass extends BaseClass
|
|
|
? "跨天售后返充余额,售后单:{$refundSn},原单:{$saleOrderSn}"
|
|
|
: "无原单退款返充余额,售后单:{$refundSn}";
|
|
|
$capitalType = dict::getDict('capitalType', 'hdRefund', 'id');
|
|
|
- $change = [
|
|
|
- 'customId' => $custom->id ?? 0,
|
|
|
- 'customName' => $custom->name ?? '',
|
|
|
+ $customId = intval($custom->id ?? 0);
|
|
|
+ $customName = $custom->name ?? '';
|
|
|
+ $staffId = intval($refund->shopAdminId ?? 0);
|
|
|
+ $staffName = $refund->shopAdminName ?? '';
|
|
|
+ $shopId = intval($refund->shopId ?? 0);
|
|
|
+ $mainId = intval($refund->mainId ?? 0);
|
|
|
+ $changeBase = [
|
|
|
+ 'customId' => $customId,
|
|
|
+ 'customName' => $customName,
|
|
|
'relateId' => $refund->id ?? 0,
|
|
|
'relateSn' => $refundSn,
|
|
|
'onlinePay' => 1,
|
|
|
'capitalType' => $capitalType,
|
|
|
- 'amount' => $amount,
|
|
|
- 'balance' => $customBalance,
|
|
|
'io' => 1,
|
|
|
'side' => 0,
|
|
|
'payWay' => 2,
|
|
|
'event' => $event,
|
|
|
- 'staffId' => $refund->shopAdminId ?? 0,
|
|
|
- 'staffName' => $refund->shopAdminName ?? '',
|
|
|
- 'shopId' => $refund->shopId ?? 0,
|
|
|
- 'mainId' => $refund->mainId ?? 0,
|
|
|
+ 'staffId' => $staffId,
|
|
|
+ 'staffName' => $staffName,
|
|
|
+ 'shopId' => $shopId,
|
|
|
+ 'mainId' => $mainId,
|
|
|
'refundOrderId' => $orderId,
|
|
|
'refundOrderSn' => $saleOrderSn,
|
|
|
'remark' => '',
|
|
|
];
|
|
|
- BalanceChangeClass::add($change, true);
|
|
|
+ // 总余额流水(balanceChange 页)
|
|
|
+ BalanceChangeClass::add(array_merge($changeBase, [
|
|
|
+ 'amount' => $amount,
|
|
|
+ 'balance' => $customBalance,
|
|
|
+ ]), true);
|
|
|
+ // 充值本金流水(balancePayChange / 商城余额变动页)
|
|
|
+ BalancePayChangeClass::add(array_merge($changeBase, [
|
|
|
+ 'amount' => $amount,
|
|
|
+ 'balance' => $hdBalancePay,
|
|
|
+ ]), true);
|
|
|
|
|
|
// 返充入账后:优先结当前售后原单挂账,剩余再 FIFO(不再二次扣余额)
|
|
|
$balanceBefore = bcsub($customBalance, $amount, 2);
|
|
|
self::fifoClearAfterRefundCredit($custom, $hd, $refund, $amount, $balanceBefore, $order);
|
|
|
- $custom = CustomClass::getById($custom->id ?? 0, true);
|
|
|
+ $custom = CustomClass::getById($customId, true);
|
|
|
return bcadd((string)($custom->balance ?? $customBalance), '0', 2);
|
|
|
}
|
|
|
|