refactor(wms): 优化物料转换逻辑并提升代码可读性
- 提取原料到产品的匹配创建方法 matchOrCreateFromRawMaterial - 提取产品到原料的匹配创建方法 matchOrCreateFromProduct - 添加批量查询原料和产品数据的逻辑以提升性能 - 重构物料转换缓存逻辑,区分原料和产品类型处理 - 移除旧的通用 matchOrCreateMaterial 方法 - 添加详细的参数验证和异常处理机制
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user