diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java index bde5e11a3..a90e17cdb 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java @@ -514,6 +514,13 @@ public class ReservationStockOutOrderDomainService { for (Long inOrderId : inOrderIds) { ReservationStockOutOrder byId = stockOutOrderService.getById(inOrderId); String inOrderNumber = byId.getOutOrderNumber(); + // 幂等拦截:已存在有效执行单时禁止重复下发(重复下发会生成新执行单并原样复制明细uniqueId,撞执行明细表唯一约束) + long activeExecutionCount = executionStockOutOrderService.count(new QueryWrapper().lambda() + .eq(ExecutionStockOutOrder::getBusinessOutOrderNumber, inOrderNumber) + .eq(ExecutionStockOutOrder::getDelFlag, 1)); + if (activeExecutionCount > 0) { + throw new ServiceException("出库单[" + inOrderNumber + "]已下发,请勿重复下发;如需重新下发请先取消下发"); + } List executionInOrderNumbers = new ArrayList<>(); List materialDetailList = outMaterialDetailService.list(new QueryWrapper().lambda().eq(ReservationOutMaterialDetail::getOutOrderNumber, inOrderNumber));