From 5afe2b83126494ffeaa24a21915aff3f7ff236a6 Mon Sep 17 00:00:00 2001 From: wusiyu <2015098864@qq.com> Date: Mon, 15 Jun 2026 15:16:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/StOtherReceiptRecordServiceImpl.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java index f3acd6289..3d8398791 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java @@ -83,6 +83,30 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl slPiMap = new HashMap<>(); + for (StStockInoutRecord detail : inoutList) { + Long slId = detail.getSlId(); + String piNo = detail.getPiNo(); + + // 基础字段校验 + if (detail.getGoodsId() == null || slId == null || detail.getQuantity() == null || detail.getQuantity() <= 0) { + throw new RuntimeException("库存更新失败:商品ID、库位ID不能为空,入库数量必须大于0"); + } + + // 该库位已存在待入库批次,判断是否一致 + if (slPiMap.containsKey(slId)) { + String existPi = slPiMap.get(slId); + if (!StrUtil.equals(existPi, piNo)) { + throw new ServiceException( + "同一库位不允许录入多个批次!库位已存在批次:" + existPi + ",当前明细批次:" + piNo + ); + } + } else { + // 库位首次出现,存入批次号 + slPiMap.put(slId, piNo); + } + } + Long sirId = stOtherReceiptRecord.getSirId(); StStockInoutRecord inout = null; if (sirId != null) { @@ -121,7 +145,7 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl piNos = stRealtimeStockService.findBySlIdAndGoodsCode(detail.getSlId(), location.getGoodsCode()); String detailPiNo = detail.getPiNo(); if (CollUtil.isNotEmpty(piNos)) { - // 库位已有库存 → 必须和转移单 pino 一致 + // 库位已有库存 → 必须和pino 一致 boolean pinoMatch = piNos.stream().anyMatch(p -> p.equals(detailPiNo)); if (!pinoMatch) { throw new ServiceException("批次号不匹配!当前库位批次:" + piNos + ",其他入库批次:" + detailPiNo);