diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 5332c4bd..ce9d194e 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -1175,9 +1175,9 @@ 单据ID(等同-入库任务单ID) - + - 箱号 + 箱号集合 @@ -1185,26 +1185,51 @@ 采购订单物料明细和箱物料明细-对比影响对象 - + - 箱号明细数量的总和 + 多个箱的信息 - + 收货和上架需要用的箱的基本信息-对象 - + 箱号ID - + 箱号 + + + 箱号明细数量的总和 + + + + + 明细 + + + + + 箱明细 + + + + + 物料 + + + + + 数量 + + 模糊查询来源单据-请求对象 @@ -1765,6 +1790,11 @@ 上架方式 + + + 箱信息 + + 入库单明细 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 788cce27..007bc24f 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -145,7 +145,7 @@ 创建时间(对应老OPS的创建时间) - + 明细 diff --git a/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs b/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs index 9be984cc..3305ce8b 100644 --- a/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs +++ b/src/WMS.Web.Core/Dto/InStock/NoPurchaseShelfRequest.cs @@ -23,6 +23,11 @@ namespace WMS.Web.Core.Dto.InStock [Required(ErrorMessage = "上架方式不能为空")] public int ShelfMethod { get; set; } + /// + /// 箱信息 + /// + public List Boxs { get; set; } = new List(); + /// /// 入库单明细 /// diff --git a/src/WMS.Web.Core/Dto/InStockTask/ContrastMaterialsRequest.cs b/src/WMS.Web.Core/Dto/InStockTask/ContrastMaterialsRequest.cs index 8e71e72d..5f44f125 100644 --- a/src/WMS.Web.Core/Dto/InStockTask/ContrastMaterialsRequest.cs +++ b/src/WMS.Web.Core/Dto/InStockTask/ContrastMaterialsRequest.cs @@ -18,9 +18,8 @@ namespace WMS.Web.Core.Dto.InStockTask public int TaskId { get; set; } /// - /// 箱号 + /// 箱号集合 /// - [Required(ErrorMessage = "箱号不能为空")] - public string BoxBillNo { get; set; } + public List BoxBillNos { get; set; } = new List(); } } diff --git a/src/WMS.Web.Core/Dto/InStockTask/ContrastMaterialsResponse.cs b/src/WMS.Web.Core/Dto/InStockTask/ContrastMaterialsResponse.cs index f513f34e..83413739 100644 --- a/src/WMS.Web.Core/Dto/InStockTask/ContrastMaterialsResponse.cs +++ b/src/WMS.Web.Core/Dto/InStockTask/ContrastMaterialsResponse.cs @@ -7,18 +7,18 @@ namespace WMS.Web.Core.Dto.InStockTask /// /// 采购订单物料明细和箱物料明细-对比影响对象 /// - public class ContrastMaterialsResponse:BoxBaseDto + public class ContrastMaterialsResponse { /// - /// 箱号明细数量的总和 + /// 多个箱的信息 /// - public decimal TotalCount { get; set; } + public List Boxs { get; set; } = new List(); } /// /// 收货和上架需要用的箱的基本信息-对象 /// - public class BoxBaseDto + public class ContrastBoxResponse { /// /// 箱号ID @@ -29,5 +29,31 @@ namespace WMS.Web.Core.Dto.InStockTask /// 箱号 /// public string BoxBillNo { get; set; } + + /// + /// 箱号明细数量的总和 + /// + public decimal TotalCount { get; set; } + + /// + /// 明细 + /// + public List Details { get; set; } + } + + /// + /// 箱明细 + /// + public class ContrastBoxDetailsResponse + { + /// + /// 物料 + /// + public int MaterialId { get; set; } + + /// + /// 数量 + /// + public decimal Qty { get; set; } } } diff --git a/src/WMS.Web.Domain/Entitys/Box.cs b/src/WMS.Web.Domain/Entitys/Box.cs index fb4d08d2..ea0c380b 100644 --- a/src/WMS.Web.Domain/Entitys/Box.cs +++ b/src/WMS.Web.Domain/Entitys/Box.cs @@ -58,7 +58,7 @@ namespace WMS.Web.Domain.Entitys /// /// 明细 /// - public List Details = new List(); + public List Details { get; set; } = new List(); //移出 public Result Out(List<(int MaterialId, decimal Qty, List SerialNumbers)> list) diff --git a/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs index e9a85338..1dfa9cc2 100644 --- a/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs @@ -29,5 +29,7 @@ namespace WMS.Web.Domain.Infrastructure Task AddRange(List entitys, bool isTransaction = true); /// 查询实体集合 Task> GetEntityList(List ids); + + Task> GetEntityListByNos(List billNos); } } diff --git a/src/WMS.Web.Domain/Mappers/InStockMapper.cs b/src/WMS.Web.Domain/Mappers/InStockMapper.cs index d5655d35..f3ac92f6 100644 --- a/src/WMS.Web.Domain/Mappers/InStockMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InStockMapper.cs @@ -35,6 +35,10 @@ namespace WMS.Web.Domain.Mappers .ForMember(x => x.Details, ops => ops.Ignore()); CreateMap(); + + CreateMap(); + + #region ERP-dto映射到wsm的任务表中 //ERP-同步结果对象统一映射 diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs index 26df0370..6dfaa2e9 100644 --- a/src/WMS.Web.Domain/Services/InStockService.cs +++ b/src/WMS.Web.Domain/Services/InStockService.cs @@ -249,6 +249,7 @@ namespace WMS.Web.Domain.Services //1.修改-入库任务单的信息 var updateInStockTaskRequest = new UpdateInStockTaskRequest(); updateInStockTaskRequest.Id = dto.TaskId; + updateInStockTaskRequest.Boxs = dto.Boxs; updateInStockTaskRequest.Details = new List(); foreach (var item in dto.Details) { @@ -259,14 +260,14 @@ namespace WMS.Web.Domain.Services } //1.1.先找到箱IDs:获取箱基本信息 var boxIds = dto.Details.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); - var boxInfos= await _boxRepositories.GetEntityList(boxIds); - foreach (var item in boxInfos) - { - var task_box = new UpdateInStockTaskBoxRequest(); - task_box.BoxId = item.Id; - task_box.BoxBillNo = item.BoxBillNo; - updateInStockTaskRequest.Boxs.Add(task_box); - } + //var boxInfos= await _boxRepositories.GetEntityList(boxIds); + //foreach (var item in boxInfos) + //{ + // var task_box = new UpdateInStockTaskBoxRequest(); + // task_box.BoxId = item.Id; + // task_box.BoxBillNo = item.BoxBillNo; + // updateInStockTaskRequest.Boxs.Add(task_box); + //} //1.2.修改入库任务单 var update_result = await this.Update(updateInStockTaskRequest, loginInfo.UserInfo.StaffId, null, isTransaction, true); @@ -419,26 +420,40 @@ namespace WMS.Web.Domain.Services var task = await _inStockTaskRepositories.Get(dto.TaskId); if (task == null) return Result.ReFailure(ResultCodes.OrderNoData); - //2.找到箱对应的物料信息 - var box = await _boxRepositories.GetByNo(dto.BoxBillNo); - if (box == null) + ////2.找到箱对应的物料信息--弃用(这个是单个箱) + //var box = await _boxRepositories.GetByNo(dto.BoxBillNo); + //if (box == null) + // return Result.ReFailure(ResultCodes.BoxNoData); + + //2.找到箱对应的物料信息:多个箱 + var boxs = await _boxRepositories.GetEntityListByNos(dto.BoxBillNos); + if (boxs == null || boxs.Count==0) return Result.ReFailure(ResultCodes.BoxNoData); + //合并多个箱明细的数据:相同物料数量合并 + var boxDetails = boxs.SelectMany(x => x.Details).GroupBy(x => x.MaterialId).Select(x => new { MaterialId = x.Key, Qty = x.Sum(t => t.Qty) }).ToList(); + //3.比对:false为比对失败; - bool isRight = box.Details.All(x => task.Details.Any(t => t.MaterialId == x.MaterialId && t.AccruedQty >= x.Qty)) && box.Details.Count == task.Details.Count; + bool isRight = boxDetails.All(x => task.Details.Any(t => t.MaterialId == x.MaterialId && t.AccruedQty >= x.Qty)) && boxDetails.Count == task.Details.Count; if(!isRight) return Result.ReFailure(ResultCodes.ContrastError); //4.是否任务单存在绑定箱号判断:存在的话,就不能收货或者非采购上架 - bool isHave = task.Boxs.Where(x => x.BoxBillNo == box.BoxBillNo).Any(); + bool isHave = task.Boxs.Where(x => dto.BoxBillNos.Contains(x.BoxBillNo)).Any(); if(isHave) return Result.ReFailure(ResultCodes.BoxHaveError); //4.返回对比结果:true为比对成功,并把箱ID和箱号返回 var response = new ContrastMaterialsResponse(); - response.BoxBillNo = box.BoxBillNo; - response.BoxId = box.Id; - response.TotalCount = box.Details.Sum(x => x.Qty); + + foreach (var box in boxs) + { + var r_box = new ContrastBoxResponse(); + r_box.BoxBillNo = box.BoxBillNo; + r_box.BoxId = box.Id; + r_box.TotalCount = box.Details.Sum(x => x.Qty); + r_box.Details =_mapper.Map>( box.Details); + } return Result.ReSuccess(response); } } diff --git a/src/WMS.Web.Repositories/BoxRepositories.cs b/src/WMS.Web.Repositories/BoxRepositories.cs index 8772d5a4..56c5c5da 100644 --- a/src/WMS.Web.Repositories/BoxRepositories.cs +++ b/src/WMS.Web.Repositories/BoxRepositories.cs @@ -128,6 +128,13 @@ namespace WMS.Web.Repositories return entity.Clone(); } + public async Task> GetEntityListByNos(List billNos) + { + var entity = await _context.Box.Include(x => x.Details) + .Where(f => billNos.Contains(f.BoxBillNo)).ToListAsync(); + + return entity.Clone(); + } //根据箱号搜索 用来比对确定是否箱号信息是否存在 public async Task> GetByNos(List billNos) {