From 5517951010f2daf013f0bb35a500c1eb3f702b2d Mon Sep 17 00:00:00 2001 From: zhou-hongcheng <1064771933@qq.com> Date: Wed, 11 Mar 2026 15:10:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=BA=93=E7=AE=A1=E7=90=86-=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=86=E9=85=8D=E7=89=A9=E6=96=99=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E5=AE=B9=E9=87=8F=E4=B8=8D=E5=A4=9F=E6=97=B6?= =?UTF-8?q?=E5=89=A9=E4=BD=99=E5=88=86=E9=85=8D=E8=AE=A1=E5=88=92=E5=88=86?= =?UTF-8?q?=E9=85=8D=E5=88=B0=E5=85=B6=E5=AE=83=E5=BA=93=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StockOutOrderApplicationService.java | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java index 6aa98028f..c33d4f4fc 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java @@ -614,8 +614,8 @@ public class StockOutOrderApplicationService { List outMaterialDetailList = outMaterialDetailService.list(new QueryWrapper().lambda() .eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDb.getOutOrderNumber())); List materialDetailList = cn.hutool.core.bean.BeanUtil.copyToList(outMaterialDetailList, OutMaterialDetailDO.class); + List materialDetailList2 = new ArrayList<>(); for (OutMaterialDetailDO detail : materialDetailList) { - detail.setAllocationQuantity(detail.getQuantity()); String batchRefNo = detail.getBatchRefNo(); String sheetRefNo = detail.getSheetRefNo(); String boxPalletNo = detail.getBoxPalletNo(); @@ -630,15 +630,36 @@ public class StockOutOrderApplicationService { if (materialInventories == null || materialInventories.isEmpty()) { throw new ServiceException("库存不存在:" + batchRefNo + " " + sheetRefNo + " " + boxPalletNo); } - MaterialInventory materialInventory = materialInventories.get(0); - detail.setMaterialInventoryId(materialInventory.getMaterialInventoryId()); - detail.setStorageLocationId(materialInventory.getStorageLocationId()); - detail.setStorageLocationName(materialInventory.getStorageLocationName()); - detail.setStorageLocationCode(materialInventory.getStorageLocationCode()); - detail.setStorageSectionId(materialInventory.getStorageSectionId()); - detail.setStorageName(materialInventory.getStorageName()); - detail.setStorageCode(materialInventory.getStorageCode()); - detail.setInventoryQuantity(materialInventory.getInventoryQuantity()); + + BigDecimal remainingQuantity = detail.getQuantity(); // 计划数量 + for (MaterialInventory materialInventory : materialInventories) { + if (remainingQuantity.compareTo(BigDecimal.ZERO) <= 0) { + break; + } + // 当前物料的可用库存 + BigDecimal availableStock = materialInventory.getAllocationQuantity(); + // 如果当前物料没有库存,跳过 + if (availableStock == null || availableStock.compareTo(BigDecimal.ZERO) <= 0) { + continue; + } + // 计算本次能扣减的数量:取 剩余计划 和 当前库存 的较小值 + BigDecimal deductQuantity = remainingQuantity.compareTo(availableStock) <= 0 + ? remainingQuantity // 剩余计划 <= 库存,扣剩余计划 + : availableStock; // 剩余计划 > 库存,扣全部库存 + + detail.setMaterialInventoryId(materialInventory.getMaterialInventoryId()); + detail.setStorageLocationId(materialInventory.getStorageLocationId()); + detail.setStorageLocationName(materialInventory.getStorageLocationName()); + detail.setStorageLocationCode(materialInventory.getStorageLocationCode()); + detail.setStorageSectionId(materialInventory.getStorageSectionId()); + detail.setStorageName(materialInventory.getStorageName()); + detail.setStorageCode(materialInventory.getStorageCode()); + detail.setInventoryQuantity(materialInventory.getInventoryQuantity()); + detail.setAllocationQuantity(deductQuantity); + materialDetailList2.add(detail); + // 更新剩余计划数量 + remainingQuantity = remainingQuantity.subtract(deductQuantity); + } } stockOutOrderD.setMaterialDetailList(materialDetailList); StockOutOrderDO assembleStockOutOrderDO = assembleParamByOutOrder(stockOutOrderD);