From 56320f924c62ed84e3920b1466dde3bd1e353825 Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Thu, 14 Dec 2023 14:22:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=B1=E5=BA=93=E5=AD=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 18 +++ .../Services/BackRecordService.cs | 85 ++++++----- .../Services/BoxInventoryService.cs | 56 +++++-- src/WMS.Web.Domain/Services/InStockService.cs | 137 +++++++++--------- 4 files changed, 180 insertions(+), 116 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 725e7bac..72c4e3ba 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3686,6 +3686,24 @@ + + + 出入库回退改箱 + + + + + + + + + 非采购入库 + + + + + + 列表页导出 diff --git a/src/WMS.Web.Domain/Services/BackRecordService.cs b/src/WMS.Web.Domain/Services/BackRecordService.cs index caa4b3bb..2bc8f38e 100644 --- a/src/WMS.Web.Domain/Services/BackRecordService.cs +++ b/src/WMS.Web.Domain/Services/BackRecordService.cs @@ -67,7 +67,7 @@ namespace WMS.Web.Domain.Services return Result.ReFailure(ResultCodes.ErpStockNoData); var entity = new BackRecord(); - entity.Method =(InventoryInOutMethod)dto.Method; + entity.Method = (InventoryInOutMethod)dto.Method; entity.OrgCode = dto.OrgCode; entity.StockCode = dto.StockCode; entity.SubStockId = dto.SubStockId; @@ -84,51 +84,56 @@ namespace WMS.Web.Domain.Services if (!serialNumber_result.IsSuccess) return serialNumber_result; - #region 需要改箱操作 - //获取目标箱和原箱信息 - 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(); + //#region 需要改箱操作 + ////获取目标箱和原箱信息 + //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 ganenrateChangeBoxs = new List(); + ////要改箱的数据集合 + //var ganenrateChangeBoxs = new List(); - //遍历组装:改箱dto的头部集合 - foreach (var boxAbout in current_box_about) - { - foreach (var serBoxId in current_sernub_box) - { - if (boxAbout.BoxId != serBoxId) - { - var changeBox = new SaveChangeBoxRecordRequest(); - changeBox.SrcBoxId = serBoxId; - changeBox.DestBoxId = boxAbout.BoxId; - changeBox.SubStockId = entity.SubStockId; - ganenrateChangeBoxs.Add(changeBox); - } - } - } + ////遍历组装:改箱dto的头部集合 + //foreach (var boxAbout in current_box_about) + //{ + // foreach (var serBoxId in current_sernub_box) + // { + // if (boxAbout.BoxId != serBoxId) + // { + // var changeBox = new SaveChangeBoxRecordRequest(); + // changeBox.SrcBoxId = serBoxId; + // changeBox.DestBoxId = boxAbout.BoxId; + // changeBox.SubStockId = entity.SubStockId; + // ganenrateChangeBoxs.Add(changeBox); + // } + // } + //} - //遍历组装明细:改箱dto的明细集合 - foreach (var detItem in dto.Details) - { - ganenrateChangeBoxs.ForEach(x => - { - if (x.SrcBoxId == detItem.SerialNumberBoxId && x.DestBoxId == detItem.BoxId) - { - var changeBoxRD = new SaveChangeBoxRecordDetailsRequest(); - changeBoxRD.MaterialId = detItem.MaterialId; - changeBoxRD.Qty = detItem.Qty; - changeBoxRD.SerialNumbers = detItem.SerialNumbers; - x.Details.Add(changeBoxRD); - } - }); - } + ////遍历组装明细:改箱dto的明细集合 + //foreach (var detItem in dto.Details) + //{ + // ganenrateChangeBoxs.ForEach(x => + // { + // if (x.SrcBoxId == detItem.SerialNumberBoxId && x.DestBoxId == detItem.BoxId) + // { + // var changeBoxRD = new SaveChangeBoxRecordDetailsRequest(); + // changeBoxRD.MaterialId = detItem.MaterialId; + // changeBoxRD.Qty = detItem.Qty; + // changeBoxRD.SerialNumbers = detItem.SerialNumbers; + // 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) return changeBoxSave_Result; - #endregion //保存成功后:变更库存 var boxInventoryResult = await _boxInventoryService.GenerateBackBox(entity, isTransaction); diff --git a/src/WMS.Web.Domain/Services/BoxInventoryService.cs b/src/WMS.Web.Domain/Services/BoxInventoryService.cs index c9e1bfaa..4c3d1432 100644 --- a/src/WMS.Web.Domain/Services/BoxInventoryService.cs +++ b/src/WMS.Web.Domain/Services/BoxInventoryService.cs @@ -580,6 +580,7 @@ namespace WMS.Web.Domain.Services if (dtoDatas == null || dtoDatas.Count == 0) return Result.ReFailure(ResultCodes.InventoryNoSourceError); + var delete_ids = new List(); var update_entitys = new List(); var add_entitys = new List(); var InventoryDetailsGenerateDto = new List(); @@ -621,8 +622,14 @@ namespace WMS.Web.Domain.Services //2.2.2即时库存:修改箱库存的集合 InventoryDetailsGenerateDto.Add(inventoryDet); } - //2.2.1箱库存:修改箱库存的集合 - update_entitys.Add(sour_update_entity); + + //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); } #endregion @@ -690,6 +697,11 @@ namespace WMS.Web.Domain.Services isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction); 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.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() @@ -793,7 +805,8 @@ namespace WMS.Web.Domain.Services } - }//下架 + } + //下架 else { //3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱” @@ -881,6 +894,7 @@ namespace WMS.Web.Domain.Services if (dtoDatas == null || dtoDatas.Count == 0) return Result.ReFailure(ResultCodes.InventoryNoSourceError); + var delete_ids = new List(); var update_entitys = new List(); var add_entitys = new List(); var InventoryDetailsGenerateDto = new List(); @@ -998,7 +1012,8 @@ namespace WMS.Web.Domain.Services } - }//下架 + } + //下架 else { //3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱” @@ -1037,9 +1052,14 @@ namespace WMS.Web.Domain.Services InventoryDetailsGenerateDto.Add(inventoryDet); } - update_entitys.Add(update_entity); - + //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); } } @@ -1055,6 +1075,11 @@ namespace WMS.Web.Domain.Services isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction); 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.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() @@ -1100,6 +1125,7 @@ namespace WMS.Web.Domain.Services if (dtoDatas == null || dtoDatas.Count == 0) return Result.ReFailure(ResultCodes.InventoryNoSourceError); + var delete_ids = new List(); var update_entitys = new List(); var InventoryDetailsGenerateDto = new List(); @@ -1156,7 +1182,8 @@ namespace WMS.Web.Domain.Services //3.5要处理的修改集合 update_entitys.Add(updateEntity); - }//出库 + } + //出库 else { //3.1出库的时候:盘点-箱库存是存在 @@ -1193,8 +1220,14 @@ namespace WMS.Web.Domain.Services //3.2.2即时库存:修改箱库存的集合 InventoryDetailsGenerateDto.Add(inventoryDet); } - //3.5要处理的修改集合 - update_entitys.Add(update_entity); + + //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); } } @@ -1205,6 +1238,11 @@ namespace WMS.Web.Domain.Services isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction); 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.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() diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs index e1d2d62e..1a87f36d 100644 --- a/src/WMS.Web.Domain/Services/InStockService.cs +++ b/src/WMS.Web.Domain/Services/InStockService.cs @@ -283,7 +283,7 @@ namespace WMS.Web.Domain.Services if (current_entityDets != null && current_entityDets.Count != 0 && x.ErpDetailId == current_entityDets.FirstOrDefault().ErpDetailId) { 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; } }); @@ -411,7 +411,7 @@ namespace WMS.Web.Domain.Services if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); - //同步金蝶后,反写任务单的已交数量 + //反写:任务单的已交数量 if (task != null) { task.Details.ForEach(x => @@ -434,77 +434,80 @@ namespace WMS.Web.Domain.Services //6.当按产品上架:就要调用改箱的操作; if (dto.ShelfMethod == (int)ShelfMethod.Product) { - //通过序列号,获取序列号对应的箱 - 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 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_boxs = await _boxRepositories.GetEntityList(current_boxIds); + ////当前序列号对应的箱的集合信息 + //var current_boxs = await _boxRepositories.GetEntityList(current_boxIds); - //要改箱的数据集合 - var ganenrateChangeBoxs = new List(); - //当前按产品上架的箱子 - var dto_box = dto.Boxs.FirstOrDefault(); + ////要改箱的数据集合 + //var ganenrateChangeBoxs = new List(); + ////当前按产品上架的箱子 + //var dto_box = dto.Boxs.FirstOrDefault(); - //其它还要拼装的物料明细 - var tag_dto_erpDetIds = new List(); + ////遍历:序列号对应多个箱 + //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(); + //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); + //} - //遍历:序列号对应多个箱 - 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); - } - 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); + //if (serialNub_isNotHaveBOx.Count != 0) + //{ + // 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 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) return changeBoxSave_Result; }