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);