diff --git a/src/WMS.Web.Api/Controllers/SysConfigController.cs b/src/WMS.Web.Api/Controllers/SysConfigController.cs index d9a4086f..fb8a2235 100644 --- a/src/WMS.Web.Api/Controllers/SysConfigController.cs +++ b/src/WMS.Web.Api/Controllers/SysConfigController.cs @@ -32,14 +32,17 @@ namespace WMS.Web.Api.Controllers private readonly IBoxRepositories _boxRepositories; private readonly IErpService _erpService; private readonly ISingleDataService _singleDataService; + private readonly ISerialNumbersRepositories _serialNumbersRepositories; public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories, - IBoxRepositories boxRepositories, IErpService erpService, ISingleDataService singleDataService) + IBoxRepositories boxRepositories, IErpService erpService, ISingleDataService singleDataService, + ISerialNumbersRepositories serialNumbersRepositories) { _loginService = loginService; _basicsRepositories = basicsRepositories; _boxRepositories = boxRepositories; _erpService = erpService; _singleDataService = singleDataService; + _serialNumbersRepositories = serialNumbersRepositories; } /// @@ -254,5 +257,23 @@ namespace WMS.Web.Api.Controllers return ResultList.ReSuccess(res); } + + /// + /// 根据序列号搜索信息-PDA + /// + /// 必填 + /// + [HttpGet] + [Route("GetSerialNumber/{serialNumber}")] + public async Task> GetSerialNumbers([FromRoute] string serialNumber) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return Result.ReFailure(ResultCodes.Token_Invalid_Error); + + var res = await _serialNumbersRepositories.GetSerialNumber(serialNumber); + + return Result.ReSuccess(res); + } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index f48ca27e..a6143f36 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -366,6 +366,13 @@ 必填 + + + 根据序列号搜索信息-PDA + + 必填 + + 盘点单 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 10091524..4bb85e65 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -2665,17 +2665,17 @@ 明细 - + 序列号 - + 序列号生成时间 - + 序列号生成用户 @@ -3120,6 +3120,36 @@ 每页条数 不传默认每页10 条 + + + 序列号信息 + + + + + 序列号 + + + + + 物料ID + + + + + 物料名称 + + + + + 物料编码 + + + + + 物料规格型号 + + 名称请求对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 8c134780..d98d34e3 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -155,11 +155,6 @@ 数量(装箱数量) - - - 序列号集 - - 箱库存表头 @@ -1052,6 +1047,56 @@ 备注 + + + 序列号 + + + + + 主键 订单编号 + + + + + 序列号 + + + + + 物料ID + + + + + wms箱ID + + + + + 对应老OPS的箱ID + + + + + 创建人(老ops过来) + + + + + 创建时间(老ops过来) + + + + + 出库单号 + + + + + 入库单号/采购单号 + + wms盘点单 @@ -1541,6 +1586,25 @@ + + + 序列号 + + + + + 批量添加 + + + + + + + 查询实体集合 + + + 修改实体集合 + 批量添加 diff --git a/src/WMS.Web.Core/Dto/OpsBoxResponse.cs b/src/WMS.Web.Core/Dto/OpsBoxResponse.cs index 2ee37dfc..106d7d77 100644 --- a/src/WMS.Web.Core/Dto/OpsBoxResponse.cs +++ b/src/WMS.Web.Core/Dto/OpsBoxResponse.cs @@ -51,7 +51,7 @@ namespace WMS.Web.Core.Dto [JsonProperty("BoxReturnDetails")] public List Details { get; set; } = new List(); } - public class SerialNumbersResponse + public class OpsSerialNumbersResponse { /// /// 序列号 @@ -62,7 +62,7 @@ namespace WMS.Web.Core.Dto /// 序列号生成时间 /// [JsonProperty("barCreateTime")] - public string BarCreateTime { get; set; } + public DateTime? BarCreateTime { get; set; } /// /// 序列号生成用户 /// @@ -85,6 +85,6 @@ namespace WMS.Web.Core.Dto /// 序列号集 /// [JsonProperty("SerialNumbers")] - public List SerialNumbers { get; set; } = new List(); + public List SerialNumbers { get; set; } = new List(); } } diff --git a/src/WMS.Web.Core/Dto/SerialNumbersResponse.cs b/src/WMS.Web.Core/Dto/SerialNumbersResponse.cs new file mode 100644 index 00000000..b16a76af --- /dev/null +++ b/src/WMS.Web.Core/Dto/SerialNumbersResponse.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto +{ + /// + /// 序列号信息 + /// + public class SerialNumbersResponse + { + /// + /// 序列号 + /// + public string SerialNumber { get; set; } + /// + /// 物料ID + /// + public int MaterialId { get; set; } + /// + /// 物料名称 + /// + public string MaterialName { get; set; } + /// + /// 物料编码 + /// + public string MaterialNumber { get; set; } + /// + /// 物料规格型号 + /// + public string Specifications { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Entitys/Box.cs b/src/WMS.Web.Domain/Entitys/Box.cs index c6492641..48ffea00 100644 --- a/src/WMS.Web.Domain/Entitys/Box.cs +++ b/src/WMS.Web.Domain/Entitys/Box.cs @@ -65,7 +65,7 @@ namespace WMS.Web.Domain.Entitys if (d == null) return Result.ReFailure(ResultCodes.BoxMateriaNoData); d.Qty = d.Qty - l.Qty; if (d.Qty <= 0) this.Details.Remove(d); - foreach (var s in l.SerialNumbers) d.SerialNumbers.Remove(s); + //foreach (var s in l.SerialNumbers) d.SerialNumbers.Remove(s); } return Result.ReSuccess(); } @@ -82,12 +82,12 @@ namespace WMS.Web.Domain.Entitys { MaterialId = l.MaterialId, Qty=l.Qty, - SerialNumbers=l.SerialNumbers + //SerialNumbers=l.SerialNumbers }); continue; } d.Qty = d.Qty + l.Qty; - d.SerialNumbers.AddRange(l.SerialNumbers); + //d.SerialNumbers.AddRange(l.SerialNumbers); } return Result.ReSuccess(); } diff --git a/src/WMS.Web.Domain/Entitys/BoxDetails.cs b/src/WMS.Web.Domain/Entitys/BoxDetails.cs index 027eac26..d2ee524d 100644 --- a/src/WMS.Web.Domain/Entitys/BoxDetails.cs +++ b/src/WMS.Web.Domain/Entitys/BoxDetails.cs @@ -31,9 +31,5 @@ namespace WMS.Web.Domain.Entitys /// 数量(装箱数量) /// public decimal Qty { get; set; } - /// - /// 序列号集 - /// - public List SerialNumbers { get; set; } = new List(); } } diff --git a/src/WMS.Web.Domain/Entitys/SerialNumbers.cs b/src/WMS.Web.Domain/Entitys/SerialNumbers.cs new file mode 100644 index 00000000..cedf8169 --- /dev/null +++ b/src/WMS.Web.Domain/Entitys/SerialNumbers.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; +using WMS.Web.Core; + +namespace WMS.Web.Domain.Entitys +{ + /// + /// 序列号 + /// + [Serializable] + [Table("t_wms_serialnumbers")] + public class SerialNumbers : EntityBase + { + public SerialNumbers() { } + public SerialNumbers(string serialNumber,int materialId,int boxId,int opsBoxId,string creator,DateTime? createTime) + { + this.SerialNumber = serialNumber; + this.MaterialId = materialId; + this.BoxId = boxId; + this.OpsBoxId = opsBoxId; + this.Creator = creator; + this.CreateTime = createTime == null ? DateTime.Now : (DateTime)createTime; + } + /// + /// 主键 订单编号 + /// + [Column("Id")] + public override int Id { get; set; } + /// + /// 序列号 + /// + [Column("SerialNumber")] + public string SerialNumber { get; set; } + /// + /// 物料ID + /// + [Column("MaterialId")] + public int MaterialId { get; set; } + /// + /// wms箱ID + /// + [Column("BoxId")] + public int BoxId { get; set; } + /// + /// 对应老OPS的箱ID + /// + [Column("OpsBoxId")] + public int OpsBoxId { get; set; } + /// + /// 创建人(老ops过来) + /// + [Column("Creator")] + public string Creator { get; set; } + /// + /// 创建时间(老ops过来) + /// + [Column("CreateTime")] + public DateTime CreateTime { get; set; } = DateTime.Now; + /// + /// 出库单号 + /// + [Column("OutStockBillNo")] + public string OutStockBillNo { get; set; } + /// + /// 入库单号/采购单号 + /// + [Column("InStockBillNo")] + public string InStockBillNo { get; set; } + } +} diff --git a/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs new file mode 100644 index 00000000..7ede98ee --- /dev/null +++ b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto; +using WMS.Web.Domain.Entitys; + +namespace WMS.Web.Domain.Infrastructure +{ + /// + /// 序列号 + /// + public interface ISerialNumbersRepositories + { + /// + /// 批量添加 + /// + /// + /// + /// + Task AddRange(List entitys, bool isTransaction = true); + //根据序列号模糊搜索信息 + Task GetSerialNumber(string serialNumber); + /// 查询实体集合 + Task> GetEntityList(List serialNumbers); + /// 修改实体集合 + Task EditEntityList(List entitys, bool isTransaction = true); + } +} diff --git a/src/WMS.Web.Domain/Mappers/BoxMapper.cs b/src/WMS.Web.Domain/Mappers/BoxMapper.cs index 5c1114c7..adcf20db 100644 --- a/src/WMS.Web.Domain/Mappers/BoxMapper.cs +++ b/src/WMS.Web.Domain/Mappers/BoxMapper.cs @@ -19,8 +19,8 @@ namespace WMS.Web.Domain.Mappers CreateMap(); CreateMap(); - CreateMap() - .ForPath(x => x.SerialNumbers, ops => ops.MapFrom(x => x.SerialNumbers.Select(s=>s.SerialNumber).ToList())); + CreateMap(); + } } } diff --git a/src/WMS.Web.Domain/Services/BoxService.cs b/src/WMS.Web.Domain/Services/BoxService.cs index e08f2c1f..605dc4ea 100644 --- a/src/WMS.Web.Domain/Services/BoxService.cs +++ b/src/WMS.Web.Domain/Services/BoxService.cs @@ -27,11 +27,13 @@ namespace WMS.Web.Domain.Services private readonly IOpsService _opsService; private readonly ISerialNumberOperateRepositories _serialNumberOperateRepositories; private readonly IErpOpsSyncDateRepositories _erpOpsSyncDateRepositories; + private readonly ISerialNumbersRepositories _serialNumbersRepositories; public BoxService(IMapper mapper, ILoginService loginService, IBasicsRepositories transactionRepositories, IBoxRepositories boxRepositories, IOpsService opsService, ISerialNumberOperateRepositories serialNumberOperateRepositories, - IErpOpsSyncDateRepositories erpOpsSyncDateRepositories) + IErpOpsSyncDateRepositories erpOpsSyncDateRepositories, + ISerialNumbersRepositories serialNumbersRepositories) { _mapper = mapper; _loginService = loginService; @@ -40,6 +42,7 @@ namespace WMS.Web.Domain.Services _opsService = opsService; _serialNumberOperateRepositories = serialNumberOperateRepositories; _erpOpsSyncDateRepositories = erpOpsSyncDateRepositories; + _serialNumbersRepositories = serialNumbersRepositories; } public async Task Sync() @@ -57,25 +60,39 @@ namespace WMS.Web.Domain.Services } var boxs = _mapper.Map>(list); - //需要添加序列号记录表 - List sList = new List(); - foreach (var b in boxs) - { - foreach (var sn in b.Details.SelectMany(s => s.SerialNumbers)) - { - SerialNumberOperate s = new SerialNumberOperate(sn, SerialNumberOperateType.Generate, b.CreateUser, "", b.SupplierId, b.OrgId, null, b.CreateTime); - sList.Add(s); - } - } - IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); bool isRollback = false; bool isSuccess = true; //批量添加 isSuccess = await _boxRepositories.AddRange(boxs, false); if (!isSuccess) isRollback = true; + #region 序列号和序列号记录 因为要得到wsm插入数据库后生成Id + //需要添加序列号表和记录 + List soList = new List(); + List sList = new List(); + foreach (var b in boxs) + { + var ops_box = list.FirstOrDefault(f => f.OpsBoxId == b.OpsBoxId); + foreach (var sn in ops_box.Details.SelectMany(s => s.SerialNumbers)) + { + var detail = ops_box.Details.FirstOrDefault(f => f.SerialNumbers.Select(s=>s.SerialNumber).Equals(sn.SerialNumber)); + var opsSerial = list.FirstOrDefault(f => f.OpsBoxId == b.OpsBoxId).Details + .SelectMany(s => s.SerialNumbers) + .FirstOrDefault(s => s.SerialNumber.Equals(sn.SerialNumber)); + //序列号 + SerialNumbers s = new SerialNumbers(sn.SerialNumber, detail.MaterialId,b.Id,b.OpsBoxId, opsSerial.BarCereateUser,opsSerial.BarCreateTime); + sList.Add(s); + //序列号记录 + SerialNumberOperate so = new SerialNumberOperate(sn.SerialNumber, SerialNumberOperateType.Generate, opsSerial.BarCereateUser, "", b.SupplierId, b.OrgId, null, opsSerial.BarCreateTime); + soList.Add(so); + } + } + #endregion + //序列号 + isSuccess = await _serialNumbersRepositories.AddRange(sList, false); + if (!isSuccess) isRollback = true; //序列号操作记录 - var res = await this.SerialNumberOperate(sList, false); + var res = await this.SerialNumberOperate(soList, false); if (!res.Success) isRollback = true; //更新时间管理 isSuccess = await _erpOpsSyncDateRepositories.Edit(ErpOpsSyncType.Ops, false); diff --git a/src/WMS.Web.Repositories/BoxRepositories.cs b/src/WMS.Web.Repositories/BoxRepositories.cs index 110cb16a..c592c179 100644 --- a/src/WMS.Web.Repositories/BoxRepositories.cs +++ b/src/WMS.Web.Repositories/BoxRepositories.cs @@ -27,9 +27,12 @@ namespace WMS.Web.Repositories private readonly ISingleDataService _singleDataService; private readonly ILoginRepositories _loginRepositories; private readonly IBasicsRepositories _basicsRepositories; - + private readonly IErpBasicDataExtendService _erpBasicDataExtendService; + private readonly IErpService _erpService; public BoxRepositories(RepositoryDbContext context, IMapper mapper, IServiceProvider serviceProvider, - ISingleDataService singleDataService, ILoginRepositories loginRepositories, IBasicsRepositories basicsRepositories) + ISingleDataService singleDataService, ILoginRepositories loginRepositories, + IBasicsRepositories basicsRepositories, IErpBasicDataExtendService erpBasicDataExtendService, + IErpService erpServic) { _context = context; _mapper = mapper; @@ -37,6 +40,8 @@ namespace WMS.Web.Repositories _singleDataService = singleDataService; _loginRepositories = loginRepositories; _basicsRepositories = basicsRepositories; + _erpBasicDataExtendService = erpBasicDataExtendService; + _erpService = erpServic; } public async Task Get(int id) { @@ -54,11 +59,27 @@ namespace WMS.Web.Repositories { var list = await _context.Box.Include(x => x.Details).Where(f => BoxBillNos.Contains(f.BoxBillNo)).ToListAsync(); var resList = _mapper.Map>(list); - + + var materials_result = await _erpService.BillQueryForMaterial(); + if (!materials_result.IsSuccess) + return new List(); + var materials = materials_result.Data.ToList(); + + var ids = list.Select(s => s.Id).ToList(); + //获取所有序列号 + var serialList = await _context.SerialNumbers.Where(f => ids.Contains(f.BoxId)).ToListAsync(); + //获取物料信息 显示物料三件套 var mIds = list.SelectMany(s => s.Details).Select(s => s.MaterialId).ToList(); foreach (var r in resList) { + foreach (var detail in r.Details) + { + detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, detail.MaterialId); + detail.MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, detail.MaterialId); + detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, detail.MaterialId); + detail.SerialNumbers = serialList.Where(w => w.BoxId == r.Id && w.MaterialId == detail.MaterialId).Select(s => s.SerialNumber).ToList(); + } r.TotalQty = r.Details.Sum(s => s.Qty); } return resList; @@ -111,7 +132,7 @@ namespace WMS.Web.Repositories public async Task> GetByNos(List billNos) { return await _context.Box - .Where(w => billNos.Contains(w.BoxBillNo)).Select(s=>s.BoxBillNo).ToListAsync(); + .Where(w => billNos.Contains(w.BoxBillNo)).Select(s => s.BoxBillNo).ToListAsync(); } public async Task AddRange(List entitys, bool isTransaction = true) diff --git a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs index 248e7e4b..3b92baaa 100644 --- a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs +++ b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs @@ -49,6 +49,12 @@ namespace WMS.Web.Repositories.Configuration ent.HasKey(x => x.Id); }); + //序列号 + builder.Entity(ent => + { + ent.ToTable("t_wms_serialnumbers"); + ent.HasKey(x => x.Id); + }); //序列号操作记录 builder.Entity(ent => { @@ -226,10 +232,6 @@ namespace WMS.Web.Repositories.Configuration { ent.ToTable("t_ops_box_details"); ent.HasKey(x => x.Id); - - ent.Property(f => f.SerialNumbers).HasConversion( - v => JsonConvert.SerializeObject(v), - v => JsonConvert.DeserializeObject>(v)); }); #endregion @@ -238,6 +240,7 @@ namespace WMS.Web.Repositories.Configuration base.OnModelCreating(builder); } + public DbSet SerialNumbers { get; set; } public DbSet ErpOpsSyncDate { get; set; } public DbSet SerialNumberOperate { get; set; } public DbSet ChangeBoxRecord { get; set; } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs index 5ea91160..4ed35dbb 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs @@ -46,7 +46,7 @@ namespace Microsoft.Extensions.DependencyInjection services.AddTransient(); - + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/src/WMS.Web.Repositories/SerialNumbersRepositories.cs b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs new file mode 100644 index 00000000..a0e97928 --- /dev/null +++ b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs @@ -0,0 +1,131 @@ +using AutoMapper; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WMS.Web.Core.Dto; +using WMS.Web.Core.Help; +using WMS.Web.Domain.Entitys; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Mappers; +using WMS.Web.Repositories.Configuration; + +namespace WMS.Web.Repositories +{ + /// + /// 序列号 + /// + public class SerialNumbersRepositories : ISerialNumbersRepositories + { + private readonly IMapper _mapper; + private readonly IServiceProvider _serviceProvider; + private readonly RepositoryDbContext _context; + private readonly IErpService _erpService; + private readonly IErpBasicDataExtendService _erpBasicDataExtendService; + + public SerialNumbersRepositories(RepositoryDbContext context, IMapper mapper, + IServiceProvider serviceProvider, IErpService erpService, IErpBasicDataExtendService erpBasicDataExtendService) + { + _context = context; + _mapper = mapper; + _serviceProvider = serviceProvider; + _erpService = erpService; + _erpBasicDataExtendService = erpBasicDataExtendService; + } + + public async Task AddRange(List entitys, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + if (entitys != null && entitys.Count != 0) + { + await _context.SerialNumbers.AddRangeAsync(entitys); + await _context.SaveChangesAsync(); + } + if (_transaction != null) + _transaction.Commit(); + return true; + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + } + /// + /// 批量修改 + /// + /// + /// + /// + public async Task EditEntityList(List entitys, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + List list = entitys.Select(s => s.Id).ToList(); + + var res = await _context.SerialNumbers + .Where(f => list.Contains(f.Id)).ToListAsync(); + + _mapper.ToMapList(entitys, res); + + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + return true; + } + /// + /// 根据序列号查询 + /// + /// + /// + public async Task> GetEntityList(List serialNumbers) + { + var res = await _context.SerialNumbers + .Where(f => serialNumbers.Contains(f.SerialNumber)) + .ToListAsync(); + + return res.Clone(); + } + + /// + /// 根据序列号 + /// + /// + /// + public async Task GetSerialNumber(string serialNumber) + { + SerialNumbersResponse response = new SerialNumbersResponse(); + var materials_result = await _erpService.BillQueryForMaterial(); + if (!materials_result.IsSuccess) + return response; + var materials = materials_result.Data.ToList(); + + var entity = await _context.SerialNumbers.FirstOrDefaultAsync(w => serialNumber.Equals(w.SerialNumber)); + response.SerialNumber = entity.SerialNumber; + response.MaterialId = entity.MaterialId; + response.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, entity.MaterialId); + response.MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, entity.MaterialId); + response.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, entity.MaterialId); + return new SerialNumbersResponse(); + } + } +}