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