diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 346fa8f7..d65f9cc9 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2165,14 +2165,6 @@ - - - 移箱-箱库存的变更 - - - - - 入库回退上下架-箱库存的变更 @@ -3262,6 +3254,14 @@ + + + 入库回退上下架-箱库存的变更 + + + + + 处理箱库存变更:出入库 diff --git a/src/WMS.Web.Domain/Services/BoxInventoryService.cs b/src/WMS.Web.Domain/Services/BoxInventoryService.cs index edb486fb..05ff53c0 100644 --- a/src/WMS.Web.Domain/Services/BoxInventoryService.cs +++ b/src/WMS.Web.Domain/Services/BoxInventoryService.cs @@ -477,6 +477,62 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } + /// + /// 入库回退上下架-箱库存的变更 + /// + /// + /// + /// + public async Task GenerateBackBox(List dtoDatas, bool isTransaction) + { + //1.判断来源数据是否存在 + if (dtoDatas == null || dtoDatas.Count == 0) + return Result.ReFailure(ResultCodes.InventoryNoSourceError); + + //2.获取“箱库存集合” + var boxIds = dtoDatas.SelectMany(x=>x.Details).GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); + var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); + var boxs = await _boxRepositories.GetEntityList(boxIds); + var serialNumbers = await _serialNumbersRepositories.GetEntityListByBoxIds(boxIds); + + // + var dtoDetails_in = dtoDatas.Where(x => x.Type == BackRecordType.OutstockOn).SelectMany(x => x.Details).ToList(); + + //2.1组织:头部 + var generateDtoList = dtoDatas.SelectMany(x => x.Details).GroupBy(x => new { x.BoxId, x.OrgCode, x.StockCode, x.SubStockId }) + .Select(x=>new BoxInventoryBackGenerateDto() + { + BoxId=x.Key.BoxId, + OrgCode=x.Key.OrgCode, + StockCode=x.Key.StockCode, + SubStockId=x.Key.SubStockId + }).ToList(); + + + //3.遍历:组装明细 + generateDtoList.ForEach(x => + { + foreach (var detItem in dtoDatas.SelectMany(x=>x.Details).ToList()) + { + //3.1箱是当前的 + if (detItem.BoxId == x.BoxId) + { + var dtoCurrent = dtoDatas.Where(x => x.Id == detItem.Fid).FirstOrDefault(); + if (dtoCurrent != null) + x.InventoryInOutType = dtoCurrent.Type == BackRecordType.InstockOff ? (int)InventoryInOutType.Out : (int)InventoryInOutType.In; + //3.2组装明细 + var det = new BoxInventoryBackDetailsGenerateDto(); + det.MaterialId = detItem.MaterialId; + det.Qty = detItem.Qty; + det.SerialNumbers = detItem.SerialNumbers; + x.Details.Add(det); + } + } + }); + //4.提交处理 + return await this.GenerateBackBox(generateDtoList, isTransaction); + } + /// /// 处理箱库存变更:出入库 diff --git a/src/WMS.Web.Repositories/BoxInventoryRepositories.cs b/src/WMS.Web.Repositories/BoxInventoryRepositories.cs index 33db26f5..068a686c 100644 --- a/src/WMS.Web.Repositories/BoxInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/BoxInventoryRepositories.cs @@ -115,9 +115,12 @@ namespace WMS.Web.Repositories .Where(x => 1 == 1 && x.box.BoxBillNo==boxBillNo).Select(x=>x.boxinvent).FirstOrDefaultAsync(); var response = _mapper.Map(entity); - response.Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, response.StockCode+response.OrgCode); - response.SubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, response.SubStockId); - response.Details = _mapper.Map>(entity.Details); + if (response != null) + { + response.Stock = _singleDataService.GetSingleData(SingleAction.StocksJoinOrgCode, _loginRepositories.CompanyId, response.StockCode + response.OrgCode); + response.SubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, response.SubStockId); + response.Details = _mapper.Map>(entity.Details); + } return response; }