shish 1 день назад
Родитель
Сommit
164565de2f
1 измененных файлов с 46 добавлено и 24 удалено
  1. 46 24
      biz-hd/refund/classes/HdRefundMallClass.php

+ 46 - 24
biz-hd/refund/classes/HdRefundMallClass.php

@@ -15,6 +15,7 @@ use bizHd\order\classes\OrderGoodsClass;
 use bizHd\order\classes\OrderItemClass;
 use bizHd\refund\services\HdRefundService;
 use bizHd\shop\classes\ShopClass;
+use biz\shop\classes\MainClass;
 use biz\shop\classes\ShopClass as SharedShopClass;
 use common\components\imgUtil;
 use common\components\orderSn;
@@ -66,8 +67,17 @@ class HdRefundMallClass
             util::fail('退款金额超过可退金额');
         }
 
+        // 申请时写入原单支付快照,待审核详情/列表即可展示退回方式;通过时 addRefund 会再按原单刷新
+        $snap = HdNextDayRefundClass::buildRefundPaySnapshot($order, true);
+        // 预判当天/封账退款口径,便于待审核展示;最终以审核通过时 mustUseNextDay 为准
+        $mainId = (int)($extra['mainId'] ?? $order->mainId ?? 0);
+        $main = $mainId > 0 ? MainClass::getById($mainId, true) : null;
+        $sameDay = HdNextDayRefundClass::mustUseNextDay($order, $main)
+            ? HdRefundClass::SAME_DAY_NO
+            : HdRefundClass::SAME_DAY_YES;
+
         $data = [
-            'mainId' => (int)($extra['mainId'] ?? $order->mainId ?? 0),
+            'mainId' => $mainId,
             'shopId' => (int)($extra['shopId'] ?? $order->shopId ?? 0),
             'sjId' => (int)($extra['sjId'] ?? $order->sjId ?? 0),
             'hdId' => (int)($extra['hdId'] ?? $order->hdId ?? 0),
@@ -86,9 +96,12 @@ class HdRefundMallClass
             'shopAdminName' => '',
             'passTime' => null,
             'rejectReason' => '',
-            'hasReturn' => 0,
-            'returnBalance' => 0,
-            'couldReturn' => 1,
+            'sameDay' => $sameDay,
+            'onlinePay' => $snap['onlinePay'],
+            'payWay' => $snap['payWay'],
+            'hasReturn' => $snap['hasReturn'],
+            'returnBalance' => $snap['returnBalance'],
+            'couldReturn' => $snap['couldReturn'],
         ];
 
         // 撤销后重新申请:复用已取消记录,避免同一订单堆多条取消单
@@ -352,16 +365,21 @@ class HdRefundMallClass
     }
 
     /**
-     * 剩余可退现金:实付合计 orderPrice 减已退 tkPrice
+     * 剩余可退现金:实付合计 orderPrice 减当天已退 tkPrice 与封账退款 nextDayTkPrice
      * 红包抵扣已计入 orderPrice,所以红包全额单这里为 0
      * @param array|object $order
      * @return string 两位小数字符串,不会为负
      */
     public static function remainRefundCash($order)
     {
+        $already = bcadd(
+            self::toMoney(self::orderField($order, 'tkPrice', 0)),
+            self::toMoney(self::orderField($order, 'nextDayTkPrice', 0)),
+            2
+        );
         $could = bcsub(
             self::toMoney(self::orderField($order, 'orderPrice', 0)),
-            self::toMoney(self::orderField($order, 'tkPrice', 0)),
+            $already,
             2
         );
         if (bccomp($could, '0', 2) < 0) {
@@ -477,24 +495,28 @@ class HdRefundMallClass
         // 复用待审核行写明细/回库/资金,避免再插一条
         $refund = HdRefundService::addRefund($post, $order, $refund);
 
-        $custom = CustomClass::getLockById($order->customId);
-        if (!empty($custom)) {
-            $custom->buyAmount = bcsub((string)$custom->buyAmount, (string)$refund->refundPrice, 2);
-            $customName = $custom->name ?? $order->customName ?? '';
-            $orderSnText = $order->orderSn ?? '';
-            $eventPrefix = $customName !== '' ? $customName : '客户';
-            $custom->eventRemark = $eventPrefix . '商城售后' . $orderSnText;
-            $custom->relateId = $order->id;
-            $custom->relateType = 1;
-            $custom->staffId = (int)($shopAdmin['id'] ?? 0);
-            $custom->staffName = $shopAdmin['name'] ?? '';
-            $custom->mainId = (int)($shopAdmin['mainId'] ?? $refund->mainId);
-            $custom->save();
-
-            $hd = HdClass::getLockById($custom->hdId);
-            if (!empty($hd)) {
-                $hd->expendAmount = bcsub((string)$hd->expendAmount, (string)$refund->refundPrice, 2);
-                $hd->save();
+        // 当天售后才在此回退累计消费;封账/隔天已在 applyHdAmountAndFund 扣过,避免重复
+        $sameDay = intval($refund->sameDay ?? HdRefundClass::SAME_DAY_YES);
+        if ($sameDay === HdRefundClass::SAME_DAY_YES) {
+            $custom = CustomClass::getLockById($order->customId);
+            if (!empty($custom)) {
+                $custom->buyAmount = bcsub((string)$custom->buyAmount, (string)$refund->refundPrice, 2);
+                $customName = $custom->name ?? $order->customName ?? '';
+                $orderSnText = $order->orderSn ?? '';
+                $eventPrefix = $customName !== '' ? $customName : '客户';
+                $custom->eventRemark = $eventPrefix . '商城售后' . $orderSnText;
+                $custom->relateId = $order->id;
+                $custom->relateType = 1;
+                $custom->staffId = (int)($shopAdmin['id'] ?? 0);
+                $custom->staffName = $shopAdmin['name'] ?? '';
+                $custom->mainId = (int)($shopAdmin['mainId'] ?? $refund->mainId);
+                $custom->save();
+
+                $hd = HdClass::getLockById($custom->hdId);
+                if (!empty($hd)) {
+                    $hd->expendAmount = bcsub((string)$hd->expendAmount, (string)$refund->refundPrice, 2);
+                    $hd->save();
+                }
             }
         }