diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 03db77d9..4677cb03 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -207,7 +207,12 @@ - 所属箱号ID + 扫的箱号ID + + + + + 序列号所属箱不能为空 diff --git a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs index c81bff60..6f373a44 100644 --- a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs +++ b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs @@ -11,10 +11,17 @@ namespace WMS.Web.Core.Dto.BackRecord public class SaveBackRecordDetailsRequest { /// - /// 所属箱号ID + /// 扫的箱号ID /// [Required(ErrorMessage = "箱号不能为空")] public int BoxId { get; set; } + + /// + /// 序列号所属箱不能为空 + /// + [Required(ErrorMessage = "序列号所属箱不能为空")] + public int SerialNumberBoxId { get; set; } + /// /// 物料ID /// diff --git a/src/WMS.Web.Domain/Services/BackRecordService.cs b/src/WMS.Web.Domain/Services/BackRecordService.cs index 3c61d86e..e2d44638 100644 --- a/src/WMS.Web.Domain/Services/BackRecordService.cs +++ b/src/WMS.Web.Domain/Services/BackRecordService.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto.BackRecord; +using WMS.Web.Core.Dto.ChangeBoxRecord; using WMS.Web.Core.Dto.Inventory; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Internal.Results; @@ -28,17 +29,23 @@ namespace WMS.Web.Domain.Services private readonly ISerialNumberService _serialNumberService; private readonly IBackRecordRepositories _backRecordRepositories; private readonly IBoxInventoryService _boxInventoryService; + private readonly IChangeMoveBoxService _changeMoveBoxService; + private readonly ISerialNumbersRepositories _serialNumbersRepositories; public BackRecordService(IMapper mapper, ILoginService loginService, IBasicsRepositories basicsRepositories, IBoxInventoryService boxInventoryService, ISerialNumberService serialNumberService, + IChangeMoveBoxService changeMoveBoxService, + ISerialNumbersRepositories serialNumbersRepositories, IBackRecordRepositories backRecordRepositories) { _mapper = mapper; _loginService = loginService; + _changeMoveBoxService = changeMoveBoxService; _serialNumberService = serialNumberService; _boxInventoryService = boxInventoryService; _basicsRepositories = basicsRepositories; + _serialNumbersRepositories = serialNumbersRepositories; _backRecordRepositories = backRecordRepositories; } @@ -62,16 +69,16 @@ namespace WMS.Web.Domain.Services var entity = new BackRecord(); entity.Type = type; entity.Details = _mapper.Map>(dto.Details); - entity.Details.ForEach(x => + entity.Details.ForEach(x => { - var stock= stocks.Where(t => t.Code == x.StockCode).FirstOrDefault(); + var stock = stocks.Where(t => t.Code == x.StockCode).FirstOrDefault(); if (stock != null) x.OrgCode = stock.ErpOrgCode; }); entity.Create(loginInfo.UserInfo.StaffId); entity = await _backRecordRepositories.Add(entity, isTransaction); - + if (entity == null) return Result.ReFailure(ResultCodes.DateWriteError); @@ -80,6 +87,52 @@ namespace WMS.Web.Domain.Services if (!serialNumber_result.IsSuccess) return serialNumber_result; + #region 需要改箱操作 + //获取目标箱和原箱信息 + var current_box_about = dto.Details.GroupBy(x => new { x.BoxId, x.SubStockId, x.StockCode }).Select(x => new { x.Key.BoxId, x.Key.SubStockId, x.Key.StockCode }).ToList(); + var current_sernub_box = dto.Details.GroupBy(x => x.SerialNumberBoxId).Select(x => x.Key).ToList(); + + //要改箱的数据集合 + var ganenrateChangeBoxs = new List(); + + //遍历组装:改箱dto的头部集合 + foreach (var boxAbout in current_box_about) + { + foreach (var serBoxId in current_sernub_box) + { + if (boxAbout.BoxId != serBoxId) + { + var changeBox = new SaveChangeBoxRecordRequest(); + changeBox.SrcBoxId = serBoxId; + changeBox.DestBoxId = boxAbout.BoxId; + changeBox.SubStockId = boxAbout.SubStockId; + ganenrateChangeBoxs.Add(changeBox); + } + } + } + + //遍历组装明细:改箱dto的明细集合 + foreach (var detItem in dto.Details) + { + ganenrateChangeBoxs.ForEach(x => + { + if (x.SrcBoxId == detItem.SerialNumberBoxId && x.DestBoxId == detItem.BoxId) + { + var changeBoxRD = new SaveChangeBoxRecordDetailsRequest(); + changeBoxRD.MaterialId = detItem.MaterialId; + changeBoxRD.Qty = detItem.Qty; + changeBoxRD.SerialNumbers = detItem.SerialNumbers; + x.Details.Add(changeBoxRD); + } + }); + } + + //改箱保存操作:这里不需要在改箱的操作-进行库存的变更(因为会有问题),下面会去更新库存的 + var changeBoxSave_Result = await _changeMoveBoxService.ChangeBoxSave(ganenrateChangeBoxs, loginInfo, isTransaction,false); + if (!changeBoxSave_Result.IsSuccess) + return changeBoxSave_Result; + #endregion + //保存成功后:变更库存 var entitys = new List(); entitys.Add(entity);