瀏覽代碼

售后优化

shish 1 月之前
父節點
當前提交
9086d3c650
共有 2 個文件被更改,包括 84 次插入4 次删除
  1. 79 0
      biz-ghs/custom/classes/CustomClass.php
  2. 5 4
      biz-ghs/order/classes/RefundOrderClass.php

+ 79 - 0
biz-ghs/custom/classes/CustomClass.php

@@ -673,6 +673,85 @@ class CustomClass extends BaseClass
         self::assertPairBalanceEqual($custom, $ghs);
     }
 
+    /**
+     * 花店采购余额付售后:成对账户原路退回(与 payToChangeBalance 对称)。
+     * 调用方须已 lockAccountPair;同时写客户余额明细与 xhGhs 余额明细(hdApp 可查)。
+     */
+    public static function refundBalancePayToPair($custom, $ghs, $refund, $order)
+    {
+        AccountMoneyClass::ensureCustomMoneyReady($custom, true);
+        if (!empty($ghs)) {
+            AccountMoneyClass::ensureGhsMoneyReady($ghs, true);
+            self::assertPairBalanceEqual($custom, $ghs);
+        }
+        $refundPrice = bcadd((string)($refund->refundPrice ?? '0'), '0', 2);
+        if (bccomp($refundPrice, '0', 2) <= 0) {
+            return;
+        }
+        $newBalance = bcadd((string)($custom->balance ?? '0'), $refundPrice, 2);
+        self::savePairBalanceAfterDeduct($custom, $ghs, $newBalance);
+
+        $relateId = $refund->id ?? 0;
+        $customId = $custom->id ?? 0;
+        $customName = $custom->name ?? '';
+        $saleOrderSn = $order->orderSn ?? '';
+        $capitalType = dict::getDict('capitalType', 'saleRefund', 'id');
+        $payTime = $order->payTime ?? '';
+        $change = [
+            'relateId' => $relateId,
+            'customId' => $customId,
+            'customName' => $customName,
+            'ptStyle' => dict::getDict('ptStyle', 'ghs'),
+            'capitalType' => $capitalType,
+            'amount' => $refundPrice,
+            'balance' => $newBalance,
+            'io' => 1,
+            'payWay' => dict::getDict('payWay', 'balancePay'),
+            'event' => "订单售后退款,单号:{$saleOrderSn}",
+            'sjId' => $refund->sjId ?? 0,
+            'shopId' => $refund->shopId ?? 0,
+            'mainId' => $order->mainId ?? 0,
+            'payTime' => $payTime,
+            'staffId' => 0,
+            'staffName' => '',
+            'side' => 0,
+            'fromType' => dict::getDict('fromType', 'shop'),
+            'remark' => '',
+        ];
+        CustomBalanceChangeClass::add($change, true);
+        self::addGhsRefundBalanceChange($custom, $ghs, $refund, $order, $refundPrice, $newBalance);
+    }
+
+    /** 花店采购余额退款:记 xhGhs 余额变动(与 addGhsOrderBalanceChange 对称,hdApp 余额明细展示) */
+    protected static function addGhsRefundBalanceChange($custom, $ghs, $refund, $order, $amount, $newBalance)
+    {
+        if (empty($ghs)) {
+            return;
+        }
+        $orderSn = $order->orderSn ?? '';
+        $customShopId = $custom->shopId ?? 0;
+        $customShop = ShopClass::getById($customShopId, true);
+        $gbData = [
+            'ghsId' => $ghs->id ?? 0,
+            'relateId' => $refund->id ?? 0,
+            'ptStyle' => dict::getDict('ptStyle', 'ghs'),
+            'capitalType' => dict::getDict('capitalType', 'saleRefund', 'id'),
+            'amount' => $amount,
+            'balance' => $newBalance,
+            'io' => 1,
+            'side' => 0,
+            'onlinePay' => 1,
+            'payWay' => dict::getDict('payWay', 'balancePay'),
+            'fromType' => dict::getDict('fromType', 'shop'),
+            'event' => "订单售后退款,单号:{$orderSn}",
+            'sjId' => $customShop->sjId ?? ($custom->sjId ?? 0),
+            'mainId' => $customShop->mainId ?? 0,
+            'shopId' => $customShopId,
+            'remark' => '',
+        ];
+        GhsBalanceChangeClass::add($gbData, true);
+    }
+
     protected static function addGhsOrderBalanceChange($custom, $ghs, $order, $amount, $newBalance, $bookOrder = false)
     {
         if (empty($ghs)) {

+ 5 - 4
biz-ghs/order/classes/RefundOrderClass.php

@@ -20,6 +20,7 @@ use bizGhs\shop\classes\ShopMoneyClass;
 use common\components\printUtil;
 use common\components\util;
 use bizGhs\custom\classes\CustomClass;
+use bizGhs\custom\services\GhsRechargeSettleService;
 use Yii;
 use bizGhs\base\classes\BaseClass;
 
@@ -337,11 +338,11 @@ class RefundOrderClass extends BaseClass
                 $order->realPrice = $currentRealPrice;
                 $order->save();
 
-                //门店余额减少
-                ShopClass::saleRefundReduceBalance($main, $shop, $refund, $refundPrice);
+                $purchaseId = intval($order->purchaseId ?? 0);
+                // 花店采购余额付:扣款在 xhGhsCustom/xhGhs 成对账户,不走 ghs 门店 main 余额
+                $pair = GhsRechargeSettleService::lockAccountPair($custom);
+                CustomClass::refundBalancePayToPair($pair['custom'], $pair['ghs'], $refund, $order);
 
-                //客户余额增加
-                CustomClass::refundDebtAmountReduce($custom, $refund, $order);
 
             } elseif ($payWay == dict::getDict('payWay', 'cash')) {
                 $moneyData = [