perf(WmsTransferOrderItemService): 优化调拨明细信息查询性能
- 使用流式处理批量获取钢卷ID并去重 - 通过单次查询获取所有相关钢卷信息 - 使用Map映射避免循环中的重复数据库查询 - 移除原有的逐条查询逻辑减少数据库交互次数 - 提升列表查询的整体性能表现
This commit is contained in:
@@ -30,6 +30,7 @@ import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.ArrayList;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
@@ -84,7 +85,26 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
public List<WmsTransferOrderItemVo> queryList(WmsTransferOrderItemBo bo) {
|
||||
LambdaQueryWrapper<WmsTransferOrderItem> lqw = buildQueryWrapper(bo);
|
||||
List<WmsTransferOrderItemVo> list = baseMapper.selectVoList(lqw);
|
||||
if (list != null && !list.isEmpty()) {
|
||||
String coilIdsStr = list.stream()
|
||||
.map(WmsTransferOrderItemVo::getCoilId)
|
||||
.filter(Objects::nonNull) // 过滤 null
|
||||
.distinct() // 去重
|
||||
.map(String::valueOf) // Long 转 String
|
||||
.collect(Collectors.joining(",")); // 直接拼接成逗号字符串
|
||||
if (!coilIdsStr.isEmpty()) {
|
||||
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
|
||||
coilBo.setCoilIds(coilIdsStr);
|
||||
List<WmsMaterialCoilVo> coilList = coilService.queryList(coilBo);
|
||||
Map<Long, WmsMaterialCoilVo> coilMap = coilList.stream()
|
||||
.collect(Collectors.toMap(WmsMaterialCoilVo::getCoilId, v -> v));
|
||||
for (WmsTransferOrderItemVo vo : list) {
|
||||
WmsMaterialCoilVo coilVo = coilMap.get(vo.getCoilId());
|
||||
if (coilVo != null) {
|
||||
vo.setCoil(coilVo);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!list.isEmpty()) {
|
||||
for (WmsTransferOrderItemVo vo : list) {
|
||||
fillDetailInfo(vo);
|
||||
}
|
||||
@@ -93,14 +113,6 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
}
|
||||
|
||||
private void fillDetailInfo(WmsTransferOrderItemVo vo) {
|
||||
// 查询钢卷信息
|
||||
if (vo.getCoilId() != null) {
|
||||
WmsMaterialCoilVo coil = coilService.queryById(vo.getCoilId());
|
||||
if (coil != null) {
|
||||
vo.setCoil(coil);
|
||||
}
|
||||
}
|
||||
|
||||
// 填充改之前物料信息
|
||||
fillMaterialInfo(vo, vo.getItemIdBefore(), vo.getMaterialTypeBefore(), "Before");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user