From 51506bbb667294c3a540a06bde562bbe85abab82 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 18 Dec 2025 09:41:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(stock):=20=E4=BC=98=E5=8C=96=E5=AE=9E?= =?UTF-8?q?=E9=99=85=E5=BA=93=E5=8C=BA=E6=9F=A5=E8=AF=A2=E9=80=9F=E7=8E=87?= =?UTF-8?q?=E4=BD=BF=E7=94=A8CTE=E9=80=92=E5=BD=92=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 WmsStockMapper 接口,增加 rootWarehouseId 参数用于限定查询范围 - 优化 WmsStockMapper.xml 中的 SQL 查询逻辑,引入 CTE 递归查询子仓库数据 - 调整查询语句结构,将分组统计与关联查询分离以提升性能 - 移除 Java 层递归获取子仓库 ID 的逻辑,改为数据库端处理 - 强制使用指定索引 idx_mc_fixed_group 提高查询效率 - 更新服务实现类传参逻辑,传递实际仓库 ID 用于构建查询条件 --- .../java/com/klp/mapper/WmsStockMapper.java | 4 +- .../klp/service/impl/WmsStockServiceImpl.java | 44 +-------- .../resources/mapper/klp/WmsStockMapper.xml | 90 ++++++++++++------- 3 files changed, 64 insertions(+), 74 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsStockMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsStockMapper.java index a97a86f2..31e1440b 100644 --- a/klp-wms/src/main/java/com/klp/mapper/WmsStockMapper.java +++ b/klp-wms/src/main/java/com/klp/mapper/WmsStockMapper.java @@ -35,5 +35,7 @@ public interface WmsStockMapper extends BaseMapperPlus selectStockDistribution(@Param("itemType") String itemType, @Param("itemId") Long itemId); - Page selectVoPagePlusActual(Page build,@Param("ew") Wrapper lqw); + Page selectVoPagePlusActual(Page build, + @Param("ew") Wrapper lqw, + @Param("rootWarehouseId") Long rootWarehouseId); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsStockServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsStockServiceImpl.java index 81b80595..5df191ba 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsStockServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsStockServiceImpl.java @@ -59,61 +59,25 @@ public class WmsStockServiceImpl implements IWmsStockService { @Override public TableDataInfo queryPageListActual(WmsStockBo bo, PageQuery pageQuery) { QueryWrapper lqw = buildQueryWrapperPlusActual(bo); - Page result = baseMapper.selectVoPagePlusActual(pageQuery.build(), lqw); + Page result = baseMapper.selectVoPagePlusActual(pageQuery.build(), lqw, bo.getActualWarehouseId()); return TableDataInfo.build(result); } private QueryWrapper buildQueryWrapperPlusActual(WmsStockBo bo) { // 注意:这里改用 QueryWrapper 而非 LambdaQueryWrapper - QueryWrapper qw = Wrappers.query(); // 使用普通 QueryWrapper - + QueryWrapper qw = Wrappers.query(); // 固定条件:未删除的现存数据 qw.eq("mc.del_flag", 0); qw.eq("mc.data_type", 1); qw.eq("mc.status", 0); qw.in("mc.material_type", Arrays.asList("成品", "原料")); - // 处理仓库ID查询,支持递归查询子节点 - if (bo.getActualWarehouseId() != null) { - List warehouseIds = getActualWarehouseIdsWithChildren(bo.getActualWarehouseId()); - if (warehouseIds.size() == 1) { - qw.eq("mc.actual_warehouse_id", warehouseIds.get(0)); - } else { - qw.in("mc.actual_warehouse_id", warehouseIds); - } - } + // 递归库区过滤下放到 SQL (CTE) 中处理,避免 Java 侧递归造成超大 IN 列表 qw.eq(StringUtils.isNotBlank(bo.getItemType()), "mc.item_type", bo.getItemType()); qw.eq(bo.getItemId() != null, "mc.item_id", bo.getItemId()); - // 优化模糊查询为前缀匹配,便于走索引(若有) + // 优化模糊查询为前缀匹配,便于走索引 qw.likeRight(StringUtils.isNotBlank(bo.getBatchNo()), "mc.enter_coil_no", bo.getBatchNo()); - // 分组改由 SQL 中显式控制,避免在 Wrapper 中拼装大量分组字段 - return qw; } - private List getActualWarehouseIdsWithChildren(Long actualWarehouseId) { - - List actualWarehouseIds = new ArrayList<>(); - actualWarehouseIds.add(actualWarehouseId); // 添加当前仓库ID - - // 递归获取所有子仓库ID - getChildActualWarehouseIds(actualWarehouseId,actualWarehouseIds); - - return actualWarehouseIds; - } - private void getChildActualWarehouseIds(Long parentId, List actualWarehouseIds) { - // 查询直接子仓库 - List children = actualWarehouseMapper.selectList( - Wrappers.lambdaQuery() - .eq(WmsActualWarehouse::getParentId, parentId) - .eq(WmsActualWarehouse::getDelFlag, 0) - ); - - // 递归处理每个子仓库 - for (WmsActualWarehouse child : children) { - actualWarehouseIds.add(child.getActualWarehouseId()); - getChildActualWarehouseIds(child.getActualWarehouseId(), actualWarehouseIds); - } - } - /** * 查询库存:原材料/产品与库区/库位的存放关系列表 */ diff --git a/klp-wms/src/main/resources/mapper/klp/WmsStockMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsStockMapper.xml index 869610bd..5268fe66 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsStockMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsStockMapper.xml @@ -91,40 +91,64 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ORDER BY totalQuantity DESC