diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 833ecde6..8f305c70 100644 Binary files a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 and b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 differ diff --git a/src/WMS.Web.Api/Controllers/SysConfigController.cs b/src/WMS.Web.Api/Controllers/SysConfigController.cs index ae821926..8a5003ec 100644 --- a/src/WMS.Web.Api/Controllers/SysConfigController.cs +++ b/src/WMS.Web.Api/Controllers/SysConfigController.cs @@ -308,7 +308,7 @@ namespace WMS.Web.Api.Controllers }); } - return Result>.ReSuccess(pullList); + return Result>.ReSuccess(pullList.Take(20).ToList()); } /// /// 获取客户下拉列表(纯客户信息 不包含组织信息) @@ -334,7 +334,7 @@ namespace WMS.Web.Api.Controllers Code = c.Number }); } - return Result>.ReSuccess(pullList); + return Result>.ReSuccess(pullList.Take(20).ToList()); } /// @@ -485,10 +485,11 @@ namespace WMS.Web.Api.Controllers /// /// 序列号或规格型号或物料编码 /// 组织编码 + /// 是否需要支持老ops条码查询 /// [HttpGet] [Route("GetMaterial")] - public async Task> GetMaterial([FromQuery] string serialNumber, [FromQuery] string orgCode = null) + public async Task> GetMaterial([FromQuery] string serialNumber, [FromQuery] string orgCode = null, [FromQuery] bool IsOps = false) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 49456459..483669d1 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -662,12 +662,13 @@ 必填 - + 根据序列号或规格型号,物料编码搜索物料信息-PDA 序列号或规格型号或物料编码 组织编码 + 是否需要支持老ops条码查询 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index dc8f7385..c0831ce7 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2062,6 +2062,76 @@ 出库单号 + + + 老ops序列码 + + + + + 主键 订单编号 + + + + + 序列号 + + + + + 物料编码 + + + + + wms箱ID + + + + + 对应老OPS的箱ID + + + + + 创建人(老ops过来) + + + + + 创建时间(老ops过来) + + + + + 完成装箱时间 + + + + + 出库单对应销售订单号 + + + + + 出库时间 + + + + + 采购单号 + + + + + 入库时间 + + + + + 收货客户 + + 订阅通知信息 diff --git a/src/WMS.Web.Domain/Entitys/SerialNumbers_Ops.cs b/src/WMS.Web.Domain/Entitys/SerialNumbers_Ops.cs new file mode 100644 index 00000000..5bea43c1 --- /dev/null +++ b/src/WMS.Web.Domain/Entitys/SerialNumbers_Ops.cs @@ -0,0 +1,85 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using WMS.Web.Core; +using WMS.Web.Domain.Values; + +namespace WMS.Web.Domain.Entitys +{ + /// + /// 老ops序列码 + /// + [Serializable] + [Table("t_wms_serialnumbers_ops")] + public class SerialNumbers_Ops : EntityBase + { + /// + /// 主键 订单编号 + /// + [Column("Id")] + public override int Id { get; set; } + /// + /// 序列号 + /// + [Column("SerialNumber")] + public string SerialNumber { get; set; } + /// + /// 物料编码 + /// + [Column("MaterialNumber")] + public string MaterialNumber { 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("CompleteCartonTime")] + public DateTime? CompleteCartonTime { get; set; } + /// + /// 出库单对应销售订单号 + /// + [Column("SalBillNo")] + public string SalBillNo { get; set; } + /// + /// 出库时间 + /// + [Column("OutStockTime")] + public DateTime? OutStockTime { get; set; } + /// + /// 采购单号 + /// + [Column("PurchaseBillNo")] + public string PurchaseBillNo { get; set; } + /// + /// 入库时间 + /// + [Column("InStockTime")] + public DateTime? InStockTime { get; set; } + /// + /// 收货客户 + /// + [Column("CustomerId")] + public int CustomerId { get; set; } = 0; + } +} diff --git a/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs index 06d285a9..6574dd2b 100644 --- a/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs @@ -21,7 +21,7 @@ namespace WMS.Web.Domain.Infrastructure /// Task AddRange(List entitys, bool isTransaction = true); //根据序列号模糊搜索信息 - Task GetSerialNumber(string serialNumber, string orgCode); + Task GetSerialNumber(string serialNumber, string orgCode, bool IsOps = false); //根据序列号搜索信息 Task Get(string serialNumber); /// 查询实体集合 diff --git a/src/WMS.Web.Domain/Mappers/SerialNumbersMapper.cs b/src/WMS.Web.Domain/Mappers/SerialNumbersMapper.cs new file mode 100644 index 00000000..660f05b7 --- /dev/null +++ b/src/WMS.Web.Domain/Mappers/SerialNumbersMapper.cs @@ -0,0 +1,16 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Domain.Entitys; + +namespace WMS.Web.Domain.Mappers +{ + public class SerialNumbersMapper : Profile + { + public SerialNumbersMapper() + { + CreateMap().ReverseMap(); + } + } +} diff --git a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs index 790d539d..c75ef90a 100644 --- a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs +++ b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs @@ -66,18 +66,26 @@ namespace WMS.Web.Repositories.Configuration v => JsonConvert.DeserializeObject>(v)); }); + #region 序列号 //序列号 builder.Entity(ent => { ent.ToTable("t_wms_serialnumbers"); ent.HasKey(x => x.Id); }); + //序列号 + builder.Entity(ent => + { + ent.ToTable("t_wms_serialnumbers_ops"); + ent.HasKey(x => x.Id); + }); //序列号操作记录 builder.Entity(ent => { ent.ToTable("t_wms_serialnumberoperate"); ent.HasKey(x => x.Id); }); + #endregion //定时任务时间记录表 builder.Entity(ent => @@ -397,6 +405,7 @@ namespace WMS.Web.Repositories.Configuration public DbSet BoxMark { get; set; } public DbSet FileDownManager { get; set; } public DbSet SerialNumbers { get; set; } + public DbSet SerialNumbers_Ops { get; set; } public DbSet ErpOpsSyncDate { get; set; } public DbSet SerialNumberOperate { get; set; } public DbSet ChangeBoxRecord { get; set; } diff --git a/src/WMS.Web.Repositories/SerialNumbersRepositories.cs b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs index 48b9d444..52e3ab3c 100644 --- a/src/WMS.Web.Repositories/SerialNumbersRepositories.cs +++ b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs @@ -81,6 +81,16 @@ namespace WMS.Web.Repositories var res = await _context.SerialNumbers .Where(f => list.Contains(f.Id)).ToListAsync(); + var ids_e = res.Select(s => s.Id).ToList(); + //在序列表里没找到的序列码 则到老ops序列码数据里去处理 list比较 取差集 + var ids_c = list.Except(ids_e); + if (ids_c.Count() > 0) + { + var entitys_ops = entitys.Where(w => ids_c.Contains(w.Id)).ToList(); + var res_ops = await EditEntityList_Ops(entitys_ops, false); + if (!res_ops) return false; + } + _mapper.ToMapList(entitys, res); await _context.SaveChangesAsync(); @@ -178,7 +188,7 @@ namespace WMS.Web.Repositories /// /// /// - public async Task GetSerialNumber(string serialNumber, string orgCode) + public async Task GetSerialNumber(string serialNumber, string orgCode, bool IsOps = false) { MaterialResponse response = new MaterialResponse(); var materials_result = await _erpService.BillQueryForMaterial(); @@ -203,6 +213,46 @@ namespace WMS.Web.Repositories .GroupJoin(_context.Box, s => s.serial.BoxId, box => box.Id, (s, box) => new { s.serial, s.boxInventory, box }) .SelectMany(x => x.box.DefaultIfEmpty(), (p, box) => new { p.serial, p.boxInventory, box }) .FirstOrDefaultAsync(w => serialNumber.Equals(w.serial.SerialNumber)); + if (entity == null || entity.serial == null) + { + if (IsOps) + return await GetSerialNumber_Ops(serialNumber); + else + return null; + } + response.BoxId = entity.serial.BoxId; + response.BoxBillNo = entity?.box?.BoxBillNo ?? ""; + response.SubStockCode = entity?.boxInventory?.SubStockCode ?? ""; + response.SerialNumber = entity.serial.SerialNumber; + response.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, entity.serial.MaterialNumber); + response.MaterialNumber = entity.serial.MaterialNumber; + response.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, entity.serial.MaterialNumber); + if (entity.boxInventory != null) + response.IsBoxInventory = entity.boxInventory.Details.SelectMany(s => s.SerialNumbers).Where(w => serialNumber.Equals(w)).Count() >= 1 ? true : false; + + + return response; + } + + /// + /// 查询老ops序列码 + /// + /// + /// + private async Task GetSerialNumber_Ops(string serialNumber) + { + MaterialResponse response = new MaterialResponse(); + var materials_result = await _erpService.BillQueryForMaterial(); + if (!materials_result.IsSuccess) + return response; + var materials = materials_result.Data.ToList(); + + var entity = await _context.SerialNumbers_Ops + .GroupJoin(_context.BoxInventory.Include(x => x.Details), serial => serial.BoxId, boxInventory => boxInventory.BoxId, (serial, boxInventory) => new { serial, boxInventory }) + .SelectMany(x => x.boxInventory.DefaultIfEmpty(), (p, boxInventory) => new { p.serial, boxInventory }) + .GroupJoin(_context.Box, s => s.serial.BoxId, box => box.Id, (s, box) => new { s.serial, s.boxInventory, box }) + .SelectMany(x => x.box.DefaultIfEmpty(), (p, box) => new { p.serial, p.boxInventory, box }) + .FirstOrDefaultAsync(w => serialNumber.Equals(w.serial.SerialNumber)); if (entity == null || entity.serial == null) return null; response.BoxId = entity.serial.BoxId; response.BoxBillNo = entity?.box?.BoxBillNo ?? ""; @@ -217,5 +267,39 @@ namespace WMS.Web.Repositories return response; } + /// + /// 老ops条码批量修改 + /// + /// + /// + /// + private async Task EditEntityList_Ops(List entitys, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + var opsList = _mapper.Map>(entitys); + + List list = opsList.Select(s => s.Id).ToList(); + + var res = await _context.SerialNumbers_Ops + .Where(f => list.Contains(f.Id)).ToListAsync(); + + _mapper.ToMapList(opsList, res); + + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + return true; + } } }