From 7dae2509ddb7d918f0ef0450a09ed721f6c7540f Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 24 四月 2026 11:07:04 +0800
Subject: [PATCH] fix: 应付金额去重并扣减历史记录
---
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml | 220 +++++++++++++++++++++++++++---------------------------
1 files changed, 109 insertions(+), 111 deletions(-)
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index e7791c9..0f977c8 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -101,6 +101,10 @@
<if test="req.status != null and req.status ">
AND slp.pending_tickets_total > 0
</if>
+ <if test="req.supplierNameOrContractNo != null and req.supplierNameOrContractNo != ''">
+ AND (sl.supplier_name like concat('%',#{req.supplierNameOrContractNo},'%') or
+ sl.purchase_contract_number like concat('%',#{req.supplierNameOrContractNo},'%'))
+ </if>
</where>
order by slp.register_date desc
</select>
@@ -108,90 +112,91 @@
<select id="procurementBusinessSummaryListPage"
resultType="com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto">
SELECT
- slp.product_category AS productCategory,
- slp.specification_model AS specificationModel,
- sl.supplier_name AS supplierName,
- SUM(slp.quantity) AS purchaseNum,
- SUM(slp.tax_inclusive_total_price) AS purchaseAmount,
- COUNT(DISTINCT slp.sales_ledger_id) AS purchaseTimes,
- <!-- 骞冲潎鍗曚环 = 鎬婚噰璐噾棰�/鎬婚噰璐暟閲忥紝淇濈暀2浣嶅皬鏁帮紝閬垮厤闄�0 -->
- ROUND(IF(SUM(slp.quantity) = 0, 0, SUM(slp.tax_inclusive_total_price) / SUM(slp.quantity)), 2) AS averagePrice,
- <!-- 璇ュ垎缁勪笅鏈�鍚庝竴涓綍鍏ユ棩鏈燂紙鍙栧彴璐︿富琛ㄧ殑entry_date锛� -->
- MAX(sl.entry_date) AS entryDate,
- COALESCE(SUM(rop.return_quantity), 0) AS return_quantity,
- COALESCE(SUM(rop.allocated_return_amount), 0) AS return_amount,
- pm.thickness
+ slp.product_category AS productCategory,
+ slp.specification_model AS specificationModel,
+ sl.supplier_name AS supplierName,
+ SUM(slp.quantity) AS purchaseNum,
+ SUM(slp.tax_inclusive_total_price) AS purchaseAmount,
+ COUNT(DISTINCT slp.sales_ledger_id) AS purchaseTimes,
+ <!-- 骞冲潎鍗曚环 = 鎬婚噰璐噾棰�/鎬婚噰璐暟閲忥紝淇濈暀2浣嶅皬鏁帮紝閬垮厤闄�0 -->
+ ROUND(IF(SUM(slp.quantity) = 0, 0, SUM(slp.tax_inclusive_total_price) / SUM(slp.quantity)), 2) AS averagePrice,
+ <!-- 璇ュ垎缁勪笅鏈�鍚庝竴涓綍鍏ユ棩鏈燂紙鍙栧彴璐︿富琛ㄧ殑entry_date锛� -->
+ MAX(sl.entry_date) AS entryDate,
+ COALESCE(SUM(rop.return_quantity), 0) AS return_quantity,
+ COALESCE(SUM(rop.allocated_return_amount), 0) AS return_amount,
+ pm.thickness
FROM sales_ledger_product slp
- <!-- 鍏宠仈鍙拌处涓昏〃锛氳幏鍙栧綍鍏ユ棩鏈焑ntry_date -->
- LEFT JOIN purchase_ledger sl ON slp.sales_ledger_id = sl.id
- LEFT JOIN (
- SELECT
- t1.sales_ledger_product_id,
- t1.return_quantity,
- IF(q.sum_qty = 0 OR q.sum_qty IS NULL, 0, (t2.total_amount * (t1.return_quantity / q.sum_qty))) AS allocated_return_amount
- FROM purchase_return_order_products t1
- INNER JOIN purchase_return_orders t2 ON t2.id = t1.purchase_return_order_id
- INNER JOIN (
- SELECT purchase_return_order_id, SUM(return_quantity) AS sum_qty
- FROM purchase_return_order_products
- GROUP BY purchase_return_order_id
- ) q ON q.purchase_return_order_id = t1.purchase_return_order_id
- ) rop ON rop.sales_ledger_product_id = slp.id
- LEFT JOIN product_model pm ON pm.id = slp.product_model_id
+ <!-- 鍏宠仈鍙拌处涓昏〃锛氳幏鍙栧綍鍏ユ棩鏈焑ntry_date -->
+ LEFT JOIN purchase_ledger sl ON slp.sales_ledger_id = sl.id
+ LEFT JOIN (
+ SELECT
+ t1.sales_ledger_product_id,
+ t1.return_quantity,
+ IF(q.sum_qty = 0 OR q.sum_qty IS NULL, 0, (t2.total_amount * (t1.return_quantity / q.sum_qty))) AS
+ allocated_return_amount
+ FROM purchase_return_order_products t1
+ INNER JOIN purchase_return_orders t2 ON t2.id = t1.purchase_return_order_id
+ INNER JOIN (
+ SELECT purchase_return_order_id, SUM(return_quantity) AS sum_qty
+ FROM purchase_return_order_products
+ GROUP BY purchase_return_order_id
+ ) q ON q.purchase_return_order_id = t1.purchase_return_order_id
+ ) rop ON rop.sales_ledger_product_id = slp.id
+ LEFT JOIN product_model pm ON pm.id = slp.product_model_id
WHERE slp.type = 2 <!-- 鍥哄畾绛涢�夛細閲囪喘鍙拌处锛坱ype=2锛� -->
- <!-- 閲囪喘鏃ユ湡绛涢�夛細鍙�夋潯浠� -->
- <if test="req.entryDateStart != null and req.entryDateEnd != null">
- AND sl.entry_date BETWEEN #{req.entryDateStart} AND #{req.entryDateEnd} <!-- 鏃堕棿鑼冨洿锛氶潪绌烘湁鏁� -->
- </if>
- <!-- 浜у搧澶х被绛涢�夛細鍙�夋潯浠� -->
- <if test="req.productCategory != null and req.productCategory != ''">
- AND slp.product_category = #{req.productCategory}
- </if>
+ <!-- 閲囪喘鏃ユ湡绛涢�夛細鍙�夋潯浠� -->
+ <if test="req.entryDateStart != null and req.entryDateEnd != null">
+ AND sl.entry_date BETWEEN #{req.entryDateStart} AND #{req.entryDateEnd} <!-- 鏃堕棿鑼冨洿锛氶潪绌烘湁鏁� -->
+ </if>
+ <!-- 浜у搧澶х被绛涢�夛細鍙�夋潯浠� -->
+ <if test="req.productCategory != null and req.productCategory != ''">
+ AND slp.product_category = #{req.productCategory}
+ </if>
<!-- 鎸夊垎缁勭淮搴﹁仛鍚堬紙閬垮厤 ONLY_FULL_GROUP_BY 閿欒涓庝笉纭畾鍊硷級 -->
GROUP BY
- slp.product_category,
- slp.specification_model,
- sl.supplier_name,
- pm.thickness
+ slp.product_category,
+ slp.specification_model,
+ sl.supplier_name,
+ pm.thickness
ORDER BY
- slp.product_category
+ slp.product_category
</select>
<select id="procurementBusinessSummaryStatistics"
resultType="com.ruoyi.purchase.dto.ProcurementBusinessSummaryStatisticsDto">
SELECT
- COALESCE(SUM(slp.tax_inclusive_total_price), 0) AS purchaseTotalAmount,
- COALESCE(COUNT(DISTINCT slp.product_category), 0) AS productCategoryCount,
- COALESCE(SUM(rop.allocated_return_amount), 0) AS returnTotalAmount
+ COALESCE(SUM(slp.tax_inclusive_total_price), 0) AS purchaseTotalAmount,
+ COALESCE(COUNT(DISTINCT slp.product_model_id), 0) AS productCategoryCount,
+ COALESCE(SUM(rop.allocated_return_amount), 0) AS returnTotalAmount
FROM sales_ledger_product slp
- LEFT JOIN purchase_ledger sl ON slp.sales_ledger_id = sl.id
- LEFT JOIN (
- SELECT
- t1.sales_ledger_product_id,
- IF(q.sum_qty = 0 OR q.sum_qty IS NULL, 0, (t2.total_amount * (t1.return_quantity / q.sum_qty))) AS allocated_return_amount
- FROM purchase_return_order_products t1
- INNER JOIN purchase_return_orders t2 ON t2.id = t1.purchase_return_order_id
- INNER JOIN (
- SELECT purchase_return_order_id, SUM(return_quantity) AS sum_qty
- FROM purchase_return_order_products
- GROUP BY purchase_return_order_id
- ) q ON q.purchase_return_order_id = t1.purchase_return_order_id
- ) rop ON rop.sales_ledger_product_id = slp.id
+ LEFT JOIN purchase_ledger sl ON slp.sales_ledger_id = sl.id
+ LEFT JOIN (
+ SELECT
+ t1.sales_ledger_product_id,
+ IF(q.sum_qty = 0 OR q.sum_qty IS NULL, 0, (t2.total_amount * (t1.return_quantity / q.sum_qty))) AS
+ allocated_return_amount
+ FROM purchase_return_order_products t1
+ INNER JOIN purchase_return_orders t2 ON t2.id = t1.purchase_return_order_id
+ INNER JOIN (
+ SELECT purchase_return_order_id, SUM(return_quantity) AS sum_qty
+ FROM purchase_return_order_products
+ GROUP BY purchase_return_order_id
+ ) q ON q.purchase_return_order_id = t1.purchase_return_order_id
+ ) rop ON rop.sales_ledger_product_id = slp.id
WHERE slp.type = 2
- <if test="req.entryDateStart != null and req.entryDateEnd != null">
- AND sl.entry_date BETWEEN #{req.entryDateStart} AND #{req.entryDateEnd}
- </if>
- <if test="req.productCategory != null and req.productCategory != ''">
- AND slp.product_category = #{req.productCategory}
- </if>
+ <if test="req.entryDateStart != null and req.entryDateEnd != null">
+ AND sl.entry_date BETWEEN #{req.entryDateStart} AND #{req.entryDateEnd}
+ </if>
+ <if test="req.productCategory != null and req.productCategory != ''">
+ AND slp.product_category = #{req.productCategory}
+ </if>
</select>
<select id="selectProductBomStructure" resultType="com.ruoyi.sales.dto.LossProductModelDto">
- select
- a.model,
- a.product_name,
- a.unit,
- sum(a.single_quantity) AS loss_num
+ select a.model,
+ a.product_name,
+ a.unit,
+ sum(a.single_quantity) AS loss_num
from (SELECT ps.unit,
ps.unit_quantity,
pm1.model,
@@ -204,61 +209,54 @@
LEFT JOIN product_structure ps ON pb.id = ps.bom_id
LEFT JOIN product_model pm1 ON pm1.id = ps.product_model_id
LEFT JOIN product p ON p.id = pm1.product_id
- WHERE sl.id = #{salesLedegerId}) A
+ WHERE sl.id = #{salesLedegerId}) A
group by a.model, a.product_name, a.unit
</select>
<select id="selectProduct" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">
- select
- p.product_name as product_category,
- pm.model as specification_model,
- pm.id as product_model_id
+ select p.product_name as product_category,
+ pm.model as specification_model,
+ pm.id as product_model_id
from product_model pm
- left join product p on pm.product_id = p.id
+ left join product p on pm.product_id = p.id
</select>
<select id="selectProductSalesAnalysis" resultType="java.util.Map">
- SELECT
- product_category as name,
- SUM( tax_inclusive_total_price ) AS value
- FROM
- sales_ledger_product
- WHERE
- type = 1
- GROUP BY
- product_category
- ORDER BY
- value DESC
+ SELECT product_category as name,
+ SUM(tax_inclusive_total_price) AS value
+ FROM sales_ledger_product
+ WHERE type = 1
+ GROUP BY product_category
+ ORDER BY value DESC
LIMIT 5
</select>
<select id="selectRawMaterialPurchaseAnalysis" resultType="java.util.Map">
- SELECT
- pr.product_name AS name,
- SUM( slp.tax_inclusive_total_price ) AS value
- FROM
- sales_ledger_product slp
- JOIN product pr ON slp.product_id = pr.id
- WHERE
- slp.type = 2
- AND pr.parent_id = ( SELECT id FROM product WHERE product_name = '鍘熸潗鏂�' )
- GROUP BY
- pr.id,
- pr.product_name
- ORDER BY
- value DESC
+ SELECT pr.product_name AS name,
+ SUM(slp.tax_inclusive_total_price) AS value
+ FROM sales_ledger_product slp
+ JOIN product pr ON slp.product_id = pr.id
+ WHERE slp.type = 2
+ AND pr.parent_id = (SELECT id FROM product WHERE product_name = '鍘熸潗鏂�')
+ GROUP BY pr.id,
+ pr.product_name
+ ORDER BY value DESC
LIMIT 5
</select>
<select id="selectProductCountByTypeAndDate" resultType="int">
- SELECT IFNULL(COUNT(*), 0)
+ SELECT IFNULL(COUNT(DISTINCT product_model_id), 0)
FROM sales_ledger_product
- WHERE type = #{type}
- <if test="startDate != null">
- AND register_date >= #{startDate}
- </if>
- <if test="endDate != null">
- AND register_date <= #{endDate}
- </if>
+ <where>
+ <if test="type != null">
+ AND type = #{type}
+ </if>
+ <if test="startDate != null">
+ AND register_date >= #{startDate}
+ </if>
+ <if test="endDate != null">
+ AND register_date <= #{endDate}
+ </if>
+ </where>
</select>
<select id="selectRawMaterialExpense" resultType="java.math.BigDecimal">
@@ -281,9 +279,9 @@
<select id="selectSalesLedgerProductTotals" resultType="com.ruoyi.sales.dto.SalesLedgerProductTotalsDto">
SELECT
- slp.sales_ledger_id AS salesLedgerId,
- COALESCE(SUM(slp.quantity), 0) AS totalQuantity,
- COALESCE(SUM(COALESCE(slp.settle_total_area, slp.actual_total_area, 0)), 0) AS totalArea
+ slp.sales_ledger_id AS salesLedgerId,
+ COALESCE(SUM(slp.quantity), 0) AS totalQuantity,
+ COALESCE(SUM(COALESCE(slp.settle_total_area, slp.actual_total_area, 0)), 0) AS totalArea
FROM sales_ledger_product slp
WHERE slp.sales_ledger_id IN
<foreach collection="salesLedgerIds" item="id" open="(" separator="," close=")">
--
Gitblit v1.9.3