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 @@
              -- 应付金额 = 取(入库金额, 合同金额)的较小者 - 封顶后付款金额 - 退货金额
              -- 入库金额按合同金额封顶,避免入库流程重复提交导致应付金额大于合同金额;
              -- 已付款金额(回款/付款单)与退货金额均需从应付中扣减。
              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