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); + } /** * 查询钢卷物料表列表 */