yuan
6 天以前 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,61 +54,81 @@
            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>
    <select id="bindInvoiceNoRegPage" resultType="com.ruoyi.sales.dto.ReceiptPaymentDto">
        SELECT
        T1.id ,
        T1.invoice_no ,
        T1.invoice_total ,
        T1.id,
        T1.invoice_no,
        T1.invoice_total,
        T3.project_name,
        T1.invoice_person ,
        T1.invoice_date ,
        T1.create_time ,
        T1.create_user ,
        T1.update_time ,
        T1.update_user ,
        T1.tenant_id ,
        T1.invoice_person,
        T1.invoice_date,
        T1.create_time,
        T1.create_user,
        T1.update_time,
        T1.update_user,
        T1.tenant_id,
        T2.tax_rate,
        T3.sales_contract_no,
        T3.customer_contract_no,
        T3.customer_name,
        T4.invoiceFileName,
        T5.product_category,
        IFNULL(T6.receipt_payment_amount_total ,0) AS receipt_payment_amount_total,
        (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total ,0)) AS no_receipt_amount
        IFNULL(T6.receipt_payment_amount_total, 0) AS receipt_payment_amount_total,
        (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total, 0)) AS noReceiptAmount
        FROM invoice_ledger T1
        LEFT JOIN invoice_registration_product T2 ON T2.id = T1.invoice_registration_product_id
        LEFT JOIN sales_ledger T3 ON T3.id = T2.sales_ledger_id
        LEFT JOIN (
        SELECT
        invoice_ledger_id,
        GROUP_CONCAT( name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName
        FROM invoice_ledger_file GROUP BY invoice_ledger_id
        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
        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
        SELECT
        SUM(receipt_payment_amount) AS receipt_payment_amount_total,
        invoice_ledger_id
        FROM receipt_payment
        GROUP BY invoice_ledger_id
        ) T6 ON T1.id = T6.invoice_ledger_id
        <where>
            <if test="c.customerName != null and c.customerName !=''">
                AND T3.customer_name LIKE CONCAT('%',#{c.customerName},'%')
            <if test="req.customerName != null and req.customerName !=''">
                AND T3.customer_name LIKE CONCAT('%',#{req.customerName},'%')
            </if>
            <if test="c.invoiceLedgerId != null">
                AND T1.id = #{c.invoiceLedgerId}
            <if test="req.invoiceLedgerId != null">
                AND T1.id = #{req.invoiceLedgerId}
            </if>
            <if test="c.customerContractNo != null and c.customerContractNo !=''">
                AND T3.customer_contract_no LIKE CONCAT('%',#{c.customerContractNo},'%')
            <if test="req.customerContractNo != null and req.customerContractNo !=''">
                AND T3.customer_contract_no LIKE CONCAT('%',#{req.customerContractNo},'%')
            </if>
            <if test="c.projectName != null and c.projectName !=''">
                AND T3.project_name LIKE CONCAT('%',#{c.projectName},'%')
            <if test="req.projectName != null and req.projectName !=''">
                AND T3.project_name LIKE CONCAT('%',#{req.projectName},'%')
            </if>
            <if test="req.invoiceDateStart != null and req.invoiceDateStart != '' ">
                AND T1.invoice_date &gt;= DATE_FORMAT(#{req.invoiceDateStart},'%Y-%m-%d')
            </if>
            <if test="req.invoiceDateEnd != null and req.invoiceDateEnd != '' ">
                AND T1.invoice_date &lt;= DATE_FORMAT(#{req.invoiceDateEnd},'%Y-%m-%d')
            </if>
            <if test="req.status != null and req.status">
                and (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total, 0)) &gt; 0
            </if>
        </where>
        ORDER BY T2.create_time DESC
        ORDER BY IFNULL(T2.create_time, T1.create_time) DESC
    </select>
    <select id="invoiceInfo" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
@@ -183,6 +203,7 @@
    <select id="receiptPaymentHistoryListPage" resultType="com.ruoyi.sales.dto.ReceiptPaymentDto">
        SELECT
        T1.id,
        T1.receipt_payment_date,
        T5.customer_name,
        T1.receipt_payment_amount,
@@ -194,10 +215,7 @@
        T4.customer_contract_no
        FROM
        receipt_payment T1
        LEFT JOIN
        invoice_ledger T2 ON T1.invoice_ledger_id = T2.id
        LEFT JOIN invoice_registration_product T3 ON T2.invoice_registration_product_id = T3.id
        LEFT JOIN sales_ledger T4 ON T3.sales_ledger_id = T4.id
        LEFT JOIN sales_ledger T4 ON T1.sales_ledger_id = T4.id
        LEFT JOIN customer T5 ON T5.id = T4.customer_id
        <where>
            <if test="params.searchText != null and params.searchText != '' ">
@@ -365,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
                 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
@@ -401,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
        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
@@ -420,4 +438,29 @@
    </select>
    <select id="invoiceLedgerSalesAccount" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
        SELECT
        T1.sales_contract_no,
        T1.contract_amount AS invoice_total,
        IFNULL(SUM(T2.receipt_payment_amount), 0) AS receipt_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
        <where>
            T1.customer_id = #{invoiceLedgerDto.customerId}
            <if test="invoiceLedgerDto.searchText != null and invoiceLedgerDto.searchText != '' ">
                AND T1.customer_name LIKE CONCAT ('%', #{invoiceLedgerDto.searchText}, '%')
            </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>