递归调用每个子节点保证父节点可以拿到所有子节点的详细信息

This commit is contained in:
2025-07-29 16:34:20 +08:00
parent 8692f875f5
commit f4b0b1d720
2 changed files with 60 additions and 2 deletions

View File

@@ -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<String> testWarehouseQuery(@PathVariable Long warehouseId) {
WmsStockBo bo = new WmsStockBo();
bo.setWarehouseId(warehouseId);
List<WmsStockVo> list = iWmsStockService.queryList(bo);
return R.ok("查询到 " + list.size() + " 条库存记录仓库ID: " + warehouseId);
}
}

View File

@@ -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<WmsStock> 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<Long> 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<Long> getWarehouseIdsWithChildren(Long warehouseId) {
List<Long> 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<Long> warehouseIds) {
// 查询直接子仓库
List<WmsWarehouse> children = warehouseMapper.selectList(
Wrappers.<WmsWarehouse>lambdaQuery()
.eq(WmsWarehouse::getParentId, parentId)
.eq(WmsWarehouse::getDelFlag, 0)
);
// 递归处理每个子仓库
for (WmsWarehouse child : children) {
warehouseIds.add(child.getWarehouseId());
getChildWarehouseIds(child.getWarehouseId(), warehouseIds);
}
}
}