PC出库单导入检验物料

This commit is contained in:
秦鸿展
2026-03-23 10:28:17 +08:00
parent e2aec5a566
commit 9bc9314041
@@ -228,8 +228,59 @@ public class ExcelParseService {
}
}
/**
* 校验导入明细是否已在当前货主下维护物料基础信息
*/
private StringBuilder validateShipperMaterialDetails(StockOutOrderDO stockOutOrder) {
StringBuilder sb = new StringBuilder();
List<OutMaterialDetailDO> 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条件,确保查询到的是该货主绑定的物料