perf(WmsTransferOrderItemService): 优化调拨明细信息查询性能

- 使用流式处理批量获取钢卷ID并去重
- 通过单次查询获取所有相关钢卷信息
- 使用Map映射避免循环中的重复数据库查询
- 移除原有的逐条查询逻辑减少数据库交互次数
- 提升列表查询的整体性能表现
This commit is contained in:
2026-03-28 10:58:15 +08:00
parent d28f50ba65
commit 317b7187f5

View File

@@ -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");