From 875adbd59a28453cdf443c3244e2691ad1dd02ac Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 17 九月 2026 00:13:08 +0800
Subject: [PATCH] fix: 产品父类名称适配
---
src/main/resources/mapper/stock/StockInventoryMapper.xml | 192 +++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 174 insertions(+), 18 deletions(-)
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 9db56f9..21e70c7 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -52,31 +52,83 @@
where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity}
</update>
<select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto">
- select si.id,
+ WITH RECURSIVE get_root AS (
+ SELECT
+ id,
+ parent_id,
+ id AS root_id
+ FROM product
+ WHERE parent_id IS NULL -- 鏍硅妭鐐�
+ UNION ALL
+ SELECT
+ p.id,
+ p.parent_id,
+ gr.root_id
+ FROM product p
+ INNER JOIN get_root gr ON p.parent_id = gr.id
+ )
+ SELECT
+ si.id,
si.qualitity,
- COALESCE(si.locked_quantity, 0) as locked_quantity,
+ COALESCE(si.locked_quantity, 0) AS locked_quantity,
si.product_model_id,
si.create_time,
si.update_time,
- COALESCE(si.warn_num, 0) as warn_num,
+ COALESCE(si.warn_num, 0) AS warn_num,
si.version,
- (si.qualitity - COALESCE(si.locked_quantity, 0)) as un_locked_quantity,
+ (si.qualitity - COALESCE(si.locked_quantity, 0)) AS un_locked_quantity,
pm.model,
si.remark,
pm.unit,
- p.product_name
- from stock_inventory si
- left join product_model pm on si.product_model_id = pm.id
- left join product p on pm.product_id = p.id
- where 1 = 1
- <if test="ew.productName != null and ew.productName !=''">
- and p.product_name like concat('%',#{ew.productName},'%')
- </if>
+ pm.uid_no AS uidNo,
+ p.product_name,
+ si.batch_no,
+ si.customer,
+ rp.product_type AS productScope,
+ si.production_date
+ FROM
+ stock_inventory si
+ LEFT JOIN product_model pm ON si.product_model_id = pm.id
+ LEFT JOIN product p ON pm.product_id = p.id
+ LEFT JOIN get_root gr ON gr.id = p.id
+ LEFT JOIN product rp ON rp.id = gr.root_id
+ <where>
+ <if test="ew.productName != null and ew.productName != ''">
+ AND p.product_name LIKE CONCAT('%', #{ew.productName}, '%')
+ </if>
+ <if test="ew.model != null and ew.model != ''">
+ AND pm.model LIKE CONCAT('%', #{ew.model}, '%')
+ </if>
+ <if test="ew.uidNo != null and ew.uidNo != ''">
+ AND pm.uid_no LIKE CONCAT('%', #{ew.uidNo}, '%')
+ </if>
+ <if test="ew.batchNo != null and ew.batchNo != ''">
+ AND si.batch_no LIKE CONCAT('%', #{ew.batchNo}, '%')
+ </if>
+ <if test="ew.productScope != null and ew.productScope != ''">
+ <choose>
+ <when test="ew.productScope == '鎴愬搧'">
+ AND rp.product_type = '鎴愬搧'
+ </when>
+ <when test="ew.productScope == '鍗婃垚鍝�'">
+ AND rp.product_type = '鍗婃垚鍝�'
+ </when>
+ <when test="ew.productScope == '鍘熸潗鏂�'">
+ AND (rp.product_type IS NULL
+ OR (rp.product_type != '鎴愬搧' AND rp.product_type != '鍗婃垚鍝�'))
+ </when>
+ </choose>
+ </if>
+ </where>
</select>
<select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockInventoryExportData">
select si.qualitity,
pm.model,
pm.unit,
+ si.batchNo,
+ pm.uid_no,
+ si.production_date,
+ si.customer,
p.product_name,
coalesce(si.warn_num, 0) as warn_num,
coalesce(si.locked_quantity, 0) as locked_quantity,
@@ -94,6 +146,7 @@
select sir.*,si.qualitity as current_stock,
pm.model,
pm.unit,
+ pm.uid_no as uidNo,
p.product_name,
su.nick_name as create_by
from
@@ -211,30 +264,133 @@
AND create_time <= #{endDate}) AS combined_counts
</select>
+ <!-- 浜у搧搴撴牴鑺傜偣鍒嗙被锛�0-鍘熸潗鏂� 1-鍗婃垚鍝� 2-鎴愬搧锛堝厛鍖归厤鍗婃垚鍝侊紝閬垮厤琚垚鍝佸寘鍚級 -->
+ <sql id="productTypeTree">
+ WITH RECURSIVE product_tree AS (SELECT id
+ FROM product
+ WHERE parent_id IS NULL
+ AND ((#{modelType} = 0 AND product_name LIKE '%鍘熸潗鏂�%')
+ OR (#{modelType} = 1 AND product_name LIKE '%鍗婃垚鍝�%')
+ OR (#{modelType} = 2 AND product_name LIKE '%鎴愬搧%' AND product_name NOT LIKE '%鍗婃垚鍝�%'))
+ UNION ALL
+ SELECT p.id
+ FROM product p
+ INNER JOIN product_tree pt ON p.parent_id = pt.id)
+ </sql>
+
<select id="selectDailyStockInCounts" resultType="java.util.Map">
+ <include refid="productTypeTree"/>
SELECT DATE(sir.create_time) AS date,
SUM(sir.stock_in_num) AS count
FROM stock_in_record sir
JOIN product_model pm ON sir.product_model_id = pm.id
- JOIN product p ON pm.product_id = p.id
- WHERE (p.parent_id = #{rootCategoryId} OR p.id = #{rootCategoryId})
- AND sir.create_time >= #{startDate}
+ JOIN product_tree pt ON pt.id = pm.product_id
+ WHERE sir.create_time >= #{startDate}
AND sir.create_time <= #{endDate}
GROUP BY DATE(sir.create_time)
ORDER BY DATE(sir.create_time) ASC
</select>
<select id="selectDailyStockOutCounts" resultType="java.util.Map">
+ <include refid="productTypeTree"/>
SELECT DATE(sor.create_time) AS date,
SUM(sor.stock_out_num) AS count
FROM stock_out_record sor
JOIN product_model pm ON sor.product_model_id = pm.id
- JOIN product p ON pm.product_id = p.id
- WHERE (p.parent_id = #{rootCategoryId} OR p.id = #{rootCategoryId})
- AND sor.create_time >= #{startDate}
+ JOIN product_tree pt ON pt.id = pm.product_id
+ WHERE sor.create_time >= #{startDate}
AND sor.create_time <= #{endDate}
GROUP BY DATE(sor.create_time)
ORDER BY DATE(sor.create_time) ASC
</select>
+ <select id="getStockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto">
+ SELECT
+ p.product_name,
+ pm.model,
+ pm.unit,
+ si.*
+ FROM
+ product_model pm
+ LEFT JOIN product p ON p.id = pm.product_id
+ LEFT JOIN stock_inventory si ON si.product_model_id = pm.id
+ WHERE
+ pm.id IN
+ <foreach collection="ids" item="id" open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ ORDER BY pm.id
+ </select>
+
+ <select id="getMaterials" resultType="com.ruoyi.stock.dto.StockInventoryDto">
+ SELECT
+ si.id,
+ si.qualitity,
+ COALESCE(si.locked_quantity, 0) AS locked_quantity,
+ si.product_model_id,
+ si.create_time,
+ si.update_time,
+ COALESCE(si.warn_num, 0) AS warn_num,
+ si.version,
+ (si.qualitity - COALESCE(si.locked_quantity, 0)) AS un_locked_quantity,
+ pm.model,
+ si.remark,
+ pm.unit,
+ pm.uid_no AS uidNo,
+ p.product_name,
+ p1.product_name AS parentName,
+ si.batch_no,
+ si.customer
+ FROM
+ stock_inventory si
+ LEFT JOIN product_model pm ON si.product_model_id = pm.id
+ LEFT JOIN product p ON pm.product_id = p.id
+ LEFT JOIN product p1 ON p1.id = p.parent_id
+ <where>
+ <if test="ew.batchNo != null and ew.batchNo !=''">
+ and si.batch_no like concat('%',#{ew.batchNo},'%')
+ </if>
+ <if test="ew.customer != null and ew.customer !=''">
+ and si.customer like concat('%',#{ew.customer},'%')
+ </if>
+ </where>
+ </select>
+
+ <select id="getStockInventoryAll" resultType="com.ruoyi.stock.dto.StockInventoryDto">
+ SELECT
+ si.id,
+ si.qualitity,
+ COALESCE(si.locked_quantity, 0) AS locked_quantity,
+ si.product_model_id,
+ si.create_time,
+ si.update_time,
+ COALESCE(si.warn_num, 0) AS warn_num,
+ si.version,
+ (si.qualitity - COALESCE(si.locked_quantity, 0)) AS un_locked_quantity,
+ pm.id as productModelId,
+ pm.model,
+ si.remark,
+ pm.unit,
+ pm.uid_no AS uidNo,
+ p.id AS product_id,
+ p.product_name,
+ p.parent_id AS parent_id,
+ p1.product_name AS parentName,
+ si.batch_no,
+ si.customer,
+ si.production_date,
+ pm.validity_period
+ FROM
+ stock_inventory si
+ LEFT JOIN product_model pm ON si.product_model_id = pm.id
+ LEFT JOIN product p ON pm.product_id = p.id
+ LEFT JOIN product p1 ON p1.id = p.parent_id
+ <where>
+ <if test="ew.productName != null and ew.productName != ''">
+ AND p.product_name LIKE CONCAT('%', #{ew.productName}, '%')
+ </if>
+ </where>
+ </select>
+
+
</mapper>
--
Gitblit v1.9.3