From 93b93bacbe43fcd2f13884ec02782baf77193d35 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 21 四月 2026 11:05:00 +0800
Subject: [PATCH] feat: 销售台账增加一个宽高搜索,页面加面积、数量的字段展示
---
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml | 122 ++++++++++++++++++++++++++++++----------
1 files changed, 92 insertions(+), 30 deletions(-)
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 64adc3f..e7791c9 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -104,42 +104,88 @@
</where>
order by slp.register_date desc
</select>
+
<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(NULLIF(SUM(t1.return_quantity), 0), 0) AS return_quantity,
- COALESCE(SUM(t2.total_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 purchase_return_order_products as t1 on t1.sales_ledger_product_id = slp.id
- left join purchase_return_orders as t2 on t2.id = t1.purchase_return_order_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>
- <!-- 鎸変骇鍝佸ぇ绫诲垎缁勮仛鍚� -->
- GROUP BY slp.product_category
- <!-- 鎸変骇鍝佸ぇ绫绘帓搴� -->
- ORDER BY slp.product_category
+ <!-- 閲囪喘鏃ユ湡绛涢�夛細鍙�夋潯浠� -->
+ <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
+ ORDER BY
+ 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
+ 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
+ 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>
+ </select>
+
<select id="selectProductBomStructure" resultType="com.ruoyi.sales.dto.LossProductModelDto">
select
a.model,
@@ -232,4 +278,20 @@
FROM product_tree);
</select>
+
+ <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
+ FROM sales_ledger_product slp
+ WHERE slp.sales_ledger_id IN
+ <foreach collection="salesLedgerIds" item="id" open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ <if test="type != null">
+ AND slp.type = #{type}
+ </if>
+ GROUP BY slp.sales_ledger_id
+ </select>
</mapper>
--
Gitblit v1.9.3