refactor(wms): 优化炉计划钢卷查询逻辑
- 移除 WmsFurnacePlanCoilVo 中的实际库位相关字段 - 添加 WmsMaterialCoilVo 类型的 coil 字段用于存储钢卷完整信息 - 将查询逻辑重构为分步骤处理:查询计划钢卷、批量获取钢卷信息、构建库区映射、填充数据 - 使用 WmsMaterialCoilVo 替代 WmsMaterialCoil 进行数据传输 - 新增 buildLogicWarehouseNameMap 和 fillCoilInfo 辅助方法提升代码可读性 - 通过批量查询减少数据库访问次数,提升查询性能
This commit is contained in:
@@ -37,12 +37,10 @@ public class WmsFurnacePlanCoilVo {
|
||||
@ExcelProperty(value = "入场钢卷号")
|
||||
private String enterCoilNo;
|
||||
|
||||
@ExcelProperty(value = "实际库位ID")
|
||||
private Long actualWarehouseId;
|
||||
|
||||
@ExcelProperty(value = "实际库位")
|
||||
private String actualWarehouseName;
|
||||
|
||||
@ExcelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
// 钢卷全部信息
|
||||
private WmsMaterialCoilVo coil;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.klp.domain.bo.WmsFurnacePlanCoilBo;
|
||||
import com.klp.domain.bo.WmsMaterialCoilBo;
|
||||
import com.klp.domain.vo.WmsFurnacePlanCoilVo;
|
||||
import com.klp.domain.vo.WmsFurnacePlanVo;
|
||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||
import com.klp.mapper.*;
|
||||
import com.klp.service.IWmsFurnacePlanService;
|
||||
import com.klp.service.IWmsMaterialCoilService;
|
||||
@@ -23,10 +24,7 @@ import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -176,59 +174,79 @@ public class WmsFurnacePlanServiceImpl implements IWmsFurnacePlanService {
|
||||
|
||||
@Override
|
||||
public List<WmsFurnacePlanCoilVo> queryPlanCoils(Long planId) {
|
||||
List<WmsFurnacePlanCoilVo> list = planCoilMapper.selectVoList(Wrappers.<WmsFurnacePlanCoil>lambdaQuery()
|
||||
.eq(WmsFurnacePlanCoil::getPlanId, planId));
|
||||
if (list == null || list.isEmpty()) {
|
||||
return list;
|
||||
// 1. 查询计划钢卷关联记录
|
||||
List<WmsFurnacePlanCoilVo> planCoils = planCoilMapper.selectVoList(
|
||||
Wrappers.<WmsFurnacePlanCoil>lambdaQuery()
|
||||
.eq(WmsFurnacePlanCoil::getPlanId, planId)
|
||||
);
|
||||
if (planCoils == null || planCoils.isEmpty()) {
|
||||
return planCoils;
|
||||
}
|
||||
List<Long> coilIds = list.stream()
|
||||
|
||||
// 2. 收集钢卷ID并批量查询钢卷信息
|
||||
List<Long> coilIds = planCoils.stream()
|
||||
.map(WmsFurnacePlanCoilVo::getCoilId)
|
||||
.filter(id -> id != null)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (coilIds.isEmpty()) {
|
||||
return list;
|
||||
return planCoils;
|
||||
}
|
||||
List<WmsMaterialCoil> materialCoils = materialCoilMapper.selectBatchIds(coilIds);
|
||||
java.util.Map<Long, WmsMaterialCoil> coilMap = materialCoils.stream()
|
||||
.collect(Collectors.toMap(WmsMaterialCoil::getCoilId, item -> item, (a, b) -> a));
|
||||
List<Long> actualWarehouseIds = materialCoils.stream()
|
||||
.map(WmsMaterialCoil::getActualWarehouseId)
|
||||
.filter(id -> id != null)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
java.util.Map<Long, String> warehouseMap = actualWarehouseIds.isEmpty()
|
||||
? java.util.Collections.emptyMap()
|
||||
: actualWarehouseMapper.selectBatchIds(actualWarehouseIds).stream()
|
||||
.collect(Collectors.toMap(WmsActualWarehouse::getActualWarehouseId,
|
||||
WmsActualWarehouse::getActualWarehouseName, (a, b) -> a));
|
||||
|
||||
// 查询逻辑库区信息
|
||||
List<Long> logicWarehouseIds = list.stream()
|
||||
.map(WmsFurnacePlanCoilVo::getLogicWarehouseId)
|
||||
.filter(id -> id != null)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
java.util.Map<Long, String> logicWarehouseMap = logicWarehouseIds.isEmpty()
|
||||
? java.util.Collections.emptyMap()
|
||||
: warehouseMapper.selectBatchIds(logicWarehouseIds).stream()
|
||||
.collect(Collectors.toMap(WmsWarehouse::getWarehouseId,
|
||||
WmsWarehouse::getWarehouseName, (a, b) -> a));
|
||||
String coilIdsStr = coilIds.stream()
|
||||
.map(String::valueOf)
|
||||
.collect(Collectors.joining(","));
|
||||
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
|
||||
coilBo.setCoilIds(coilIdsStr);
|
||||
List<WmsMaterialCoilVo> materialCoils = materialCoilService.queryList(coilBo);
|
||||
Map<Long, WmsMaterialCoilVo> coilMap = materialCoils.stream()
|
||||
.collect(Collectors.toMap(WmsMaterialCoilVo::getCoilId, item -> item, (a, b) -> a));
|
||||
|
||||
list.forEach(item -> {
|
||||
WmsMaterialCoil coil = coilMap.get(item.getCoilId());
|
||||
if (coil != null) {
|
||||
item.setEnterCoilNo(coil.getEnterCoilNo());
|
||||
item.setActualWarehouseId(coil.getActualWarehouseId());
|
||||
item.setActualWarehouseName(warehouseMap.get(coil.getActualWarehouseId()));
|
||||
}
|
||||
// 设置逻辑库区名称
|
||||
if (item.getLogicWarehouseId() != null) {
|
||||
item.setLogicWarehouseId(item.getLogicWarehouseId());
|
||||
item.setLogicWarehouseName(logicWarehouseMap.get(item.getLogicWarehouseId()));
|
||||
}
|
||||
});
|
||||
return list;
|
||||
// 3. 批量查询逻辑库区名称
|
||||
Map<Long, String> logicWarehouseMap = buildLogicWarehouseNameMap(
|
||||
planCoils.stream()
|
||||
.map(WmsFurnacePlanCoilVo::getLogicWarehouseId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList())
|
||||
);
|
||||
|
||||
// 4. 填充钢卷信息
|
||||
planCoils.forEach(planCoil -> fillCoilInfo(planCoil, coilMap, logicWarehouseMap));
|
||||
|
||||
return planCoils;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建逻辑库区ID到名称的映射
|
||||
*/
|
||||
private Map<Long, String> buildLogicWarehouseNameMap(List<Long> warehouseIds) {
|
||||
if (warehouseIds.isEmpty()) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return warehouseMapper.selectBatchIds(warehouseIds).stream()
|
||||
.collect(Collectors.toMap(WmsWarehouse::getWarehouseId,
|
||||
WmsWarehouse::getWarehouseName, (a, b) -> a));
|
||||
}
|
||||
|
||||
/**
|
||||
* 填充钢卷信息
|
||||
*/
|
||||
private void fillCoilInfo(
|
||||
WmsFurnacePlanCoilVo planCoil,
|
||||
Map<Long, WmsMaterialCoilVo> coilMap,
|
||||
Map<Long, String> logicWarehouseMap) {
|
||||
// 填充钢卷基本信息(实际库区名称已在钢卷信息中)
|
||||
WmsMaterialCoilVo coil = coilMap.get(planCoil.getCoilId());
|
||||
if (coil != null) {
|
||||
planCoil.setEnterCoilNo(coil.getEnterCoilNo());
|
||||
planCoil.setCoil(coil);
|
||||
}
|
||||
|
||||
// 填充逻辑库区名称
|
||||
if (planCoil.getLogicWarehouseId() != null) {
|
||||
planCoil.setLogicWarehouseName(logicWarehouseMap.get(planCoil.getLogicWarehouseId()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user