From ae21319ef37f6ef2cecf21ad197dd067dc431af1 Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Fri, 17 Nov 2023 11:07:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90-=E7=89=A9=E6=96=99=E6=94=B6?= =?UTF-8?q?=E5=8F=91=E6=98=8E=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.Core.xml | 45 +++++++++++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 45 +++++++++++ .../InventoryInOutDetailsGenerateDto.cs | 55 +++++++++++++ .../Entitys/InventoryInOutDetails.cs | 10 +++ .../IService/IInventoryInOutDetailsService.cs | 23 ++++++ .../IInventoryDetailsRepositories.cs | 9 +++ src/WMS.Web.Domain/Mappers/InventoryMapper.cs | 7 ++ .../Services/InventoryInOutDetailsService.cs | 78 +++++++++++++++++++ src/WMS.Web.Domain/Values/ResultCodes.cs | 1 + .../DependencyInjection/AppBuilder.cs | 2 + .../InventoryDetailsRepositories.cs | 14 ++++ 11 files changed, 289 insertions(+) create mode 100644 src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs create mode 100644 src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs create mode 100644 src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 5b3b8f99..3434af0d 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -2491,6 +2491,51 @@ 单位 + + + 物料收发明细-生成dto + + + + + 仓库编码 + + + + + 仓位ID + + + + + 箱ID + + + + + 物料ID + + + + + 单据类型 + + + + + 单据编号 + + + + + 数量:出入库 + + + + + 类型:1为入库,2为出库 + + 物料收发明细-查询请求 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 8fd2d917..03473dcb 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -823,6 +823,16 @@ 仓库编码 + + + 仓位ID + + + + + 箱ID + + 单据类型 @@ -1901,6 +1911,15 @@ + + + 列表-根据物料和仓库和仓位 + + + + + + 物料收发明细-仓储接口 @@ -2259,6 +2278,19 @@ + + + 物料收发明细:服务接口 + + + + + 生成:物料收发明细 + + + + + 出库服务 @@ -3385,6 +3417,19 @@ + + + 物料收发明细:服务 + + + + + 生成:物料收发明细 + + + + + 出库服务 diff --git a/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs new file mode 100644 index 00000000..6c68fd78 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Inventory +{ + /// + /// 物料收发明细-生成dto + /// + public class InventoryInOutDetailsGenerateDto + { + /// + /// 仓库编码 + /// + public string StockCode { get; set; } + + /// + /// 仓位ID + /// + public int SubStockId { get; set; } + + /// + /// 箱ID + /// + public int BoxId { get; set; } + + /// + /// 物料ID + /// + public int MaterialId { get; set; } + + /// + /// 单据类型 + /// + public int OrderType { get; set; } + /// + /// 单据编号 + /// + public string OrderBillNo { get; set; } + + /// + /// 数量:出入库 + /// + public decimal Qty { get; set; } + ///// + ///// 结存 + ///// + //public decimal SurplusQty { get; set; } + + /// + /// 类型:1为入库,2为出库 + /// + public int InventoryInOutType { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Entitys/InventoryInOutDetails.cs b/src/WMS.Web.Domain/Entitys/InventoryInOutDetails.cs index b3380d1f..b912d1fa 100644 --- a/src/WMS.Web.Domain/Entitys/InventoryInOutDetails.cs +++ b/src/WMS.Web.Domain/Entitys/InventoryInOutDetails.cs @@ -31,6 +31,16 @@ namespace WMS.Web.Domain.Entitys /// public string StockCode { get; set; } + /// + /// 仓位ID + /// + public int SubStockId { get; set; } + + /// + /// 箱ID + /// + public int BoxId { get; set; } + /// /// 单据类型 /// diff --git a/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs b/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs new file mode 100644 index 00000000..350dd5ec --- /dev/null +++ b/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs @@ -0,0 +1,23 @@ +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 +{ + /// + /// 物料收发明细:服务接口 + /// + public interface IInventoryInOutDetailsService + { + /// + /// 生成:物料收发明细 + /// + /// + /// + /// + Task GenerateInOrOutDetails(List dtos, bool isTransaction); + } +} diff --git a/src/WMS.Web.Domain/Infrastructure/IInventoryDetailsRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IInventoryDetailsRepositories.cs index 27d6c30c..7689385a 100644 --- a/src/WMS.Web.Domain/Infrastructure/IInventoryDetailsRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IInventoryDetailsRepositories.cs @@ -35,5 +35,14 @@ namespace WMS.Web.Domain.Infrastructure /// /// Task UpdateRange(List entitys, bool isTransaction = true); + + /// + /// 列表-根据物料和仓库和仓位 + /// + /// + /// + /// + /// + Task> GetListBy(List materialIds, List stockCodes, List subStockIds); } } diff --git a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs index 6aee1b96..4bdccbc1 100644 --- a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs @@ -36,7 +36,14 @@ namespace WMS.Web.Domain.Mappers //箱库存映射 CreateMap(); CreateMap(); + + //物料收发明细-映射 + CreateMap() + .ForMember(x => x.OrderType, ops => ops.MapFrom(x => x.OrderType)) + .ForMember(x => x.Type, ops => ops.MapFrom(x => x.InventoryInOutType)); + + } } } diff --git a/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs b/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs new file mode 100644 index 00000000..f05785a4 --- /dev/null +++ b/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs @@ -0,0 +1,78 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto.Inventory; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Services +{ + /// + /// 物料收发明细:服务 + /// + public class InventoryInOutDetailsService: IInventoryInOutDetailsService + { + private readonly IMapper _mapper; + private readonly IBoxRepositories _boxRepositories; + private readonly ISerialNumbersRepositories _serialNumbersRepositories; + private readonly IInventoryDetailsRepositories _inventoryDetailsRepositories; + private readonly IInventoryInOutDetailsRepositories _inventoryInOutDetailsRepositories; + public InventoryInOutDetailsService(IMapper mapper, IBoxRepositories boxRepositories, + ISerialNumbersRepositories serialNumbersRepositories, + IInventoryDetailsRepositories inventoryDetailsRepositories, + IInventoryInOutDetailsRepositories inventoryInOutDetailsRepositories) + { + _mapper = mapper; + _boxRepositories = boxRepositories; + _inventoryDetailsRepositories = inventoryDetailsRepositories; + _serialNumbersRepositories = serialNumbersRepositories; + _inventoryInOutDetailsRepositories = inventoryInOutDetailsRepositories; + } + + /// + /// 生成:物料收发明细 + /// + /// + /// + /// + public async Task GenerateInOrOutDetails(List dtos,bool isTransaction) + { + //找到物料对应的即时库存明细 + var materialIds = dtos.Select(x => x.MaterialId).ToList(); + var stockCodes = dtos.GroupBy(x => x.StockCode).Select(x => x.Key).ToList(); + var subStockIds = dtos.GroupBy(x => x.SubStockId).Select(x => x.Key).ToList(); + var inventoryDetails=await _inventoryDetailsRepositories.GetListBy(materialIds, stockCodes, subStockIds); + + //1.创建要新增的对象 + var add_entitys = new List(); + + //2.遍历:box库存来源数据明细 + foreach (var dto in dtos) + { + //2.1当前的即时库存明细 + var currentDetail= inventoryDetails.Where(x => x.MaterialId == dto.MaterialId && x.StockCode == dto.StockCode && x.SubStockId == dto.SubStockId).FirstOrDefault(); + + //2.2组装物料收发明细实体 + var entity = _mapper.Map(dto); + entity.SurplusQty = currentDetail == null ? 0 : currentDetail.Qty; + add_entitys.Add(entity); + } + + var isSuccess = true; + if (add_entitys.Count != 0) + { + isSuccess = await _inventoryInOutDetailsRepositories.AddRange(add_entitys, isTransaction); + if(!isSuccess) + return Result.ReFailure(ResultCodes.InventoryInOutDetailsWriteError); + } + + return Result.ReSuccess(); + } + } +} diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index 53c50191..a9fb7288 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -51,6 +51,7 @@ namespace WMS.Web.Domain.Values public static ValueTuple BoxInventoryMaterialNoDataError = (800041, "箱物料库存数据不存在,请稍候再试!"); public static ValueTuple BoxInventoryNoInventoryError = (800012, "箱库存物料数量不足,请核对后再试!"); public static ValueTuple BoxInventoryHaveInventoryError = (800013, "该箱库存已经存在,请核对后再试!"); + public static ValueTuple InventoryInOutDetailsWriteError = (800014, "写入物料收发明细失败!"); } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index ad341494..ec831592 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -293,6 +293,8 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient(); Services.AddTransient(); Services.AddTransient(); + Services.AddTransient(); + } } } diff --git a/src/WMS.Web.Repositories/InventoryDetailsRepositories.cs b/src/WMS.Web.Repositories/InventoryDetailsRepositories.cs index 8dc58d65..cc4cb367 100644 --- a/src/WMS.Web.Repositories/InventoryDetailsRepositories.cs +++ b/src/WMS.Web.Repositories/InventoryDetailsRepositories.cs @@ -168,5 +168,19 @@ namespace WMS.Web.Repositories { return await GetPagedList(dto); } + + /// + /// 列表-根据物料和仓库和仓位 + /// + /// + /// + /// + /// + public async Task> GetListBy(List materialIds, List stockCodes, List subStockIds) + { + return await _context.InventoryDetails.Where(x => materialIds.Contains(x.MaterialId) && + stockCodes.Contains(x.StockCode) && + subStockIds.Contains(x.SubStockId) ).ToListAsync(); + } } }