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 0a1b1e33c..79b5e8fc5 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 @@ -192,7 +192,6 @@ public class StockOutOrderApplicationService { Long materialBaseInfoId = outMaterialDetailPO.getMaterialBaseInfoId(); Long materialInventoryId = outMaterialDetailPO.getMaterialInventoryId(); - // 只保留isDisplay=1的批次属性(从batchDetailMap中获取,已经过滤过了) // 创建新的materialMoreDetailList,只包含isDisplay=1的属性 List materialMoreDetailList = new ArrayList<>(); @@ -218,6 +217,7 @@ public class StockOutOrderApplicationService { } } + // 只保留isDisplay=1的批次属性(从batchDetailMap中获取,已经过滤过了) if (materialBaseInfoId != null && batchDetailMap.containsKey(materialBaseInfoId)) { List batchDetailFeignPOList = batchDetailMap.get(materialBaseInfoId); // 用于跟踪已添加到列表中的batchDetailId @@ -257,7 +257,7 @@ public class StockOutOrderApplicationService { String fieldValue = null; String usedFieldName = null; - // 优先从库存表获取值(如果已分配库存) + // 只有在已分配库存时,才从库存表获取值并设置到attributeValue if (inventoryPO != null) { // 优先使用fieldName(如果存在) if (StringUtils.isNotBlank(batchDetailFeignPO.getFieldName())) { @@ -277,36 +277,18 @@ public class StockOutOrderApplicationService { usedFieldName, fieldValue); } } - } - - // 如果从库存表没有获取到值,且未分配库存,则从物料明细表中获取值 - if (fieldValue == null && inventoryPO == null && outMaterialDetailPO != null) { - // 优先使用fieldName(如果存在) - if (StringUtils.isNotBlank(batchDetailFeignPO.getFieldName())) { - usedFieldName = batchDetailFeignPO.getFieldName(); - fieldValue = getFieldValueByFieldName(outMaterialDetailPO, usedFieldName); - log.info("批次属性 batchDetailId={}, fieldName={}, 从物料明细表获取到的值={}", - batchDetailFeignPO.getBatchDetailId(), usedFieldName, fieldValue); - } - // 如果fieldName为空,尝试根据batchLabels映射到字段名 - else if (StringUtils.isNotBlank(batchDetailFeignPO.getBatchLabels())) { - String fieldNameByLabel = getFieldNameByBatchLabel(batchDetailFeignPO.getBatchLabels()); - if (StringUtils.isNotBlank(fieldNameByLabel)) { - usedFieldName = fieldNameByLabel; - fieldValue = getFieldValueByFieldName(outMaterialDetailPO, usedFieldName); - log.info("批次属性 batchDetailId={}, batchLabels={}, 映射字段名={}, 从物料明细表获取到的值={}", - batchDetailFeignPO.getBatchDetailId(), batchDetailFeignPO.getBatchLabels(), - usedFieldName, fieldValue); - } + + // 只有当获取到值时才更新attributeValue(已分配库存时) + if (fieldValue != null) { + materialMoreDetailPO.setAttributeValue(fieldValue); + log.info("设置更多属性:batchDetailId={}, batchLabels={}, attributeValue={}", + materialMoreDetailPO.getBatchDetailId(), materialMoreDetailPO.getBatchLabels(), + materialMoreDetailPO.getAttributeValue()); } - } - - // 只有当获取到值时才更新attributeValue(避免覆盖已有的值) - if (fieldValue != null) { - materialMoreDetailPO.setAttributeValue(fieldValue); - log.info("设置更多属性:batchDetailId={}, batchLabels={}, attributeValue={}", - materialMoreDetailPO.getBatchDetailId(), materialMoreDetailPO.getBatchLabels(), - materialMoreDetailPO.getAttributeValue()); + } else { + // 未分配库存时,attributeValue保持为空(不设置值) + log.info("批次属性未分配库存,batchDetailId={}, batchLabels={}, attributeValue为空", + materialMoreDetailPO.getBatchDetailId(), materialMoreDetailPO.getBatchLabels()); } } } @@ -941,6 +923,8 @@ public class StockOutOrderApplicationService { outMaterialDetailDO.setContainerCode(materialInventoryPO.getContainerCode()); outMaterialDetailDO.setContainerType(materialInventoryPO.getContainerType()); outMaterialDetailDO.setContainerTypeName(materialInventoryPO.getContainerTypeName()); + // 库存数量,仅用于前端展示 + outMaterialDetailDO.setInventoryQuantity(materialInventoryPO.getInventoryQuantity()); } /** diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/entity/OutMaterialDetail.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/entity/OutMaterialDetail.java index 39f84b234..732b9b268 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/entity/OutMaterialDetail.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/entity/OutMaterialDetail.java @@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; +import java.util.Date; /** @@ -386,6 +387,41 @@ public class OutMaterialDetail extends BaseVOEntity { @Excel(name = "单位") private String unit; + @ApiModelProperty("扩展属性1") + @Excel(name = "扩展属性1") + private String extAttr1; + + @ApiModelProperty("扩展属性2") + @Excel(name = "扩展属性2") + private String extAttr2; + + @ApiModelProperty("生产日期") + @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date productionDate; + + @ApiModelProperty("过期日期") + @Excel(name = "过期日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date expiryDate; + + @ApiModelProperty("存货日期") + @Excel(name = "存货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date inventoryDate; + + @ApiModelProperty("扩展属性3") + @Excel(name = "扩展属性3", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date extAttr3; + + @ApiModelProperty("扩展属性4") + @Excel(name = "扩展属性4", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date extAttr4; + + /** + * 库存数量(仅用于前端展示,从material_inventory表中带出) + */ + @ApiModelProperty("库存数量") + @TableField(exist = false) + private BigDecimal inventoryQuantity; + @TableField(exist = false) private BigDecimal actualQuantity; 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 8e2894dc6..fd9c573ea 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 @@ -377,10 +377,23 @@ public class OutMaterialDetailImpl extends ServiceImpl 0){ throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于已分配数量"); } - // 取消分配:只减少已分配数量,分配数量保持不变 - // 取消分配的目的是:把之前分配给库存的分配给取消掉,让库存可以重新分配 - // allocation_quantity(分配数量)不应该减少,因为取消分配后可以重新分配 - // already_allocation_quantity(已分配数量)应该减少,表示取消了多少已分配的数量 BigDecimal dbAllocationQuantity = outMaterialDetailDb.getAllocationQuantity() != null ? outMaterialDetailDb.getAllocationQuantity() : BigDecimal.ZERO; - // 分配数量保持不变(取消分配后可以重新分配) - outMaterialDetail.setAllocationQuantity(dbAllocationQuantity); - // 已分配数量减少(取消已分配的数量) + // 分配数量和已分配数量都减少:本次手动取消分配视为“把这条明细已分配的全部撤回” + BigDecimal newAllocationQuantity = dbAllocationQuantity.subtract(allocationQuantity); + if (newAllocationQuantity.compareTo(BigDecimal.ZERO) < 0) { + throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于分配总数"); + } + outMaterialDetail.setAllocationQuantity(newAllocationQuantity); outMaterialDetail.setAlreadyAllocationQuantity(dbAlreadyAllocationQuantity.subtract(allocationQuantity)); + + // 同时清空该明细的目标仓库/库区/库位信息(回到未分配状态) + outMaterialDetail.setWarehouseId(null); + outMaterialDetail.setWarehouseCode(null); + outMaterialDetail.setWarehouseName(null); + outMaterialDetail.setStorageSectionId(null); + outMaterialDetail.setStorageCode(null); + outMaterialDetail.setStorageName(null); + outMaterialDetail.setStorageLocationId(null); + outMaterialDetail.setStorageLocationCode(null); + outMaterialDetail.setStorageLocationName(null); + + // 清空与分配库存相关的批次、容器信息 + outMaterialDetail.setMaterialInventoryId(null); + outMaterialDetail.setBatchNumber(null); + outMaterialDetail.setMaterialStatusCode(null); + outMaterialDetail.setMaterialStatusName(null); + outMaterialDetail.setContainerId(null); + outMaterialDetail.setContainerCode(null); + outMaterialDetail.setContainerType(null); + outMaterialDetail.setContainerTypeName(null); // 设置 actualQuantity 用于 qxfp 方法更新库存(取消分配的数量) outMaterialDetail.setActualQuantity(allocationQuantity); outMaterialDetailList.add(outMaterialDetail); diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/po/OutMaterialDetailPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/po/OutMaterialDetailPO.java index c7a9b8f53..5f0e3ee21 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/po/OutMaterialDetailPO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/po/OutMaterialDetailPO.java @@ -168,6 +168,9 @@ public class OutMaterialDetailPO extends StockOutOrderBaseDO { @Excel(name = "容器类型名称 数据字典") private String containerTypeName; + @ApiModelProperty("库存数量(仅展示)") + private BigDecimal inventoryQuantity; + @ApiModelProperty("分配仓库id") private Long warehouseId; diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/todo/OutMaterialDetailDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/todo/OutMaterialDetailDO.java index 41474458a..a67396c86 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/todo/OutMaterialDetailDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/todo/OutMaterialDetailDO.java @@ -158,6 +158,9 @@ public class OutMaterialDetailDO extends BaseVOEntity { @Excel(name = "容器类型名称 数据字典") private String containerTypeName; + @ApiModelProperty("库存数量(仅展示)") + private BigDecimal inventoryQuantity; + @ApiModelProperty("分配仓库id") private Long warehouseId; diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outMaterialDetail/OutMaterialDetailDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outMaterialDetail/OutMaterialDetailDTO.java index a1081f4d2..448d3d71a 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outMaterialDetail/OutMaterialDetailDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outMaterialDetail/OutMaterialDetailDTO.java @@ -167,6 +167,9 @@ public class OutMaterialDetailDTO extends BaseVOEntity { @Excel(name = "容器类型名称 数据字典") private String containerTypeName; + @ApiModelProperty("库存数量(仅展示)") + private BigDecimal inventoryQuantity; + @ApiModelProperty("分配仓库id") private Long warehouseId;