diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 3434af0d..5332c4bd 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -2426,6 +2426,36 @@ 物料库存数量 + + + 即时库存明细:生成dto + + + + + 物料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 80212b52..788cce27 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2283,6 +2283,19 @@ + + + 即时库存-服务接口 + + + + + 生成:即时库存明细 + + + + + 物料收发明细:服务接口 @@ -3422,6 +3435,19 @@ + + + 即时库存-服务 + + + + + 生成:即时库存明细 + + + + + 物料收发明细:服务 diff --git a/src/WMS.Web.Core/Dto/Inventory/InventoryDetailsGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/InventoryDetailsGenerateDto.cs new file mode 100644 index 00000000..6936d7c9 --- /dev/null +++ b/src/WMS.Web.Core/Dto/Inventory/InventoryDetailsGenerateDto.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Inventory +{ + /// + /// 即时库存明细:生成dto + /// + public class InventoryDetailsGenerateDto + { + /// + /// 物料ID + /// + public int MaterialId { get; set; } + + /// + /// 仓库 + /// + public string StockCode { get; set; } + + /// + /// 仓位ID + /// + public int SubStockId { get; set; } + + /// + /// 数量:出入库 + /// + public decimal Qty { get; set; } + + /// + /// 类型:1为入库,2为出库 + /// + public int InventoryInOutType { get; set; } + } +} diff --git a/src/WMS.Web.Domain/IService/IInventoryDetailsService.cs b/src/WMS.Web.Domain/IService/IInventoryDetailsService.cs new file mode 100644 index 00000000..0b5a88bf --- /dev/null +++ b/src/WMS.Web.Domain/IService/IInventoryDetailsService.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 IInventoryDetailsService + { + /// + /// 生成:即时库存明细 + /// + /// + /// + /// + Task GenerateInventoryDetails(List dtos, bool isTransaction); + } +} diff --git a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs index 4bdccbc1..b93becb1 100644 --- a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs @@ -41,9 +41,10 @@ namespace WMS.Web.Domain.Mappers CreateMap() .ForMember(x => x.OrderType, ops => ops.MapFrom(x => x.OrderType)) .ForMember(x => x.Type, ops => ops.MapFrom(x => x.InventoryInOutType)); + + //即时库存明细-映射 + CreateMap(); - - } } } diff --git a/src/WMS.Web.Domain/Services/InventoryDetailsService.cs b/src/WMS.Web.Domain/Services/InventoryDetailsService.cs new file mode 100644 index 00000000..41d8194e --- /dev/null +++ b/src/WMS.Web.Domain/Services/InventoryDetailsService.cs @@ -0,0 +1,103 @@ +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 InventoryDetailsService: IInventoryDetailsService + { + private readonly IMapper _mapper; + private readonly IBoxRepositories _boxRepositories; + private readonly ISerialNumbersRepositories _serialNumbersRepositories; + private readonly IInventoryDetailsRepositories _inventoryDetailsRepositories; + public InventoryDetailsService(IMapper mapper, IBoxRepositories boxRepositories, + ISerialNumbersRepositories serialNumbersRepositories, + IInventoryDetailsRepositories inventoryDetailsRepositories) + { + _mapper = mapper; + _boxRepositories = boxRepositories; + _inventoryDetailsRepositories = inventoryDetailsRepositories; + _serialNumbersRepositories = serialNumbersRepositories; + } + + /// + /// 生成:即时库存明细 + /// + /// + /// + /// + public async Task GenerateInventoryDetails(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); + + + var add_entitys = new List(); + var update_entitys = new List(); + + //2.遍历 + 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(); + if (currentDetail == null) + { + //出库的时候,判断是否有库存,没有就返回错误 + if (dto.InventoryInOutType == (int)InventoryInOutType.Out) + return Result.ReFailure(ResultCodes.InventoryDetailsNoInventoryError); + + var entity = _mapper.Map(dto); + add_entitys.Add(entity); + } + else + { + var entity = currentDetail; + if (dto.InventoryInOutType == (int)InventoryInOutType.In) + { + //加库存 + entity.Qty = entity.Qty + dto.Qty; + } + else + { + //出库的时候,判断是否有库存,没有就返回错误 + if (entity.Qty BoxInventoryNoDataError = (800011, "箱库存数据不存在,请稍候再试!"); public static ValueTuple BoxInventoryMaterialNoDataError = (800041, "箱物料库存数据不存在,请稍候再试!"); public static ValueTuple BoxInventoryNoInventoryError = (800012, "箱库存物料数量不足,请核对后再试!"); + public static ValueTuple InventoryDetailsNoInventoryError = (800012, "物料库存数量不足,请核对后再试!"); public static ValueTuple BoxInventoryHaveInventoryError = (800013, "该箱库存已经存在,请核对后再试!"); public static ValueTuple InventoryInOutDetailsWriteError = (800014, "写入物料收发明细失败!"); + public static ValueTuple InventoryDetailsWriteError = (800014, "写入即时库存明细失败!"); } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs index ec831592..0acd41d2 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs @@ -294,6 +294,7 @@ namespace WMS.Web.Repositories.DependencyInjection Services.AddTransient(); Services.AddTransient(); Services.AddTransient(); + Services.AddTransient(); } }