diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java index 924bf806f..f74ef0c0a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java @@ -445,6 +445,17 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl children = receiptMaterialDetailDO.getChildren(); + if (!CollectionUtils.isEmpty(children)) { + updateInMaterialDetailFromAttributeOption(children, batchFieldNameCache); + } + continue; + } + List materialMoreDetailList = receiptMaterialDetailDO.getMaterialMoreDetailList(); if (CollectionUtils.isEmpty(materialMoreDetailList)) { // 处理子项 @@ -801,15 +812,19 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl shelfMaterialDetailPOList = shelfMaterialDetailMapper.queryList(shelfMaterialDetailDO); //回显带上更多属性值(批次标签):根据物料绑定的批次属性动态显示,与收货一致 + // material_more_detail 存储时使用收货明细的 unique_id,上架明细需用 receipt_unique_id 查询 shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> { MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO(); - materialMoreDetailDO.setMaterialDetailUniqueId(shelfMaterialDetailPO.getUniqueId()); + Long materialDetailUniqueIdForQuery = shelfMaterialDetailPO.getReceiptUniqueId() != null + ? shelfMaterialDetailPO.getReceiptUniqueId() : shelfMaterialDetailPO.getUniqueId(); + materialMoreDetailDO.setMaterialDetailUniqueId(materialDetailUniqueIdForQuery); List materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO); if (CollectionUtils.isEmpty(materialMoreDetailList)) { AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(shelfMaterialDetailPO.getMaterialBaseInfoId()); @@ -92,7 +95,9 @@ public class ShelfMaterialDetailImpl extends ServiceImpl children = getChildren(materialDetailPO.getUniqueId(), shelfMaterialDetailPOList, 2); children.forEach(childrenDetailPO -> { MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO(); - materialMoreDetailDO.setMaterialDetailUniqueId(childrenDetailPO.getUniqueId()); + Long materialDetailUniqueIdForQuery = childrenDetailPO.getReceiptUniqueId() != null + ? childrenDetailPO.getReceiptUniqueId() : childrenDetailPO.getUniqueId(); + materialMoreDetailDO.setMaterialDetailUniqueId(materialDetailUniqueIdForQuery); List materialMoreDetailList = IMaterialMoreDetailService.queryList(materialMoreDetailDO); if (CollectionUtils.isEmpty(materialMoreDetailList)) { AjaxResult ajaxResult = systemServiceFeign.getBatchDetailListByMaterialBaseInfoId(childrenDetailPO.getMaterialBaseInfoId()); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutTaskOrder/service/StockOutTaskOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutTaskOrder/service/StockOutTaskOrderDomainService.java index bfd73e3f9..2b81e2753 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutTaskOrder/service/StockOutTaskOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutTaskOrder/service/StockOutTaskOrderDomainService.java @@ -306,8 +306,16 @@ public class StockOutTaskOrderDomainService { if (ObjectUtil.isNull(materialInventoryOldDb)){ throw new ServiceException("物料原库位下的物料库存不存在,不能进行出库"); } - if (materialInventoryOldDb.getInventoryQuantity().compareTo(actualQuantity) < 0){ - throw new ServiceException("物料原库位下的物料库存不足,不能进行出库"); + BigDecimal invQty = materialInventoryOldDb.getInventoryQuantity() != null ? materialInventoryOldDb.getInventoryQuantity() : BigDecimal.ZERO; + if (invQty.compareTo(actualQuantity) < 0){ + String hint = ""; + if (invQty.compareTo(BigDecimal.ZERO) == 0 && materialInventoryOldDb.getFreezeQuantity() != null + && materialInventoryOldDb.getFreezeQuantity().compareTo(BigDecimal.ZERO) > 0) { + hint = String.format("(该库位库存为0,冻结数量=%s,可能需先解冻)", materialInventoryOldDb.getFreezeQuantity()); + } else { + hint = String.format("库位库存=%s,拣货数量=%s", invQty, actualQuantity); + } + throw new ServiceException("物料原库位下的物料库存不足,不能进行出库。" + hint + ",物料=" + taskPickingMaterialDetailDO.getMaterialName() + ",库位=" + taskPickingMaterialDetailDO.getStorageLocationCode()); } //原库位 MaterialInventoryDO materialInventoryDOOld = new MaterialInventoryDO(); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java index f206a86e3..0bdfb1d36 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockReceiptOrder/service/StockReceiptOrderDomainService.java @@ -916,7 +916,8 @@ public class StockReceiptOrderDomainService { BeanUtils.copyProperties(receiptMaterialDetailDOChildren, shelfMaterialDetailDOChildren); shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailDOChildren.getReceiptQuantity()); shelfMaterialDetailDOChildren.setInUniqueId(receiptMaterialDetailDO.getInUniqueId()); - shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailDO.getUniqueId()); + // 子项使用自身的 uniqueId 作为 receiptUniqueId,以便正确关联 material_more_detail 中的扩展属性 + shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailDOChildren.getUniqueId()); shelfMaterialDetailDOChildren.setTotalArea(receiptMaterialDetailDOChildren.getTotalArea()); shelfMaterialDetailDOChildren.setTotalVolume(receiptMaterialDetailDOChildren.getTotalVolume()); shelfMaterialDetailDOChildren.setTotalNetWeight(receiptMaterialDetailDOChildren.getTotalNetWeight()); @@ -1052,7 +1053,8 @@ public class StockReceiptOrderDomainService { BeanUtils.copyProperties(receiptMaterialDetailPOChildren, shelfMaterialDetailDOChildren); shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailPOChildren.getReceiptQuantity()); shelfMaterialDetailDOChildren.setInUniqueId(receiptMaterialDetailPO.getInUniqueId()); - shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailPO.getUniqueId()); + // 子项使用自身的 uniqueId 作为 receiptUniqueId,以便正确关联 material_more_detail 中的扩展属性 + shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailPOChildren.getUniqueId()); shelfMaterialDetailDOChildren.setTotalArea(receiptMaterialDetailPOChildren.getTotalArea()); shelfMaterialDetailDOChildren.setTotalVolume(receiptMaterialDetailPOChildren.getTotalVolume()); shelfMaterialDetailDOChildren.setTotalNetWeight(receiptMaterialDetailPOChildren.getTotalNetWeight()); @@ -1168,7 +1170,8 @@ public class StockReceiptOrderDomainService { BeanUtils.copyProperties(receiptMaterialDetailDOChildren, shelfMaterialDetailDOChildren); shelfMaterialDetailDOChildren.setQuantity(receiptMaterialDetailDOChildren.getReceiptQuantity()); shelfMaterialDetailDOChildren.setInUniqueId(receiptMaterialDetailPO.getInUniqueId()); - shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailPO.getUniqueId()); + // 子项使用自身的 uniqueId 作为 receiptUniqueId,以便正确关联 material_more_detail 中的扩展属性 + shelfMaterialDetailDOChildren.setReceiptUniqueId(receiptMaterialDetailDOChildren.getUniqueId()); // 传递生产日期、过期日期、存货日期、Batch Ref NO's、Sheet Ref NO's、箱号/卡板号、扩展属性1-4 shelfMaterialDetailDOChildren.setProductionDate(receiptMaterialDetailDOChildren.getProductionDate()); shelfMaterialDetailDOChildren.setExpiryDate(receiptMaterialDetailDOChildren.getExpiryDate());