diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java index 2503b839f..20176fe04 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java @@ -259,7 +259,7 @@ public class ReservationStockInOrderImpl extends ServiceImpl> shipperIds = new ArrayList<>(); Set processedShipperIds = new HashSet<>(); - // ====== 物料存在性校验(落库前):查询结果为空说明库中没有该物料,收集全部缺失料号后一次性提示维护 ====== + // ====== 第一步:物料编号存在性校验(落库前,先收集全部缺失编号,不立即报错) ====== Map materialCache = new LinkedHashMap<>(); List missingMaterials = new ArrayList<>(); for (ProductDetail productDetail : productDetailList) { @@ -277,21 +277,10 @@ public class ReservationStockInOrderImpl extends ServiceImpl shipper = new HashMap<>(); - shipper.put("shipperId", materialBaseInfoPO.getShipperId()); - shipper.put("shipperName", materialBaseInfoPO.getShipperName()); - shipper.put("shipperCode", materialBaseInfoPO.getShipperCode()); - shipperIds.add(shipper); - } - } - // ====== 客户存在性校验(落库前):客户编号在库中查询结果为空说明客户不存在,提示维护后再导入 ====== + // ====== 第二步:客户编号存在性校验(落库前,先收集全部缺失编号,不立即报错) ====== Map customerCache = new HashMap<>(); + List missingCustomers = new ArrayList<>(); for (CustomerDeliveryDetail customerDeliveryDetail : customerDeliveryDetailList) { String customerCode = customerDeliveryDetail.getCustomerCode() == null ? "" : customerDeliveryDetail.getCustomerCode().trim(); if (customerCode.isEmpty()) { @@ -302,9 +291,33 @@ public class ReservationStockInOrderImpl extends ServiceImpl problems = new ArrayList<>(); + if (!missingMaterials.isEmpty()) { + problems.add("物料[" + String.join("、", missingMaterials) + "]不存在,请先维护物料信息"); + } + if (!missingCustomers.isEmpty()) { + problems.add("客户[" + String.join("、", missingCustomers) + "]不存在,请先维护客户信息"); + } + throw new Exception(String.join(";", problems) + ",维护完成后重新导入"); + } + + // ====== 后续处理(编号均已存在):货主归属校验、建单落库 ====== + for (MaterialBaseInfoPO materialBaseInfoPO : materialCache.values()) { + if (materialBaseInfoPO.getShipperId() != null && processedShipperIds.add(materialBaseInfoPO.getShipperId())) { + Map shipper = new HashMap<>(); + shipper.put("shipperId", materialBaseInfoPO.getShipperId()); + shipper.put("shipperName", materialBaseInfoPO.getShipperName()); + shipper.put("shipperCode", materialBaseInfoPO.getShipperCode()); + shipperIds.add(shipper); } - customerCache.put(customerCode, customer); } // 货品明细不为空时,校验货主信息 @@ -506,8 +519,8 @@ public class ReservationStockInOrderImpl extends ServiceImpl materialCache = new LinkedHashMap<>(); List missingMaterials = new ArrayList<>(); for (StockInProductDetail productDetail : productDetailList) { @@ -522,9 +535,35 @@ public class ReservationStockInOrderImpl extends ServiceImpl customerCodes = new LinkedHashSet<>(); + for (StockInProductDetail productDetail : productDetailList) { + if (productDetail.getCustomerCode() != null && !productDetail.getCustomerCode().trim().isEmpty()) { + customerCodes.add(productDetail.getCustomerCode().trim()); + } } + Map customerCache = new HashMap<>(); + List missingCustomers = new ArrayList<>(); + for (String customerCode : customerCodes) { + UserPo customer = stockOutOrderMapper.queryCustomerByCode(customerCode, loginUser.getUserPo().getOrganizationId()); + if (customer == null || customer.getUserId() == null) { + missingCustomers.add(customerCode); + } else { + customerCache.put(customerCode, customer); + } + } + // ====== 第三步:物料/客户存在性校验全部完成后,统一提示两类编号各自有哪些不存在 ====== + if (!missingMaterials.isEmpty() || !missingCustomers.isEmpty()) { + List problems = new ArrayList<>(); + if (!missingMaterials.isEmpty()) { + problems.add("物料[" + String.join("、", missingMaterials) + "]不存在,请先维护物料信息"); + } + if (!missingCustomers.isEmpty()) { + problems.add("客户[" + String.join("、", missingCustomers) + "]不存在,请先维护客户信息"); + } + throw new ServiceException(String.join(";", problems) + ",维护完成后重新导入"); + } + // ====== 后续处理(编号均已存在):名称自动匹配、货主归属与一致性校验、建单 ====== // 明细回填库中匹配到的物料名称(自动匹配,模板中的名称列可不填/以库中为准;库中名称为空时保留模板值) for (StockInProductDetail productDetail : productDetailList) { String materialName = materialCache.get(productDetail.getProductCode()).getMaterialName(); @@ -532,7 +571,7 @@ public class ReservationStockInOrderImpl extends ServiceImpl> shipperIds = new ArrayList<>(); Set processedShipperIds = new HashSet<>(); for (MaterialBaseInfoPO materialBaseInfoPO : materialCache.values()) { @@ -554,24 +593,14 @@ public class ReservationStockInOrderImpl extends ServiceImpl customerCodes = new LinkedHashSet<>(); - for (StockInProductDetail productDetail : productDetailList) { - if (productDetail.getCustomerCode() != null && !productDetail.getCustomerCode().trim().isEmpty()) { - customerCodes.add(productDetail.getCustomerCode().trim()); - } - } if (customerCodes.size() > 1) { throw new ServiceException("导入明细中存在多个客户编号(" + String.join("、", customerCodes) + "),一个入库单只能属于一个客户"); } if (!customerCodes.isEmpty()) { String customerCode = customerCodes.iterator().next(); - // 查询结果为空说明库中没有该客户,提示维护后再导入 - customer = stockOutOrderMapper.queryCustomerByCode(customerCode, loginUser.getUserPo().getOrganizationId()); - if (customer == null || customer.getUserId() == null) { - throw new ServiceException("客户[" + customerCode + "]不存在,请先维护客户信息后再导入"); - } + customer = customerCache.get(customerCode); // 客户编号与物料归属货主一致性校验(不一致拦截,提示两者编号;货主编码未维护时提示货主名称) if (!shipperIds.isEmpty() && !customer.getUserId().equals(shipperIds.get(0).get("shipperId"))) { Object materialShipperCode = shipperIds.get(0).get("shipperCode");