箱库存优化

This commit is contained in:
tongfei
2023-12-14 14:22:29 +08:00
parent 508d6c1349
commit 56320f924c
4 changed files with 180 additions and 116 deletions

View File

@@ -3686,6 +3686,24 @@
<param name="loginInfo"></param> <param name="loginInfo"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WMS.Web.Domain.Services.ChangeMoveBoxService.ChangeBox_BackRecord(WMS.Web.Domain.Entitys.BackRecord,WMS.Web.Core.Dto.Login.LoginInDto,System.Boolean)">
<summary>
出入库回退改箱
</summary>
<param name="backRecord"></param>
<param name="loginInfo"></param>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Services.ChangeMoveBoxService.ChangeBox_InStock(WMS.Web.Domain.Entitys.InStock,WMS.Web.Core.Dto.Login.LoginInDto,System.Boolean)">
<summary>
非采购入库
</summary>
<param name="inStock"></param>
<param name="loginInfo"></param>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Services.ExportExcelService.Export``1(System.Collections.Generic.List{``0},System.String,System.Int32,System.Int32,WMS.Web.Domain.Values.FileDownLoadOrderType,Npoi.Mapper.Mapper,System.Nullable{System.Int32})"> <member name="M:WMS.Web.Domain.Services.ExportExcelService.Export``1(System.Collections.Generic.List{``0},System.String,System.Int32,System.Int32,WMS.Web.Domain.Values.FileDownLoadOrderType,Npoi.Mapper.Mapper,System.Nullable{System.Int32})">
<summary> <summary>
列表页导出 列表页导出

View File

@@ -67,7 +67,7 @@ namespace WMS.Web.Domain.Services
return Result.ReFailure(ResultCodes.ErpStockNoData); return Result.ReFailure(ResultCodes.ErpStockNoData);
var entity = new BackRecord(); var entity = new BackRecord();
entity.Method =(InventoryInOutMethod)dto.Method; entity.Method = (InventoryInOutMethod)dto.Method;
entity.OrgCode = dto.OrgCode; entity.OrgCode = dto.OrgCode;
entity.StockCode = dto.StockCode; entity.StockCode = dto.StockCode;
entity.SubStockId = dto.SubStockId; entity.SubStockId = dto.SubStockId;
@@ -84,51 +84,56 @@ namespace WMS.Web.Domain.Services
if (!serialNumber_result.IsSuccess) if (!serialNumber_result.IsSuccess)
return serialNumber_result; return serialNumber_result;
#region //#region 需要改箱操
//获取目标箱和原箱信息 ////获取目标箱和原箱信息
var current_box_about = dto.Details.GroupBy(x => new { x.BoxId }).Select(x => new { x.Key.BoxId }).ToList(); //var current_box_about = dto.Details.GroupBy(x => new { x.BoxId }).Select(x => new { x.Key.BoxId }).ToList();
var current_sernub_box = dto.Details.GroupBy(x => x.SerialNumberBoxId).Select(x => x.Key).ToList(); //var current_sernub_box = dto.Details.GroupBy(x => x.SerialNumberBoxId).Select(x => x.Key).ToList();
//要改箱的数据集合 ////要改箱的数据集合
var ganenrateChangeBoxs = new List<SaveChangeBoxRecordRequest>(); //var ganenrateChangeBoxs = new List<SaveChangeBoxRecordRequest>();
//遍历组装改箱dto的头部集合 ////遍历组装改箱dto的头部集合
foreach (var boxAbout in current_box_about) //foreach (var boxAbout in current_box_about)
{ //{
foreach (var serBoxId in current_sernub_box) // foreach (var serBoxId in current_sernub_box)
{ // {
if (boxAbout.BoxId != serBoxId) // if (boxAbout.BoxId != serBoxId)
{ // {
var changeBox = new SaveChangeBoxRecordRequest(); // var changeBox = new SaveChangeBoxRecordRequest();
changeBox.SrcBoxId = serBoxId; // changeBox.SrcBoxId = serBoxId;
changeBox.DestBoxId = boxAbout.BoxId; // changeBox.DestBoxId = boxAbout.BoxId;
changeBox.SubStockId = entity.SubStockId; // changeBox.SubStockId = entity.SubStockId;
ganenrateChangeBoxs.Add(changeBox); // ganenrateChangeBoxs.Add(changeBox);
} // }
} // }
} //}
//遍历组装明细改箱dto的明细集合 ////遍历组装明细改箱dto的明细集合
foreach (var detItem in dto.Details) //foreach (var detItem in dto.Details)
{ //{
ganenrateChangeBoxs.ForEach(x => // ganenrateChangeBoxs.ForEach(x =>
{ // {
if (x.SrcBoxId == detItem.SerialNumberBoxId && x.DestBoxId == detItem.BoxId) // if (x.SrcBoxId == detItem.SerialNumberBoxId && x.DestBoxId == detItem.BoxId)
{ // {
var changeBoxRD = new SaveChangeBoxRecordDetailsRequest(); // var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
changeBoxRD.MaterialId = detItem.MaterialId; // changeBoxRD.MaterialId = detItem.MaterialId;
changeBoxRD.Qty = detItem.Qty; // changeBoxRD.Qty = detItem.Qty;
changeBoxRD.SerialNumbers = detItem.SerialNumbers; // changeBoxRD.SerialNumbers = detItem.SerialNumbers;
x.Details.Add(changeBoxRD); // x.Details.Add(changeBoxRD);
} // }
}); // });
} //}
//改箱保存操作:这里不需要在改箱的操作-进行库存的变更(因为会有问题),下面会去更新库存的 ////改箱保存操作:这里不需要在改箱的操作-进行库存的变更(因为会有问题),下面会去更新库存的
var changeBoxSave_Result = await _changeMoveBoxService.ChangeBoxSave(ganenrateChangeBoxs, loginInfo, isTransaction,false); //var changeBoxSave_Result = await _changeMoveBoxService.ChangeBoxSave(ganenrateChangeBoxs, loginInfo, isTransaction,false);
//if (!changeBoxSave_Result.IsSuccess)
// return changeBoxSave_Result;
//#endregion
//改箱保存操作
var changeBoxSave_Result = await _changeMoveBoxService.ChangeBox_BackRecord(entity, loginInfo, isTransaction);
if (!changeBoxSave_Result.IsSuccess) if (!changeBoxSave_Result.IsSuccess)
return changeBoxSave_Result; return changeBoxSave_Result;
#endregion
//保存成功后:变更库存 //保存成功后:变更库存
var boxInventoryResult = await _boxInventoryService.GenerateBackBox(entity, isTransaction); var boxInventoryResult = await _boxInventoryService.GenerateBackBox(entity, isTransaction);

View File

@@ -580,6 +580,7 @@ namespace WMS.Web.Domain.Services
if (dtoDatas == null || dtoDatas.Count == 0) if (dtoDatas == null || dtoDatas.Count == 0)
return Result.ReFailure(ResultCodes.InventoryNoSourceError); return Result.ReFailure(ResultCodes.InventoryNoSourceError);
var delete_ids = new List<int>();
var update_entitys = new List<BoxInventory>(); var update_entitys = new List<BoxInventory>();
var add_entitys = new List<BoxInventory>(); var add_entitys = new List<BoxInventory>();
var InventoryDetailsGenerateDto = new List<InventoryDetailsGenerateDto>(); var InventoryDetailsGenerateDto = new List<InventoryDetailsGenerateDto>();
@@ -621,7 +622,13 @@ namespace WMS.Web.Domain.Services
//2.2.2即时库存:修改箱库存的集合 //2.2.2即时库存:修改箱库存的集合
InventoryDetailsGenerateDto.Add(inventoryDet); InventoryDetailsGenerateDto.Add(inventoryDet);
} }
//2.2.1箱库存:修改箱库存的集合
//4.1判断要修改的箱库存对象是否所有的物料库存的数量都为0“是”则删除该箱库存,"否"则修改;
var isAllNoInventory = sour_update_entity.Details.All(x => x.Qty == 0);
if (isAllNoInventory)
delete_ids.Add(sour_update_entity.Id);
else
//4.2添加要更新的箱库存实体
update_entitys.Add(sour_update_entity); update_entitys.Add(sour_update_entity);
} }
@@ -690,6 +697,11 @@ namespace WMS.Web.Domain.Services
isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction); isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
} }
if (delete_ids.Count != 0)
{
isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
}
//5.即时库存:变更 //5.即时库存:变更
//5.1先合并相同的数据 //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() 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()
@@ -793,7 +805,8 @@ namespace WMS.Web.Domain.Services
} }
}//下架 }
//下架
else else
{ {
//3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱” //3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱”
@@ -881,6 +894,7 @@ namespace WMS.Web.Domain.Services
if (dtoDatas == null || dtoDatas.Count == 0) if (dtoDatas == null || dtoDatas.Count == 0)
return Result.ReFailure(ResultCodes.InventoryNoSourceError); return Result.ReFailure(ResultCodes.InventoryNoSourceError);
var delete_ids = new List<int>();
var update_entitys = new List<BoxInventory>(); var update_entitys = new List<BoxInventory>();
var add_entitys = new List<BoxInventory>(); var add_entitys = new List<BoxInventory>();
var InventoryDetailsGenerateDto = new List<InventoryDetailsGenerateDto>(); var InventoryDetailsGenerateDto = new List<InventoryDetailsGenerateDto>();
@@ -998,7 +1012,8 @@ namespace WMS.Web.Domain.Services
} }
}//下架 }
//下架
else else
{ {
//3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱” //3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱”
@@ -1037,9 +1052,14 @@ namespace WMS.Web.Domain.Services
InventoryDetailsGenerateDto.Add(inventoryDet); InventoryDetailsGenerateDto.Add(inventoryDet);
} }
//4.1判断要修改的箱库存对象是否所有的物料库存的数量都为0“是”则删除该箱库存,"否"则修改;
var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0);
if (isAllNoInventory)
delete_ids.Add(update_entity.Id);
else
//4.2添加要更新的箱库存实体
update_entitys.Add(update_entity); update_entitys.Add(update_entity);
} }
} }
@@ -1055,6 +1075,11 @@ namespace WMS.Web.Domain.Services
isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction); isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
} }
if (delete_ids.Count != 0)
{
isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
}
//5.即时库存:处理 //5.即时库存:处理
//5.1先合并相同的数据 //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() 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()
@@ -1100,6 +1125,7 @@ namespace WMS.Web.Domain.Services
if (dtoDatas == null || dtoDatas.Count == 0) if (dtoDatas == null || dtoDatas.Count == 0)
return Result.ReFailure(ResultCodes.InventoryNoSourceError); return Result.ReFailure(ResultCodes.InventoryNoSourceError);
var delete_ids = new List<int>();
var update_entitys = new List<BoxInventory>(); var update_entitys = new List<BoxInventory>();
var InventoryDetailsGenerateDto = new List<InventoryDetailsGenerateDto>(); var InventoryDetailsGenerateDto = new List<InventoryDetailsGenerateDto>();
@@ -1156,7 +1182,8 @@ namespace WMS.Web.Domain.Services
//3.5要处理的修改集合 //3.5要处理的修改集合
update_entitys.Add(updateEntity); update_entitys.Add(updateEntity);
}//出库 }
//出库
else else
{ {
//3.1出库的时候:盘点-箱库存是存在 //3.1出库的时候:盘点-箱库存是存在
@@ -1193,7 +1220,13 @@ namespace WMS.Web.Domain.Services
//3.2.2即时库存:修改箱库存的集合 //3.2.2即时库存:修改箱库存的集合
InventoryDetailsGenerateDto.Add(inventoryDet); InventoryDetailsGenerateDto.Add(inventoryDet);
} }
//3.5要处理的修改集合
//4.1判断要修改的箱库存对象是否所有的物料库存的数量都为0“是”则删除该箱库存,"否"则修改;
var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0);
if (isAllNoInventory)
delete_ids.Add(update_entity.Id);
else
//4.2添加要更新的箱库存实体
update_entitys.Add(update_entity); update_entitys.Add(update_entity);
} }
} }
@@ -1205,6 +1238,11 @@ namespace WMS.Web.Domain.Services
isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction); isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
} }
if (delete_ids.Count != 0)
{
isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
}
//5.即时库存:处理 //5.即时库存:处理
//5.1先合并相同的数据 //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() 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()

View File

@@ -283,7 +283,7 @@ namespace WMS.Web.Domain.Services
if (current_entityDets != null && current_entityDets.Count != 0 && x.ErpDetailId == current_entityDets.FirstOrDefault().ErpDetailId) if (current_entityDets != null && current_entityDets.Count != 0 && x.ErpDetailId == current_entityDets.FirstOrDefault().ErpDetailId)
{ {
var current_entityDet_matQty = current_entityDets.Sum(x => x.Qty); var current_entityDet_matQty = current_entityDets.Sum(x => x.Qty);
x.DeliveredQty = x.DeliveredQty+ current_entityDet_matQty; x.DeliveredQty = x.DeliveredQty + current_entityDet_matQty;
x.RealityQty = x.RealityQty + current_entityDet_matQty; x.RealityQty = x.RealityQty + current_entityDet_matQty;
} }
}); });
@@ -411,7 +411,7 @@ namespace WMS.Web.Domain.Services
if (!isSuccess) if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError); return Result.ReFailure(ResultCodes.DateWriteError);
//同步金蝶后,反写任务单的已交数量 //反写:任务单的已交数量
if (task != null) if (task != null)
{ {
task.Details.ForEach(x => task.Details.ForEach(x =>
@@ -434,77 +434,80 @@ namespace WMS.Web.Domain.Services
//6.当按产品上架:就要调用改箱的操作; //6.当按产品上架:就要调用改箱的操作;
if (dto.ShelfMethod == (int)ShelfMethod.Product) if (dto.ShelfMethod == (int)ShelfMethod.Product)
{ {
//通过序列号,获取序列号对应的箱 ////通过序列号,获取序列号对应的箱
var cureent_serialNumbs = await _serialNumbersRepositories.GetEntityList(dto.Boxs.SelectMany(x => x.Details).SelectMany(x => x.SerialNumbers).ToList()); //var cureent_serialNumbs = await _serialNumbersRepositories.GetEntityList(dto.Boxs.SelectMany(x => x.Details).SelectMany(x => x.SerialNumbers).ToList());
var current_boxIds = cureent_serialNumbs.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); //var current_boxIds = cureent_serialNumbs.GroupBy(x => x.BoxId).Select(x => x.Key).ToList();
//当前序列号对应的箱的集合信息 ////当前序列号对应的箱的集合信息
var current_boxs = await _boxRepositories.GetEntityList(current_boxIds); //var current_boxs = await _boxRepositories.GetEntityList(current_boxIds);
//要改箱的数据集合 ////要改箱的数据集合
var ganenrateChangeBoxs = new List<SaveChangeBoxRecordRequest>(); //var ganenrateChangeBoxs = new List<SaveChangeBoxRecordRequest>();
//当前按产品上架的箱子 ////当前按产品上架的箱子
var dto_box = dto.Boxs.FirstOrDefault(); //var dto_box = dto.Boxs.FirstOrDefault();
//其它还要拼装的物料明细 ////遍历:序列号对应多个箱
var tag_dto_erpDetIds = new List<int>(); //foreach (var boxId in current_boxIds)
//{
// if (dto_box.BoxId != boxId)
// {
// var box = current_boxs.Where(x => x.Id == boxId).FirstOrDefault();
// //遍历:明细
// var changeBox = new SaveChangeBoxRecordRequest();
// changeBox.DestBoxId = dto_box.BoxId;
// changeBox.SubStockId = dto.SubStockId;
// foreach (var item in dto_box.Details)
// {
// var boxDet = box.Details.Where(t => t.MaterialId == item.MaterialId).FirstOrDefault();
// if (boxDet != null && boxDet.MaterialId == item.MaterialId)
// {
// var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
// changeBoxRD.MaterialId = item.MaterialId;
// changeBoxRD.Qty = item.Qty;
// changeBoxRD.SerialNumbers = item.SerialNumbers;
// changeBox.Details.Add(changeBoxRD);
// }
// }
// //当明细存在,则要有原箱的情况下进行改箱
// if (changeBox.Details.Count != 0)
// {
// changeBox.SrcBoxId = boxId;
// ganenrateChangeBoxs.Add(changeBox);
// }
// }
//}
////没有原箱的情况下,要改箱操作对象
//var serialNub_isNotHaveBOx = new List<string>();
//var serialNumbs = dto.Boxs.SelectMany(x => x.Details).SelectMany(x => x.SerialNumbers).ToList();
//foreach (var item in serialNumbs)
//{
// var current_IsHaveBox_serialNub = cureent_serialNumbs.Where(x => x.SerialNumber == item).Any();
// if (!current_IsHaveBox_serialNub)
// serialNub_isNotHaveBOx.Add(item);
//}
//遍历:序列号对应多个箱 //if (serialNub_isNotHaveBOx.Count != 0)
foreach (var boxId in current_boxIds) //{
{ // var changeBox_tag = new SaveChangeBoxRecordRequest();
if (dto_box.BoxId != boxId) // changeBox_tag.DestBoxId = dto_box.BoxId;
{ // changeBox_tag.SrcBoxId = 0;
var box = current_boxs.Where(x => x.Id == boxId).FirstOrDefault(); // changeBox_tag.SubStockId = dto.SubStockId;
//遍历:明细 // foreach (var item in dto_box.Details)
var changeBox = new SaveChangeBoxRecordRequest(); // {
changeBox.DestBoxId = dto_box.BoxId;
changeBox.SubStockId = dto.SubStockId; // //遍历:明细
foreach (var item in dto_box.Details) // var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
{ // changeBoxRD.MaterialId = item.MaterialId;
var boxDet= box.Details.Where(t => t.MaterialId == item.MaterialId).FirstOrDefault(); // changeBoxRD.Qty = item.Qty;
if (boxDet != null && boxDet.MaterialId == item.MaterialId) // changeBoxRD.SerialNumbers = item.SerialNumbers;
{ // changeBox_tag.Details.Add(changeBoxRD);
var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
changeBoxRD.MaterialId = item.MaterialId; // }
changeBoxRD.Qty = item.Qty; // ganenrateChangeBoxs.Add(changeBox_tag);
changeBoxRD.SerialNumbers = item.SerialNumbers; //}
changeBox.Details.Add(changeBoxRD);
}
else
tag_dto_erpDetIds.Add(item.ErpDetailId);
}
//当明细存在,则要有原箱的情况下进行改箱
if (changeBox.Details.Count != 0)
{
changeBox.SrcBoxId = boxId;
ganenrateChangeBoxs.Add(changeBox);
}
}
}
//去重复
var tagtag_dto_erpDetIds_new= tag_dto_erpDetIds.GroupBy(id => id).Select(x=>x.Key).ToList();
//没有原箱的情况下,要改箱操作对象
var changeBox_tag = new SaveChangeBoxRecordRequest();
changeBox_tag.DestBoxId = dto_box.BoxId;
changeBox_tag.SrcBoxId = 0;
changeBox_tag.SubStockId = dto.SubStockId;
foreach (var item in dto_box.Details)
{
var current_erp_detId= tagtag_dto_erpDetIds_new.Where(id => item.ErpDetailId == id).FirstOrDefault();
if (current_erp_detId != 0 && current_erp_detId == item.ErpDetailId)
{
//遍历:明细
var changeBoxRD = new SaveChangeBoxRecordDetailsRequest();
changeBoxRD.MaterialId = item.MaterialId;
changeBoxRD.Qty = item.Qty;
changeBoxRD.SerialNumbers = item.SerialNumbers;
changeBox_tag.Details.Add(changeBoxRD);
}
}
ganenrateChangeBoxs.Add(changeBox_tag);
//改箱保存操作 //改箱保存操作
var changeBoxSave_Result = await _changeMoveBoxService.ChangeBoxSave(ganenrateChangeBoxs, loginInfo, isTransaction); var changeBoxSave_Result = await _changeMoveBoxService.ChangeBox_InStock(entity, loginInfo, isTransaction);
if (!changeBoxSave_Result.IsSuccess) if (!changeBoxSave_Result.IsSuccess)
return changeBoxSave_Result; return changeBoxSave_Result;
} }