From fb7c00f0835a85f4bd473db77ae5b14da42bb503 Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Fri, 24 Nov 2023 12:00:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=94=B6=E5=8F=91=E6=98=8E?= =?UTF-8?q?=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 58 +++++++++- .../InventoryInOutDetailsGenerateDto.cs | 4 - .../IService/IInventoryInOutDetailsService.cs | 16 +++ .../Services/BoxInventoryService.cs | 109 +++++++++++++++--- .../Services/InventoryInOutDetailsService.cs | 28 +++++ src/WMS.Web.Domain/Values/OrderType.cs | 20 ++++ 6 files changed, 212 insertions(+), 23 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 466de104..0cd86929 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2464,6 +2464,21 @@ + + + 生成dto + + + + + + + + + + + + 出库服务 @@ -3341,19 +3356,23 @@ - + 改箱-箱库存的变更 + + - + 移箱-箱库存的变更 + + @@ -3672,6 +3691,21 @@ + + + 生成dto + + + + + + + + + + + + 出库服务 @@ -4859,6 +4893,26 @@ 组装拆卸出库 + + + 改箱 + + + + + 移箱 + + + + + 出入库回退单 + + + + + 盘点单 + + 出库状态 diff --git a/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs index df64e86d..2d3f2d55 100644 --- a/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs +++ b/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs @@ -47,10 +47,6 @@ namespace WMS.Web.Core.Dto.Inventory /// 数量:出入库 /// public decimal Qty { get; set; } - ///// - ///// 结存 - ///// - //public decimal SurplusQty { get; set; } /// /// 类型:1为入库,2为出库 diff --git a/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs b/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs index 350dd5ec..01f70b2b 100644 --- a/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs +++ b/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs @@ -4,6 +4,7 @@ using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto.Inventory; using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Values; namespace WMS.Web.Domain.IService { @@ -19,5 +20,20 @@ namespace WMS.Web.Domain.IService /// /// Task GenerateInOrOutDetails(List dtos, bool isTransaction); + + /// + /// 生成dto + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + InventoryInOutDetailsGenerateDto GenerateDto(int boxId, int materialId, string orgCode, string stockCode, int subStockId, OrderType orderType, string billNo, decimal qty, InventoryInOutType inventoryInOutType); } } diff --git a/src/WMS.Web.Domain/Services/BoxInventoryService.cs b/src/WMS.Web.Domain/Services/BoxInventoryService.cs index 66e1bdce..e9b5a71c 100644 --- a/src/WMS.Web.Domain/Services/BoxInventoryService.cs +++ b/src/WMS.Web.Domain/Services/BoxInventoryService.cs @@ -21,10 +21,12 @@ namespace WMS.Web.Domain.Services private readonly IMapper _mapper; private readonly IBoxRepositories _boxRepositories; private readonly IInventoryDetailsService _inventoryDetailsService; + private readonly IInventoryInOutDetailsService _inventoryInOutDetailsService; private readonly ISerialNumbersRepositories _serialNumbersRepositories; private readonly IBoxInventoryRepositories _boxInventoryRepositories; public BoxInventoryService(IMapper mapper, IBoxRepositories boxRepositories, IInventoryDetailsService inventoryDetailsService, + IInventoryInOutDetailsService inventoryInOutDetailsService, ISerialNumbersRepositories serialNumbersRepositories, IBoxInventoryRepositories boxInventoryRepositories) { @@ -33,6 +35,7 @@ namespace WMS.Web.Domain.Services _inventoryDetailsService = inventoryDetailsService; _serialNumbersRepositories = serialNumbersRepositories; _boxInventoryRepositories = boxInventoryRepositories; + _inventoryInOutDetailsService = inventoryInOutDetailsService; } @@ -86,7 +89,49 @@ namespace WMS.Web.Domain.Services } }); //4.开始处理 - return await this.ExeChangeBox(generateDtos, isTransaction); + var result= await this.ExeChangeBox(generateDtos, sourceBoxInventorys, targetBoxInventorys, isTransaction); + if (!result.IsSuccess) + return result; + + //5.物料收发明细dtos + var InventoryInOutDetailsGenerateDtoList = new List(); + + //5.1遍历 + foreach (var item in dtoDatas) + { + //5.2组装:原箱物料收发明细;有箱库存就需要创建物料收发明细; + var sour = sourceBoxInventorys.Where(x => x.BoxId == item.SrcBoxId).FirstOrDefault(); + if (sour != null) + { + var inventoryInOutDet = _inventoryInOutDetailsService.GenerateDto( + item.SrcBoxId, item.MaterialId, + sour.OrgCode, sour.StockCode, + sour.SubStockId, OrderType.ChangeBox, + item.BillNo, item.Qty, InventoryInOutType.Out); + InventoryInOutDetailsGenerateDtoList.Add(inventoryInOutDet); + } + //5.3组装:目标箱物料收发明细;有箱库存就需要创建物料收发明细; + var tagBox = targetBoxInventorys.Where(x => x.BoxId == item.DestBoxId).FirstOrDefault(); + if (tagBox != null) + { + var inventoryInOutDet=_inventoryInOutDetailsService.GenerateDto( + item.DestBoxId, item.MaterialId, + item.DestBoxOrgCode, item.DestStockCode, + item.DestSubStockId, OrderType.ChangeBox, + item.BillNo, item.Qty, InventoryInOutType.In); + InventoryInOutDetailsGenerateDtoList.Add(inventoryInOutDet); + } + } + + //5.提交物料收发明细:新增 + if (InventoryInOutDetailsGenerateDtoList.Count != 0) + { + var inout_result = await _inventoryInOutDetailsService.GenerateInOrOutDetails(InventoryInOutDetailsGenerateDtoList,isTransaction); + if (!inout_result.IsSuccess) + return inout_result; + } + return Result.ReSuccess(); + } /// @@ -101,6 +146,9 @@ namespace WMS.Web.Domain.Services if (dtoDatas == null || dtoDatas.Count == 0) return Result.ReFailure(ResultCodes.InventoryNoSourceError); + //物料收发明细dtos + var InventoryInOutDetailsGenerateDtoList = new List(); + //2.箱库存集合 var boxIds = dtoDatas.Where(x => x.BoxId != 0 && x.Type == MoveBoxType.Down).GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); @@ -112,6 +160,7 @@ namespace WMS.Web.Domain.Services var generateDtoList = new List(); foreach (var item in dtoDatas) { + //2.2.1箱库存dto-组装 var generateDto = new BoxInventoryMoveGenerateDto(); generateDto.BoxId = item.BoxId; generateDto.OrgCode = item.OrgCode; @@ -120,9 +169,43 @@ namespace WMS.Web.Domain.Services generateDto.InventoryInOutType = item.Type == MoveBoxType.Down ? (int)InventoryInOutType.Out : (int)InventoryInOutType.In; generateDtoList.Add(generateDto); + //2.2.2物料收发明dto-组装 + var SubStockId = item.Type == MoveBoxType.Up ? item.DestSubStockId : item.SrcSubStockId; + InventoryInOutType InOutType = item.Type == MoveBoxType.Down ? InventoryInOutType.Out : InventoryInOutType.In; + var ishave = boxInventorys.Where(x => x.BoxId == item.BoxId).Any(); + //上架-箱是不存在库存的情况下,生成物料收发明细 + //或者 + //下架-箱库存是存在的情况下,生成物料收发明细 + if ((!ishave && item.Type == MoveBoxType.Up) || (ishave && item.Type == MoveBoxType.Down)) + { + //5.1.1取箱信息 + var box = boxs.Where(x => x.Id == item.BoxId).FirstOrDefault(); + foreach (var boxDet in box.Details) + { + var inventoryInOutDet = _inventoryInOutDetailsService.GenerateDto( + item.BoxId, boxDet.MaterialId, + item.OrgCode, item.StockCode, + SubStockId, OrderType.MoveBox, + item.BillNo, item.Qty, InOutType); + InventoryInOutDetailsGenerateDtoList.Add(inventoryInOutDet); + } + } + } //4.开始处理 - return await this.ExeMoveBox(generateDtoList, isTransaction); + var result= await this.ExeMoveBox(generateDtoList, boxInventorys, boxs, isTransaction); + if (!result.IsSuccess) + return result; + + //5.提交物料收发明细:新增 + if (InventoryInOutDetailsGenerateDtoList.Count != 0) + { + var inout_result = await _inventoryInOutDetailsService.GenerateInOrOutDetails(InventoryInOutDetailsGenerateDtoList, isTransaction); + if (!inout_result.IsSuccess) + return inout_result; + } + + return Result.ReSuccess(); } /// @@ -425,13 +508,16 @@ namespace WMS.Web.Domain.Services //提交处理 return await this.ExeOutStockBox(generateDtoList, isTransaction); } + /// /// 改箱-箱库存的变更 /// /// + /// + /// /// /// - private async Task ExeChangeBox(List dtoDatas, bool isTransaction) + private async Task ExeChangeBox(List dtoDatas,List sourceBoxInventorys, List targetBoxInventorys, bool isTransaction) { //1.判断来源数据是否存在 if (dtoDatas == null || dtoDatas.Count == 0) @@ -441,16 +527,6 @@ namespace WMS.Web.Domain.Services var add_entitys = new List(); var InventoryDetailsGenerateDto = new List(); - var boxIds = dtoDatas.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); - var targetBoxIds = dtoDatas.GroupBy(x => x.TargetBoxId).Select(x => x.Key).ToList(); - - //2.原来箱库存集合 - var sourceBoxInventorys = await _boxInventoryRepositories.GetList(boxIds); - - //2.1目标箱库存集合 - var targetBoxInventorys = await _boxInventoryRepositories.GetList(targetBoxIds); - - foreach (var dto in dtoDatas) { #region 原箱库存-库存处理 @@ -487,7 +563,6 @@ namespace WMS.Web.Domain.Services inventoryDet.InventoryInOutType = (int)InventoryInOutType.Out; //2.2.2即时库存:修改箱库存的集合 InventoryDetailsGenerateDto.Add(inventoryDet); - } //2.2.1箱库存:修改箱库存的集合 update_entitys.Add(sour_update_entity); @@ -573,9 +648,11 @@ namespace WMS.Web.Domain.Services /// 移箱-箱库存的变更 /// /// + /// + /// /// /// - private async Task ExeMoveBox(List dtoDatas, bool isTransaction) + private async Task ExeMoveBox(List dtoDatas, List boxInventorys,List boxs, bool isTransaction) { //1.判断来源数据是否存在 if (dtoDatas == null || dtoDatas.Count == 0) @@ -587,8 +664,6 @@ namespace WMS.Web.Domain.Services //2.获取“箱库存集合”和“箱基本信息集合” var boxIds = dtoDatas.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); - var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); - var boxs = await _boxRepositories.GetEntityList(boxIds); var serialNumbers = await _serialNumbersRepositories.GetEntityListByBoxIds(boxIds); //3.遍历:dto diff --git a/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs b/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs index 0b7c481b..5e5fe10d 100644 --- a/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs +++ b/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs @@ -79,5 +79,33 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } + + /// + /// 生成dto + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public InventoryInOutDetailsGenerateDto GenerateDto(int boxId,int materialId,string orgCode,string stockCode,int subStockId, OrderType orderType,string billNo,decimal qty, InventoryInOutType inventoryInOutType) + { + var item = new InventoryInOutDetailsGenerateDto(); + item.BoxId = boxId; + item.MaterialId = materialId; + item.OrgCode = orgCode; + item.StockCode = stockCode; + item.SubStockId = subStockId; + item.OrderType = (int)orderType; + item.OrderBillNo = billNo; + item.Qty = qty; + item.InventoryInOutType = (int)inventoryInOutType; + return item; + } } } diff --git a/src/WMS.Web.Domain/Values/OrderType.cs b/src/WMS.Web.Domain/Values/OrderType.cs index 813c49e6..0252bfe9 100644 --- a/src/WMS.Web.Domain/Values/OrderType.cs +++ b/src/WMS.Web.Domain/Values/OrderType.cs @@ -60,5 +60,25 @@ namespace WMS.Web.Domain.Values /// [EnumRemark("组装拆卸出库")] Assembled_Out = 10, + /// + /// 改箱 + /// + [EnumRemark("改箱单")] + ChangeBox = 11, + /// + /// 移箱 + /// + [EnumRemark("移箱单")] + MoveBox = 12, + /// + /// 出入库回退单 + /// + [EnumRemark("出入库回退单")] + Back = 13, + /// + /// 盘点单 + /// + [EnumRemark("盘点单")] + Take = 14, } }