shish пре 2 месеци
родитељ
комит
4109af9d82
2 измењених фајлова са 37 додато и 9 уклоњено
  1. 6 2
      app-ghs/controllers/GhsController.php
  2. 31 7
      biz-ghs/ghs/classes/GhsClass.php

+ 6 - 2
app-ghs/controllers/GhsController.php

@@ -250,6 +250,7 @@ class GhsController extends BaseController
             $list['tabCounts'] = GhsClass::getSupplierTabCounts($this->shopId);
         }
         $staff = $this->shopAdmin;
+        $totalDebtNum = 0;
         if (!isset($staff->finance) || $staff->finance == 0) {
             $totalDebtAmount = 0;
             //没有财务权限的人不让看到欠款多少
@@ -266,10 +267,13 @@ class GhsController extends BaseController
                 }
             }
         } else {
-            // 总待结:各供货商净 balance 为负部分的合计
-            $totalDebtAmount = GhsClass::sumTotalOutstandingDebt($this->shopId, 0);
+            // 总待结:一次汇总全店待结金额与笔数
+            $debtStats = GhsClass::sumTotalOutstandingDebtStats($this->shopId, 0);
+            $totalDebtAmount = $debtStats['amount'];
+            $totalDebtNum = $debtStats['num'];
         }
         $list['totalDebtAmount'] = $totalDebtAmount;
+        $list['totalDebtNum'] = $totalDebtNum;
         util::success($list);
     }
 

+ 31 - 7
biz-ghs/ghs/classes/GhsClass.php

@@ -44,24 +44,48 @@ class GhsClass extends BaseClass
         ];
     }
 
-    public static function sumTotalOutstandingDebt($shopId, $delStatus = 0)
+    /**
+     * 【用途】批发店采购列表页「总待结」:一次查库同时汇总金额与笔数。
+     * 【口径】仅净 balance 为负(仍有待结金额)的供货商行计入。
+     * @return array{amount:string,num:int}
+     */
+    public static function sumTotalOutstandingDebtStats($shopId, $delStatus = 0)
     {
         if (empty($shopId)) {
-            return '0.00';
+            return ['amount' => '0.00', 'num' => 0];
         }
-        // 总待结:各行净 balance 为负时的待结金额之和(合并后 debtNum/balance 已为真相源)
         $rows = self::getAllByCondition(
             ['ownShopId' => $shopId, 'delStatus' => $delStatus],
             null,
-            'balance,debtAmount,balanceMerged'
+            'balance,debtAmount,balanceMerged,debtNum'
         );
-        $total = '0.00';
+        $totalAmount = '0.00';
+        $totalNum = 0;
         if (!empty($rows)) {
             foreach ($rows as $row) {
-                $total = bcadd($total, AccountMoneyClass::getOutstandingDebt($row), 2);
+                $outstanding = AccountMoneyClass::getOutstandingDebt($row);
+                if (bccomp($outstanding, '0', 2) <= 0) {
+                    continue;
+                }
+                $totalAmount = bcadd($totalAmount, $outstanding, 2);
+                $totalNum += intval($row['debtNum'] ?? 0);
             }
         }
-        return $total;
+        return ['amount' => $totalAmount, 'num' => $totalNum];
+    }
+
+    /** @deprecated 请用 sumTotalOutstandingDebtStats */
+    public static function sumTotalOutstandingDebt($shopId, $delStatus = 0)
+    {
+        $stats = self::sumTotalOutstandingDebtStats($shopId, $delStatus);
+        return $stats['amount'];
+    }
+
+    /** @deprecated 请用 sumTotalOutstandingDebtStats */
+    public static function sumTotalOutstandingDebtNum($shopId, $delStatus = 0)
+    {
+        $stats = self::sumTotalOutstandingDebtStats($shopId, $delStatus);
+        return $stats['num'];
     }