From 7dfff767d0fae788ba2bf67a707ce41836bd0f42 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 13 十月 2026 14:03:35 +0800
Subject: [PATCH] fix: 优化客户往来查询逻辑,调整应收金额计算方式以避免尾差问题

---
 src/main/resources/mapper/basic/SupplierManageMapper.xml |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/main/resources/mapper/basic/SupplierManageMapper.xml b/src/main/resources/mapper/basic/SupplierManageMapper.xml
index 8496792..f76c819 100644
--- a/src/main/resources/mapper/basic/SupplierManageMapper.xml
+++ b/src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -75,18 +75,20 @@
                c.contractAmounts,
                -- 浠樻閲戦锛氶�愬悎鍚屾寜鍚堝悓閲戦灏侀《鍚庡啀姹囨�伙紝閬垮厤閲嶅浠樻瀵艰嚧浠樻閲戦澶т簬鍚堝悓閲戦
                c.paymentAmount,
-               -- 搴斾粯閲戦锛氶�愬悎鍚屻�屽彇(鍏ュ簱閲戦, 鍚堝悓閲戦)杈冨皬鑰� - 灏侀《鍚庝粯娆鹃噾棰� - 閫�璐ч噾棰濄�嶅悗鍐嶆眹鎬伙紝涓嬮檺涓� 0
+               -- 搴斾粯閲戦锛氶�愬悎鍚屻�屽彇(鍏ュ簱閲戦, 鍚堝悓閲戦)杈冨皬鑰� - 灏侀《鍚庝粯娆鹃噾棰� - 閫�璐ч噾棰濄�嶅悗鍐嶆眹鎬伙紝涓嬮檺涓� 0銆�
+               -- 鍏ュ簱閲戦鐢� 6 浣嶅皬鏁扮殑鍚◣鍗曚环绱姞鑰屾潵锛屼細甯﹀嚭銆屽帢銆嶅強浠ヤ笅鐨勫皬鏁帮紝
+               -- 鍥犳閫愬悎鍚屽厛鍥涜垗浜斿叆鍒板垎鍐嶆眹鎬伙紝淇濊瘉銆屼緵搴斿晢搴斾粯閲戦 = 鍚勫悎鍚屽簲浠橀噾棰濅箣鍜屻�嶃�佷笖椤甸潰涓婂彧鍑虹幇 2 浣嶅皬鏁般��
                c.payableAmount
         from (
             select pl.supplier_id,
                    sum(COALESCE(pl.contract_amount, 0)) as contractAmounts,
                    sum(LEAST(IFNULL(pay.paymentAmount, 0), COALESCE(pl.contract_amount, 0))) as paymentAmount,
-                   sum(GREATEST(
+                   sum(ROUND(GREATEST(
                        IFNULL(ib.InboundAmount, 0)
                            - IF(ib.InboundAmount <![CDATA[ > ]]> COALESCE(pl.contract_amount, 0), ib.InboundAmount - COALESCE(pl.contract_amount, 0), 0)
                        - LEAST(IFNULL(pay.paymentAmount, 0), COALESCE(pl.contract_amount, 0))
                        - IFNULL(rt.returnAmount, 0)
-                   , 0)) as payableAmount
+                   , 0), 2)) as payableAmount
             from purchase_ledger pl
             left join (
                 select
@@ -150,12 +152,13 @@
               -- 搴斾粯閲戦 = 鍙�(鍏ュ簱閲戦, 鍚堝悓閲戦)鐨勮緝灏忚�� - 灏侀《鍚庝粯娆鹃噾棰� - 閫�璐ч噾棰�
               -- 鍏ュ簱閲戦鎸夊悎鍚岄噾棰濆皝椤讹紝閬垮厤鍏ュ簱娴佺▼閲嶅鎻愪氦瀵艰嚧搴斾粯閲戦澶т簬鍚堝悓閲戦锛�
               -- 宸蹭粯娆鹃噾棰濓紙鍥炴/浠樻鍗曪級涓庨��璐ч噾棰濆潎闇�浠庡簲浠樹腑鎵e噺銆�
-              GREATEST(
+              -- 閫愬悎鍚屽洓鑸嶄簲鍏ュ埌鍒嗭紙涓� supplierTransactions 姹囨�诲彛寰勪竴鑷达級锛岄伩鍏嶅嚭鐜� 3 浣嶄互涓婂皬鏁�
+              ROUND(GREATEST(
                   IFNULL(T2.InboundAmount, 0)
                       - IF(T2.InboundAmount <![CDATA[ > ]]> COALESCE(pl.contract_amount, 0), T2.InboundAmount - COALESCE(pl.contract_amount, 0), 0)
                   - LEAST(IFNULL(T1.paymentAmount, 0), COALESCE(pl.contract_amount, 0))
                   - IFNULL(T3.returnAmount, 0)
-              , 0) AS payableAmount
+              , 0), 2) AS payableAmount
        from purchase_ledger pl
        left join (
            select

--
Gitblit v1.9.3