diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index d681219a..5ad8fcf9 100644 Binary files a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 and b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 differ diff --git a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs index 78aeb46c..42a762b4 100644 --- a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs +++ b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs @@ -10,6 +10,12 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord /// public class SaveChangeBoxRecordRequest { + public SaveChangeBoxRecordRequest() { } + public SaveChangeBoxRecordRequest(int srcBoxId, int destBoxId) + { + this.SrcBoxId = srcBoxId; + this.DestBoxId = destBoxId; + } /// /// 原箱子ID /// @@ -34,6 +40,19 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord /// public class SaveChangeBoxRecordDetailsRequest { + public SaveChangeBoxRecordDetailsRequest() { } + public SaveChangeBoxRecordDetailsRequest(int materialId, decimal qty, List serialNumbers) + { + this.MaterialId = materialId; + this.Qty = qty; + this.SerialNumbers = serialNumbers; + } + public SaveChangeBoxRecordDetailsRequest(int materialId, decimal qty, string serialNumber) + { + this.MaterialId = materialId; + this.Qty = qty; + this.SerialNumbers.Add(serialNumber); + } /// /// 物料ID /// diff --git a/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs b/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs index c4183075..ca438771 100644 --- a/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs +++ b/src/WMS.Web.Domain/IService/IChangeMoveBoxService.cs @@ -7,6 +7,7 @@ using WMS.Web.Core.Dto.ChangeBoxRecord; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.MoveBoxRecord; using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Services; namespace WMS.Web.Domain.IService @@ -20,6 +21,10 @@ namespace WMS.Web.Domain.IService Task ChangeBoxSave(List dto, LoginInDto loginInfo, bool isTransaction=true,bool IsInventory=true); //移箱保存 Task MoveBoxSave(List dto, bool IsUp, LoginInDto loginInfo); - + //出库回退 + Task ChangeBox_BackRecord(BackRecord BackRecord, LoginInDto loginInfo, bool isTransaction = true); + //出库回退 + Task ChangeBox_InStock(InStock InStocks, LoginInDto loginInfo, bool isTransaction = true); + } } diff --git a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs index f4982290..72257fba 100644 --- a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs +++ b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs @@ -11,6 +11,7 @@ using WMS.Web.Core.Dto.ChangeBoxRecord; using WMS.Web.Core.Dto.Inventory; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.MoveBoxRecord; +using WMS.Web.Core.Help; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; @@ -232,5 +233,84 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } + /// + /// 出入库回退改箱 + /// + /// + /// + /// + /// + public async Task ChangeBox_BackRecord(BackRecord backRecord, LoginInDto loginInfo, bool isTransaction = true) + { + List dtoList = new List(); + //目标箱 + var destIds = backRecord.Details.GroupBy(g => g.BoxId); + var serialNumbers = backRecord.Details.SelectMany(s => s.SerialNumbers).ToList(); + var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers); + foreach (var detail in backRecord.Details) + { + if (detail.Qty == 0) continue; + var detailClone = detail.Clone(); + //处理序列号 + var sList = serialNumberList.Where(w => detailClone.SerialNumbers.Contains(w.SerialNumber)).ToList(); + foreach (var s in sList) + { + //原箱和目标箱一样不处理 + if (s.BoxId == detailClone.BoxId) + { + detailClone.Qty = detailClone.Qty - 1; + detailClone.SerialNumbers.Remove(s.SerialNumber); + continue; + } + + var d = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == s.BoxId); + if (d == null) + { + d = new SaveChangeBoxRecordRequest(0, detail.BoxId); + d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detail.MaterialId, 1, s.SerialNumber)); + } + else + { + var dtoDetail = d.Details.FirstOrDefault(f => f.MaterialId == detail.MaterialId); + if (dtoDetail == null) + d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detail.MaterialId, 1, s.SerialNumber)); + else + { + dtoDetail.Qty += 1; + dtoDetail.SerialNumbers.Add(s.SerialNumber); + } + } + detailClone.Qty = detailClone.Qty - 1; + detailClone.SerialNumbers.Remove(s.SerialNumber); + } + + //处理非序列号的数据 + if (detailClone.Qty <= 0) continue; + var dto = dtoList.FirstOrDefault(f => f.DestBoxId == detail.BoxId && f.SrcBoxId == 0); + if (dto == null) + { + dto = new SaveChangeBoxRecordRequest(0, detailClone.BoxId); + dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers)); + } + else + { + var dtoDetail = dto.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId); + if (dtoDetail == null) + dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers)); + else + { + dtoDetail.Qty += detailClone.Qty; + dtoDetail.SerialNumbers.AddRange(detailClone.SerialNumbers); + } + } + } + + return await ChangeBoxSave(dtoList, loginInfo, isTransaction, false); + } + + public Task ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true) + { + throw new NotImplementedException(); + } } }