diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index b068aeea..1edd4132 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -1985,9 +1985,9 @@ 出入库回退上下架-箱库存处理对象 - + - 类型:1为入库回退下架,2为出库回退上架 + 类型:1为入库,2为出库 @@ -2140,36 +2140,61 @@ 物料库存数量 - + 箱库存 - + + + 出入库存-方式(详情见枚举值):必填;1-box按箱,2-product按产品 + + + + + 出入库存-类型(详情见枚举值):必填;1-In入库,2-Out出库 + + + + + 箱ID:必填 + + + + + 仓库code:为空的时候,就是出库等操作,有值的时候就是移箱改箱和上架操作 + + + + + 仓位:为空的时候,就是出库等操作,有值的时候就是移箱改箱和上架操作 + + + + + 明细 + + + 箱库存明细 - - - 明细ID - - - + 物料ID - - - 序列号集 - - - + 物料库存数量 + + + 序列号集 + + 移箱-上架和下架 @@ -2190,9 +2215,9 @@ 仓位 - + - 是否是上架:true是上架,false是下架 + 类型:1为入库,2为出库 @@ -2200,9 +2225,9 @@ 非采购上架-箱库存处理对象 - + - 非采购上架方式 + 入库方式 @@ -2246,7 +2271,7 @@ 出库-箱库存变更请求对象 - + 出入库存-方式(详情见枚举值) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index f5967f1d..a6e35cf2 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2216,6 +2216,38 @@ 即时库存-服务接口 + + + 出库单和入库单-变更箱库存 + + + + + + + + 改箱-箱库存的变更 + + + + + + + + 移箱-箱库存的变更 + + + + + + + + 入库回退上下架-箱库存的变更 + + + + + 出库服务 @@ -3314,6 +3346,34 @@ + + + 处理箱库存变更:出入库 + + + + + + + + 生成出库对象:删除和修改 + + + + + + + + + + 生成入库对象:新增和修改 + + + + + + + 出库服务 @@ -4329,21 +4389,6 @@ 出入库回退上下架 - - - 出入库存-方式 - - - - - 按箱 - - - - - 按产品 - - 入库状态 @@ -4399,6 +4444,21 @@ 组装拆卸入库 + + + 出入库存-方式 + + + + + 按箱 + + + + + 按产品 + + 物料收发明细类型 diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs index cbab813b..fe2c41a4 100644 --- a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs @@ -10,9 +10,9 @@ namespace WMS.Web.Core.Dto.Inventory public class BoxInventoryBackGenerateDto { /// - /// 类型:1为入库回退下架,2为出库回退上架 + /// 类型:1为入库,2为出库 /// - public int BackRecordType { get; set; } + public int InventoryInOutType { get; set; } /// /// 箱ID diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryDto.cs deleted file mode 100644 index fc21a8a3..00000000 --- a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryDto.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace WMS.Web.Core.Dto.Inventory -{ - /// - /// 箱库存 - /// - public class BoxInventoryDto - { - - } - - /// - /// 箱库存明细 - /// - public class BoxInventoryDetailsDto - { - /// - /// 明细ID - /// - public int DetailsId { get; set; } - - /// - /// 物料ID - /// - public int MaterialId { get; set; } - /// - /// 序列号集 - /// - public List SerialNumbers { get; set; } = new List(); - /// - /// 物料库存数量 - /// - public decimal Qty { get; set; } - } -} diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryGenerateDto.cs new file mode 100644 index 00000000..7f81cc52 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryGenerateDto.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Inventory +{ + /// + /// 箱库存 + /// + public class BoxInventoryGenerateDto + { + /// + /// 出入库存-方式(详情见枚举值):必填;1-box按箱,2-product按产品 + /// + public int InventoryInOutMethod { get; set; } + + /// + /// 出入库存-类型(详情见枚举值):必填;1-In入库,2-Out出库 + /// + public int InventoryInOutType { get; set; } + + /// + /// 箱ID:必填 + /// + public int BoxId { get; set; } + + /// + /// 仓库code:为空的时候,就是出库等操作,有值的时候就是移箱改箱和上架操作 + /// + public string StockCode { get; set; } + + /// + /// 仓位:为空的时候,就是出库等操作,有值的时候就是移箱改箱和上架操作 + /// + public int? SubStockId { get; set; } + + /// + /// 明细 + /// + public List Details { get; set; } = new List(); + } + + /// + /// 箱库存明细 + /// + public class BoxInventoryGenerateDetailsDto + { + /// + /// 物料ID + /// + public int MaterialId { get; set; } + + /// + /// 物料库存数量 + /// + public decimal Qty { get; set; } + + /// + /// 序列号集 + /// + public List SerialNumbers { get; set; } = new List(); + } +} diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryMoveGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryMoveGenerateDto.cs index 28e32d3c..3c4a9674 100644 --- a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryMoveGenerateDto.cs +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryMoveGenerateDto.cs @@ -25,8 +25,8 @@ namespace WMS.Web.Core.Dto.Inventory public int SubStockId { get; set; } /// - /// 是否是上架:true是上架,false是下架 + /// 类型:1为入库,2为出库 /// - public bool IsOn { get; set; } + public int InventoryInOutType { get; set; } } } diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryNoPurchaseGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryNoPurchaseGenerateDto.cs index 226a547b..d29bfc3e 100644 --- a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryNoPurchaseGenerateDto.cs +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryNoPurchaseGenerateDto.cs @@ -10,9 +10,9 @@ namespace WMS.Web.Core.Dto.Inventory public class BoxInventoryNoPurchaseGenerateDto { /// - /// 非采购上架方式 + /// 入库方式 /// - public int ShelfMethod { get; set; } + public int InventoryInOutMethod { get; set; } // /// 仓库编码 diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs index 32b8fd5b..2b06f635 100644 --- a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs @@ -12,7 +12,7 @@ namespace WMS.Web.Core.Dto.Inventory /// /// 出入库存-方式(详情见枚举值) /// - public int InOutInventoryMethod { get; set; } + public int InventoryInOutMethod { get; set; } /// /// 箱ID diff --git a/src/WMS.Web.Domain/IService/IInventoryService.cs b/src/WMS.Web.Domain/IService/IInventoryService.cs index ba0011b2..923c2c9f 100644 --- a/src/WMS.Web.Domain/IService/IInventoryService.cs +++ b/src/WMS.Web.Domain/IService/IInventoryService.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.Inventory; +using WMS.Web.Core.Internal.Results; namespace WMS.Web.Domain.IService { @@ -9,5 +12,37 @@ namespace WMS.Web.Domain.IService /// public interface IInventoryService { + /// + /// 出库单和入库单-变更箱库存 + /// + /// + /// + /// + Task HandlBoxInventory(List dtoDatas, bool isTransaction); + + /// + /// 改箱-箱库存的变更 + /// + /// + /// + /// + Task GenerateChangeBox(List dtoDatas, bool isTransaction); + + /// + /// 移箱-箱库存的变更 + /// + /// + /// + /// + Task GenerateMoveBox(List dtoDatas, bool isTransaction); + + /// + /// 入库回退上下架-箱库存的变更 + /// + /// + /// + /// + Task GenerateBackBox(List dtoDatas, bool isTransaction); + } } diff --git a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs index a3c10b47..6aee1b96 100644 --- a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs @@ -32,6 +32,11 @@ namespace WMS.Web.Domain.Mappers //采购上架映射 CreateMap(); CreateMap(); + + //箱库存映射 + CreateMap(); + CreateMap(); + } } } diff --git a/src/WMS.Web.Domain/Services/InventoryService.cs b/src/WMS.Web.Domain/Services/InventoryService.cs index a39680e3..d3f48532 100644 --- a/src/WMS.Web.Domain/Services/InventoryService.cs +++ b/src/WMS.Web.Domain/Services/InventoryService.cs @@ -65,35 +65,22 @@ namespace WMS.Web.Domain.Services if (sour == null) return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); - var sour_update_entity = new BoxInventory(); - sour_update_entity.Id = sour.Id; - sour_update_entity.BoxId = sour.BoxId; - sour_update_entity.StockCode = sour.StockCode; - sour_update_entity.SubStockId = sour.SubStockId; - sour_update_entity.Details = new List(); + var sour_update_entity = sour; + sour_update_entity.Details = sour.Details; foreach (var dtoItem in dto.Details) { //找到原来的箱库存对应要改变的物料:这个一定是存在的,不存在就有问题 - var sour_ChangeDetail = sour.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); + var sour_ChangeDetail = sour_update_entity.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); if(sour_ChangeDetail==null) return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); //箱物料的库存数量不足;小于要拿出来的数量 if(sour_ChangeDetail.Qty(); - s_update_entity_det.Qty = sour_ChangeDetail.Qty - dtoItem.Qty; - - //先把现有的序列号复制过来 - s_update_entity_det.SerialNumbers = sour_ChangeDetail.SerialNumbers; //再移除要改箱的序列号;最后就是原箱库存的新序列号 - s_update_entity_det.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x)); - - sour_update_entity.Details.Add(s_update_entity_det); + sour_ChangeDetail.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x)); } update_entitys.Add(sour_update_entity); @@ -111,28 +98,17 @@ namespace WMS.Web.Domain.Services } else { - var tag_update_entity = new BoxInventory(); - tag_update_entity.Id = tagBox.Id; - tag_update_entity.BoxId = tagBox.BoxId; - tag_update_entity.StockCode = tagBox.StockCode; - tag_update_entity.SubStockId = tagBox.SubStockId; - tag_update_entity.Details = new List(); + var tag_update_entity = tagBox; + tag_update_entity.Details = tagBox.Details; //2.2.1遍历改变的明细 foreach (var item in dto.Details) { //2.2.2找到目标箱对应要改变的物料 - var tagChangeDetail = tagBox.Details.Where(x => x.MaterialId == item.MaterialId).FirstOrDefault(); + var tagChangeDetail = tag_update_entity.Details.Where(x => x.MaterialId == item.MaterialId).FirstOrDefault(); if (tagChangeDetail != null) - { - var update_entity_det = new BoxInventoryDetails(); - update_entity_det.Id = tagChangeDetail.Id; - update_entity_det.Fid = tagChangeDetail.Fid; - update_entity_det.MaterialId = tagChangeDetail.MaterialId; - update_entity_det.SerialNumbers = new List(); - update_entity_det.Qty = tagChangeDetail.Qty + item.Qty; - update_entity_det.SerialNumbers.AddRange(tagChangeDetail.SerialNumbers); - update_entity_det.SerialNumbers.AddRange(item.SerialNumbers); - tag_update_entity.Details.Add(update_entity_det); + { + tagChangeDetail.Qty = tagChangeDetail.Qty + item.Qty; + tagChangeDetail.SerialNumbers.AddRange(item.SerialNumbers); }//2.3.没有对应的箱物料,就新增明细 else { @@ -190,7 +166,7 @@ namespace WMS.Web.Domain.Services foreach (var dto in dtoDatas) { //上架 - if (dto.IsOn) + if (dto.InventoryInOutType==(int)InventoryInOutType.In) { //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” var ishave = boxInventorys.Where(x => x.BoxId == dto.BoxId).Any(); @@ -270,7 +246,7 @@ namespace WMS.Web.Domain.Services foreach (var dto in dtoDatas) { //上架 - if (dto.BackRecordType == (int)BackRecordType.OutstockOn) + if (dto.InventoryInOutType == (int)InventoryInOutType.In) { //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” var ishave = boxInventorys.Where(x => x.BoxId == dto.BoxId).Any(); @@ -298,36 +274,23 @@ namespace WMS.Web.Domain.Services if (boxInventory==null) return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); //3.2创建更新对象 - var update_entity = new BoxInventory(); - update_entity.Id = boxInventory.Id; - update_entity.BoxId = boxInventory.BoxId; - update_entity.StockCode = boxInventory.StockCode; - update_entity.SubStockId = boxInventory.SubStockId; - update_entity.Details = new List(); + var update_entity = boxInventory; + update_entity.Details = boxInventory.Details; //3.3遍历dto明细 foreach (var dtoItem in dto.Details) { //找到原来的箱库存对应要改变的物料:这个一定是存在的,不存在就有问题 - var updateDetail = boxInventory.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); + var updateDetail = update_entity.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); if (updateDetail == null) return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); //箱物料的库存数量不足;小于要拿出来的数量 if (updateDetail.Qty < dtoItem.Qty) return Result.ReFailure(ResultCodes.BoxInventoryNoInventoryError); - var update_entity_det = new BoxInventoryDetails(); - update_entity_det.Id = updateDetail.Id; - update_entity_det.Fid = updateDetail.Fid; - update_entity_det.MaterialId = updateDetail.MaterialId; - update_entity_det.Qty = updateDetail.Qty - dtoItem.Qty; - - //先把现有的序列号复制过来 - update_entity_det.SerialNumbers = updateDetail.SerialNumbers; + updateDetail.Qty = updateDetail.Qty - dtoItem.Qty; //再移除要改箱的序列号;最后就是原箱库存的新序列号 - update_entity_det.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x)); - - update_entity.Details.Add(update_entity_det); + updateDetail.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x)); } update_entitys.Add(update_entity); } @@ -349,7 +312,7 @@ namespace WMS.Web.Domain.Services } /// - /// 采购上架-箱库存变更 + /// 采购上架-箱库存变更--这个有点问题--请使用HandlBoxInventory /// /// /// @@ -391,7 +354,7 @@ namespace WMS.Web.Domain.Services } /// - /// 非采购上架-箱库存变更 + /// 非采购上架-箱库存变更--这个有点问题--请使用HandlBoxInventory /// /// /// @@ -413,7 +376,7 @@ namespace WMS.Web.Domain.Services foreach (var dto in dtoDatas) { //按箱上架 - if (dto.ShelfMethod == (int)ShelfMethod.Box) + if (dto.InventoryInOutMethod == (int)InventoryInOutMethod.Box) { //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” var isAllTrueHave = dto.BoxIds.All(x => boxInventorys.Any(t => t.BoxId == x));//代码意义:当前dto中的BoxIds是否全部等于箱库存中的boxId;dto中有一个boxID不等于箱库存中的,就失败 @@ -440,32 +403,25 @@ namespace WMS.Web.Domain.Services else { //3.3创建更新对象 - var update_entity = new BoxInventory(); - update_entity.Id = boxInventory.Id; - update_entity.BoxId = boxInventory.BoxId; - update_entity.StockCode = boxInventory.StockCode; - update_entity.SubStockId = boxInventory.SubStockId; - update_entity.Details = new List(); + var update_entity = boxInventory; + update_entity.Details = boxInventory.Details; foreach (var dtoItem in dto.Details) { + //明细对应的物料:存在就修改,不存在即新增 var update_entity_det = new BoxInventoryDetails(); - var updateDetail = boxInventory.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); + var updateDetail = update_entity.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); if (updateDetail == null) { - + update_entity_det.Qty = dtoItem.Qty; update_entity_det.MaterialId = dtoItem.MaterialId; update_entity_det.SerialNumbers = dtoItem.SerialNumbers; + update_entity.Details.Add(update_entity_det); } - else + else { - update_entity_det.Id = updateDetail.Id; - update_entity_det.Fid = updateDetail.Fid; - update_entity_det.MaterialId = updateDetail.MaterialId; - update_entity_det.SerialNumbers = updateDetail.SerialNumbers; - update_entity_det.SerialNumbers.AddRange(dtoItem.SerialNumbers); - } - update_entity_det.Qty = updateDetail.Qty + dtoItem.Qty; - update_entity.Details.Add(update_entity_det); + updateDetail.Qty = updateDetail.Qty + dtoItem.Qty; + updateDetail.SerialNumbers.AddRange(dtoItem.SerialNumbers); + } } update_entitys.Add(update_entity); } @@ -488,7 +444,7 @@ namespace WMS.Web.Domain.Services } /// - /// 出库下架-箱库存变更 + /// 出库下架-箱库存变更--这个有点问题--请使用HandlBoxInventory /// /// /// @@ -516,7 +472,7 @@ namespace WMS.Web.Domain.Services return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); //按箱:出库 - if (dto.InOutInventoryMethod == (int)InOutInventoryMethod.Box) + if (dto.InventoryInOutMethod == (int)InventoryInOutMethod.Box) { //直接添加要删除的箱 delete_entitys_ids.Add(boxInventory.Id); @@ -570,5 +526,193 @@ namespace WMS.Web.Domain.Services } return Result.ReSuccess(); } + + + + + /// + /// 处理箱库存变更:出入库 + /// + /// + /// + /// + public async Task HandlBoxInventory(List dtoDatas, bool isTransaction) + { + //1.判断来源数据是否存在 + 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(); + + //1.1通过箱IDS获取箱库存 + var boxIds = dtoDatas.Select(x => x.BoxId).ToList(); + var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); + + //2.遍历:dto + foreach (var dto in dtoDatas) + { + //出库 + if (dto.InventoryInOutType == (int)InventoryInOutType.Out) + { + //生成出库对象:删除和修改 + var outStockInventoryResult = this.GenerateOutStockBox(dto, boxInventorys, delete_ids, update_entitys); + if (!outStockInventoryResult.IsSuccess) + return outStockInventoryResult; + } + //入库 + else + { + //生成入库对象:新增和修改 + var inStockInventoryResult = this.GenerateInStockBox(dto, boxInventorys, add_entitys, update_entitys); + if (!inStockInventoryResult.IsSuccess) + return inStockInventoryResult; + } + + } + + //4.数据库更新操作:更新和删除和添加 + var isSuccess = true; + if (delete_ids.Count != 0) + { + isSuccess = await _boxInventoryRepositories.DeleteRange(delete_ids, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + } + if (add_entitys.Count != 0) + { + isSuccess = await _boxInventoryRepositories.AddRange(add_entitys, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + } + if (update_entitys.Count != 0) + { + isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + } + return Result.ReSuccess(); + } + + /// + /// 生成出库对象:删除和修改 + /// + /// + /// + /// + /// + /// + public Result GenerateOutStockBox(BoxInventoryGenerateDto dto,List boxInventorys,List delete_ids, List update_entitys) + { + //3.1出库的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱库存数据不存在,请稍候再试!” + // 获取箱库存 + var boxInventory = boxInventorys.Where(x => x.BoxId == dto.BoxId).FirstOrDefault(); + if (boxInventory == null) + return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); + + //按箱:出库 + if (dto.InventoryInOutMethod == (int)InventoryInOutMethod.Box) + { + //直接添加要删除的箱 + delete_ids.Add(boxInventory.Id); + } + //按产品:出库 + else + { + //3.3创建更新对象 + var update_entity = boxInventory; + update_entity.Details = boxInventory.Details; + + //3.2.遍历:dto明细 + foreach (var dtoItem in dto.Details) + { + //3.3.找到当前明细物料:没有则返回失败;提示:“该箱物料库存不存在” + var update_entityDetail = update_entity.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); + if (update_entityDetail == null) + return Result.ReFailure(ResultCodes.BoxInventoryMaterialNoDataError); + //3.4判断库存数量是否不足 + if (update_entityDetail.Qty < dtoItem.Qty) + return Result.ReFailure(ResultCodes.BoxInventoryNoInventoryError); + + //3.5物料库存数量变更:减库存 + update_entityDetail.Qty = update_entityDetail.Qty - dtoItem.Qty; + //3.6移除要出库的序列号 + update_entityDetail.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x)); + + } + //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); + } + + return Result.ReSuccess(); + } + + /// + /// 生成入库对象:新增和修改 + /// + /// + /// + /// + /// + /// + public Result GenerateInStockBox(BoxInventoryGenerateDto dto, List boxInventorys, List add_entitys, List update_entitys) + { + //按箱上架入库 + if (dto.InventoryInOutMethod == (int)InventoryInOutMethod.Box) + { + //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” + var isHave = boxInventorys.Where(x=>x.BoxId==dto.BoxId).Any(); + if (isHave) + return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError); + + //3.2组装要新增的箱库存信息:箱和明细和序列号 + var addEntity = _mapper.Map(dto); + addEntity.Details = _mapper.Map>(dto.Details); + add_entitys.Add(addEntity); + } + //按产品上架入库 + else + { + //按产品上架:箱只能是一个;箱可能存在库存(修改),也可能不存在库存(新增) + var boxInventory = boxInventorys.Where(x => x.BoxId == dto.BoxId).FirstOrDefault(); + if (boxInventory == null) + { + //3.2组装要新增的箱库存信息:箱和明细和序列号 + var addEntity = _mapper.Map(dto); + addEntity.Details = _mapper.Map>(dto.Details); + add_entitys.Add(addEntity); + } + else + { + //3.3创建更新对象 + var update_entity = boxInventory; + update_entity.Details = boxInventory.Details; + foreach (var dtoItem in dto.Details) + { + //明细对应的物料:存在就修改,不存在即新增 + var update_entity_det = new BoxInventoryDetails(); + var updateDetail = update_entity.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); + if (updateDetail == null) + { + update_entity_det.Qty = dtoItem.Qty; + update_entity_det.MaterialId = dtoItem.MaterialId; + update_entity_det.SerialNumbers = dtoItem.SerialNumbers; + update_entity.Details.Add(update_entity_det); + } + else + { + updateDetail.Qty = updateDetail.Qty + dtoItem.Qty; + updateDetail.SerialNumbers.AddRange(dtoItem.SerialNumbers); + } + } + update_entitys.Add(update_entity); + } + } + + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/Values/InOutInventoryMethod.cs b/src/WMS.Web.Domain/Values/InventoryInOutMethod.cs similarity index 92% rename from src/WMS.Web.Domain/Values/InOutInventoryMethod.cs rename to src/WMS.Web.Domain/Values/InventoryInOutMethod.cs index 66cf9fc3..6c6b3282 100644 --- a/src/WMS.Web.Domain/Values/InOutInventoryMethod.cs +++ b/src/WMS.Web.Domain/Values/InventoryInOutMethod.cs @@ -8,7 +8,7 @@ namespace WMS.Web.Domain.Values /// /// 出入库存-方式 /// - public enum InOutInventoryMethod + public enum InventoryInOutMethod { /// /// 按箱