shish 2 روز پیش
والد
کامیت
5a33ece077
1فایلهای تغییر یافته به همراه39 افزوده شده و 11 حذف شده
  1. 39 11
      biz-hd/custom/classes/CustomClass.php

+ 39 - 11
biz-hd/custom/classes/CustomClass.php

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