| | |
| | | </if> |
| | | </select> |
| | | |
| | | <!-- 报废品选料:只查产品树「危废处置次生危废」大类(含其所有子节点)下的合格库存,带批号。 |
| | | 大类名按业务口径写死在这里,改口径只需改这一处。 |
| | | 该查询以 WITH 开头,而数据权限拦截器只处理 select 开头的 SQL,因此不会追加 dept_id/create_user, |
| | | 与「库存是共用基础数据、选料不应受建单人限制」的口径一致;保留 /*data_scope*/ 标记让这个意图显式可读。 |
| | | 不影响原 pagestockInventory --> |
| | | <select id="selectScrapStockPage" resultType="com.ruoyi.stock.dto.StockInventoryDto"> |
| | | WITH RECURSIVE scrap_product_tree AS ( |
| | | SELECT id |
| | | FROM product |
| | | WHERE product_name = '危废处置次生危废' |
| | | UNION ALL |
| | | SELECT p.id |
| | | FROM product p |
| | | INNER JOIN scrap_product_tree t ON p.parent_id = t.id |
| | | ) |
| | | select /*data_scope*/ si.id, |
| | | si.product_model_id, |
| | | si.batch_no, |
| | | si.qualitity, |
| | | COALESCE(si.locked_quantity, 0) as locked_quantity, |
| | | (si.qualitity - COALESCE(si.locked_quantity, 0)) as un_locked_quantity, |
| | | si.remark, |
| | | si.version, |
| | | pm.model, |
| | | 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 pm.product_id in (select id from scrap_product_tree) |
| | | <if test="ew.productModelId != null"> |
| | | and si.product_model_id = #{ew.productModelId} |
| | | </if> |
| | | <if test="ew.batchNo != null and ew.batchNo != ''"> |
| | | and si.batch_no like concat('%',#{ew.batchNo},'%') |
| | | </if> |
| | | <if test="ew.productName != null and ew.productName != ''"> |
| | | and p.product_name like concat('%',#{ew.productName},'%') |
| | | </if> |
| | | order by si.update_time desc |
| | | </select> |
| | | |
| | | <select id="pageListCombinedStockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto"> |
| | | WITH RECURSIVE product_tree AS ( |
| | | SELECT id |
| | |
| | | product_name, |
| | | product_id, |
| | | 'combined' as stockType, |
| | | ( |
| | | select sir.tank_no |
| | | from stock_in_record sir |
| | | where sir.product_model_id = combined.product_model_id |
| | | order by sir.id desc |
| | | limit 1 |
| | | ) as tank_no, |
| | | ( |
| | | select sir.oil_product |
| | | from stock_in_record sir |
| | |
| | | unit, |
| | | product_name, |
| | | product_id, |
| | | 'combined' as stockType |
| | | 'combined' as stockType, |
| | | ( |
| | | select sir.tank_no |
| | | from stock_in_record sir |
| | | where sir.product_model_id = combined.product_model_id |
| | | and (sir.batch_no = combined.batch_no or (combined.batch_no is null and sir.batch_no is null)) |
| | | order by sir.id desc |
| | | limit 1 |
| | | ) as tank_no |
| | | from ( |
| | | select |
| | | si.batch_no, |
| | |
| | | AND create_time <= #{endDate}) AS combined_counts |
| | | </select> |
| | | |
| | | <!-- 出入库趋势:产品分类必须递归取整棵子树。 |
| | | 产品树是「大类 -> 品类 -> 具体产品」三层,产品型号(product_model)挂在叶子产品上, |
| | | 只比对直接子节点(p.parent_id = root)永远命中不到型号,趋势图恒为空。 |
| | | 递归 CTE 写在括号内,让语句仍以 SELECT 开头,数据权限拦截器照常对 stock_in_record 生效 --> |
| | | <select id="selectDailyStockInCounts" resultType="java.util.Map"> |
| | | 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}) |
| | | WHERE p.id IN (WITH RECURSIVE product_tree AS (SELECT id |
| | | FROM product |
| | | WHERE id = #{rootCategoryId} |
| | | UNION ALL |
| | | SELECT p2.id |
| | | FROM product p2 |
| | | JOIN product_tree pt ON p2.parent_id = pt.id) |
| | | SELECT id |
| | | FROM product_tree) |
| | | AND sir.create_time >= #{startDate} |
| | | AND sir.create_time <= #{endDate} |
| | | GROUP BY DATE(sir.create_time) |
| | |
| | | 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}) |
| | | WHERE p.id IN (WITH RECURSIVE product_tree AS (SELECT id |
| | | FROM product |
| | | WHERE id = #{rootCategoryId} |
| | | UNION ALL |
| | | SELECT p2.id |
| | | FROM product p2 |
| | | JOIN product_tree pt ON p2.parent_id = pt.id) |
| | | SELECT id |
| | | FROM product_tree) |
| | | AND sor.create_time >= #{startDate} |
| | | AND sor.create_time <= #{endDate} |
| | | GROUP BY DATE(sor.create_time) |
| | |
| | | product_name, |
| | | product_id |
| | | order by |
| | | batch_no |
| | | MAX(update_time) desc |
| | | </select> |
| | | |
| | | </mapper> |