From bb5a4ce65ce5a2d68829cf88df4704cb079ce628 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期一, 28 九月 2026 08:02:21 +0800
Subject: [PATCH] fix: 优化供应商交易查询逻辑,修复付款金额和应付金额计算问题
---
src/main/resources/mapper/basic/SupplierManageMapper.xml | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 151 insertions(+), 2 deletions(-)
diff --git a/src/main/resources/mapper/basic/SupplierManageMapper.xml b/src/main/resources/mapper/basic/SupplierManageMapper.xml
index 9e65903..8496792 100644
--- a/src/main/resources/mapper/basic/SupplierManageMapper.xml
+++ b/src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -22,14 +22,20 @@
T1.update_time,
T1.update_user,
T1.tenant_id,
- T2.nick_name AS maintainUserName
+ T1.is_white,
+ T2.nick_name AS maintainUserName,
+ T1.supplier_type
FROM supplier_manage T1
LEFT JOIN sys_user T2 ON T1.maintain_user_id = T2.user_id
<where>
<if test="supplierManageDto.supplierName != null and supplierManageDto.supplierName != '' ">
AND T1.supplier_name LIKE CONCAT('%',#{supplierManageDto.supplierName},'%')
</if>
+ <if test="supplierManageDto.isWhite != null">
+ AND T1.is_white = #{supplierManageDto.isWhite}
+ </if>
</where>
+ order by T1.id desc
</select>
<select id="supplierExportList" resultType="com.ruoyi.basic.excel.SupplierManageExcelDto">
@@ -50,6 +56,7 @@
T1.update_time,
T1.update_user,
T1.tenant_id,
+ T1.is_white,
T2.nick_name AS maintainUserName
FROM supplier_manage T1
LEFT JOIN sys_user T2 ON T1.maintain_user_id = T2.user_id
@@ -57,7 +64,149 @@
<if test="supplierManageDto.supplierName != null and supplierManageDto.supplierName != '' ">
AND T1.supplier_name LIKE CONCAT('%',#{supplierManageDto.supplierName},'%')
</if>
+ <if test="supplierManageDto.isWhite != null">
+ AND T1.is_white = #{supplierManageDto.isWhite}
+ </if>
</where>
</select>
+ <select id="supplierTransactions" resultType="com.ruoyi.purchase.vo.SupplierTransactionsVo">
+ select c.supplier_id,
+ sm.supplier_name,
+ c.contractAmounts,
+ -- 浠樻閲戦锛氶�愬悎鍚屾寜鍚堝悓閲戦灏侀《鍚庡啀姹囨�伙紝閬垮厤閲嶅浠樻瀵艰嚧浠樻閲戦澶т簬鍚堝悓閲戦
+ c.paymentAmount,
+ -- 搴斾粯閲戦锛氶�愬悎鍚屻�屽彇(鍏ュ簱閲戦, 鍚堝悓閲戦)杈冨皬鑰� - 灏侀《鍚庝粯娆鹃噾棰� - 閫�璐ч噾棰濄�嶅悗鍐嶆眹鎬伙紝涓嬮檺涓� 0
+ 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(
+ 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
+ from purchase_ledger pl
+ left join (
+ select
+ t.purchase_ledger_id as id,
+ sum(t.payment_amount) as paymentAmount
+ from (
+ select
+ app.id,
+ app.payment_amount,
+ pl.id as purchase_ledger_id
+ from account_purchase_payment app
+ left join account_payment_application apa on app.account_payment_application_id = apa.id
+ left join stock_in_record sir on FIND_IN_SET(sir.id, apa.stock_in_record_ids) > 0
+ LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
+ LEFT JOIN purchase_ledger pl
+ ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
+ WHERE sir.approval_status = 1
+ AND sir.record_type IN ('7','10')
+ group by app.id, pl.id
+ ) t
+ group by t.purchase_ledger_id
+ ) pay on pay.id = pl.id
+ left join (
+ SELECT
+ pl.id,
+ sum(sir.stock_in_num * slp.tax_inclusive_unit_price) AS InboundAmount
+ FROM stock_in_record sir
+ LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
+ LEFT JOIN purchase_ledger pl
+ ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
+ LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id
+ WHERE sir.approval_status = 1 AND slp.type = 2
+ AND sir.record_type IN ('7','10')
+ group by pl.id
+ ) ib on ib.id = pl.id
+ left join (
+ select pl.id,
+ sum(pro.total_amount) as returnAmount
+ from purchase_return_orders pro
+ left join purchase_ledger pl on pro.purchase_ledger_id = pl.id
+ group by pl.id
+ ) rt on rt.id = pl.id
+ group by pl.supplier_id
+ ) c
+ left join supplier_manage sm on c.supplier_id = sm.id
+ <where>
+ <if test="supplierName!=null and supplierName!=''">
+ AND sm.supplier_name LIKE CONCAT('%',#{supplierName},'%')
+ </if>
+ </where>
+ order by c.supplier_id desc
+ </select>
+ <select id="supplierTransactionsDetails"
+ resultType="com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo">
+ select pl.id purchaseLedgerId,
+ pl.purchase_contract_number,
+ pl.execution_date,
+ pl.contract_amount,
+ -- 浠樻閲戦鎸夊悎鍚岄噾棰濆皝椤讹紝閬垮厤閲嶅浠樻瀵艰嚧浠樻閲戦澶т簬鍚堝悓閲戦
+ LEAST(IFNULL(T1.paymentAmount, 0), COALESCE(pl.contract_amount, 0)) AS paymentAmount,
+ -- 搴斾粯閲戦 = 鍙�(鍏ュ簱閲戦, 鍚堝悓閲戦)鐨勮緝灏忚�� - 灏侀《鍚庝粯娆鹃噾棰� - 閫�璐ч噾棰�
+ -- 鍏ュ簱閲戦鎸夊悎鍚岄噾棰濆皝椤讹紝閬垮厤鍏ュ簱娴佺▼閲嶅鎻愪氦瀵艰嚧搴斾粯閲戦澶т簬鍚堝悓閲戦锛�
+ -- 宸蹭粯娆鹃噾棰濓紙鍥炴/浠樻鍗曪級涓庨��璐ч噾棰濆潎闇�浠庡簲浠樹腑鎵e噺銆�
+ 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
+ from purchase_ledger pl
+ left join (
+ select
+ pl.id,
+ sum(t.payment_amount) as paymentAmount
+ from (
+ select
+ app.id,
+ app.payment_amount,
+ pl.id as purchase_ledger_id
+ from account_purchase_payment app
+ left join account_payment_application apa on app.account_payment_application_id = apa.id
+ left join stock_in_record sir on FIND_IN_SET(sir.id, apa.stock_in_record_ids) > 0
+ -- 10 绫诲瀷鎵嶅叧鑱旇川妫�琛�
+ LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
+ -- 鍔ㄦ�佸叧鑱旈噰璐紙鑷姩閫傞厤 7 鍜� 10锛�
+ LEFT JOIN purchase_ledger pl
+ ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
+ WHERE sir.approval_status = 1
+ AND sir.record_type IN ('7','10')
+ group by app.id, pl.id
+ ) t
+ left join purchase_ledger pl on t.purchase_ledger_id = pl.id
+ group by pl.id
+ )T1 on T1.id = pl.id
+ left join (
+ SELECT
+ pl.id,
+ sum(sir.stock_in_num * slp.tax_inclusive_unit_price) AS InboundAmount
+ FROM stock_in_record sir
+ -- 10 绫诲瀷鎵嶅叧鑱旇川妫�琛�
+ LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
+ -- 鍔ㄦ�佸叧鑱旈噰璐紙鑷姩閫傞厤 7 鍜� 10锛�
+ LEFT JOIN purchase_ledger pl
+ ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
+ -- 浜у搧鍏宠仈涓嶅姩
+ LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id
+ -- 鏉′欢
+ WHERE sir.approval_status = 1 AND slp.type = 2
+ AND sir.record_type IN ('7','10')
+ group by pl.id
+ )T2 on T2.id = pl.id
+ left join (
+ select pl.id,
+ sum(pro.total_amount) as returnAmount
+ from purchase_return_orders pro
+ left join purchase_ledger pl on pro.purchase_ledger_id = pl.id
+ group by pl.id
+ )T3 on T3.id = pl.id
+ where pl.supplier_id = #{supplierId}
+ order by pl.id desc
+ </select>
-</mapper>
\ No newline at end of file
+</mapper>
--
Gitblit v1.9.3