using AutoMapper; using BarCode.Web.Core.Dto.Erp; using BarCode.Web.Core.Dto.Erp.Org; using BarCode.Web.Core.Dto.Erp.Supplier; using BarCode.Web.Core.Dto.Login; using BarCode.Web.Core.Dto.SerialNumbers; using BarCode.Web.Core.Help; using BarCode.Web.Domain.Entitys; using BarCode.Web.Domain.Infrastructure; using BarCode.Web.Domain.IService.Public; using BarCode.Web.Domain.Mappers; using BarCode.Web.Domain.Services.Public; using BarCode.Web.Domain.Values.Single; using BarCode.Web.Repositories.Configuration; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.Logging; using Npoi.Mapper; using NPOI.OpenXmlFormats.Wordprocessing; using NPOI.POIFS.FileSystem; using Quartz.Logging; using System; using System.Collections.Generic; using System.ComponentModel.Design; using System.Diagnostics.Eventing.Reader; using System.Linq; using System.Text; using System.Threading.Tasks; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; namespace BarCode.Web.Repositories { /// /// 序列码 /// public class SerialNumbersRepositories : IAllFielRepositories, IAllFielRepositories, ISerialNumbersRepositories { private readonly ILoginRepositories _loginRepositories; private readonly RepositoryDbContext _context; private readonly IBasicsRepositories _basicsRepositories; private readonly IMapper _mapper; private readonly IErpService _erpService; private readonly ISingleDataService _singleDataService; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; public SerialNumbersRepositories(RepositoryDbContext context, ILoginRepositories loginRepositories, IBasicsRepositories basicsRepositories, IMapper mapper, IErpService erpService, ISingleDataService singleDataService, IErpBasicDataExtendService erpBasicDataExtendService) { _context = context; _basicsRepositories = basicsRepositories; _loginRepositories = loginRepositories; _mapper = mapper; _erpService = erpService; _singleDataService = singleDataService; _erpBasicDataExtendService = erpBasicDataExtendService; } /// /// 批量添加 /// /// /// /// /// public async Task AddRange(List entitys, bool isTransaction = true) { IDbContextTransaction _transaction = null; if (isTransaction) _transaction = _context.Database.BeginTransaction(); if (entitys != null && entitys.Count != 0) { await _context.SerialNumbers.AddRangeAsync(entitys); await _context.SaveChangesAsync(); string newSuitNumber = ""; string oldSuitNumber = ""; foreach (var item in entitys) { //自动生成序列码 string sn= item.GenerateSerialNumber();//alter by yzh item.GenerateNumberCode(); if(item.IsTwo>1)//大于1说明是套装 { if (item.thisNumber % item.IsTwo == 0) { newSuitNumber = oldSuitNumber; } else { oldSuitNumber = sn; newSuitNumber = sn; } } else { newSuitNumber = sn; newSuitNumber = sn; } item.GenerateSuitNumber(newSuitNumber); item.GenerateTwoSerialNumber(newSuitNumber); } foreach (var item in entitys) { string s = GetTwoSerialNumber(entitys, item.SuitNumber); item.GenerateTwoSerialNumber(s); string sNumberCode = GetTwoNumberCode(entitys, item.SuitNumber); item.GenerateTwoNumberCode(sNumberCode); } await _context.SaveChangesAsync(); } if (_transaction != null) _transaction.Commit(); return true; } /// /// 产生套装条码 /// /// /// public string GetTwoSerialNumber(List entitys, string SuitNumber) { string strReturn = ""; foreach (var item in entitys) { if (item.SuitNumber == SuitNumber) { if (strReturn == "") { strReturn = item.SerialNumber; } else { strReturn = strReturn + "," + item.SerialNumber; } } } return strReturn; } /// /// 产生第二个数字序列码 /// /// /// public string GetTwoNumberCode(List entitys, string SuitNumber) { string strReturn = ""; foreach (var item in entitys) { if (item.SuitNumber == SuitNumber) { if (strReturn == "") { strReturn = item.NumberCode; } else { strReturn = strReturn + "," + item.NumberCode; } } } return strReturn; } /// /// 批量修改 /// /// /// /// /// public async Task EditEntityList(List entitys, bool isTransaction = true) { IDbContextTransaction _transaction = null; if (isTransaction) _transaction = _context.Database.BeginTransaction(); List list = entitys.Select(s => s.Id).ToList(); var res = await _context.SerialNumbers .Where(f => list.Contains(f.Id)).ToListAsync(); _mapper.ToMapLongList(entitys, res); await _context.SaveChangesAsync(); if (_transaction != null) _transaction.Commit(); return true; } /// /// 获取集合 /// /// /// /// public async Task> GetEntityList(List serialNumbers) { return await _context.SerialNumbers.AsNoTracking() .Where(f => serialNumbers.Contains(f.SerialNumber)) .ToListAsync(); } /// /// 根据生成记录Id查询序列号 /// /// /// public async Task> GetEntityListByGRIds(List gRIds) { return await _context.SerialNumbers.AsNoTracking() .Where(f => gRIds.Contains(f.GenerateRecordId)) .ToListAsync(); } /// /// 根据生成记录Id查询序列号 /// /// /// public async Task> GetUseEntityListByGRIds(List gRIds) { return await _context.SerialNumbers.AsNoTracking() .Where(f => gRIds.Contains(f.GenerateRecordId) && f.IsUse==true) .ToListAsync(); } /// /// 根据生成记录Id查询序列号 /// /// /// public async Task> GetEntityListByGRId(int gRId) { return await _context.SerialNumbers.AsNoTracking() .Where(f => gRId == f.GenerateRecordId) .ToListAsync(); } /// /// 列表 /// /// /// /// public async Task<(List list, int total)> GetListAsync(SerialNumberQueryRequest dto, LoginInDto loginInfo) { int companyId = loginInfo.UserInfo.CompanyId; List mNumber = new List(); var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); //var queery2= _context.ser var query = _context.SerialNumbers.AsNoTracking() .GroupJoin(_context.Box, serial => serial.BoxId, box => box.Id, (serial, box) => new { serial, box }) .SelectMany(x => x.box.DefaultIfEmpty(), (p, box) => new { p.serial, box }) .GroupJoin(_context.SerialNumberGenerateRecord, s => s.serial.GenerateRecordId, sg => sg.Id, (serial, sg) => new { serial.serial, serial.box, sg }) .SelectMany(x => x.sg.DefaultIfEmpty(), (p, sg) => new { p.serial, p.box, sg }) .OrderByDescending(o => o.serial.Id) .Where(f => dto.GenerateRecordId == f.serial.GenerateRecordId); if (loginInfo.UserInfo.IsAdmin != true && !string.IsNullOrEmpty(dto.OrgCode)) { var rec_type = dto.OrgCode.Substring(0, 1); var rec_code = dto.OrgCode.Substring(2, dto.OrgCode.Length - 2); if (rec_type.Equals("s"))//供应商 query = query.Where(w => rec_code == w.serial.SupplierCode); else//查其他单据(组织) query = query.Where(w => rec_code == w.serial.OrgCode); } if (dto.IsPrint != null) query = query.Where(w => dto.IsPrint == true ? w.serial.PrintNumber > 0 : w.serial.PrintNumber <= 0); if (dto.IsUse != null) query = query.Where(w => w.serial.IsUse == dto.IsUse); if (dto.SerialNumbers != null && dto.SerialNumbers.Count() > 0) query = query.Where(w => dto.SerialNumbers.Contains(w.serial.SerialNumber)); if (dto.NumberCodes != null && dto.NumberCodes.Count() > 0) query = query.Where(w => dto.NumberCodes.Contains(w.serial.NumberCode)); if (!string.IsNullOrEmpty(dto.BoxBillNo)) query = query.Where(w => w.box.BoxBillNo.Equals(dto.BoxBillNo)); if (dto.SerialNumberBegin != null && dto.SerialNumberBegin != 0) { if (dto.SerialNumberEnd != null && dto.SerialNumberEnd != 0) query = query.Where(w => w.serial.Id >= dto.SerialNumberBegin); else query = query.Where(w => w.serial.Id == dto.SerialNumberBegin); } if (dto.SerialNumberEnd != null && dto.SerialNumberEnd != 0) { if (dto.SerialNumberBegin != null && dto.SerialNumberBegin != 0) query = query.Where(w => w.serial.Id <= dto.SerialNumberEnd); else query = query.Where(w => w.serial.Id == dto.SerialNumberEnd); } //V01.05.00: 数字序列号区间查询 if (!string.IsNullOrEmpty(dto.NumberCodeBegin)) { int number = Convert.ToInt32(dto.NumberCodeBegin.Substring(6, dto.NumberCodeBegin.Length - 6)); if (!string.IsNullOrEmpty(dto.NumberCodeEnd)) query = query.Where(w => w.serial.Number >= number); else query = query.Where(w => w.serial.Number == number); } if (!string.IsNullOrEmpty(dto.NumberCodeEnd)) { int number = Convert.ToInt32(dto.NumberCodeEnd.Substring(6, dto.NumberCodeEnd.Length - 6)); if (!string.IsNullOrEmpty(dto.NumberCodeBegin)) query = query.Where(w => w.serial.Number <= number); else query = query.Where(w => w.serial.Number == number); } if (dto.DownLoadBeginDate != null) query = query.Where(w => w.serial.DownLoadTime >= dto.DownLoadBeginDate); if (dto.DownLoadEndDate != null) { DateTime dt_end = ((DateTime)dto.DownLoadEndDate).AddDays(1); query = query.Where(w => w.serial.DownLoadTime <= dt_end); } if (dto.PrintBeginDate != null) query = query.Where(w => w.serial.PrintTime >= dto.PrintBeginDate); if (dto.PrintEndDate != null) { DateTime dt_end = ((DateTime)dto.PrintEndDate).AddDays(1); query = query.Where(w => w.serial.PrintTime <= dt_end); } if (dto.IsUpdateMaterial != null) { if (dto.IsUpdateMaterial == true) query = query.Where(w => !string.IsNullOrEmpty(w.serial.Old_MaterialNumber)); else query = query.Where(w => string.IsNullOrEmpty(w.serial.Old_MaterialNumber)); } if(dto.isTwo>1)//是否为两件装,如果大于1说明为两件装 { query = query.Where(w => w.serial.IsTwo>1); } int total = await query.CountAsync(); var list = await query.Select(s => new SerialNumberInfoResponse() { Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.serial.MaterialNumber), Old_Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.serial.Old_MaterialNumber == null ? "" : s.serial.Old_MaterialNumber), MaterialNumber = s.serial.MaterialNumber, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.serial.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.serial.MaterialNumber), SerialNumber = s.serial.SerialNumber, NumberCode = s.serial.NumberCode, Number = s.sg == null ? 0 : s.sg.Number, Id = s.serial.Id, IsUse = s.serial.IsUse, IsUseStr = s.serial.IsUse == true ? "是" : "否", //序列码已经被使用 但没有箱号,那么就是被wms系统拉去使用了,不能再被打印 IsEnablePrint = (s.serial.BoxId <= 0 && s.serial.IsUse == true) ? false : true, Box = s.box == null ? "" : s.box.BoxBillNo, Creator = _singleDataService.GetSingleData(SingleAction.Users, companyId, s.serial.CreatorId), CreateTime = s.serial.CreateTime.DateToStringSeconds(), PrintNumber = s.serial.PrintNumber, DownLoadNumber = s.serial.DownLoadNumber, DownLoadTime = s.serial.DownLoadTime.DateToStringSeconds(), PrintTime = s.serial.PrintTime.DateToStringSeconds(), IsTwo=s.serial.IsTwo, TwoSerialNumber = s.serial.TwoSerialNumber.Replace(s.serial.SerialNumber,"").Replace(",","") }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); return (list, total); } /// /// 列表2 /// /// /// /// public async Task<(List list, int total)> GetListAsync2(SerialNumberQueryRequest dto, LoginInDto loginInfo) { int companyId = loginInfo.UserInfo.CompanyId; List mNumber = new List(); var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); //var queery2= _context.ser var query = _context.SerialNumbers.AsNoTracking() .GroupJoin(_context.Box, serial => serial.BoxId, box => box.Id, (serial, box) => new { serial, box }) .SelectMany(x => x.box.DefaultIfEmpty(), (p, box) => new { p.serial, box }) .GroupJoin(_context.SerialNumberGenerateRecord, s => s.serial.GenerateRecordId, sg => sg.Id, (serial, sg) => new { serial.serial, serial.box, sg }) .SelectMany(x => x.sg.DefaultIfEmpty(), (p, sg) => new { p.serial, p.box, sg }) .OrderByDescending(o => o.serial.Id) .Where(f => dto.GenerateRecordId == f.serial.GenerateRecordId ); if (loginInfo.UserInfo.IsAdmin != true && !string.IsNullOrEmpty(dto.OrgCode)) { var rec_type = dto.OrgCode.Substring(0, 1); var rec_code = dto.OrgCode.Substring(2, dto.OrgCode.Length - 2); if (rec_type.Equals("s"))//供应商 query = query.Where(w => rec_code == w.serial.SupplierCode); else//查其他单据(组织) query = query.Where(w => rec_code == w.serial.OrgCode); } if (dto.IsPrint != null) query = query.Where(w => dto.IsPrint == true ? w.serial.PrintNumber > 0 : w.serial.PrintNumber <= 0); if (dto.IsUse != null) query = query.Where(w => w.serial.IsUse == dto.IsUse); if (dto.SerialNumbers != null && dto.SerialNumbers.Count() > 0) query = query.Where(w => dto.SerialNumbers.Contains(w.serial.SerialNumber)); if (dto.NumberCodes != null && dto.NumberCodes.Count() > 0) query = query.Where(w => dto.NumberCodes.Contains(w.serial.NumberCode)); if (!string.IsNullOrEmpty(dto.BoxBillNo)) query = query.Where(w => w.box.BoxBillNo.Equals(dto.BoxBillNo)); if (dto.SerialNumberBegin != null && dto.SerialNumberBegin != 0) { if (dto.SerialNumberEnd != null && dto.SerialNumberEnd != 0) query = query.Where(w => w.serial.Id >= dto.SerialNumberBegin); else query = query.Where(w => w.serial.Id == dto.SerialNumberBegin); } if (dto.SerialNumberEnd != null && dto.SerialNumberEnd != 0) { if (dto.SerialNumberBegin != null && dto.SerialNumberBegin != 0) query = query.Where(w => w.serial.Id <= dto.SerialNumberEnd); else query = query.Where(w => w.serial.Id == dto.SerialNumberEnd); } //V01.05.00: 数字序列号区间查询 if (!string.IsNullOrEmpty(dto.NumberCodeBegin)) { int number = Convert.ToInt32(dto.NumberCodeBegin.Substring(6, dto.NumberCodeBegin.Length - 6)); if (!string.IsNullOrEmpty(dto.NumberCodeEnd)) query = query.Where(w => w.serial.Number >= number); else query = query.Where(w => w.serial.Number == number); } if (!string.IsNullOrEmpty(dto.NumberCodeEnd)) { int number = Convert.ToInt32(dto.NumberCodeEnd.Substring(6, dto.NumberCodeEnd.Length - 6)); if (!string.IsNullOrEmpty(dto.NumberCodeBegin)) query = query.Where(w => w.serial.Number <= number); else query = query.Where(w => w.serial.Number == number); } if (dto.DownLoadBeginDate != null) query = query.Where(w => w.serial.DownLoadTime >= dto.DownLoadBeginDate); if (dto.DownLoadEndDate != null) { DateTime dt_end = ((DateTime)dto.DownLoadEndDate).AddDays(1); query = query.Where(w => w.serial.DownLoadTime <= dt_end); } if (dto.PrintBeginDate != null) query = query.Where(w => w.serial.PrintTime >= dto.PrintBeginDate); if (dto.PrintEndDate != null) { DateTime dt_end = ((DateTime)dto.PrintEndDate).AddDays(1); query = query.Where(w => w.serial.PrintTime <= dt_end); } if (dto.IsUpdateMaterial != null) { if (dto.IsUpdateMaterial == true) query = query.Where(w => !string.IsNullOrEmpty(w.serial.Old_MaterialNumber)); else query = query.Where(w => string.IsNullOrEmpty(w.serial.Old_MaterialNumber)); } if (dto.isTwo > 1)//是否为两件装,如果大于1说明为两件装 { query = query.Where(w => w.serial.IsTwo > 1); } int total = await query.CountAsync(); var list = await query.Select(s => new SerialNumberInfoResponse2() { Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.serial.MaterialNumber), Old_Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.serial.Old_MaterialNumber == null ? "" : s.serial.Old_MaterialNumber), MaterialNumber = s.serial.MaterialNumber, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.serial.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.serial.MaterialNumber), SerialNumber = s.serial.SerialNumber, SerialNumber2 = s.serial.SerialNumber, NumberCode = s.serial.NumberCode, NumberCode2 = s.serial.NumberCode, Number = s.sg == null ? 0 : s.sg.Number, Id = s.serial.Id, Id2 = s.serial.Id, IsUse = s.serial.IsUse, IsUseStr = s.serial.IsUse == true ? "是" : "否", //序列码已经被使用 但没有箱号,那么就是被wms系统拉去使用了,不能再被打印 IsEnablePrint = (s.serial.BoxId <= 0 && s.serial.IsUse == true) ? false : true, Box = s.box == null ? "" : s.box.BoxBillNo, Creator = _singleDataService.GetSingleData(SingleAction.Users, companyId, s.serial.CreatorId), CreateTime = s.serial.CreateTime.DateToStringSeconds(), PrintNumber = s.serial.PrintNumber, DownLoadNumber = s.serial.DownLoadNumber, DownLoadTime = s.serial.DownLoadTime.DateToStringSeconds(), PrintTime = s.serial.PrintTime.DateToStringSeconds(), IsTwo = s.serial.IsTwo, SuitNumber=s.serial.SuitNumber, TwoSerialNumber = s.serial.TwoSerialNumber.Replace(s.serial.SerialNumber, "").Replace(",", "") }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); List returnList= new List(); for (int i = 0; i < list.Count; i++) { SerialNumberInfoResponse2 list2 = new SerialNumberInfoResponse2(); if (list[i] != null) { if (list[i].SuitNumber == list[i].SerialNumber) { List sn = new List(); sn.Add(list[i].TwoSerialNumber.Replace(list[i].SuitNumber,"").Replace(",","")); var serialNumbers = await GetEntityList(sn); //说明是两件装,且是两件装的主号 list2.Specifications = list[i].Specifications; list2.Old_Specifications = list[i].Old_Specifications; list2.MaterialNumber = list[i].MaterialNumber; list2.MaterialName = list[i].MaterialName; list2.BarCode = list[i].BarCode; list2.SerialNumber = serialNumbers[0].SerialNumber; list2.SerialNumber2 = list[i].SerialNumber; list2.NumberCode = serialNumbers[0].NumberCode; list2.NumberCode2 = list[i].NumberCode; list2.Number = list[i].Number; list2.Id = serialNumbers[0].Id; list2.Id2 = list[i].Id; list2.IsUse = list[i].IsUse; list2.IsUseStr = list[i].IsUseStr; list2.IsEnablePrint = list[i].IsEnablePrint; list2.Box = list[i].Box; list2.Creator = list[i].Creator; list2.CreateTime = list[i].CreateTime; list2.PrintNumber = list[i].PrintNumber; list2.DownLoadNumber = list[i].DownLoadNumber; list2.DownLoadTime= list[i].DownLoadTime; list2.PrintTime = list[i].PrintTime; list2.IsTwo = list[i].IsTwo; list2.TwoSerialNumber = list[i].TwoSerialNumber; returnList.Add(list2); } else { List sn = new List(); sn.Add(list[i].SerialNumber); var serialNumbers = await GetEntityList(sn); //判断号码有没有在要返回的list中,如果有的话,那就不加了。 if(dto.SerialNumbers!=null) { bool exist = dto.SerialNumbers.Contains(serialNumbers[0].SuitNumber); if (exist == false) { List sn2 = new List(); sn2.Add(list[i].TwoSerialNumber.Replace(list[i].SerialNumber, "").Replace(",", "")) ; serialNumbers = await GetEntityList(sn2); //说明是两件装,且是两件装的主号 list2.Specifications = list[i].Specifications; list2.Old_Specifications = list[i].Old_Specifications; list2.MaterialNumber = list[i].MaterialNumber; list2.MaterialName = list[i].MaterialName; list2.BarCode = list[i].BarCode; list2.SerialNumber = serialNumbers[0].SerialNumber; list2.SerialNumber2 = list[i].SerialNumber; list2.NumberCode = serialNumbers[0].NumberCode; list2.NumberCode2 = list[i].NumberCode; list2.Number = list[i].Number; list2.Id = serialNumbers[0].Id; list2.Id2 = list[i].Id; list2.IsUse = list[i].IsUse; list2.IsUseStr = list[i].IsUseStr; list2.IsEnablePrint = list[i].IsEnablePrint; list2.Box = list[i].Box; list2.Creator = list[i].Creator; list2.CreateTime = list[i].CreateTime; list2.PrintNumber = list[i].PrintNumber; list2.DownLoadNumber = list[i].DownLoadNumber; list2.DownLoadTime = list[i].DownLoadTime; list2.PrintTime = list[i].PrintTime; list2.IsTwo = list[i].IsTwo; list2.TwoSerialNumber = list[i].TwoSerialNumber; returnList.Add(list2); } else { list2.DownLoadTime = list[i].DownLoadTime; } } } } } return (returnList, total); } /// /// 导出列表 /// /// /// /// public async Task<(object obj, int total)> GetListField(SerialNumbersExportRequest dto, LoginInDto loginInfo) { List mNumber = new List(); var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); //供应商 var supplier_result = await _erpService.BillQueryForSupplier(); List suppliers = new List(); if (supplier_result.IsSuccess) suppliers = supplier_result.Data.ToList(); //取组织 var org_result = await _erpService.BillQueryForOrg(); List orgs = new List(); if (org_result.IsSuccess) orgs = org_result.Data.ToList(); var query = _context.SerialNumbers.AsNoTracking() .GroupJoin(_context.SerialNumberGenerateRecord, serial => serial.GenerateRecordId, sg => sg.Id, (serial, sg) => new { serial, sg }) .SelectMany(x => x.sg.DefaultIfEmpty(), (p, sg) => new { p.serial, sg }) .OrderByDescending(o => o.serial.Id) .Where(f => dto.Ids.Contains(f.serial.GenerateRecordId)); int total = await query.CountAsync(); if (dto.IsTwo == 2) { List returnList = new List(); var list = await query.Select(s => new SerialNumbersExportReponse2() { PurchaseBillNo = s.sg == null ? "" : s.sg.PurchaseBillNo, SuitNumber=s.serial.SuitNumber, TwoSerialNumber=s.serial.TwoSerialNumber, Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.serial.MaterialNumber), MaterialNumber = s.serial.MaterialNumber, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.serial.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.serial.MaterialNumber), SerialNumber = s.serial.SerialNumber, NumberCode = s.serial.NumberCode, Number = s.sg == null ? 0 : s.sg.Number, SupplierOrOrg = string.IsNullOrEmpty(s.sg.SupplierCode) ? _erpBasicDataExtendService.GetOrgName(orgs, s.sg.OrgCode) : _erpBasicDataExtendService.GetSupplierName(suppliers, s.sg.SupplierCode) }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); for (int i = 0; i < list.Count; i++) { SerialNumbersExportReponse2 list2 = new SerialNumbersExportReponse2(); if (list[i] != null) { if (list[i].SuitNumber == list[i].SerialNumber) { List sn = new List(); sn.Add(list[i].TwoSerialNumber.Replace(list[i].SuitNumber, "").Replace(",", "")); var serialNumbers = await GetEntityList(sn); list2.PurchaseBillNo = list[i].PurchaseBillNo; list2.Specifications = list[i].Specifications; list2.MaterialNumber = list[i].MaterialNumber; list2.MaterialName = list[i].MaterialName; list2.BarCode = list[i].BarCode; list2.SerialNumber = serialNumbers[0].SerialNumber; list2.SerialNumber2 = list[i].SerialNumber; list2.NumberCode = serialNumbers[0].NumberCode; list2.NumberCode2 = list[i].NumberCode; list2.Number = list[i].Number; list2.SupplierOrOrg = list[i].SupplierOrOrg; returnList.Add(list2); } } } return (returnList, total); } else { var list = await query.Select(s => new SerialNumbersExportReponse() { PurchaseBillNo= s.sg == null ? "" : s.sg.PurchaseBillNo, Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.serial.MaterialNumber), MaterialNumber = s.serial.MaterialNumber, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.serial.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.serial.MaterialNumber), SerialNumber = s.serial.SerialNumber, NumberCode = s.serial.NumberCode, Number = s.sg == null ? 0 : s.sg.Number, SupplierOrOrg = string.IsNullOrEmpty(s.sg.SupplierCode) ? _erpBasicDataExtendService.GetOrgName(orgs, s.sg.OrgCode) : _erpBasicDataExtendService.GetSupplierName(suppliers, s.sg.SupplierCode) }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); return (list, total); } } /// /// 根据箱Id来搜索序列号 /// /// /// /// public async Task<(List list, int total)> GetEntityListByBoxId(SerialNumberByBoxIdQueryRequest dto) { var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); var query = _context.SerialNumbers.AsNoTracking() .OrderByDescending(o => o.CompleteCartonTime)//以装箱时间先后排序 .Where(f => f.BoxId == dto.BoxId && f.IsNotCount!="1"); int total = await query.CountAsync(); var list = await query.Select(s => new SerialNumbersResponse() { BoxId = s.BoxId, IsCarton = (s.BoxId > 0 || s.IsUse == true) ? true : false, IsOldData = true,//扫箱号获取 默认就是老数据 Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.MaterialNumber), MaterialNumber = s.MaterialNumber, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.MaterialNumber), SerialNumber = s.SerialNumber, IsUseNumber = s.IsUseNumber, NumberCode = s.NumberCode, TwoSerialNumber= (s.IsUseNumber==true)? s.TwoNumberCode.Replace(s.NumberCode,"").Replace(",",""): s.TwoSerialNumber.Replace(s.SerialNumber,"").Replace(",","") }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); return (list, total); } public async Task?> GetEntityList(string serialNumber, string orgCode, LoginInDto loginInfo) { var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); var query = _context.SerialNumbers.AsNoTracking().Where(w => 1 == 1); //if (loginInfo.UserInfo.IsAdmin != true && !string.IsNullOrEmpty(orgCode)) //{ // var rec_type = orgCode.Substring(0, 1); // var rec_code = orgCode.Substring(2, orgCode.Length - 2); // if (rec_type.Equals("s"))//供应商 // query = query.Where(w => rec_code == w.SupplierCode); // else//查其他单据(组织) // query = query.Where(w => rec_code == w.OrgCode); //} query = query.Where(f => f.SerialNumber.Equals(serialNumber) || f.NumberCode.Equals(serialNumber)); var entity = await query.FirstOrDefaultAsync(); if (entity == null) return null; ////如果为单套产品,那就直接取就行了。 if (entity.IsTwo < 2) { List list = new List(); SerialNumbersResponse s=new SerialNumbersResponse(); s.BoxId = entity.BoxId; s.IsCarton = (entity.BoxId > 0 || entity.IsUse == true) ? true : false; s.IsOldData = false;//根据序列号获取 默认是false s.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, entity.MaterialNumber); s.MaterialNumber = entity.MaterialNumber; s.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, entity.MaterialNumber); s.BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, entity.MaterialNumber); s.SerialNumber = entity.SerialNumber; s.IsUseNumber = entity.IsUseNumber; s.NumberCode = entity.NumberCode; s.IsTwo = entity.IsTwo; s.SuitNumber = entity.SuitNumber; list.Add(s); return list; //return new SerialNumbersResponse() //{ // BoxId = entity.BoxId, // IsCarton = (entity.BoxId > 0 || entity.IsUse == true) ? true : false, // IsOldData = false,//根据序列号获取 默认是false // Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, entity.MaterialNumber), // MaterialNumber = entity.MaterialNumber, // MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, entity.MaterialNumber), // BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, entity.MaterialNumber), // SerialNumber = entity.SerialNumber, // IsUseNumber = entity.IsUseNumber, // NumberCode = entity.NumberCode, // IsTwo = entity.IsTwo, // SuitNumber = entity.SuitNumber //}; } else//跟据套装去查对应的 { string suitNumber = entity.SuitNumber; var query2 = _context.SerialNumbers.AsNoTracking() //.OrderByDescending(o => o.CompleteCartonTime)//以装箱时间先后排序 .Where(f => f.SuitNumber == suitNumber); int total = await query.CountAsync(); var list = await query2.Select(s => new SerialNumbersResponse() { BoxId = s.BoxId, IsCarton = (s.BoxId > 0 || s.IsUse == true) ? true : false, IsOldData = false,//扫箱号获取 默认就是老数据 Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.MaterialNumber), MaterialNumber = s.MaterialNumber, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.MaterialNumber), SerialNumber = s.SerialNumber, IsUseNumber = s.IsUseNumber, NumberCode = s.NumberCode, IsTwo = s.IsTwo, SuitNumber = s.SuitNumber }).ToListAsync(); return list; // //var query2 = _context.SerialNumbers.AsNoTracking().Where(w => 1 == 1); // //query2 = query2.Where(f => f.SuitNumber.Equals(suitNumber) // //); // //var entity2 = await query2.FirstOrDefaultAsync(); // //if (entity2 == null) return null; // //return new SerialNumbersResponse() // //{ // // BoxId = entity2.BoxId, // // IsCarton = (entity2.BoxId > 0 || entity2.IsUse == true) ? true : false, // // IsOldData = false,//根据序列号获取 默认是false // // Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, entity2.MaterialNumber), // // MaterialNumber = entity2.MaterialNumber, // // MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, entity2.MaterialNumber), // // BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, entity2.MaterialNumber), // // SerialNumber = entity2.SerialNumber, // // IsUseNumber = entity2.IsUseNumber, // // NumberCode = entity2.NumberCode, // // IsTwo = entity2.IsTwo, // // SuitNumber = entity2.SuitNumber // //}; } } public async Task GetEntity(string serialNumber, string orgCode, LoginInDto loginInfo) { var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); var query = _context.SerialNumbers.AsNoTracking().Where(w => 1 == 1); //if (loginInfo.UserInfo.IsAdmin != true && !string.IsNullOrEmpty(orgCode)) //{ // var rec_type = orgCode.Substring(0, 1); // var rec_code = orgCode.Substring(2, orgCode.Length - 2); // if (rec_type.Equals("s"))//供应商 // query = query.Where(w => rec_code == w.SupplierCode); // else//查其他单据(组织) // query = query.Where(w => rec_code == w.OrgCode); //} query = query.Where(f => f.SerialNumber.Equals(serialNumber) || f.NumberCode.Equals(serialNumber)); var entity = await query.FirstOrDefaultAsync(); if (entity == null) return null; bool isNumber = false; if(entity.TwoNumberCode.IndexOf(serialNumber)>=0) { isNumber = true; } ////如果为单套产品,那就直接取就行了。 //if (entity.IsTwo < 2) //{ return new SerialNumbersResponse() { BoxId = entity.BoxId, IsCarton = (entity.BoxId > 0 || entity.IsUse == true) ? true : false, IsOldData = false,//根据序列号获取 默认是false Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, entity.MaterialNumber), MaterialNumber = entity.MaterialNumber, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, entity.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, entity.MaterialNumber), SerialNumber = entity.SerialNumber, IsUseNumber = entity.IsUseNumber, NumberCode = entity.NumberCode, IsTwo = entity.IsTwo, SuitNumber = entity.SuitNumber, TwoSerialNumber= (isNumber==true)? entity.TwoNumberCode.Replace(entity.NumberCode, "").Replace(",", ""): entity.TwoSerialNumber.Replace(entity.SerialNumber,"").Replace(",","") // TwoNumberCode = entity.TwoNumberCode.Replace(entity.NumberCode, "").Replace(",", "") }; //} // else//跟据套装去查对应的 // { // string suitNumber=entity.SuitNumber; // var query2 = _context.SerialNumbers.AsNoTracking() // //.OrderByDescending(o => o.CompleteCartonTime)//以装箱时间先后排序 //.Where(f => f.SuitNumber == suitNumber); // int total = await query.CountAsync(); // var list = await query2.Select(s => new SerialNumbersResponse() // { // BoxId = s.BoxId, // IsCarton = (s.BoxId > 0 || s.IsUse == true) ? true : false, // IsOldData = false,//扫箱号获取 默认就是老数据 // Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.MaterialNumber), // MaterialNumber = s.MaterialNumber, // MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.MaterialNumber), // BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.MaterialNumber), // SerialNumber = s.SerialNumber, // IsUseNumber = s.IsUseNumber, // NumberCode = s.NumberCode // }).ToListAsync(); // //var query2 = _context.SerialNumbers.AsNoTracking().Where(w => 1 == 1); // //query2 = query2.Where(f => f.SuitNumber.Equals(suitNumber) // //); // //var entity2 = await query2.FirstOrDefaultAsync(); // //if (entity2 == null) return null; // //return new SerialNumbersResponse() // //{ // // BoxId = entity2.BoxId, // // IsCarton = (entity2.BoxId > 0 || entity2.IsUse == true) ? true : false, // // IsOldData = false,//根据序列号获取 默认是false // // Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, entity2.MaterialNumber), // // MaterialNumber = entity2.MaterialNumber, // // MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, entity2.MaterialNumber), // // BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, entity2.MaterialNumber), // // SerialNumber = entity2.SerialNumber, // // IsUseNumber = entity2.IsUseNumber, // // NumberCode = entity2.NumberCode, // // IsTwo = entity2.IsTwo, // // SuitNumber = entity2.SuitNumber // //}; // } } /// /// 条码列表导出 /// /// /// /// public async Task<(object obj, int total)> GetListField(SerialNumberQueryRequest dto, LoginInDto loginInfo) { if (dto.isTwo == 2) { return await GetListAsync2(dto, loginInfo); } else { return await GetListAsync(dto, loginInfo); } } ///// ///// 两件装条码列表导出 ///// ///// ///// ///// //public async Task<(object obj, int total)> GetListField2(SerialNumberQueryRequest dto, LoginInDto loginInfo) //{ // return await GetListAsync2(dto, loginInfo); //} /// /// 根据箱Id获取序列码 /// /// /// public async Task> GetEntityListByBoxIds(List boxIds) { return await _context.SerialNumbers.AsNoTracking() .Where(f => boxIds.Contains(f.BoxId)) .ToListAsync(); } /// /// 根据套装码获取序列码 /// /// /// public async Task> GetEntityListBySuitNumber(string suitNumber) { return await _context.SerialNumbers.AsNoTracking() .Where(f => f.TwoSerialNumber.Contains(suitNumber)) .ToListAsync(); } ///// ///// 跟据特定条件得到产生的序列号列表(主要是内部使用) ///// ///// ///// //public async Task> GetEntityListBySuitNumber(string suitNumber) //{ // return await _context.SerialNumbers.AsNoTracking() // .Where(f => f.TwoSerialNumber.Contains(suitNumber)) // .ToListAsync(); //} /// /// wms系统查询序列码 支持数字序列码 /// /// /// public async Task GetEntityWms(string serialNumbers) { var entity = await _context.SerialNumbers.AsNoTracking() .FirstOrDefaultAsync(f => serialNumbers.Equals(f.SerialNumber) || serialNumbers.Equals(f.NumberCode)); return entity; //以上为以前的 //var entity = await _context.SerialNumbers.AsNoTracking() //.FirstOrDefaultAsync(f => f.TwoSerialNumber.Contains(serialNumbers) || f.TwoNumberCode.Equals(serialNumbers)); //return entity; } /// /// wms系统查询序列码 支持数字序列码 /// /// /// public async Task> GetEntityWmsBySuitNumber(string suitNumber) { return await _context.SerialNumbers.AsNoTracking() .Where(f => f.TwoSerialNumber.Contains(suitNumber) || f.TwoNumberCode.Contains(suitNumber)) .ToListAsync(); } public async Task> GetEntityListContainNumber(List serialNumbers) { return await _context.SerialNumbers.AsNoTracking() // .Where(f => serialNumbers.Contains(f.SerialNumber) || serialNumbers.Contains(f.NumberCode) || serialNumbers.Contains(f.TwoSerialNumber))//alter by yzh .Where(f => serialNumbers.Contains(f.SerialNumber) || serialNumbers.Contains(f.NumberCode)) .ToListAsync(); } public async Task GetExternal(string serialNumber) { List mNumber = new List(); var materials_result = await _erpService.BillQueryForMaterial(); List materials = new List(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); var query = _context.SerialNumbers.AsNoTracking() .GroupJoin(_context.SerialNumberGenerateRecord, serial => serial.GenerateRecordId, sg => sg.Id, (serial, sg) => new { serial, sg }) .SelectMany(x => x.sg.DefaultIfEmpty(), (p, sg) => new { p.serial, sg }) .OrderByDescending(o => o.serial.Id) .Where(f => serialNumber.Equals(f.serial.SerialNumber) || serialNumber.Equals(f.serial.NumberCode)); var res = await query.Select(s => new SerialNumbersExternalResponse() { Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.serial.MaterialNumber), MaterialNumber = s.serial.MaterialNumber, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.serial.MaterialNumber), CreateTime = s.serial.CreateTime.DateToStringSeconds(), PurchaseBillNo = s.sg.PurchaseBillNo, SerialNumber = serialNumber, Supplier = _singleDataService.GetSingleData(SingleAction.Suppliers, s.sg.CompanyId, s.serial.SupplierCode) }).FirstOrDefaultAsync(); return res; } } }