refactor(WmsTransferOrderItemService): 优化调拨单明细查询速率
- 简化导入语句,使用通配符导入相关域类和映射器 - 添加WmsWarehouseMapper依赖注入以支持仓库信息批量查询 - 将原有的分步查询逻辑重构为统一的fillBatchInfo方法 - 实现批量查询钢卷、原料、产品和仓库信息以提高性能 - 添加物料类型名称映射和前后置物料信息填充功能 - 在创建和更新钢卷时设置物料类型字段
This commit is contained in:
@@ -6,20 +6,14 @@ import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.domain.*;
|
||||
import com.klp.domain.bo.WmsMaterialCoilBo;
|
||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||
import com.klp.mapper.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.domain.bo.WmsTransferOrderItemBo;
|
||||
import com.klp.domain.vo.WmsTransferOrderItemVo;
|
||||
import com.klp.domain.WmsTransferOrderItem;
|
||||
import com.klp.domain.WmsRawMaterial;
|
||||
import com.klp.domain.WmsProduct;
|
||||
import com.klp.domain.WmsMaterialCoil;
|
||||
import com.klp.mapper.WmsTransferOrderItemMapper;
|
||||
import com.klp.mapper.WmsRawMaterialMapper;
|
||||
import com.klp.mapper.WmsProductMapper;
|
||||
import com.klp.mapper.WmsMaterialCoilMapper;
|
||||
import com.klp.service.IWmsTransferOrderItemService;
|
||||
import com.klp.service.IWmsMaterialCoilService;
|
||||
import com.klp.service.IWmsWarehouseService;
|
||||
@@ -45,6 +39,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
private final WmsMaterialCoilMapper coilMapper;
|
||||
private final IWmsMaterialCoilService coilService;
|
||||
private final IWmsWarehouseService warehouseService;
|
||||
private final WmsWarehouseMapper warehouseMapper;
|
||||
|
||||
/**
|
||||
* 查询调拨单明细
|
||||
@@ -66,31 +61,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
LambdaQueryWrapper<WmsTransferOrderItem> lqw = buildQueryWrapper(bo);
|
||||
Page<WmsTransferOrderItemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
List<WmsTransferOrderItemVo> records = result.getRecords();
|
||||
String collect = records.stream()
|
||||
.map(WmsTransferOrderItemVo::getCoilId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.map(String::valueOf)
|
||||
.collect(Collectors.joining(","));// 收集结果
|
||||
if (!collect.isEmpty()) {
|
||||
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
|
||||
coilBo.setCoilIds(collect);
|
||||
List<WmsMaterialCoilVo> coilList = coilService.queryList(coilBo);
|
||||
Map<Long, WmsMaterialCoilVo> coilMap = coilList.stream()
|
||||
.collect(Collectors.toMap(WmsMaterialCoilVo::getCoilId, v -> v, (oldVal, newVal) -> oldVal));
|
||||
for (WmsTransferOrderItemVo vo : records) {
|
||||
WmsMaterialCoilVo coilVo = coilMap.get(vo.getCoilId());
|
||||
if (coilVo != null) {
|
||||
vo.setCoil(coilVo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!records.isEmpty()) {
|
||||
for (WmsTransferOrderItemVo vo : records) {
|
||||
fillDetailInfo(vo);
|
||||
}
|
||||
}
|
||||
fillBatchInfo(records);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@@ -101,31 +72,163 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
public List<WmsTransferOrderItemVo> queryList(WmsTransferOrderItemBo bo) {
|
||||
LambdaQueryWrapper<WmsTransferOrderItem> lqw = buildQueryWrapper(bo);
|
||||
List<WmsTransferOrderItemVo> list = baseMapper.selectVoList(lqw);
|
||||
String coilIdsStr = list.stream()
|
||||
.map(WmsTransferOrderItemVo::getCoilId)
|
||||
.filter(Objects::nonNull) // 过滤 null
|
||||
.distinct() // 去重
|
||||
.map(String::valueOf) // Long 转 String
|
||||
.collect(Collectors.joining(",")); // 直接拼接成逗号字符串
|
||||
if (!coilIdsStr.isEmpty()) {
|
||||
fillBatchInfo(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
private void fillBatchInfo(List<WmsTransferOrderItemVo> list) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 收集所有需要的ID
|
||||
List<Long> coilIds = list.stream()
|
||||
.map(WmsTransferOrderItemVo::getCoilId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 收集:改之前物料ID
|
||||
List<Long> itemIdsBefore = list.stream()
|
||||
.map(WmsTransferOrderItemVo::getItemIdBefore)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 2. 收集:改之后物料ID
|
||||
List<Long> itemIdsAfter = list.stream()
|
||||
.map(WmsTransferOrderItemVo::getItemIdAfter)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 3. 收集:改前仓库ID
|
||||
List<Long> warehouseIdsBefore = list.stream()
|
||||
.map(WmsTransferOrderItemVo::getWarehouseIdBefore)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 4. 收集:改后仓库ID
|
||||
List<Long> warehouseIdsAfter = list.stream()
|
||||
.map(WmsTransferOrderItemVo::getWarehouseIdAfter)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 5. 合并所有仓库ID(和物料ID逻辑完全一致!)
|
||||
List<Long> warehouseIds = new ArrayList<>();
|
||||
warehouseIds.addAll(warehouseIdsBefore);
|
||||
warehouseIds.addAll(warehouseIdsAfter);
|
||||
|
||||
// 批量查询钢卷
|
||||
Map<Long, WmsMaterialCoilVo> coilMap = new HashMap<>();
|
||||
if (!coilIds.isEmpty()) {
|
||||
String coilIdsStr = String.join(",", coilIds.stream().map(String::valueOf).collect(Collectors.toList()));
|
||||
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);
|
||||
coilMap = coilList.stream().collect(Collectors.toMap(WmsMaterialCoilVo::getCoilId, v -> v, (a, b) -> a));
|
||||
}
|
||||
|
||||
// 批量查询原料
|
||||
List<Long> allItemIds = new ArrayList<>(itemIdsBefore);
|
||||
allItemIds.addAll(itemIdsAfter);
|
||||
List<Long> rawMaterialIds = allItemIds.stream().distinct().collect(Collectors.toList());
|
||||
Map<Long, WmsRawMaterial> rawMaterialMap = new HashMap<>();
|
||||
if (!rawMaterialIds.isEmpty()) {
|
||||
List<WmsRawMaterial> rawMaterials = rawMaterialMapper.selectBatchIds(rawMaterialIds);
|
||||
rawMaterialMap = rawMaterials.stream().collect(Collectors.toMap(WmsRawMaterial::getRawMaterialId, v -> v, (a, b) -> a));
|
||||
}
|
||||
|
||||
// 批量查询产品
|
||||
List<Long> productIds = allItemIds.stream().distinct().collect(Collectors.toList());
|
||||
Map<Long, WmsProduct> productMap = new HashMap<>();
|
||||
if (!productIds.isEmpty()) {
|
||||
List<WmsProduct> products = productMapper.selectBatchIds(productIds);
|
||||
productMap = products.stream().collect(Collectors.toMap(WmsProduct::getProductId, v -> v, (a, b) -> a));
|
||||
}
|
||||
|
||||
Map<Long, String> warehouseNameMap = new HashMap<>();
|
||||
if (!warehouseIds.isEmpty()) {
|
||||
// 批量查
|
||||
List<WmsWarehouse> warehouseList = warehouseMapper.selectBatchIds(warehouseIds);
|
||||
warehouseNameMap = warehouseList.stream()
|
||||
.collect(Collectors.toMap(
|
||||
WmsWarehouse::getWarehouseId,
|
||||
WmsWarehouse::getWarehouseName,
|
||||
(a, b) -> a
|
||||
));
|
||||
}
|
||||
|
||||
// 填充数据
|
||||
for (WmsTransferOrderItemVo vo : list) {
|
||||
// 钢卷信息
|
||||
WmsMaterialCoilVo coilVo = coilMap.get(vo.getCoilId());
|
||||
if (coilVo != null) {
|
||||
vo.setCoil(coilVo);
|
||||
}
|
||||
|
||||
// 改之前物料信息
|
||||
fillMaterialInfoByMap(vo, vo.getItemIdBefore(), vo.getMaterialTypeBefore(), "Before", rawMaterialMap, productMap);
|
||||
|
||||
// 改之后物料信息
|
||||
fillMaterialInfoByMap(vo, vo.getItemIdAfter(), vo.getMaterialTypeAfter(), "After", rawMaterialMap, productMap);
|
||||
|
||||
// 库区名称
|
||||
vo.setWarehouseNameBefore(warehouseNameMap.get(vo.getWarehouseIdBefore()));
|
||||
vo.setWarehouseNameAfter(warehouseNameMap.get(vo.getWarehouseIdAfter()));
|
||||
|
||||
// 物料类型名称
|
||||
vo.setMaterialTypeBeforeName(vo.getMaterialTypeBefore() != null ? (vo.getMaterialTypeBefore() == 1 ? "原料" : "成品") : null);
|
||||
vo.setMaterialTypeAfterName(vo.getMaterialTypeAfter() != null ? (vo.getMaterialTypeAfter() == 1 ? "原料" : "成品") : null);
|
||||
}
|
||||
}
|
||||
|
||||
private void fillMaterialInfoByMap(WmsTransferOrderItemVo vo, Long itemId, Long materialType, String suffix,
|
||||
Map<Long, WmsRawMaterial> rawMaterialMap, Map<Long, WmsProduct> productMap) {
|
||||
if (itemId == null || materialType == null) {
|
||||
return;
|
||||
}
|
||||
if (materialType == 1) {
|
||||
WmsRawMaterial raw = rawMaterialMap.get(itemId);
|
||||
if (raw != null) {
|
||||
if ("Before".equals(suffix)) {
|
||||
vo.setMaterialNameBefore(raw.getRawMaterialName());
|
||||
vo.setSpecificationBefore(raw.getSpecification());
|
||||
vo.setMaterialBefore(raw.getMaterial());
|
||||
vo.setSurfaceTreatmentBefore(raw.getSurfaceTreatmentDesc());
|
||||
vo.setManufacturerBefore(raw.getManufacturer());
|
||||
vo.setZincLayerBefore(raw.getZincLayer());
|
||||
} else if ("After".equals(suffix)) {
|
||||
vo.setMaterialNameAfter(raw.getRawMaterialName());
|
||||
vo.setSpecificationAfter(raw.getSpecification());
|
||||
vo.setMaterialAfter(raw.getMaterial());
|
||||
vo.setSurfaceTreatmentAfter(raw.getSurfaceTreatmentDesc());
|
||||
vo.setManufacturerAfter(raw.getManufacturer());
|
||||
vo.setZincLayerAfter(raw.getZincLayer());
|
||||
}
|
||||
}
|
||||
} else if (materialType == 2) {
|
||||
WmsProduct product = productMap.get(itemId);
|
||||
if (product != null) {
|
||||
if ("Before".equals(suffix)) {
|
||||
vo.setMaterialNameBefore(product.getProductName());
|
||||
vo.setSpecificationBefore(product.getSpecification());
|
||||
vo.setMaterialBefore(product.getMaterial());
|
||||
vo.setSurfaceTreatmentBefore(product.getSurfaceTreatmentDesc());
|
||||
vo.setManufacturerBefore(product.getManufacturer());
|
||||
vo.setZincLayerBefore(product.getZincLayer());
|
||||
} else if ("After".equals(suffix)) {
|
||||
vo.setMaterialNameAfter(product.getProductName());
|
||||
vo.setSpecificationAfter(product.getSpecification());
|
||||
vo.setMaterialAfter(product.getMaterial());
|
||||
vo.setSurfaceTreatmentAfter(product.getSurfaceTreatmentDesc());
|
||||
vo.setManufacturerAfter(product.getManufacturer());
|
||||
vo.setZincLayerAfter(product.getZincLayer());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!list.isEmpty()) {
|
||||
for (WmsTransferOrderItemVo vo : list) {
|
||||
fillDetailInfo(vo);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private void fillDetailInfo(WmsTransferOrderItemVo vo) {
|
||||
@@ -424,6 +527,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
}
|
||||
if (itemType != null) {
|
||||
coil.setItemType(itemType);
|
||||
coil.setMaterialType(bo.getMaterialTypeAfter() == 1 ? "原料" : "成品");
|
||||
}
|
||||
if (warehouseId != null) {
|
||||
coil.setWarehouseId(warehouseId);
|
||||
@@ -472,6 +576,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
if (coil != null) {
|
||||
coil.setItemId(originalItemId);
|
||||
coil.setItemType(originalMaterialType == 1 ? "raw_material" : "product");
|
||||
coil.setMaterialType(originalMaterialType == 1 ? "原料" : "成品");
|
||||
coil.setWarehouseId(originalWarehouseId);
|
||||
coilMapper.updateById(coil);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user