| | |
| | | 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) |