From 84f5ec752128fea91396c6f3dc455eaee70c1b8b Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 18 May 2026 13:46:27 +0800 Subject: [PATCH] =?UTF-8?q?refactor(wms):=20=E4=BC=98=E5=8C=96=E7=89=A9?= =?UTF-8?q?=E6=96=99=E8=BD=AC=E6=8D=A2=E9=80=BB=E8=BE=91=E5=B9=B6=E6=8F=90?= =?UTF-8?q?=E5=8D=87=E4=BB=A3=E7=A0=81=E5=8F=AF=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 提取原料到产品的匹配创建方法 matchOrCreateFromRawMaterial - 提取产品到原料的匹配创建方法 matchOrCreateFromProduct - 添加批量查询原料和产品数据的逻辑以提升性能 - 重构物料转换缓存逻辑,区分原料和产品类型处理 - 移除旧的通用 matchOrCreateMaterial 方法 - 添加详细的参数验证和异常处理机制 --- .../impl/WmsTransferOrderItemServiceImpl.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java index 8e0d0076..a6bf6aef 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsTransferOrderItemServiceImpl.java @@ -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 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 wrapper = new LambdaQueryWrapper<>(); wrapper.eq(WmsRawMaterial::getRawMaterialName, product.getProductName()) .eq(WmsRawMaterial::getSpecification, product.getSpecification()) @@ -655,6 +661,25 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer List coils = coilMapper.selectBatchIds(coilIds); Map coilMap = coils.stream().collect(Collectors.toMap(WmsMaterialCoil::getCoilId, v -> v, (a, b) -> a)); + List needConvertRaw = new ArrayList<>(); + List 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 rawMaterialMap = needConvertRaw.isEmpty() ? Collections.emptyMap() + : rawMaterialMapper.selectBatchIds(needConvertRaw).stream().collect(Collectors.toMap(WmsRawMaterial::getRawMaterialId, v -> v, (a, b) -> a)); + Map productMap = needConvertProd.isEmpty() ? Collections.emptyMap() + : productMapper.selectBatchIds(needConvertProd).stream().collect(Collectors.toMap(WmsProduct::getProductId, v -> v, (a, b) -> a)); + Map result = new HashMap<>(); Map 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);