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条件,确保查询到的是该货主绑定的物料