From f4b0b1d7204f8eae21fdedff35a839fdc3104774 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 29 Jul 2025 16:34:20 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=92=E5=BD=92=E8=B0=83=E7=94=A8=E6=AF=8F?= =?UTF-8?q?=E4=B8=AA=E5=AD=90=E8=8A=82=E7=82=B9=E4=BF=9D=E8=AF=81=E7=88=B6?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=8F=AF=E4=BB=A5=E6=8B=BF=E5=88=B0=E6=89=80?= =?UTF-8?q?=E6=9C=89=E5=AD=90=E8=8A=82=E7=82=B9=E7=9A=84=E8=AF=A6=E7=BB=86?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../klp/controller/WmsStockController.java | 11 ++++ .../klp/service/impl/WmsStockServiceImpl.java | 51 ++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/controller/WmsStockController.java b/klp-wms/src/main/java/com/klp/controller/WmsStockController.java index f7a2741c..355295b4 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsStockController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsStockController.java @@ -97,4 +97,15 @@ public class WmsStockController extends BaseController { @PathVariable Long[] stockIds) { return toAjax(iWmsStockService.deleteWithValidByIds(Arrays.asList(stockIds), true)); } + + /** + * 测试递归查询功能 + */ + @GetMapping("/test/warehouse/{warehouseId}") + public R testWarehouseQuery(@PathVariable Long warehouseId) { + WmsStockBo bo = new WmsStockBo(); + bo.setWarehouseId(warehouseId); + List list = iWmsStockService.queryList(bo); + return R.ok("查询到 " + list.size() + " 条库存记录,仓库ID: " + warehouseId); + } } 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 8be183c8..10314a42 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 @@ -13,13 +13,16 @@ import org.springframework.stereotype.Service; import com.klp.domain.bo.WmsStockBo; import com.klp.domain.vo.WmsStockVo; import com.klp.domain.WmsStock; +import com.klp.domain.WmsWarehouse; import com.klp.mapper.WmsStockMapper; +import com.klp.mapper.WmsWarehouseMapper; import com.klp.service.IWmsStockService; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.ArrayList; /** * 库存:原材料/产品与库区/库位的存放关系Service业务层处理 @@ -32,6 +35,7 @@ import java.util.Collection; public class WmsStockServiceImpl implements IWmsStockService { private final WmsStockMapper baseMapper; + private final WmsWarehouseMapper warehouseMapper; /** * 查询库存:原材料/产品与库区/库位的存放关系 @@ -65,8 +69,16 @@ public class WmsStockServiceImpl implements IWmsStockService { QueryWrapper qw = Wrappers.query(); // 使用普通 QueryWrapper qw.eq("s.del_flag", 0); // 手动添加逻辑删除条件 - // 2. 其他条件也明确指定表别名 s(因为都是 wms_stock 表的字段) - qw.eq(bo.getWarehouseId() != null, "s.warehouse_id", bo.getWarehouseId()); + // 处理仓库ID查询,支持递归查询子节点 + if (bo.getWarehouseId() != null) { + List warehouseIds = getWarehouseIdsWithChildren(bo.getWarehouseId()); + if (warehouseIds.size() == 1) { + qw.eq("s.warehouse_id", warehouseIds.get(0)); + } else { + qw.in("s.warehouse_id", warehouseIds); + } + } + qw.eq(StringUtils.isNotBlank(bo.getItemType()), "s.item_type", bo.getItemType()); qw.eq(bo.getItemId() != null, "s.item_id", bo.getItemId()); qw.eq(bo.getQuantity() != null, "s.quantity", bo.getQuantity()); @@ -122,4 +134,39 @@ public class WmsStockServiceImpl implements IWmsStockService { public BigDecimal getStockByItemId(Long rawMaterialId) { return baseMapper.getStockByItemId(rawMaterialId); } + + /** + * 获取指定仓库ID及其所有子仓库ID + * @param warehouseId 仓库ID + * @return 包含当前仓库ID和所有子仓库ID的列表 + */ + private List getWarehouseIdsWithChildren(Long warehouseId) { + List warehouseIds = new ArrayList<>(); + warehouseIds.add(warehouseId); // 添加当前仓库ID + + // 递归获取所有子仓库ID + getChildWarehouseIds(warehouseId, warehouseIds); + + return warehouseIds; + } + + /** + * 递归获取子仓库ID + * @param parentId 父仓库ID + * @param warehouseIds 仓库ID列表(用于收集结果) + */ + private void getChildWarehouseIds(Long parentId, List warehouseIds) { + // 查询直接子仓库 + List children = warehouseMapper.selectList( + Wrappers.lambdaQuery() + .eq(WmsWarehouse::getParentId, parentId) + .eq(WmsWarehouse::getDelFlag, 0) + ); + + // 递归处理每个子仓库 + for (WmsWarehouse child : children) { + warehouseIds.add(child.getWarehouseId()); + getChildWarehouseIds(child.getWarehouseId(), warehouseIds); + } + } }