feat(wms): 实现库位层级查询功能

- 修改WmsMaterialCoilServiceImpl中的查询逻辑,支持库位层级关系处理
- 新增getWarehouseIdsIncludingChildren方法获取库位及其子库位ID列表
- 实现二级库位向下查询所有三级/四级子库位的功能
- 当传入二级库位时使用IN查询匹配该库位及所有子库位的钢卷记录
- 完善库位类型判断逻辑,支持一至四级库位的不同查询策略
This commit is contained in:
2026-01-12 11:52:06 +08:00
parent 7d4d85e9d6
commit 13e7fa0cd4

View File

@@ -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<Long> 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<Long> 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<WmsActualWarehouseVo> children = actualWarehouseService.queryList(bo);
// 提取子库位ID即可
return children.stream()
.map(WmsActualWarehouseVo::getActualWarehouseId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
// 一级库位或其他类型返回自身ID
return Collections.singletonList(actualWarehouseId);
}
/**
* 查询钢卷物料表列表
*/