From ac349ea8a860efc3557a13b1db91b266d05599c8 Mon Sep 17 00:00:00 2001 From: zhaoqing <3160641494@qq.com> Date: Fri, 14 Aug 2026 15:55:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(wms):=E5=87=BA=E5=85=A5=E5=BA=93=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E6=96=B0=E5=A2=9E=E6=97=B6=E6=B8=85=E7=A9=BA=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E7=9B=B8=E5=85=B3=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/StockOutOrderDomainService.java | 166 ++++++++++++++++-- 1 file changed, 154 insertions(+), 12 deletions(-) diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java index 3d431a636..ac4c1cd4e 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java @@ -285,6 +285,159 @@ public class StockOutOrderDomainService { stockOutOrderDO.setSignaturePic(null); stockOutOrderDO.setEvidencePics(null); stockOutOrderDO.setSignatureRemark(null); + //复制新增时原单的衍生业务/流程字段不能带入新单(新增时前端不传,保持初始值) + //注意:组织/创建人/货主/客户等由 Assembler 与 App 层重新赋值,不在本处清理 + stockOutOrderDO.setOutOrderId(null); + stockOutOrderDO.setNoticeNumber(null); + stockOutOrderDO.setExpectTime(null); + stockOutOrderDO.setSupplyChainNumber(null); + stockOutOrderDO.setPriorityLevelCode(null); + stockOutOrderDO.setPriorityLevelName(null); + stockOutOrderDO.setDirectWarehouse(null); + stockOutOrderDO.setReview(null); + stockOutOrderDO.setAnnexUrl(null); + stockOutOrderDO.setWeightLimit(null); + stockOutOrderDO.setVolumeLimit(null); + stockOutOrderDO.setMobilizeCode(null); + stockOutOrderDO.setTransportModeCode(null); + stockOutOrderDO.setSupervisionModeCode(null); + stockOutOrderDO.setContainerNoName(null); + stockOutOrderDO.setDocumentCreator(null); + stockOutOrderDO.setDocumentCreatorName(null); + stockOutOrderDO.setDocumentDate(null); + stockOutOrderDO.setCarrierName(null); + stockOutOrderDO.setBillingJson(null); + stockOutOrderDO.setReceiptOrderAccountList(null); + stockOutOrderDO.setReturnQuantity(null); + stockOutOrderDO.setTrainNo(null); + } + + /** + * 新增出库单(含复制新建)时重置明细的「执行态」字段 + * + *

前端「复制」出库单是把原单详情(getInfo)整体提交到新增接口,明细会带出原单的 + * 主键、已分配库存/批次/库区库位/容器、拣货复核数量、抄码重量、收费等执行数据。 + * 规则:只清空「复制时额外多传」的字段(新增时前端不传的),让新单与直接新增行为一致; + * 新增时前端会传的业务属性(料号、规格、申报要素、报关字段、备注、出库数量等)保留不清理。 + * 明细的组织/创建人/计划数量等由 batchInsert 按当前登录人重新赋值,清理后即恢复初始态。

+ */ + private void resetNewOrderDetailState(List detailList) { + if (CollectionUtils.isEmpty(detailList)) { + return; + } + detailList.forEach(detail -> { + if (detail == null) { + return; + } + //主键与唯一键:重新生成,避免与原单重复/冲突 + detail.setMaterialDetailId(null); + detail.setUniqueId(null); + detail.setOutOrderNumber(null); + //单据组织、审计字段:由 batchInsert 按当前登录人重新赋值 + detail.setOrganizationId(null); + detail.setOrganizationName(null); + detail.setTopOrganizationId(null); + detail.setCreateBy(null); + detail.setCreateByName(null); + detail.setCreateTime(null); + detail.setUpdateBy(null); + detail.setUpdateByName(null); + detail.setUpdateTime(null); + detail.setDelFlag(null); + //计划数量:由 batchInsert 按出库数量重新计算 + detail.setQuantity(null); + //执行数量 + detail.setInventoryQuantity(null); + detail.setAllocationQuantity(null); + detail.setAlreadyAllocationQuantity(null); + detail.setNowAllocationQuantity(null); + detail.setPickingQuantity(null); + detail.setCheckQuantity(null); + detail.setActualQuantity(null); + //重量/体积限制 + detail.setWeightLimit(null); + detail.setVolumeLimit(null); + //物料基础信息(batchInsert 会按主数据重填条码/商品名称等) + detail.setMaterialCode(null); + detail.setMaterialName(null); + detail.setBarCode(null); + detail.setCommodityName(null); + detail.setCommodityNo(null); + //包装/单位 + detail.setPackId(null); + detail.setPackCode(null); + detail.setPackName(null); + detail.setPackDetailId(null); + detail.setUnitCode(null); + detail.setUnitName(null); + detail.setUnitNumber(null); + detail.setMaterialWarehouseControlId(null); + detail.setSerialNumberManage(null); + //已分配库存、批次、库区/库位、容器 + detail.setWarehouseId(null); + detail.setWarehouseCode(null); + detail.setWarehouseName(null); + detail.setMaterialInventoryId(null); + detail.setBatchNumber(null); + detail.setMaterialStatusCode(null); + detail.setMaterialStatusName(null); + detail.setStorageSectionId(null); + detail.setStorageCode(null); + detail.setStorageName(null); + detail.setStorageLocationId(null); + detail.setStorageLocationCode(null); + detail.setStorageLocationName(null); + detail.setContainerId(null); + detail.setContainerCode(null); + detail.setContainerType(null); + detail.setContainerTypeName(null); + //层级结构:新单均为一级父行(子行由 batchInsert 忽略,不落库) + detail.setLevel(null); + detail.setParentUniqueId(null); + detail.setAllowModify(null); + detail.setGenPickingOrder(null); + detail.setChildren(null); + //复核重量、状态标识 + detail.setCheckNetWeight(null); + detail.setCheckGrossWeight(null); + detail.setCheckVolume(null); + detail.setCheckArea(null); + detail.setIsAllocated(null); + //抄码数据 + detail.setCopyCodeReferenceIds(null); + detail.setCopyTotalWeight(null); + detail.setOutWeight(null); + detail.setOutVolume(null); + detail.setOutQuantity(null); + //库存展示/费用/批次信息 + detail.setStockQuantity(null); + detail.setStockUnit(null); + detail.setLotNo(null); + detail.setContractFee(null); + detail.setMonthlyWarehouseFee(null); + detail.setHalfMonthWhFee(null); + detail.setDiscountRate(null); + detail.setSingleVolume(null); + detail.setSingleGrossWeight(null); + detail.setInOrderNumber(null); + detail.setProductionDate(null); + //报关推送映射字段 + detail.setLineNumGw(null); + detail.setSpecGw(null); + detail.setUnitGw(null); + detail.setQtyGw(null); + detail.setErpCurrGw(null); + detail.setErpPriceGw(null); + detail.setAmountGw(null); + detail.setInOrderNumberGw(null); + detail.setInLineNumGw(null); + detail.setOpWhLocGw(null); + detail.setWarehouseGw(null); + detail.setInvtRowGw(null); + detail.setBondInvtNoGw(null); + detail.setWhNoGw(null); + detail.setSeatNoGw(null); + }); } @@ -350,18 +503,7 @@ public class StockOutOrderDomainService { stockOutOrderDO.setCheckTaskDistribution(2); } //复制新建时原单明细的库存数量、分配数量、拣货/复核数量等执行数据不能带入新单,统一清空 - if (!CollectionUtils.isEmpty(stockOutOrderDO.getMaterialDetailList())) { - stockOutOrderDO.getMaterialDetailList().forEach(detail -> { - if (detail != null) { - detail.setInventoryQuantity(null); - detail.setAllocationQuantity(null); - detail.setAlreadyAllocationQuantity(null); - detail.setPickingQuantity(null); - detail.setCheckQuantity(null); - detail.setActualQuantity(null); - } - }); - } + resetNewOrderDetailState(stockOutOrderDO.getMaterialDetailList()); stockOutOrderService.insert(stockOutOrderDO); return outMaterialDetailService.batchInsert(stockOutOrderDO.getOutOrderNumber(), stockOutOrderDO.getMaterialDetailList()); }