diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java index e58a5a29b..5c82038b0 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockReceiptOrder/StockReceiptOrderApplicationService.java @@ -533,7 +533,7 @@ public class StockReceiptOrderApplicationService { } /** - * 递归填充明细行的物料单位信息(如果单位信息为空) + * 递归填充明细行的物料单位信息、包装规格(如果为空) * @param receiptMaterialDetailPOList 收货物料明细列表 * @param materialBaseInfoMap 物料基础信息Map(key: materialBaseInfoId, value: MaterialBaseInfoPO) * @param packDetailMap 包装规格明细Map(key: materialBaseInfoId, value: PackDetailFeignPO,单位代码为EA) @@ -549,6 +549,19 @@ public class StockReceiptOrderApplicationService { Long materialBaseInfoId = receiptMaterialDetailPO.getMaterialBaseInfoId(); if (materialBaseInfoId != null) { + MaterialBaseInfoPO materialBaseInfoPO = materialBaseInfoMap.get(materialBaseInfoId); + // 填充包装规格(packCode、packName、packId)为空时从物料基础信息获取 + if (materialBaseInfoPO != null) { + if (receiptMaterialDetailPO.getPackId() == null && materialBaseInfoPO.getPackId() != null) { + receiptMaterialDetailPO.setPackId(materialBaseInfoPO.getPackId()); + } + if (StringUtils.isBlank(receiptMaterialDetailPO.getPackCode()) && StringUtils.isNotBlank(materialBaseInfoPO.getPackCode())) { + receiptMaterialDetailPO.setPackCode(materialBaseInfoPO.getPackCode()); + } + if (StringUtils.isBlank(receiptMaterialDetailPO.getPackName()) && StringUtils.isNotBlank(materialBaseInfoPO.getPackName())) { + receiptMaterialDetailPO.setPackName(materialBaseInfoPO.getPackName()); + } + } // 只有当单位信息为空时才填充 if (StringUtils.isBlank(receiptMaterialDetailPO.getUnitCode()) || StringUtils.isBlank(receiptMaterialDetailPO.getUnitName())) { @@ -874,11 +887,53 @@ public class StockReceiptOrderApplicationService { * @return Boolean */ public Boolean receivingGoodsByApp(StockReceiptOrderDO stockReceiptOrderDO){ - // PDA 收货与 PC 一致,保留主项子项结构 + // PDA 收货回传时,将第一项作为主项,其余作为其子项 + ensureFirstItemAsParent(stockReceiptOrderDO); StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO); return stockReceiptOrderDomainService.receivingGoods(assembleStockReceiptOrderDO); } + /** + * PDA 收货回传时,将 materialDetailList 的第一项作为主项(level 1),其余项作为其子项(level 2) + */ + private void ensureFirstItemAsParent(StockReceiptOrderDO stockReceiptOrderDO) { + List list = stockReceiptOrderDO.getMaterialDetailList(); + if (CollectionUtils.isEmpty(list) || list.size() <= 1) { + return; + } + // 若第一项已有子项,说明已是主项子项结构,不处理 + if (!CollectionUtils.isEmpty(list.get(0).getChildren())) { + return; + } + StockReceiptOrderPO stockReceiptOrderPO = stockReceiptOrderDomainService.getInfo(stockReceiptOrderDO.getReceiptOrderId()); + if (stockReceiptOrderPO == null) { + return; + } + ReceiptMaterialDetailDO receiptMaterialDetailDOByQuery = new ReceiptMaterialDetailDO(); + receiptMaterialDetailDOByQuery.setReceiptOrderNumber(stockReceiptOrderPO.getReceiptOrderNumber()); + List receiptMaterialDetailPODbList = receiptMaterialDetailDomainService.queryList(receiptMaterialDetailDOByQuery); + Map dbMap = receiptMaterialDetailPODbList.stream() + .collect(Collectors.toMap(ReceiptMaterialDetailPO::getMaterialDetailId, Function.identity())); + ReceiptMaterialDetailDO first = list.get(0); + ReceiptMaterialDetailPO firstPO = dbMap.get(first.getMaterialDetailId()); + if (firstPO == null || firstPO.getUniqueId() == null) { + return; + } + Long parentUniqueId = firstPO.getUniqueId(); + List children = new ArrayList<>(); + for (int i = 1; i < list.size(); i++) { + ReceiptMaterialDetailDO child = list.get(i); + child.setLevel(2); + child.setParentUniqueId(parentUniqueId); + children.add(child); + } + first.setLevel(1); + first.setChildren(children); + List newList = new ArrayList<>(); + newList.add(first); + stockReceiptOrderDO.setMaterialDetailList(newList); + } + /** * @description 完成收货 * @author ZhouGY diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java index 7ab56d211..2a6da40da 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/listener/ExcelParseService.java @@ -386,6 +386,15 @@ public class ExcelParseService { outMaterialDetailDO.setSkucode(materialBaseInfoPO.getBarCode()); } } + // 单位:优先使用Excel中的"单位"字段,如果为空则使用"申报单位",如果还为空则从物料主数据获取(与入库单导入处理一致) + String unit = StringUtils.isNotBlank(outMaterialDetailDO.getUnit()) ? outMaterialDetailDO.getUnit() : null; + if (StringUtils.isBlank(unit) && StringUtils.isNotBlank(outMaterialDetailDO.getDeclareUnit())) { + unit = outMaterialDetailDO.getDeclareUnit(); + } + if (StringUtils.isBlank(unit) && materialBaseInfoPO != null && StringUtils.isNotBlank(materialBaseInfoPO.getUnitName())) { + unit = materialBaseInfoPO.getUnitName(); + } + outMaterialDetailDO.setUnit(unit); } }