出库-箱库存-优化

This commit is contained in:
tongfei
2023-12-07 15:09:32 +08:00
parent f9be428521
commit 2407ef3b3b
2 changed files with 23 additions and 27 deletions

View File

@@ -564,14 +564,19 @@ namespace WMS.Web.Domain.Services
//物料收发明细dtos
var InventoryInOutDetailsGenerateDtoList = new List<InventoryInOutDetailsGenerateDto>();
//找出所有的箱库存
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
/// 出库单-箱库存变更
/// </summary>
/// <param name="dtoDatas"></param>
/// <param name="boxInventorys"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
private async Task<Result> ExeOutStockBox(List<BoxInventoryGenerateDto> dtoDatas, bool isTransaction)
private async Task<Result> ExeOutStockBox(List<BoxInventoryGenerateDto> dtoDatas,List<BoxInventory> boxInventorys, bool isTransaction)
{
//1.判断来源数据是否存在
if (dtoDatas == null || dtoDatas.Count == 0)
@@ -1430,11 +1444,6 @@ namespace WMS.Web.Domain.Services
var delete_ids = new List<int>();
var update_entitys = new List<BoxInventory>();
var InventoryDetailsGenerateDto = new List<InventoryDetailsGenerateDto>();
//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<InventoryDetailsGenerateDto>();
invDetGenDtos.AddRange(invDetGenDtos_in);
invDetGenDtos.AddRange(invDetGenDtos_out);
if (invDetGenDtos.Count != 0)
{
var inventoryDetails_result = await _inventoryDetailsService.GenerateInventoryDetails(invDetGenDtos, isTransaction);