From fa400d2bc0fabd911e11407284d64768121164dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 20 Apr 2026 21:47:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=93=E5=AD=98=E8=B0=83=E6=95=B4=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/MaterialInventoryImpl.java | 114 ++++++++++----- .../todo/MaterialInventoryParamDO.java | 3 + .../persistence/OutMaterialDetailImpl.java | 130 +++++++++++++----- 3 files changed, 176 insertions(+), 71 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/persistence/MaterialInventoryImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/persistence/MaterialInventoryImpl.java index 3b8367e61..7dab18412 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/persistence/MaterialInventoryImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/persistence/MaterialInventoryImpl.java @@ -562,16 +562,22 @@ public class MaterialInventoryImpl extends ServiceImpl().lambda() .eq(MaterialInventory::getMaterialInventoryId, materialInventoryId)); + if (materialInventory == null) { + throw new ServiceException("物料库存不存在,无法生成库存调整记录"); + } Long materialBaseInfoId = materialInventory.getMaterialBaseInfoId(); MaterialBaseInfo materialBaseInfo = materialBaseInfoService.getOne(new QueryWrapper().lambda() .eq(MaterialBaseInfo::getMaterialBaseInfoId, materialBaseInfoId).eq(BaseVOEntity::getDelFlag,1)); InventoryAdjustmentRecord inventoryAdjustmentRecord = new InventoryAdjustmentRecord(); inventoryAdjustmentRecord.setAdjustAction(adjustAction); - inventoryAdjustmentRecord.setRelateNo(materialInventoryParamDO.getInOrderNumber()); + String relateNo = StringUtils.hasText(materialInventoryParamDO.getRelateNo()) + ? materialInventoryParamDO.getRelateNo() + : materialInventoryParamDO.getInOrderNumber(); + inventoryAdjustmentRecord.setRelateNo(relateNo); inventoryAdjustmentRecord.setAdjustAfterStatusCode(materialInventory.getMaterialStatusCode() == null ? "" : materialInventory.getMaterialStatusCode()); inventoryAdjustmentRecord.setAdjustBeforeStatusCode(materialInventory.getMaterialStatusCode() == null ? "" : materialInventory.getMaterialStatusCode()); inventoryAdjustmentRecord.setAdjustAfterStatusName(materialInventory.getMaterialStatusName() == null ? "" : materialInventory.getMaterialStatusName()); @@ -616,23 +622,45 @@ public class MaterialInventoryImpl extends ServiceImpl materialBarCodePOList = materialBarCodeService.getInfoByMaterialBaseInfoIds(materialInventoryPO.getMaterialBaseInfoId()); if (materialBarCodePOList != null && !materialBarCodePOList.isEmpty()) { diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryParamDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryParamDO.java index 32bfd91ad..ffa624502 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryParamDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryParamDO.java @@ -102,4 +102,7 @@ public class MaterialInventoryParamDO extends MaterialBaseDO { private String isNew; + /** 业务关联单号(出库单号、交接单对应单号等),用于库存调整记录 relate_no;可与入库单号区分 */ + private String relateNo; + } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java index b3114d1d7..f61eff64e 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java @@ -285,11 +285,17 @@ public class OutMaterialDetailImpl extends ServiceImpl outMaterialDetailDbList = outMaterialDetailMapper.selectList(new QueryWrapper().lambda() + // 同单全部明细(含子行),用于子行补全 material_inventory_id / unique_id + List orderAllDetailsDb = outMaterialDetailMapper.selectList(new QueryWrapper().lambda() .eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber) - .eq(OutMaterialDetail::getLevel, 1) .eq(OutMaterialDetail::getDelFlag, 1)); + List outMaterialDetailDbList = orderAllDetailsDb.stream() + .filter(d -> d.getLevel() != null && d.getLevel() == 1) + .collect(Collectors.toList()); Map materialDetailMap = outMaterialDetailDbList.stream().collect(Collectors.toMap(OutMaterialDetail::getMaterialDetailId, Function.identity())); + Map orderDetailByMaterialDetailId = orderAllDetailsDb.stream() + .filter(d -> d.getMaterialDetailId() != null) + .collect(Collectors.toMap(OutMaterialDetail::getMaterialDetailId, Function.identity(), (a, b) -> a)); //批量新增或修改物料信息 List outMaterialDetailList = new ArrayList<>(); BigDecimal totalAllocationQuantity = BigDecimal.ZERO;//入库单总分配作业数量 @@ -319,34 +325,50 @@ public class OutMaterialDetailImpl extends ServiceImpl 0) { + orderThisAssignIncrement = orderThisAssignIncrement.add(d.getNowAllocationQuantity()); + } + } + stockOutOrderPO.setAlreadyAllocationQuantity(orderThisAssignIncrement); stockOutOrderPO.setAllocationQuantity(totalAllocationQuantity); //分配(修改库存) xgkc(outMaterialDetailList,outOrderNumber,loginUser); @@ -492,6 +522,12 @@ public class OutMaterialDetailImpl extends ServiceImpl outMaterialDetails = outMaterialDetailMapper.selectList(new QueryWrapper().lambda().eq(OutMaterialDetail::getParentUniqueId, uniqueId).eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber1)); @@ -744,9 +789,10 @@ public class OutMaterialDetailImpl extends ServiceImpl materialDetailDOChildList = outMaterialDetailDO.getChildren(); BigDecimal childAllocationQuantity = BigDecimal.ZERO; if (!CollectionUtils.isEmpty(materialDetailDOChildList)){ @@ -813,15 +859,24 @@ public class OutMaterialDetailImpl extends ServiceImpl 0){ + // 已分配数量:主行+(若本次带出的)子行在库中的已分配之和;避免「主30+子20=50」与仅主行 already30 比较误报 + BigDecimal dbAlreadyAllocationQuantity = outMaterialDetailDb.getAlreadyAllocationQuantity() != null + ? outMaterialDetailDb.getAlreadyAllocationQuantity() + : BigDecimal.ZERO; + BigDecimal dbTotalAlreadyAllocated = dbAlreadyAllocationQuantity; + if (!CollectionUtils.isEmpty(materialDetailDOChildList)) { + for (OutMaterialDetailDO childDo : materialDetailDOChildList) { + OutMaterialDetail childDb = materialDetailMap.get(childDo.getMaterialDetailId()); + if (childDb != null) { + dbTotalAlreadyAllocated = dbTotalAlreadyAllocated.add( + childDb.getAlreadyAllocationQuantity() != null ? childDb.getAlreadyAllocationQuantity() : BigDecimal.ZERO); + } + } + } + if (allocationQuantity.compareTo(dbTotalAlreadyAllocated) > 0) { throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于已分配数量"); } BigDecimal dbAllocationQuantity = outMaterialDetailDb.getAllocationQuantity() != null @@ -833,7 +888,8 @@ public class OutMaterialDetailImpl extends ServiceImpl