diff --git a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs index e7e1184a..9f679638 100644 --- a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs +++ b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs @@ -13,7 +13,7 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord /// /// 原箱子ID /// - public int SrcBoxId { get; set; } + public int SrcBoxId { get; set; } = 0; /// /// 目标箱子ID /// diff --git a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs index fbc6a9b3..f4982290 100644 --- a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs +++ b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs @@ -33,11 +33,12 @@ namespace WMS.Web.Domain.Services private readonly IBoxInventoryService _boxInventoryService; private readonly IBoxInventoryRepositories _boxInventoryRepositories; private readonly ILogger _logger; + private readonly ISerialNumbersRepositories _serialNumbersRepositories; public ChangeMoveBoxService(IMapper mapper, ILoginService loginService, IChangeBoxRecordRepositories changeBoxRecordRepositories, IBasicsRepositories basbicsRepositories, IMoveBoxRecordRepositories moveBoxRecordRepositories, IBoxRepositories boxRepositories, ISerialNumberService serialNumberService, IBoxInventoryService boxInventoryService, IBoxInventoryRepositories boxInventoryRepositories, - ILogger logger) + ILogger logger, ISerialNumbersRepositories serialNumbersRepositories) { _mapper = mapper; _loginService = loginService; @@ -49,6 +50,7 @@ namespace WMS.Web.Domain.Services _boxInventoryService = boxInventoryService; _boxInventoryRepositories = boxInventoryRepositories; _logger = logger; + _serialNumbersRepositories = serialNumbersRepositories; } /// /// 改箱保存 @@ -63,9 +65,18 @@ namespace WMS.Web.Domain.Services var srcIds = dto.Select(s => s.SrcBoxId).Distinct().ToList(); var destIds = dto.Select(s => s.DestBoxId).Distinct().ToList(); var boxs = await _boxInventoryRepositories.GetList(srcIds); + var serialNumbers = dto.SelectMany(s => s.Details).SelectMany(s => s.SerialNumbers).ToList(); + var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers); foreach (var d in dto) { - if (d.SrcBoxId == 0) continue; + if (d.SrcBoxId == 0) + { + //没有原箱的情况下需要验证序列号是否有箱子绑定 + var s = d.Details.SelectMany(s => s.SerialNumbers).ToList(); + var sCount = serialNumberList.Where(w => s.Contains(w.SerialNumber) && w.BoxId != 0).Count(); + if (sCount > 0) + return Result.ReFailure(ResultCodes.SerialNumbersBoxError); + } var box = boxs.FirstOrDefault(f => f.BoxId == d.SrcBoxId); //原箱在库存中的话 进行验证 if (box != null) @@ -74,10 +85,10 @@ namespace WMS.Web.Domain.Services { var bDe = box.Details.FirstOrDefault(f => f.MaterialId == bd.MaterialId); if (bDe == null) - Result.ReFailure(ResultCodes.BoxMateriaNoData); + return Result.ReFailure(ResultCodes.BoxMateriaNoData); var ex = bd.SerialNumbers.Except(bDe.SerialNumbers).ToList(); if (ex.Count() > 0) - Result.ReFailure(ResultCodes.BoxInventorySerialNumbersNoData); + return Result.ReFailure(ResultCodes.BoxInventorySerialNumbersNoData); } } } diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index c5bb60ec..db952196 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -68,6 +68,7 @@ namespace WMS.Web.Domain.Values public static ValueTuple InventoryDetailsWriteError = (800014, "写入即时库存明细失败!"); public static ValueTuple SerialNumbersNoData = (610000, "序列号不存在"); + public static ValueTuple SerialNumbersBoxError = (610002, "序列号已经绑定箱"); public static ValueTuple TakeStockStockError = (610001, "一次不能盘多个仓库"); } }