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.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.klp.domain.*;
|
||||||
import com.klp.domain.bo.WmsMaterialCoilBo;
|
import com.klp.domain.bo.WmsMaterialCoilBo;
|
||||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||||
|
import com.klp.mapper.*;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.klp.domain.bo.WmsTransferOrderItemBo;
|
import com.klp.domain.bo.WmsTransferOrderItemBo;
|
||||||
import com.klp.domain.vo.WmsTransferOrderItemVo;
|
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.IWmsTransferOrderItemService;
|
||||||
import com.klp.service.IWmsMaterialCoilService;
|
import com.klp.service.IWmsMaterialCoilService;
|
||||||
import com.klp.service.IWmsWarehouseService;
|
import com.klp.service.IWmsWarehouseService;
|
||||||
@@ -45,6 +39,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
private final WmsMaterialCoilMapper coilMapper;
|
private final WmsMaterialCoilMapper coilMapper;
|
||||||
private final IWmsMaterialCoilService coilService;
|
private final IWmsMaterialCoilService coilService;
|
||||||
private final IWmsWarehouseService warehouseService;
|
private final IWmsWarehouseService warehouseService;
|
||||||
|
private final WmsWarehouseMapper warehouseMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询调拨单明细
|
* 查询调拨单明细
|
||||||
@@ -66,31 +61,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
LambdaQueryWrapper<WmsTransferOrderItem> lqw = buildQueryWrapper(bo);
|
LambdaQueryWrapper<WmsTransferOrderItem> lqw = buildQueryWrapper(bo);
|
||||||
Page<WmsTransferOrderItemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
Page<WmsTransferOrderItemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
List<WmsTransferOrderItemVo> records = result.getRecords();
|
List<WmsTransferOrderItemVo> records = result.getRecords();
|
||||||
String collect = records.stream()
|
fillBatchInfo(records);
|
||||||
.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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TableDataInfo.build(result);
|
return TableDataInfo.build(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,31 +72,163 @@ 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);
|
||||||
String coilIdsStr = list.stream()
|
fillBatchInfo(list);
|
||||||
.map(WmsTransferOrderItemVo::getCoilId)
|
return list;
|
||||||
.filter(Objects::nonNull) // 过滤 null
|
}
|
||||||
.distinct() // 去重
|
|
||||||
.map(String::valueOf) // Long 转 String
|
private void fillBatchInfo(List<WmsTransferOrderItemVo> list) {
|
||||||
.collect(Collectors.joining(",")); // 直接拼接成逗号字符串
|
if (list == null || list.isEmpty()) {
|
||||||
if (!coilIdsStr.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();
|
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
|
||||||
coilBo.setCoilIds(coilIdsStr);
|
coilBo.setCoilIds(coilIdsStr);
|
||||||
List<WmsMaterialCoilVo> coilList = coilService.queryList(coilBo);
|
List<WmsMaterialCoilVo> coilList = coilService.queryList(coilBo);
|
||||||
Map<Long, WmsMaterialCoilVo> coilMap = coilList.stream()
|
coilMap = coilList.stream().collect(Collectors.toMap(WmsMaterialCoilVo::getCoilId, v -> v, (a, b) -> a));
|
||||||
.collect(Collectors.toMap(WmsMaterialCoilVo::getCoilId, v -> v));
|
}
|
||||||
for (WmsTransferOrderItemVo vo : list) {
|
|
||||||
WmsMaterialCoilVo coilVo = coilMap.get(vo.getCoilId());
|
// 批量查询原料
|
||||||
if (coilVo != null) {
|
List<Long> allItemIds = new ArrayList<>(itemIdsBefore);
|
||||||
vo.setCoil(coilVo);
|
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) {
|
private void fillDetailInfo(WmsTransferOrderItemVo vo) {
|
||||||
@@ -424,6 +527,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
}
|
}
|
||||||
if (itemType != null) {
|
if (itemType != null) {
|
||||||
coil.setItemType(itemType);
|
coil.setItemType(itemType);
|
||||||
|
coil.setMaterialType(bo.getMaterialTypeAfter() == 1 ? "原料" : "成品");
|
||||||
}
|
}
|
||||||
if (warehouseId != null) {
|
if (warehouseId != null) {
|
||||||
coil.setWarehouseId(warehouseId);
|
coil.setWarehouseId(warehouseId);
|
||||||
@@ -472,6 +576,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
if (coil != null) {
|
if (coil != null) {
|
||||||
coil.setItemId(originalItemId);
|
coil.setItemId(originalItemId);
|
||||||
coil.setItemType(originalMaterialType == 1 ? "raw_material" : "product");
|
coil.setItemType(originalMaterialType == 1 ? "raw_material" : "product");
|
||||||
|
coil.setMaterialType(originalMaterialType == 1 ? "原料" : "成品");
|
||||||
coil.setWarehouseId(originalWarehouseId);
|
coil.setWarehouseId(originalWarehouseId);
|
||||||
coilMapper.updateById(coil);
|
coilMapper.updateById(coil);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user