perf(WmsTransferOrderItemService): 优化调拨明细信息查询性能
- 使用流式处理批量获取钢卷ID并去重 - 通过单次查询获取所有相关钢卷信息 - 使用Map映射避免循环中的重复数据库查询 - 移除原有的逐条查询逻辑减少数据库交互次数 - 提升列表查询的整体性能表现
This commit is contained in:
@@ -30,6 +30,7 @@ import java.util.Map;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -84,7 +85,26 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
public List<WmsTransferOrderItemVo> queryList(WmsTransferOrderItemBo bo) {
|
public List<WmsTransferOrderItemVo> queryList(WmsTransferOrderItemBo bo) {
|
||||||
LambdaQueryWrapper<WmsTransferOrderItem> lqw = buildQueryWrapper(bo);
|
LambdaQueryWrapper<WmsTransferOrderItem> lqw = buildQueryWrapper(bo);
|
||||||
List<WmsTransferOrderItemVo> list = baseMapper.selectVoList(lqw);
|
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) {
|
for (WmsTransferOrderItemVo vo : list) {
|
||||||
fillDetailInfo(vo);
|
fillDetailInfo(vo);
|
||||||
}
|
}
|
||||||
@@ -93,14 +113,6 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void fillDetailInfo(WmsTransferOrderItemVo vo) {
|
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");
|
fillMaterialInfo(vo, vo.getItemIdBefore(), vo.getMaterialTypeBefore(), "Before");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user