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;
}
}
}