diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index c1edc966..62a1916b 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3509,11 +3509,12 @@ - + 出库单-箱库存变更 + diff --git a/src/WMS.Web.Domain/Services/BoxInventoryService.cs b/src/WMS.Web.Domain/Services/BoxInventoryService.cs index 528dad6d..2eeb1fd8 100644 --- a/src/WMS.Web.Domain/Services/BoxInventoryService.cs +++ b/src/WMS.Web.Domain/Services/BoxInventoryService.cs @@ -564,14 +564,19 @@ namespace WMS.Web.Domain.Services //物料收发明细dtos var InventoryInOutDetailsGenerateDtoList = new List(); + //找出所有的箱库存 + var boxIds = dtoData.Details.SelectMany(x => x.BoxsDetails).GroupBy(x=>x.BoxId).Select(x => x.Key).ToList(); + var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); + //判断箱库存是否存在 + var isNotHaveBoxInvetory = boxInventorys.All(x => boxIds.Any(bid => bid != x.Id)); + if(isNotHaveBoxInvetory) + return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); + //2.组装 - var generateDtoList = dtoData.Details.SelectMany(x => x.BoxsDetails).GroupBy(x => new { x.BoxId, x.SubStockId }) + var generateDtoList = dtoData.Details.SelectMany(x => x.BoxsDetails).GroupBy(x => new { x.BoxId }) .Select(x => new BoxInventoryGenerateDto() { BoxId = x.Key.BoxId, - OrgCode = dtoData.OrgCode, - StockCode = dtoData.StockCode, - SubStockId = x.Key.SubStockId, InventoryInOutMethod = (int)dtoData.Method, InventoryInOutType = (int)InventoryInOutType.Out @@ -579,6 +584,14 @@ namespace WMS.Web.Domain.Services //3.组装明细 generateDtoList.ForEach(x => { + //从箱库存找到:组织、仓库、仓位、进行赋值; + var current_box_invetory = boxInventorys.Where(t => t.BoxId == x.BoxId).FirstOrDefault(); + if (current_box_invetory != null && current_box_invetory.BoxId==x.BoxId) + { + x.OrgCode = current_box_invetory.OrgCode; + x.StockCode = current_box_invetory.StockCode; + x.SubStockId = current_box_invetory.SubStockId; + } //3.1先通过中间层的明细的箱明细找到中间层明细的IDS var current_materialDetails_ids = dtoData.Details.SelectMany(t => t.BoxsDetails).Where(t => t.BoxId == x.BoxId).GroupBy(t => t.DetailId).Select(t => t.Key).ToList(); //3.2再通过找到的IDS获取中间层的明细 @@ -599,7 +612,7 @@ namespace WMS.Web.Domain.Services }); //提交处理 - var result = await this.ExeOutStockBox(generateDtoList, isTransaction); + var result = await this.ExeOutStockBox(generateDtoList, boxInventorys, isTransaction); if (!result.IsSuccess) return result; @@ -1419,9 +1432,10 @@ namespace WMS.Web.Domain.Services /// 出库单-箱库存变更 /// /// + /// /// /// - private async Task ExeOutStockBox(List dtoDatas, bool isTransaction) + private async Task ExeOutStockBox(List dtoDatas,List boxInventorys, bool isTransaction) { //1.判断来源数据是否存在 if (dtoDatas == null || dtoDatas.Count == 0) @@ -1430,11 +1444,6 @@ namespace WMS.Web.Domain.Services var delete_ids = new List(); var update_entitys = new List(); var InventoryDetailsGenerateDto = new List(); - - //1.1通过箱IDS获取箱库存 - var boxIds = dtoDatas.Select(x => x.BoxId).ToList(); - var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); - //2.遍历 foreach (var dto in dtoDatas) { @@ -1524,17 +1533,7 @@ namespace WMS.Web.Domain.Services if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); } //5.即时库存:变更处理 - //5.1先合并相同的数据 - var invDetGenDtos_in = InventoryDetailsGenerateDto.Where(x => x.InventoryInOutType == (int)InventoryInOutType.In).GroupBy(x => new { x.OrgCode, x.MaterialId, x.StockCode, x.SubStockId }).Select(x => new InventoryDetailsGenerateDto() - { - OrgCode = x.Key.OrgCode, - StockCode = x.Key.StockCode, - MaterialId = x.Key.MaterialId, - SubStockId = x.Key.SubStockId, - InventoryInOutType = (int)InventoryInOutType.In, - Qty = x.Sum(t => t.Qty) - }).ToList(); - var invDetGenDtos_out = InventoryDetailsGenerateDto.Where(x => x.InventoryInOutType == (int)InventoryInOutType.Out).GroupBy(x => new { x.OrgCode, x.MaterialId, x.StockCode, x.SubStockId }).Select(x => new InventoryDetailsGenerateDto() + var invDetGenDtos = InventoryDetailsGenerateDto.Where(x => x.InventoryInOutType == (int)InventoryInOutType.Out).GroupBy(x => new { x.OrgCode, x.MaterialId, x.StockCode, x.SubStockId }).Select(x => new InventoryDetailsGenerateDto() { OrgCode = x.Key.OrgCode, StockCode = x.Key.StockCode, @@ -1543,10 +1542,6 @@ namespace WMS.Web.Domain.Services InventoryInOutType = (int)InventoryInOutType.Out, Qty = x.Sum(t => t.Qty) }).ToList(); - - var invDetGenDtos = new List(); - invDetGenDtos.AddRange(invDetGenDtos_in); - invDetGenDtos.AddRange(invDetGenDtos_out); if (invDetGenDtos.Count != 0) { var inventoryDetails_result = await _inventoryDetailsService.GenerateInventoryDetails(invDetGenDtos, isTransaction);