出库-箱库存-优化
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user