Просмотр исходного кода

Merge branch 'after-sale' into redesign‌-260706

shish 13 часов назад
Родитель
Сommit
5b4e133f1d

+ 9 - 0
biz-ghs/order/classes/OrderClearClass.php

@@ -260,6 +260,10 @@ class OrderClearClass extends BaseClass
      *
      * $options['paymentSettleOnly'] 只减订单待结
      * $options['skipCashMoney']      现金已在 rechargeBalance 记过
+     *
+     * 订单 clearId 约定:
+     * - 足额结清:写真实清账单 id
+     * - 部分销账且原 clearId=0:写 1,表示「有结账痕迹」(充值消欠 / 隔天售后返充 FIFO 共用)
      */
     public static function confirmClear($clear, $payWay, $options = [])
     {
@@ -345,7 +349,12 @@ class OrderClearClass extends BaseClass
             ];
             if (bccomp($newRemain, '0', 2) <= 0) {
                 $orderUpdate['debt'] = 0;
+                // 足额结清:写真实清账单 id,便于追溯
                 $orderUpdate['clearId'] = $clearId;
+            } elseif (intval($order->clearId ?? 0) === 0) {
+                // 部分销账也打结账痕迹:clearId=1(有清账单参与过),供隔天售后/已结账判断
+                // 覆盖:客户详情充值消欠、隔天售后返充余额后的 FIFO 销账等
+                $orderUpdate['clearId'] = 1;
             }
             OrderClass::updateById($orderId, $orderUpdate);
 

+ 18 - 2
biz-ghs/order/classes/PurchaseOrderClass.php

@@ -98,6 +98,7 @@ class PurchaseOrderClass extends BaseClass
 
     /**
      * 减少本单剩余待结;减到 ≤0 则标已结清。不改 debtPrice。
+     * 消欠成功时若 clearId==0 则写 1(结账痕迹,供隔天售后判定)。
      * @return bool 是否本单因此从待结变为已结清
      */
     public static function reduceRemainDebtPrice($order, $amount)
@@ -120,11 +121,17 @@ class PurchaseOrderClass extends BaseClass
         }
         $order->remainDebtPrice = $newRemain;
         $cleared = false;
+        $saveAttrs = ['remainDebtPrice', 'debt'];
         if (bccomp($newRemain, '0', 2) <= 0) {
             $order->debt = self::DEBT_NO;
             $cleared = true;
         }
-        $order->save(false, ['remainDebtPrice', 'debt']);
+        // 售后返充 FIFO 消欠也算结账痕迹
+        if (intval($order->clearId ?? 0) === 0) {
+            $order->clearId = 1;
+            $saveAttrs[] = 'clearId';
+        }
+        $order->save(false, $saveAttrs);
         return $cleared;
     }
 
@@ -272,14 +279,23 @@ class PurchaseOrderClass extends BaseClass
 
         // 本单刚因当天售后结清时减 debtNum(隔天 FIFO 内部自行处理)
         $clearOrderDebt = !empty($order->_purchaseDebtClearedByRefund);
+        $orderSaveAttrs = [];
         if (!$clearOrderDebt && intval($order->debt ?? 0) === self::DEBT_YES
             && bccomp((string)($order->actPrice ?? '1'), '0', 2) <= 0
             && bccomp((string)($order->remainDebtPrice ?? '1'), '0', 2) <= 0) {
             $order->debt = self::DEBT_NO;
             $order->remainDebtPrice = '0.00';
-            $order->save(false, ['debt', 'remainDebtPrice']);
+            $orderSaveAttrs = ['debt', 'remainDebtPrice'];
             $clearOrderDebt = true;
         }
+        // 采购售后返充余额:本单 clearId==0 打结账痕迹 1(与销售侧语义一致)
+        if (intval($order->clearId ?? 0) === 0) {
+            $order->clearId = 1;
+            $orderSaveAttrs[] = 'clearId';
+        }
+        if (!empty($orderSaveAttrs)) {
+            $order->save(false, array_values(array_unique($orderSaveAttrs)));
+        }
         if ($clearOrderDebt) {
             $ghs->debtNum = max(0, intval($ghs->debtNum ?? 0) - 1);
         }