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);