From 9bc9314041076a46214d11d5fa372a96a5377d18 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, 23 Mar 2026 10:28:17 +0800 Subject: [PATCH] =?UTF-8?q?PC=E5=87=BA=E5=BA=93=E5=8D=95=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=A3=80=E9=AA=8C=E7=89=A9=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/ExcelParseService.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) 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 2a6da40da..79e50a57b 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 @@ -228,8 +228,59 @@ public class ExcelParseService { } } + /** + * 校验导入明细是否已在当前货主下维护物料基础信息 + */ + private StringBuilder validateShipperMaterialDetails(StockOutOrderDO stockOutOrder) { + StringBuilder sb = new StringBuilder(); + List details = stockOutOrder.getMaterialDetailList(); + if (details == null || details.isEmpty()) { + return sb; + } + Long shipperId = stockOutOrder.getShipperId(); + for (OutMaterialDetailDO row : details) { + if (row.getMaterialBaseInfoId() != null) { + continue; + } + boolean hasIdentifier = StringUtils.isNotBlank(row.getMaterialNo()) + || StringUtils.isNotBlank(row.getSkucode()) + || StringUtils.isNotBlank(row.getCommodityName()); + if (!hasIdentifier) { + continue; + } + String desc = buildImportMaterialRowDesc(row); + if (ObjectUtil.isEmpty(shipperId)) { + sb.append("请先确认客户(货主)信息;无法校验以下物料是否已在货主下维护:").append(desc).append("; "); + } else { + sb.append("当前货主下未维护以下物料:").append(desc).append("; "); + } + } + return sb; + } + + /** + * 提示文案只强调 Excel 导入列「商品名称」;商品名称为空时用导入料号/SKU 辅助说明。 + */ + private String buildImportMaterialRowDesc(OutMaterialDetailDO row) { + String commodityName = StringUtils.trimToEmpty(row.getCommodityName()); + if (StringUtils.isNotBlank(commodityName)) { + return "商品名称「" + commodityName + "」"; + } + String materialNo = StringUtils.trimToEmpty(row.getMaterialNo()); + String sku = StringUtils.trimToEmpty(row.getSkucode()); + StringBuilder b = new StringBuilder("导入商品名称为空"); + if (StringUtils.isNotBlank(materialNo)) { + b.append(",料号「").append(materialNo).append("」"); + } + if (StringUtils.isNotBlank(sku)) { + b.append(",SKU「").append(sku).append("」"); + } + return b.toString(); + } + private StringBuilder check(StockOutOrderDO stockOutOrder) { StringBuilder errorMsg = new StringBuilder(); + errorMsg.append(validateShipperMaterialDetails(stockOutOrder)); if (stockOutOrder.getMaterialDetailList() == null || stockOutOrder.getMaterialDetailList().isEmpty()) errorMsg.append("物料明细列表不能为空或匹配不上物料信息; "); if (StringUtils.isEmpty(stockOutOrder.getTo())) errorMsg.append("To不能为空; "); if (StringUtils.isEmpty(stockOutOrder.getEntrustNo())) errorMsg.append("委托单号不能为空; "); @@ -302,6 +353,11 @@ public class ExcelParseService { outMaterialDetailDO.setWarehouseId(warehouseId); outMaterialDetailDO.setWarehouseCode(warehouseCode); outMaterialDetailDO.setWarehouseName(warehouseName); + + // 未识别货主时不查物料,避免匹配到其他货主的物料基础信息 + if (shipperId == null) { + continue; + } // 根据明细表中的字段查询物料基础信息(优先:料号 > 商品SKU码 > 商品名称) // 注意:查询时必须加上货主ID条件,确保查询到的是该货主绑定的物料