diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index c8bfd896..e938ddde 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -1280,6 +1280,11 @@ 来源单号 + + + 箱ID + + 明细 @@ -1870,11 +1875,6 @@ 箱集合 - - - 入库任务单明细 - - 入库单明细 @@ -1885,6 +1885,11 @@ 采购上架-请求对象 + + + 箱IDS + + 明细 @@ -2100,6 +2105,97 @@ 是否是上架:true是上架,false是下架 + + + 非采购上架-箱库存处理对象 + + + + + 非采购上架方式 + + + + + + 仓位ID + + + + + 箱IDS + + + + + 明细 + + + + + 非采购上架明细-箱库存处理对象 + + + + + 物料ID + + + + + 数量 + + + + + 序列号集 + + + + + 采购上架-箱库存处理对象 + + + + + 仓库编码 + + + + + 仓位ID + + + + + 箱IDS + + + + + 明细 + + + + + 采购上架明细-箱库存处理对象 + + + + + 物料ID + + + + + 数量 + + + + + 序列号集 + + 箱库存-查询请求对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index bb947823..1f6cbfe0 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3099,6 +3099,22 @@ + + + 采购上架-箱库存变更 + + + + + + + + 非采购上架-箱库存变更 + + + + + 出库服务 diff --git a/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs b/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs index e510eab0..86dc2412 100644 --- a/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs +++ b/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs @@ -28,11 +28,6 @@ namespace WMS.Web.Core.Dto.InStock /// public List Boxs { get; set; } = new List(); - /// - /// 入库任务单明细 - /// - public List TaskDetails { get; set; } = new List(); - /// /// 入库单明细 /// diff --git a/src/WMS.Web.Core/Dto/InStock/PurchaseShelfRequest.cs b/src/WMS.Web.Core/Dto/InStock/PurchaseShelfRequest.cs index b6d2781f..f91e5f30 100644 --- a/src/WMS.Web.Core/Dto/InStock/PurchaseShelfRequest.cs +++ b/src/WMS.Web.Core/Dto/InStock/PurchaseShelfRequest.cs @@ -9,6 +9,12 @@ namespace WMS.Web.Core.Dto.InStock /// public class PurchaseShelfRequest { + + /// + /// 箱IDS + /// + public List BoxIds { get; set; } = new List(); + /// /// 明细 /// diff --git a/src/WMS.Web.Core/Dto/InStockTask/InStockTaskInfoDto.cs b/src/WMS.Web.Core/Dto/InStockTask/InStockTaskInfoDto.cs index 4b3634bc..a3c451fa 100644 --- a/src/WMS.Web.Core/Dto/InStockTask/InStockTaskInfoDto.cs +++ b/src/WMS.Web.Core/Dto/InStockTask/InStockTaskInfoDto.cs @@ -22,6 +22,12 @@ namespace WMS.Web.Core.Dto.InStockTask /// public string SourceBillNo { get; set; } + /// + /// 箱ID + /// + public int BoxId { get; set; } + + /// /// 明细 /// diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryNoPurchaseGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryNoPurchaseGenerateDto.cs new file mode 100644 index 00000000..226a547b --- /dev/null +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryNoPurchaseGenerateDto.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Inventory +{ + /// + /// 非采购上架-箱库存处理对象 + /// + public class BoxInventoryNoPurchaseGenerateDto + { + /// + /// 非采购上架方式 + /// + public int ShelfMethod { get; set; } + + // + /// 仓库编码 + /// + public string StockCode { get; set; } + + /// + /// 仓位ID + /// + public int SubStockId { get; set; } + + /// + /// 箱IDS + /// + public List BoxIds { get; set; } = new List(); + + /// + /// 明细 + /// + public List Details { get; set; } = new List(); + } + + /// + /// 非采购上架明细-箱库存处理对象 + /// + public class BoxInventoryNoPurchaseDetailsGenerateDto + { + /// + /// 物料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/BoxInventoryPurchaseGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryPurchaseGenerateDto.cs new file mode 100644 index 00000000..d2daeac9 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryPurchaseGenerateDto.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Inventory +{ + /// + /// 采购上架-箱库存处理对象 + /// + public class BoxInventoryPurchaseGenerateDto + { + + /// + /// 仓库编码 + /// + public string StockCode { get; set; } + + /// + /// 仓位ID + /// + public int SubStockId { get; set; } + + /// + /// 箱IDS + /// + public List BoxIds { get; set; } = new List(); + + /// + /// 明细 + /// + public List Details { get; set; } = new List(); + } + + /// + /// 采购上架明细-箱库存处理对象 + /// + public class BoxInventoryPurchaseDetailsGenerateDto + { + /// + /// 物料ID + /// + public int MaterialId { get; set; } + /// + /// 数量 + /// + public decimal Qty { get; set; } + + /// + /// 序列号集 + /// + public List SerialNumbers { get; set; } = new List(); + } +} diff --git a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs index 5e50fe18..a3c10b47 100644 --- a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs @@ -24,6 +24,14 @@ namespace WMS.Web.Domain.Mappers //出入库回退上下架映射 CreateMap(); CreateMap(); + + //采购上架映射 + CreateMap(); + CreateMap(); + + //采购上架映射 + CreateMap(); + CreateMap(); } } } diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs index 9a1c244c..8b78af00 100644 --- a/src/WMS.Web.Domain/Services/InStockService.cs +++ b/src/WMS.Web.Domain/Services/InStockService.cs @@ -159,6 +159,7 @@ namespace WMS.Web.Domain.Services //3.组装返回数据 var result = _mapper.Map(tast); + result.BoxId = box.Id; foreach (var item in tast.Details) { //3.1判断当前物料是否相同 @@ -220,7 +221,15 @@ namespace WMS.Web.Domain.Services var updateInStockTaskRequest = new UpdateInStockTaskRequest(); updateInStockTaskRequest.Id = dto.TaskId; updateInStockTaskRequest.Boxs = dto.Boxs; - updateInStockTaskRequest.Details = dto.TaskDetails; + updateInStockTaskRequest.Details =new List(); + foreach (var item in dto.Details) + { + var updateInStockTaskDetailsRequest = new UpdateInStockTaskDetailsRequest(); + updateInStockTaskDetailsRequest.MaterialId = item.MaterialId; + updateInStockTaskDetailsRequest.ReceiveQty = item.Qty; + updateInStockTaskRequest.Details.Add(updateInStockTaskDetailsRequest); + } + //2.修改后返回当前实体 var update_result = await this.Update(updateInStockTaskRequest, loginInfo.UserInfo.StaffId, null, isTransaction, true); if (!update_result.IsSuccess) diff --git a/src/WMS.Web.Domain/Services/InventoryService.cs b/src/WMS.Web.Domain/Services/InventoryService.cs index fe49cbd8..6132dcd5 100644 --- a/src/WMS.Web.Domain/Services/InventoryService.cs +++ b/src/WMS.Web.Domain/Services/InventoryService.cs @@ -66,6 +66,10 @@ namespace WMS.Web.Domain.Services 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(); foreach (var dtoItem in dto.Details) { @@ -78,6 +82,9 @@ namespace WMS.Web.Domain.Services return Result.ReFailure(ResultCodes.BoxInventoryNoInventoryError); var s_update_entity_det = new BoxInventoryDetails(); + s_update_entity_det.Id = sour_ChangeDetail.Id; + s_update_entity_det.Fid = sour_ChangeDetail.Fid; + s_update_entity_det.MaterialId = sour_ChangeDetail.MaterialId; s_update_entity_det.SerialNumbers = new List(); s_update_entity_det.Qty = sour_ChangeDetail.Qty - dtoItem.Qty; @@ -105,6 +112,10 @@ 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(); //2.2.1遍历改变的明细 foreach (var item in dto.Details) @@ -113,7 +124,10 @@ namespace WMS.Web.Domain.Services var tagChangeDetail = tagBox.Details.Where(x => x.MaterialId == item.MaterialId).FirstOrDefault(); if (tagChangeDetail != null) { - var update_entity_det = new BoxInventoryDetails(); + 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); @@ -285,6 +299,10 @@ namespace WMS.Web.Domain.Services 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(); //3.3遍历dto明细 @@ -299,7 +317,9 @@ namespace WMS.Web.Domain.Services return Result.ReFailure(ResultCodes.BoxInventoryNoInventoryError); var update_entity_det = new BoxInventoryDetails(); - update_entity_det.SerialNumbers = new List(); + 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; //先把现有的序列号复制过来 @@ -309,6 +329,146 @@ namespace WMS.Web.Domain.Services update_entity.Details.Add(update_entity_det); } + update_entitys.Add(update_entity); + } + } + + var isSuccess = true; + //4.数据库更新操作:更新和添加 + 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 async Task GeneratePurchaseBox(List dtoDatas, bool isTransaction) + { + //1.判断来源数据是否存在 + if (dtoDatas != null || dtoDatas.Count == 0) + return Result.ReFailure(ResultCodes.InventoryNoSourceError); + + var add_entitys = new List(); + + //1.1通过箱IDS获取箱库存-正常情况下“采购上架”,箱对应的库存是没有的,这里是为了下一步的判断,防止错误数据进入箱库存里面 + var boxIds = dtoDatas.SelectMany(x => x.BoxIds).ToList(); + var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); + + //2.遍历:dto + foreach (var dto in dtoDatas) + { + //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” + var ishave = boxInventorys.Where(x =>dto.BoxIds.Contains(x.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); + } + + var isSuccess = true; + //4.数据库更新操作:更新和添加 + if (add_entitys.Count != 0) + { + isSuccess = await _boxInventoryRepositories.AddRange(add_entitys, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + } + return Result.ReSuccess(); + } + + /// + /// 非采购上架-箱库存变更 + /// + /// + /// + /// + public async Task GenerateNoPurchaseBox(List dtoDatas, bool isTransaction) + { + //1.判断来源数据是否存在 + if (dtoDatas != null || dtoDatas.Count == 0) + return Result.ReFailure(ResultCodes.InventoryNoSourceError); + + var add_entitys = new List(); + var update_entitys = new List(); + + //1.1通过箱IDS获取箱库存-正常情况下“采购上架”,箱对应的库存是没有的,这里是为了下一步的判断,防止错误数据进入箱库存里面 + var boxIds = dtoDatas.SelectMany(x => x.BoxIds).ToList(); + var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); + + //2.遍历:dto + foreach (var dto in dtoDatas) + { + //按箱上架 + if (dto.ShelfMethod == (int)ShelfMethod.Box) + { + //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” + var ishave = boxInventorys.Where(x => dto.BoxIds.Contains(x.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.BoxIds.First()).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 = 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(); + foreach (var dtoItem in dto.Details) + { + var update_entity_det = new BoxInventoryDetails(); + var updateDetail = boxInventory.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); + if (updateDetail == null) + { + + update_entity_det.MaterialId = dtoItem.MaterialId; + update_entity_det.SerialNumbers = dtoItem.SerialNumbers; + } + 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); + } + update_entitys.Add(update_entity); + } } }