diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java index c35199ec8..ad10a2a0b 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsMaterialCoilBo.java @@ -157,6 +157,11 @@ public class WmsMaterialCoilBo extends BaseEntity { private Long actualWarehouseId; + /** + * 实际库区IDs(逗号分隔) + */ + private String actualWarehouseIds; + //材料类型 @NotBlank(message = "材料类型不能为空", groups = { AddGroup.class, EditGroup.class }) private String materialType; 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 408f70063..20041efe5 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 @@ -1076,24 +1076,47 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { qw.isNotNull("mc.transfer_type"); qw.ne("mc.transfer_type", ""); } - // 如果actualWarehouseId不为空,则根据实际库区ID进行查询 如果为-1,则查询无库区的数据 + // 统一处理 actualWarehouseId 与 actualWarehouseIds(实际库区): + // 将单值和逗号分隔的多值统一收集,支持层级展开与-1空库区查询 + List actualWarehouseIdList = new ArrayList<>(); if (bo.getActualWarehouseId() != null) { - if (bo.getActualWarehouseId() == -1) { - // 当actualWarehouseId为-1时,查询actual_warehouse_id为空的记录(无库区) - qw.isNull("mc.actual_warehouse_id"); - } else { - // 正常传值时,需要处理库位的层级关系 - // 如果传入的是二级库位,需要查询其下所有的三级/四级库位 - 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); + actualWarehouseIdList.add(bo.getActualWarehouseId()); + } + if (StringUtils.isNotBlank(bo.getActualWarehouseIds())) { + String[] actualWarehouseIdArray = bo.getActualWarehouseIds().split(","); + for (String actualWarehouseIdStr : actualWarehouseIdArray) { + if (StringUtils.isNotBlank(actualWarehouseIdStr)) { + try { + actualWarehouseIdList.add(Long.parseLong(actualWarehouseIdStr.trim())); + } catch (NumberFormatException ignore) { + } } } } + if (!actualWarehouseIdList.isEmpty()) { + List expandedIds = new ArrayList<>(); + boolean hasNullCondition = false; + for (Long awId : actualWarehouseIdList) { + if (awId != null && awId == -1) { + hasNullCondition = true; + } else if (awId != null && awId > 0) { + List children = getWarehouseIdsIncludingChildren(awId); + if (children.isEmpty()) { + expandedIds.add(awId); + } else { + expandedIds.addAll(children); + } + } + } + if (hasNullCondition && expandedIds.isEmpty()) { + qw.isNull("mc.actual_warehouse_id"); + } else if (hasNullCondition && !expandedIds.isEmpty()) { + qw.and(w -> w.isNull("mc.actual_warehouse_id") + .or().in("mc.actual_warehouse_id", expandedIds.stream().distinct().collect(Collectors.toList()))); + } else if (!expandedIds.isEmpty()) { + qw.in("mc.actual_warehouse_id", expandedIds.stream().distinct().collect(Collectors.toList())); + } + } // // 新增查询逻辑也就是当saleId未空时候 // if (bo.getSaleId() != null) { // if (bo.getSaleId() == -1) {