From 13e7fa0cd40e341c6302e152de3616da271f1c16 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 12 Jan 2026 11:52:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E5=AE=9E=E7=8E=B0=E5=BA=93?= =?UTF-8?q?=E4=BD=8D=E5=B1=82=E7=BA=A7=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改WmsMaterialCoilServiceImpl中的查询逻辑,支持库位层级关系处理 - 新增getWarehouseIdsIncludingChildren方法获取库位及其子库位ID列表 - 实现二级库位向下查询所有三级/四级子库位的功能 - 当传入二级库位时使用IN查询匹配该库位及所有子库位的钢卷记录 - 完善库位类型判断逻辑,支持一至四级库位的不同查询策略 --- .../impl/WmsMaterialCoilServiceImpl.java | 55 ++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index a74dc47c..bfbece08 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -350,8 +350,16 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 当actualWarehouseId为-1时,查询actual_warehouse_id为空的记录(无库区) qw.isNull("mc.actual_warehouse_id"); } else { - // 正常传值时,匹配具体的actualWarehouseId - qw.eq("mc.actual_warehouse_id", bo.getActualWarehouseId()); + // 正常传值时,需要处理库位的层级关系 + // 如果传入的是二级库位,需要查询其下所有的三级/四级库位 + List warehouseIds = getWarehouseIdsIncludingChildren(bo.getActualWarehouseId()); + if (warehouseIds.isEmpty()) { + // 如果没有找到任何库位,则直接匹配该ID + qw.eq("mc.actual_warehouse_id", bo.getActualWarehouseId()); + } else { + // 使用IN查询包含该库位及其所有子库位的钢卷 + qw.in("mc.actual_warehouse_id", warehouseIds); + } } } // 新增查询逻辑也就是当saleId未空时候 @@ -544,6 +552,49 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return '(' + String.join(" OR ", parts) + ')'; } + /** + * 获取库位及其所有子库位的ID列表 + * 逻辑参考 WmsActualWarehouseServiceImpl.queryList 中的拆分处理逻辑: + * 1. 如果是一级/三级/四级库位,直接返回该ID + * 2. 如果是二级库位: + * 查询其下的子库位(通常是四级库位) + * + * @param actualWarehouseId 库位ID + * @return 包含该库位及其所有子库位的ID列表 + */ + private List getWarehouseIdsIncludingChildren(Long actualWarehouseId) { + if (actualWarehouseId == null || actualWarehouseId <= 0) { + return new ArrayList<>(); + } + + // 第一步:查询当前库位的基础信息,判断类型 + WmsActualWarehouseVo warehouse = actualWarehouseService.queryById(actualWarehouseId); + if (warehouse == null) { + return Collections.singletonList(actualWarehouseId); + } + + Long warehouseType = warehouse.getActualWarehouseType(); + // 三级/四级库位:直接返回自身ID(无下级) + if (warehouseType != null && (warehouseType == 3L || warehouseType == 4L)) { + return Collections.singletonList(actualWarehouseId); + } + + // 二级库位:复用 queryList 已实现的“子库位+拆分替换”逻辑 + if (warehouseType != null && warehouseType == 2L) { + WmsActualWarehouseBo bo = new WmsActualWarehouseBo(); + bo.setParentId(actualWarehouseId); + // 这里 queryList 已经处理了:拆分库位替换为子库位、返回有效子库位列表 + List children = actualWarehouseService.queryList(bo); + // 提取子库位ID即可 + return children.stream() + .map(WmsActualWarehouseVo::getActualWarehouseId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + // 一级库位或其他类型:返回自身ID + return Collections.singletonList(actualWarehouseId); + } /** * 查询钢卷物料表列表 */