yuan
3 天以前 ccc9d4533bc7b696f6d539720a6052abc44ff7a5
src/main/resources/mapper/sales/InvoiceLedgerMapper.xml
@@ -6,12 +6,12 @@
    <select id="invoiceLedgerPage" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
        SELECT
            T1.id                ,
            T1.sales_ledger_id   ,
            T1.sales_contract_no ,
            T1.customer_id       ,
            T5.sales_ledger_id   AS sales_ledger_id,
            T3.sales_contract_no AS sales_contract_no,
            T3.customer_id       AS customer_id,
            T1.invoice_no        ,
            T1.invoice_amount    ,
            T1.tax_rate          ,
            T1.invoice_total     AS invoice_amount,
            T5.tax_rate          AS tax_rate,
            T1.invoice_person    ,
            T1.invoice_date      ,
            T1.create_time       ,
@@ -24,8 +24,12 @@
            T3.salesman,
            T4.invoiceFileName
        FROM invoice_ledger 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 修复:invoice_ledger 表里没有 sales_ledger_id / sales_contract_no / customer_id /
             invoice_amount / tax_rate 这 5 列(它们在 invoice_registration_product 上),
             原来的 T1.xxx 必然抛 ER_BAD_FIELD_ERROR。改为按真实结构关联。 -->
        LEFT JOIN invoice_registration_product T5 ON T5.id = T1.invoice_registration_product_id
        LEFT JOIN sales_ledger T3 ON T3.id = T5.sales_ledger_id
        LEFT JOIN customer T2 ON T2.id = T3.customer_id
        LEFT JOIN (
           SELECT
               invoice_ledger_id,
@@ -48,12 +52,12 @@
    <select id="invoiceLedgerList" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
        SELECT
            T1.id                ,
            T1.sales_ledger_id   ,
            T1.sales_contract_no ,
            T1.customer_id       ,
            T5.sales_ledger_id   AS sales_ledger_id,
            T3.sales_contract_no AS sales_contract_no,
            T3.customer_id       AS customer_id,
            T1.invoice_no        ,
            T1.invoice_amount    ,
            T1.tax_rate          ,
            T1.invoice_total     AS invoice_amount,
            T5.tax_rate          AS tax_rate,
            T1.invoice_person    ,
            T1.invoice_date      ,
            T1.create_time       ,
@@ -66,8 +70,10 @@
            T3.customer_contract_no,
            T4.invoiceFileName
        FROM invoice_ledger 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 修复:同 invoiceLedgerPage,改为按真实表结构关联 -->
        LEFT JOIN invoice_registration_product T5 ON T5.id = T1.invoice_registration_product_id
        LEFT JOIN sales_ledger T3 ON T3.id = T5.sales_ledger_id
        LEFT JOIN customer T2 ON T2.id = T3.customer_id
        LEFT JOIN (
        SELECT
        invoice_ledger_id,
@@ -90,12 +96,12 @@
    <select id="invoiceLedgerInfo" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
        SELECT
        T1.id                ,
        T1.sales_ledger_id   ,
        T1.sales_contract_no ,
        T1.customer_id       ,
        T5.sales_ledger_id   AS sales_ledger_id,
        T3.sales_contract_no AS sales_contract_no,
        T3.customer_id       AS customer_id,
        T1.invoice_no        ,
        T1.invoice_amount    ,
        T1.tax_rate          ,
        T1.invoice_total     AS invoice_amount,
        T5.tax_rate          AS tax_rate,
        T1.invoice_person    ,
        T1.invoice_date      ,
        T1.create_time       ,
@@ -105,7 +111,10 @@
        T1.tenant_id         ,
        T2.customer_name
        FROM invoice_ledger T1
        LEFT JOIN customer T2 ON T1.customer_id = T2.id
        <!-- 2026-10-12 修复:同 invoiceLedgerPage,改为按真实表结构关联 -->
        LEFT JOIN invoice_registration_product T5 ON T5.id = T1.invoice_registration_product_id
        LEFT JOIN sales_ledger T3 ON T3.id = T5.sales_ledger_id
        LEFT JOIN customer T2 ON T2.id = T3.customer_id
        WHERE T1.id = #{id}
    </select>
@@ -113,17 +122,23 @@
        SELECT
            T1.customer_id as id,
            T1.customer_name,
            SUM(contract_amount) AS invoice_total,
            IFNULL( SUM(T2.receipt_payment_amount) , 0 ) AS receipt_payment_amount,
            IFNULL((IFNULL(SUM(contract_amount),0)  - IFNULL(SUM(T2.receipt_payment_amount),0)),0) AS unReceipt_payment_amount
            IFNULL(SUM(T1.contract_amount), 0) AS invoice_total,
            IFNULL(SUM(T2.paid), 0)            AS receipt_payment_amount,
            IFNULL(SUM(T1.contract_amount), 0) - IFNULL(SUM(T2.paid), 0) AS unReceipt_payment_amount
        FROM sales_ledger T1
        LEFT JOIN receipt_payment T2 ON T1.id = T2.sales_ledger_id
        <!-- 2026-10-13 修复:原来直接 LEFT JOIN receipt_payment 再 SUM(contract_amount),
             一笔台账有几笔回款,合同额就被重复累加几次(客户往来页的「合同金额/应收金额」因此虚高,
             例如客户 1108 实际合同 15.37 万被算成 78.35 万)。改成先按台账汇总回款再 JOIN。 -->
        LEFT JOIN (
            SELECT sales_ledger_id, SUM(receipt_payment_amount) AS paid
            FROM receipt_payment WHERE sales_ledger_id IS NOT NULL GROUP BY sales_ledger_id
        ) T2 ON T2.sales_ledger_id = T1.id
        <where>
            <if test="invoiceLedgerDto.searchText != null and invoiceLedgerDto.searchText != '' ">
                T1.customer_name LIKE CONCAT ('%',#{invoiceLedgerDto.searchText},'%')
            </if>
        </where>
        GROUP BY T1.customer_name
        GROUP BY T1.customer_id, T1.customer_name
    </select>
    <select id="invoiceLedgerProductInfo" resultType="com.ruoyi.sales.dto.InvoiceRegistrationProductDto">