17 小时以前 e731bf5f64d71ed93a570d505c52dc44d491175e
src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -604,13 +604,25 @@
                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 &gt;= #{startDate}
          AND sir.create_time &lt;= #{endDate}
        GROUP BY DATE(sir.create_time)
@@ -623,7 +635,15 @@
        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 &gt;= #{startDate}
          AND sor.create_time &lt;= #{endDate}
        GROUP BY DATE(sor.create_time)