From 01c12e0bddf821d9a4c28b7be6a7da6470ece0bd Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 14 Dec 2023 14:19:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=9E=E9=87=87=E8=B4=AD=E4=B8=8A=E6=9E=B6?= =?UTF-8?q?=E6=94=B9=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ChangeMoveBoxService.cs | 67 ++++++++++++++++++- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs index 03215e6a..7bb9c8e6 100644 --- a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs +++ b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs @@ -314,9 +314,72 @@ namespace WMS.Web.Domain.Services /// /// /// - public Task ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true) + public async Task ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true) { - throw new NotImplementedException(); + List dtoList = new List(); + //目标箱 + var destIds = inStock.Details.GroupBy(g => g.BoxId); + var serialNumbers = inStock.Details.SelectMany(s => s.SerialNumbers).ToList(); + var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers); + foreach (var detail in inStock.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); } } }