递归调用每个子节点保证父节点可以拿到所有子节点的详细信息
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user