diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index b444af75..fdf94ddb 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -2771,6 +2771,31 @@ 类型:1为入库,2为出库 + + + 明细 + + + + + 明细 + + + + + 物料Id + + + + + 数量 + + + + + 序列号 + + 非采购上架-箱库存处理对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 009db77d..99b9dba1 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3741,7 +3741,7 @@ - + 移箱-箱库存的变更 diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryMoveGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryMoveGenerateDto.cs index d5fa4c61..06f98581 100644 --- a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryMoveGenerateDto.cs +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryMoveGenerateDto.cs @@ -33,5 +33,31 @@ namespace WMS.Web.Core.Dto.Inventory /// 类型:1为入库,2为出库 /// public int InventoryInOutType { get; set; } + + /// + /// 明细 + /// + public List Details { get; set; } = new List(); + + + } + + /// + /// 明细 + /// + public class BoxInventoryMoveDetailsGenerateDto + { + /// + /// 物料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 9c3acc2f..d5751773 100644 --- a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs @@ -17,10 +17,12 @@ namespace WMS.Web.Domain.Mappers //改箱映射 CreateMap(); - //移箱映射 + //移箱映射 + CreateMap(); - CreateMap() - .ForMember(x => x.Id, ops => ops.Ignore()); + CreateMap() + .ForMember(x => x.Id, ops => ops.Ignore()) + .ForMember(x => x.Fid, ops => ops.Ignore()); //出入库回退上下架映射 CreateMap(); diff --git a/src/WMS.Web.Domain/Services/BoxInventoryService.cs b/src/WMS.Web.Domain/Services/BoxInventoryService.cs index 9ace9e6a..84dd9ea6 100644 --- a/src/WMS.Web.Domain/Services/BoxInventoryService.cs +++ b/src/WMS.Web.Domain/Services/BoxInventoryService.cs @@ -158,9 +158,6 @@ namespace WMS.Web.Domain.Services var boxIds = dtoDatas.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); - //2.1箱基本信息 - var boxs = await _boxRepositories.GetEntityList(boxIds); - //2.2组合要生成的dto var generateDtoList = new List(); foreach (var item in dtoDatas) @@ -172,6 +169,15 @@ namespace WMS.Web.Domain.Services generateDto.StockCode = item.StockCode; generateDto.SubStockId = item.Type == MoveBoxType.Up ? item.DestSubStockId : item.SrcSubStockId; generateDto.InventoryInOutType = item.Type == MoveBoxType.Down ? (int)InventoryInOutType.Out : (int)InventoryInOutType.In; + //2.2.2箱库存dto-组装明细 + foreach (var detItem in item.Details) + { + var genDetDto = new BoxInventoryMoveDetailsGenerateDto(); + genDetDto.MaterialId = detItem.MaterialId; + genDetDto.Qty = detItem.Qty; + genDetDto.SerialNumbers = detItem.SerialNumbers; + generateDto.Details.Add(genDetDto); + } generateDtoList.Add(generateDto); //2.2.2物料收发明dto-组装 @@ -183,9 +189,7 @@ namespace WMS.Web.Domain.Services //下架-箱库存是存在的情况下,生成物料收发明细 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) + foreach (var boxDet in item.Details) { var inventoryInOutDet = _inventoryInOutDetailsService.GenerateDto( item.BoxId, boxDet.MaterialId, @@ -198,7 +202,7 @@ namespace WMS.Web.Domain.Services } //4.开始处理 - var result = await this.ExeMoveBox(generateDtoList, boxInventorys, boxs, isTransaction); + var result = await this.ExeMoveBox(generateDtoList, boxInventorys, isTransaction); if (!result.IsSuccess) return result; @@ -647,9 +651,30 @@ namespace WMS.Web.Domain.Services //2.2.1这里为了重新上架,改变仓库和仓位的需求 if (!string.IsNullOrEmpty(dto.StockCode) && dto.SubStockId.HasValue) { + //2.2.2仓位和原来的目标箱的仓位不一致的情况下-》》把目标箱原来仓位的物料进行-即时库存的变更-(减库存) + if (dto.SubStockId.Value != tag_update_entity.SubStockId) + { + foreach (var item in tag_update_entity.Details) + { + //2.2.2组装即时库存dto + var inventoryDet = new InventoryDetailsGenerateDto(); + inventoryDet.MaterialId = item.MaterialId; + inventoryDet.OrgCode = tag_update_entity.OrgCode; + inventoryDet.StockCode = tag_update_entity.StockCode; + inventoryDet.SubStockId = tag_update_entity.SubStockId; + inventoryDet.Qty = item.Qty; + inventoryDet.InventoryInOutType = (int)InventoryInOutType.Out; + //2.2.2即时库存:修改箱库存的集合 + InventoryDetailsGenerateDto.Add(inventoryDet); + } + } + + //2.2.3.在变更目标箱的-仓库-仓位-组织 tag_update_entity.StockCode = dto.StockCode; tag_update_entity.SubStockId = dto.SubStockId.Value; tag_update_entity.OrgCode = dto.TargetBoxOrgCode; + + } tag_update_entity.Details = tagBox.Details; //2.2.1遍历改变的明细 @@ -748,7 +773,7 @@ namespace WMS.Web.Domain.Services /// /// /// - private async Task ExeMoveBox(List dtoDatas, List boxInventorys, List boxs, bool isTransaction) + private async Task ExeMoveBox(List dtoDatas, List boxInventorys,bool isTransaction) { //1.判断来源数据是否存在 if (dtoDatas == null || dtoDatas.Count == 0) @@ -758,10 +783,6 @@ namespace WMS.Web.Domain.Services var add_entitys = new List(); var InventoryDetailsGenerateDto = new List(); - //2.获取“箱库存集合”和“箱基本信息集合” - var boxIds = dtoDatas.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); - var serialNumbers = await _serialNumbersRepositories.GetEntityListByBoxIds(boxIds); - //3.遍历:dto foreach (var dto in dtoDatas) { @@ -771,30 +792,17 @@ namespace WMS.Web.Domain.Services //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” var ishave = boxInventorys.Where(x => x.BoxId == dto.BoxId).Any(); if (ishave) - return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError); - //3.1.1取箱信息 - var box = boxs.Where(x => x.Id == dto.BoxId).FirstOrDefault(); - if (box == null) - return Result.ReFailure(ResultCodes.BoxNoData); - //3.1.2去箱对应的序列号信息 - var box_serialNumbers = serialNumbers.Where(x => x.BoxId == dto.BoxId).Select(x => new { x.MaterialId, x.SerialNumber }).ToList(); - + return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError); + //3.2组装要新增的箱库存信息:箱和明细 var addEntity = _mapper.Map(dto); - addEntity.Details = _mapper.Map>(box.Details); - - //3.3组装要新增的箱库存:明细中的序列号 - foreach (var item in addEntity.Details) - { - var box_serialNubs = box_serialNumbers.Where(x => x.MaterialId == item.MaterialId).Select(x=>x.SerialNumber).ToList(); - if (box_serialNubs != null && box_serialNubs.Count!=0) - item.SerialNumbers.AddRange(box_serialNubs); - } + addEntity.Details = _mapper.Map>(dto.Details); + //3.4箱库存:要新增的集合 add_entitys.Add(addEntity); //4.1即时库存:组装入库 - foreach (var item in box.Details) + foreach (var item in dto.Details) { //3.2.2组装即时库存dto var inventoryDet = new InventoryDetailsGenerateDto(); diff --git a/src/WMS.Web.Repositories/BoxInventoryRepositories.cs b/src/WMS.Web.Repositories/BoxInventoryRepositories.cs index df4c8e58..2cc3dd18 100644 --- a/src/WMS.Web.Repositories/BoxInventoryRepositories.cs +++ b/src/WMS.Web.Repositories/BoxInventoryRepositories.cs @@ -79,7 +79,7 @@ namespace WMS.Web.Repositories .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) .GroupJoin(_context.Box, p => p.order.BoxId, t => t.Id, (p, ts) => new { p.detail,p.order, ts }) .SelectMany(x => x.ts.DefaultIfEmpty(), (p, box) => new { p.detail, p.order, box }) - .Where(adv => 1 == 1 && adv.detail.Qty!=0); + .Where(adv => 1 == 1 && adv.detail.Qty!=0 ); if (!string.IsNullOrEmpty(dto.BoxBillNo)) query = query.Where(w => EF.Functions.Like(w.box.BoxBillNo, "%" + dto.BoxBillNo + "%"));