shish 1 год назад
Родитель
Сommit
402d95d328

+ 56 - 35
biz-hd/custom/classes/CustomClass.php

@@ -241,6 +241,8 @@ class CustomClass extends BaseClass
     }
 
     //客户采购欠款金额增加,如果有余额时,要进行欠款销账 ssh 20250715
+    //todo 这边开欠款单时,如果还有余额,会产生结账动作,结账动作也可以用赠送余额来结账,所以要分出赠送余额的占比
+    //todo 结账消余额,不是下单时消余额,不涉及售后时余额回滚问题,所以不需要设置 xhOrder 的 giveBalance payBalance balance等值
     public static function skCgDebtAmountAdd($custom, $order)
     {
         $clearAmount = 0;
@@ -257,14 +259,17 @@ class CustomClass extends BaseClass
         $hdId = $custom->hdId ?? 0;
         $hd = HdClass::getLockById($hdId);
         if (empty($hd)) {
-            util::fail('花店信息缺失,编号6331');
+            util::fail('花店信息缺失,编号6325');
         }
         $hdName = $hd->name ?? '';
+        //结账时用了多少赠送的余额
+        $settleUseGiveAmount = 0;
         if ($custom->balance > 0) {
-            if ($amount >= $custom->balance) {
+            if ($amount > $custom->balance) {
                 $clearAmount = $custom->balance;
+                $settleUseGiveAmount = $custom->balanceGive;
             } else {
-                $clearAmount = $amount;
+                util::fail('余额充足,请用余额支付');
             }
         }
         if ($clearAmount > 0) {
@@ -276,6 +281,10 @@ class CustomClass extends BaseClass
             $settleAmount = $ret['totalClearAmount'] ?? 0;
             $settleNo = $set->orderSn ?? '';
             $settleId = $set->id;
+            $newSettle = $ret['settle'];
+            //结账时用了多少赠送的余额
+            $newSettle->giveBalance = bcadd($newSettle->giveBalance, $settleUseGiveAmount, 2);
+            $newSettle->save();
         }
 
         /************************ 总余额 *********************************/
@@ -482,6 +491,36 @@ class CustomClass extends BaseClass
             util::fail('没有找到订单哈!');
         }
         $currentPayWay = $order->payWay ?? 0;
+
+        // 多处需要同步修改 balance_pay_give
+        $mustUseGiveAmount = 0;
+        $buyAmount = 0;
+        if ($currentPayWay == 3) {
+            //如果是欠款单售后,没有退款到赠送余额的情况
+            $buyAmount = $amount;
+        } elseif ($currentPayWay == 2) {
+            //这个是总消费余额中充值余额部分
+            $payBalance = $order->payBalance ?? 0;
+            //这个是累计已经退还的余额
+            $balanceTk = $order->balanceTk ?? 0;
+            $currentBalanceTk = bcadd($balanceTk, $amount, 2);
+            //当前累计退还的余额如果超过了充值余额的话,说明要退还赠送的余额了
+            if ($currentBalanceTk > $payBalance) {
+                $pastAmount = bcsub($currentBalanceTk, $payBalance, 2);
+                if ($pastAmount > $amount) {
+                    $mustUseGiveAmount = $amount;
+                } else {
+                    $buyAmount = bcsub($amount, $pastAmount, 2);
+                    $mustUseGiveAmount = bcsub($amount, $buyAmount, 2);
+                }
+            } else {
+                //累计退还的余额,还没超过充值余额,还是退充值余额部分
+                $buyAmount = $amount;
+            }
+        } else {
+            util::fail('无效的支付方式!编号69880');
+        }
+
         $staffId = $refund->shopAdminId ?? 0;
         $staffName = $refund->shopAdminName ?? '';
         $capitalType = dict::getDict('capitalType', 'hdRefund', 'id');
@@ -512,39 +551,11 @@ class CustomClass extends BaseClass
             'remark' => '',
         ];
         BalanceChangeClass::add($change, true);
-
-        // 多处需要同步修改 balance_pay_give
-        $mustUseGiveAmount = 0;
-        $buyAmount = 0;
-        if ($currentPayWay == 3) {
-            //如果是欠款的售后,不退款到赠送的余额里
-            $buyAmount = $amount;
-        } elseif ($currentPayWay == 2) {
-            //这个是总消费的余额
-            $actPrice = $order->actPrice ?? 0;
-            //这个是总消费余额中赠送余额部分
-            $giveBalance = $order->giveBalance ?? 0;
-            //这个是总消费余额中充值余额部分
-            $payBalance = bcsub($actPrice, $giveBalance, 2);
-            //这个是累计已经退还的余额
-            $tkPrice = $order->tkPrice ?? 0;
-            //这个是当前流程走完后累计退还的余额
-            $totalTkPrice = bcadd($tkPrice, $amount, 2);
-            //累计退还的余额如果超过了充值余额的话,说明要开始退还赠送的余额了
-            if ($totalTkPrice > $payBalance) {
-                $diffAmount = bcsub($totalTkPrice, $payBalance, 2);
-                if ($diffAmount > $amount) {
-                    $mustUseGiveAmount = $amount;
-                } else {
-                    $buyAmount = bcsub($amount, $diffAmount, 2);
-                    $mustUseGiveAmount = bcsub($amount, $buyAmount, 2);
-                }
-            } else {
-                $buyAmount = $amount;
-            }
-        } else {
-            util::fail('无效的支付方式!编号69880');
+        $order->balanceTk = bcadd($order->balanceTk, $amount, 2);
+        if ($order->balanceTk < 0) {
+            util::fail('不能小于0,编号88672');
         }
+        $order->save();
 
         if ($buyAmount > 0) {
             $customBalancePay = bcadd($custom->balancePay, $buyAmount, 2);
@@ -575,6 +586,11 @@ class CustomClass extends BaseClass
                 'remark' => '',
             ];
             BalancePayChangeClass::add($payChange, true);
+            $order->payBalanceTk = bcadd($order->payBalanceTk, $buyAmount, 2);
+            if ($order->payBalanceTk < 0) {
+                util::fail('不能小于0,编号88673');
+            }
+            $order->save();
         }
 
         if ($mustUseGiveAmount > 0) {
@@ -606,6 +622,11 @@ class CustomClass extends BaseClass
                 'remark' => '',
             ];
             BalanceGiveChangeClass::add($giveChange, true);
+            $order->giveBalanceTk = bcadd($order->giveBalanceTk, $mustUseGiveAmount, 2);
+            if ($order->giveBalanceTk < 0) {
+                util::fail('不能小于0,编号88675');
+            }
+            $order->save();
         }
     }
 

+ 1 - 1
biz-hd/order/classes/SettleClass.php

@@ -178,7 +178,7 @@ class SettleClass extends BaseClass
                 $order->save();
             }
         }
-        return ['totalClearAmount' => $totalClearAmount];
+        return ['totalClearAmount' => $totalClearAmount, 'settle' => $set];
     }
 
     public static function addData($data)

+ 4 - 6
biz-hd/recharge/classes/RechargeClass.php

@@ -212,17 +212,15 @@ class RechargeClass extends BaseClass
             $event = "线下{$channel} 充值";
         }
         $event .= floatval($balancePay);
-        //赠送的
+        //赠送的
         if ($balanceGive > 0) {
             $event .= "(送" . floatval($balanceGive) . ")";
             $custom->balanceGive = bcadd($custom->balanceGive, $balanceGive, 2);
             $hd->balanceGive = bcadd($hd->balanceGive, $balanceGive, 2);
         }
-        //本金
-        if ($balancePay > 0) {
-            $custom->balancePay = bcadd($custom->balancePay, $balancePay, 2);
-            $hd->balancePay = bcadd($hd->balancePay, $balancePay, 2);
-        }
+        //充值的余额
+        $custom->balancePay = bcadd($custom->balancePay, $balancePay, 2);
+        $hd->balancePay = bcadd($hd->balancePay, $balancePay, 2);
         //总余额
         $totalBalance = bcadd($balancePay, $balanceGive, 2);
         $custom->balance = bcadd($custom->balance, $totalBalance, 2);