<?xml version="1.0" encoding="UTF-8" ?>
|
<!DOCTYPE mapper
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<mapper namespace="com.ruoyi.sales.mapper.InvoiceLedgerMapper">
|
<select id="invoiceLedgerPage" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
|
SELECT
|
T1.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_total AS invoice_amount,
|
T5.tax_rate AS tax_rate,
|
T1.invoice_person ,
|
T1.invoice_date ,
|
T1.create_time ,
|
T1.create_user ,
|
T1.update_time ,
|
T1.update_user ,
|
T1.tenant_id ,
|
T2.customer_name,
|
T3.customer_contract_no,
|
T3.salesman,
|
T4.invoiceFileName
|
FROM invoice_ledger T1
|
<!-- 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,
|
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
|
<where>
|
<if test="invoiceLedgerDto.searchText != null and invoiceLedgerDto.searchText != ''">
|
AND (
|
T2.customer_name LIKE CONCAT('%',#{invoiceLedgerDto.searchText},'%')
|
OR T1.sales_contract_no LIKE CONCAT('%',#{invoiceLedgerDto.searchText},'%')
|
)
|
</if>
|
<if test="invoiceLedgerDto.invoiceDate != null">
|
AND DATE_FORMAT(T1.invoice_date,'%Y-%m-%d') = DATE_FORMAT(#{invoiceLedgerDto.invoiceDate},'%Y-%m-%d')
|
</if>
|
</where>
|
</select>
|
|
<select id="invoiceLedgerList" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
|
SELECT
|
T1.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_total AS invoice_amount,
|
T5.tax_rate AS tax_rate,
|
T1.invoice_person ,
|
T1.invoice_date ,
|
T1.create_time ,
|
T1.create_user ,
|
T1.update_time ,
|
T1.update_user ,
|
T1.tenant_id ,
|
T2.customer_name,
|
T3.salesman,
|
T3.customer_contract_no,
|
T4.invoiceFileName
|
FROM invoice_ledger T1
|
<!-- 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,
|
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
|
<where>
|
<if test="invoiceLedgerDto.searchText != null and invoiceLedgerDto.searchText != ''">
|
AND (
|
T2.customer_name LIKE CONCAT('%',#{invoiceLedgerDto.searchText},'%')
|
OR T1.sales_contract_no LIKE CONCAT('%',#{invoiceLedgerDto.searchText},'%')
|
)
|
</if>
|
<if test="invoiceLedgerDto.invoiceDate != null">
|
AND DATE_FORMAT(T1.invoice_date,'%Y-%m-%d') = DATE_FORMAT(#{invoiceLedgerDto.invoiceDate},'%Y-%m-%d')
|
</if>
|
</where>
|
</select>
|
|
<select id="invoiceLedgerInfo" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
|
SELECT
|
T1.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_total AS invoice_amount,
|
T5.tax_rate AS tax_rate,
|
T1.invoice_person ,
|
T1.invoice_date ,
|
T1.create_time ,
|
T1.create_user ,
|
T1.update_time ,
|
T1.update_user ,
|
T1.tenant_id ,
|
T2.customer_name
|
FROM invoice_ledger T1
|
<!-- 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>
|
|
<select id="invoiceLedgerSalesAccount" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
|
SELECT
|
T1.customer_id as id,
|
T1.customer_name,
|
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
|
<!-- 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_id, T1.customer_name
|
</select>
|
|
<select id="invoiceLedgerProductInfo" resultType="com.ruoyi.sales.dto.InvoiceRegistrationProductDto">
|
SELECT
|
T1.id ,
|
T1.sales_ledger_id ,
|
T1.sales_ledger_product_id ,
|
T1.invoice_registration_id ,
|
T1.product_category ,
|
T1.specification_model ,
|
T1.unit ,
|
T1.quantity ,
|
T1.tax_rate ,
|
T1.tax_inclusive_unit_price ,
|
T1.tax_inclusive_total_price ,
|
T1.tax_exclusive_total_price ,
|
T1.invoice_type ,
|
T1.invoice_num ,
|
T1.invoice_amount ,
|
T1.no_invoice_num ,
|
T1.no_invoice_amount ,
|
T1.create_time ,
|
T1.create_user ,
|
T1.update_time ,
|
T1.update_user ,
|
T1.tenant_id,
|
T2.sales_contract_no,
|
T2.customer_contract_no,
|
T2.customer_name,
|
T3.invoice_no,
|
T3.invoice_total,
|
T3.invoice_person,
|
T3.invoice_date,
|
T3.id AS invoice_ledger_id
|
FROM invoice_registration_product T1
|
LEFT JOIN sales_ledger T2 ON T1.sales_ledger_id = T2.id
|
LEFT JOIN invoice_ledger T3 ON T1.id = T3.invoice_registration_product_id
|
WHERE T1.id = #{id}
|
</select>
|
|
<select id="invoicedTotal" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
|
SELECT
|
IFNULL(SUM(T1.invoice_total),0) AS invoice_total,
|
T2.sales_ledger_id
|
FROM
|
invoice_ledger T1
|
LEFT JOIN invoice_registration_product T2 ON T1.invoice_registration_product_id = T2.id
|
<where>
|
AND T2.sales_ledger_id IN
|
<foreach collection="salesLedgerIds" item="item" open="(" close=")" separator=",">
|
#{item}
|
</foreach>
|
</where>
|
GROUP BY
|
T2.sales_ledger_id
|
</select>
|
|
|
</mapper>
|