refactor(wms): 优化物料转换逻辑并提升代码可读性
- 提取原料到产品的匹配创建方法 matchOrCreateFromRawMaterial - 提取产品到原料的匹配创建方法 matchOrCreateFromProduct - 添加批量查询原料和产品数据的逻辑以提升性能 - 重构物料转换缓存逻辑,区分原料和产品类型处理 - 移除旧的通用 matchOrCreateMaterial 方法 - 添加详细的参数验证和异常处理机制
This commit is contained in:
@@ -394,7 +394,10 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
if (rawMaterial == null) {
|
if (rawMaterial == null) {
|
||||||
throw new IllegalArgumentException("原料不存在: " + itemId);
|
throw new IllegalArgumentException("原料不存在: " + itemId);
|
||||||
}
|
}
|
||||||
|
return matchOrCreateFromRawMaterial(rawMaterial);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Long matchOrCreateFromRawMaterial(WmsRawMaterial rawMaterial) {
|
||||||
LambdaQueryWrapper<WmsProduct> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<WmsProduct> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(WmsProduct::getProductName, rawMaterial.getRawMaterialName())
|
wrapper.eq(WmsProduct::getProductName, rawMaterial.getRawMaterialName())
|
||||||
.eq(WmsProduct::getSpecification, rawMaterial.getSpecification())
|
.eq(WmsProduct::getSpecification, rawMaterial.getSpecification())
|
||||||
@@ -426,7 +429,10 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
if (product == null) {
|
if (product == null) {
|
||||||
throw new IllegalArgumentException("产品不存在: " + itemId);
|
throw new IllegalArgumentException("产品不存在: " + itemId);
|
||||||
}
|
}
|
||||||
|
return matchOrCreateFromProduct(product);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Long matchOrCreateFromProduct(WmsProduct product) {
|
||||||
LambdaQueryWrapper<WmsRawMaterial> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<WmsRawMaterial> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(WmsRawMaterial::getRawMaterialName, product.getProductName())
|
wrapper.eq(WmsRawMaterial::getRawMaterialName, product.getProductName())
|
||||||
.eq(WmsRawMaterial::getSpecification, product.getSpecification())
|
.eq(WmsRawMaterial::getSpecification, product.getSpecification())
|
||||||
@@ -655,6 +661,25 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
List<WmsMaterialCoil> coils = coilMapper.selectBatchIds(coilIds);
|
List<WmsMaterialCoil> coils = coilMapper.selectBatchIds(coilIds);
|
||||||
Map<Long, WmsMaterialCoil> coilMap = coils.stream().collect(Collectors.toMap(WmsMaterialCoil::getCoilId, v -> v, (a, b) -> a));
|
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> result = new HashMap<>();
|
||||||
Map<Long, Long> conversionCache = new HashMap<>();
|
Map<Long, Long> conversionCache = new HashMap<>();
|
||||||
|
|
||||||
@@ -675,8 +700,17 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
|||||||
if (cached != null) {
|
if (cached != null) {
|
||||||
itemId = cached;
|
itemId = cached;
|
||||||
} else {
|
} else {
|
||||||
itemId = matchOrCreateMaterial(coil.getItemId(), coil.getItemType());
|
Long srcItemId = coil.getItemId();
|
||||||
conversionCache.put(coil.getItemId(), itemId);
|
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);
|
result.put(coilId, itemId);
|
||||||
|
|||||||
Reference in New Issue
Block a user