feat(WmsStockMapper): 优化库存查询逻辑支持空库位筛选
- 添加条件判断只在传入正常库位ID时创建CTE查询 - 实现传入-1时的特殊处理逻辑,过滤actual_warehouse_id为空的记录 - 使用choose-when结构区分不同库区过滤场景 - 保留原有递归查询功能用于正常库位ID的情况 - 添加注释说明库区过滤的两种不同情况
This commit is contained in:
@@ -91,7 +91,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
ORDER BY totalQuantity DESC
|
||||
</select>
|
||||
<select id="selectVoPagePlusActual" resultType="com.klp.domain.vo.WmsStockVo">
|
||||
<if test="rootWarehouseId != null">
|
||||
<!-- 只在传入正常库位ID时创建CTE,传入-1时不需要CTE -->
|
||||
<if test="rootWarehouseId != null and rootWarehouseId != -1">
|
||||
WITH RECURSIVE aw_tree AS (
|
||||
SELECT aw.actual_warehouse_id
|
||||
FROM wms_actual_warehouse aw
|
||||
@@ -139,9 +140,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
SUM(CASE WHEN mc.status = 1 THEN 1 ELSE 0 END) AS onTheWay
|
||||
FROM wms_material_coil mc FORCE INDEX (idx_mc_fixed_group)
|
||||
${ew.customSqlSegment}
|
||||
<!-- 库区过滤条件:分两种情况 -->
|
||||
<if test="rootWarehouseId != null">
|
||||
-- 过滤仓库ID:仅包含CTE查询出的根/子仓库
|
||||
AND mc.actual_warehouse_id IN (SELECT actual_warehouse_id FROM aw_tree)
|
||||
<choose>
|
||||
<!-- 情况1:传入-1 → 过滤actual_warehouse_id为空的记录(无库区) -->
|
||||
<when test="rootWarehouseId == -1">
|
||||
AND mc.actual_warehouse_id IS NULL
|
||||
</when>
|
||||
<!-- 情况2:传入正常库位ID → 过滤为递归查询的库位列表 -->
|
||||
<otherwise>
|
||||
AND mc.actual_warehouse_id IN (SELECT actual_warehouse_id FROM aw_tree)
|
||||
</otherwise>
|
||||
</choose>
|
||||
</if>
|
||||
GROUP BY mc.actual_warehouse_id, mc.item_type, mc.item_id
|
||||
) g
|
||||
|
||||
Reference in New Issue
Block a user