yuan
3 天以前 ccc9d4533bc7b696f6d539720a6052abc44ff7a5
src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -36,11 +36,11 @@
        SELECT
            T1.id                 ,
            T1.sales_ledger_id        ,
            T1.sales_contract_no      ,
            T1.customer_id            ,
            T1.invoice_no             ,
            T1.invoice_amount         ,
            T1.tax_rate               ,
            T3.sales_contract_no      AS sales_contract_no,
            T3.customer_id            AS customer_id,
            T4.invoice_no             AS invoice_no,
            T4.invoice_total          AS invoice_amount,
            T5.tax_rate               AS tax_rate,
            T1.receipt_payment_type   ,
            T1.receipt_payment_amount ,
            T1.registrant             ,
@@ -54,8 +54,13 @@
            T3.customer_contract_no,
            T2.customer_name
        FROM receipt_payment T1
                 LEFT JOIN customer T2 ON T1.customer_id = T2.id
                 LEFT JOIN sales_ledger T3 ON T1.sales_ledger_id = T3.id
                 <!-- 2026-10-12 修复:receipt_payment 表里没有 sales_contract_no / customer_id / invoice_no /
                      invoice_amount / tax_rate 这 5 列,原来的 T1.xxx 必然抛 ER_BAD_FIELD_ERROR。
                      客户与合同号从 sales_ledger 取,发票信息从 invoice_ledger / invoice_registration_product 取。 -->
                 LEFT JOIN sales_ledger T3 ON T3.id = T1.sales_ledger_id
                 LEFT JOIN customer T2 ON T2.id = T3.customer_id
                 LEFT JOIN invoice_ledger T4 ON T4.id = T1.invoice_ledger_id
                 LEFT JOIN invoice_registration_product T5 ON T5.id = T4.invoice_registration_product_id
        WHERE T1.id = #{id}
    </select>
@@ -90,7 +95,7 @@
        FROM invoice_ledger_file
        GROUP BY invoice_ledger_id
        ) T4 ON T4.invoice_ledger_id = T1.id
        LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id and slp.type = 1
        LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id and T5.type = 1
        LEFT JOIN (
        SELECT
        SUM(receipt_payment_amount) AS receipt_payment_amount_total,
@@ -378,7 +383,7 @@
                GROUP_CONCAT( name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName
            FROM invoice_ledger_file GROUP BY invoice_ledger_id
        ) T4 ON T4.invoice_ledger_id = T1.id
                 LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id and slp.type = 1
                 LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id and T5.type = 1
                 LEFT JOIN (
            SELECT SUM(receipt_payment_amount) AS receipt_payment_amount_total,invoice_ledger_id FROM receipt_payment GROUP
                BY invoice_ledger_id
@@ -414,7 +419,7 @@
        GROUP_CONCAT( name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName
        FROM invoice_ledger_file GROUP BY invoice_ledger_id
        ) T4 ON T4.invoice_ledger_id = T1.id
        LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id and slp.type = 1
        LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id and T5.type = 1
        LEFT JOIN (
        SELECT SUM(receipt_payment_amount) AS receipt_payment_amount_total,invoice_ledger_id FROM receipt_payment GROUP
        BY invoice_ledger_id
@@ -438,7 +443,13 @@
        T1.sales_contract_no,
        T1.contract_amount AS invoice_total,
        IFNULL(SUM(T2.receipt_payment_amount), 0) AS receipt_payment_amount,
        IFNULL((T1.contract_amount - IFNULL(SUM(T2.receipt_payment_amount), 0)), 0) AS unReceipt_payment_amount,
        <!-- 2026-10-13 修复:原来写的是「合同额 − 本日期这一笔回款」,再叠加 GROUP BY receipt_payment_date,
             一笔台账有几笔回款就会拆成几行,每行都显示一个假的"应收"(例如 XS202605001 已全额回款,
             却显示应收 1544.40)。应收金额应当是**该合同当前真正的未回款额 = 合同额 − 全部回款**。 -->
        GREATEST(T1.contract_amount - IFNULL((
            SELECT SUM(T3.receipt_payment_amount) FROM receipt_payment T3
            WHERE T3.sales_ledger_id = T1.id
        ), 0), 0) AS unReceipt_payment_amount,
        T2.receipt_payment_date
        FROM sales_ledger T1
        INNER JOIN receipt_payment T2 ON T1.id = T2.sales_ledger_id
@@ -449,6 +460,7 @@
            </if>
        </where>
        GROUP BY T1.id, T1.sales_contract_no, T1.contract_amount, T2.receipt_payment_date
        ORDER BY T1.entry_date ASC, T2.receipt_payment_date ASC
    </select>
</mapper>