refactor(wms): 优化物料转换逻辑并提升代码可读性

- 提取原料到产品的匹配创建方法 matchOrCreateFromRawMaterial
- 提取产品到原料的匹配创建方法 matchOrCreateFromProduct
- 添加批量查询原料和产品数据的逻辑以提升性能
- 重构物料转换缓存逻辑,区分原料和产品类型处理
- 移除旧的通用 matchOrCreateMaterial 方法
- 添加详细的参数验证和异常处理机制
This commit is contained in:
2026-05-18 13:46:27 +08:00
parent 4a9a04cdf0
commit 84f5ec7521

View File

@@ -394,7 +394,10 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
if (rawMaterial == null) {
throw new IllegalArgumentException("原料不存在: " + itemId);
}
return matchOrCreateFromRawMaterial(rawMaterial);
}
private Long matchOrCreateFromRawMaterial(WmsRawMaterial rawMaterial) {
LambdaQueryWrapper<WmsProduct> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(WmsProduct::getProductName, rawMaterial.getRawMaterialName())
.eq(WmsProduct::getSpecification, rawMaterial.getSpecification())
@@ -426,7 +429,10 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
if (product == null) {
throw new IllegalArgumentException("产品不存在: " + itemId);
}
return matchOrCreateFromProduct(product);
}
private Long matchOrCreateFromProduct(WmsProduct product) {
LambdaQueryWrapper<WmsRawMaterial> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(WmsRawMaterial::getRawMaterialName, product.getProductName())
.eq(WmsRawMaterial::getSpecification, product.getSpecification())
@@ -655,6 +661,25 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
List<WmsMaterialCoil> coils = coilMapper.selectBatchIds(coilIds);
Map<Long, WmsMaterialCoil> coilMap = coils.stream().collect(Collectors.toMap(WmsMaterialCoil::getCoilId, v -> v, (a, b) -> a));
List<Long> needConvertRaw = new ArrayList<>();
List<Long> needConvertProd = new ArrayList<>();
for (WmsTransferOrderItemBo pair : pairs) {
WmsMaterialCoil coil = coilMap.get(pair.getCoilId());
if (coil == null || Objects.equals(coil.getItemType(), pair.getItemTypeAfter())) {
continue;
}
if ("raw_material".equals(coil.getItemType())) {
needConvertRaw.add(coil.getItemId());
} else {
needConvertProd.add(coil.getItemId());
}
}
Map<Long, WmsRawMaterial> rawMaterialMap = needConvertRaw.isEmpty() ? Collections.emptyMap()
: rawMaterialMapper.selectBatchIds(needConvertRaw).stream().collect(Collectors.toMap(WmsRawMaterial::getRawMaterialId, v -> v, (a, b) -> a));
Map<Long, WmsProduct> productMap = needConvertProd.isEmpty() ? Collections.emptyMap()
: productMapper.selectBatchIds(needConvertProd).stream().collect(Collectors.toMap(WmsProduct::getProductId, v -> v, (a, b) -> a));
Map<Long, Long> result = new HashMap<>();
Map<Long, Long> conversionCache = new HashMap<>();
@@ -675,8 +700,17 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
if (cached != null) {
itemId = cached;
} else {
itemId = matchOrCreateMaterial(coil.getItemId(), coil.getItemType());
conversionCache.put(coil.getItemId(), itemId);
Long srcItemId = coil.getItemId();
if ("raw_material".equals(coil.getItemType())) {
WmsRawMaterial raw = rawMaterialMap.get(srcItemId);
if (raw == null) throw new IllegalArgumentException("原料不存在: " + srcItemId);
itemId = matchOrCreateFromRawMaterial(raw);
} else {
WmsProduct prod = productMap.get(srcItemId);
if (prod == null) throw new IllegalArgumentException("产品不存在: " + srcItemId);
itemId = matchOrCreateFromProduct(prod);
}
conversionCache.put(srcItemId, itemId);
}
}
result.put(coilId, itemId);