Files
BarCode-Api/src/BarCode.Web.Repositories/SerialNumbersRepositories.cs
2025-08-06 17:29:43 +08:00

1127 lines
54 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 序列码
/// </summary>
public class SerialNumbersRepositories : IAllFielRepositories<SerialNumbersExportRequest>, IAllFielRepositories<SerialNumberQueryRequest>, 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;
}
/// <summary>
/// 批量添加
/// </summary>
/// <param name="entitys"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<bool> AddRange(List<SerialNumbers> 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;
}
/// <summary>
/// 产生套装条码
/// </summary>
/// <param name="entitys"></param>
/// <param name="SuitNumber"></param>
public string GetTwoSerialNumber(List<SerialNumbers> 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;
}
/// <summary>
/// 产生第二个数字序列码
/// </summary>
/// <param name="entitys"></param>
/// <param name="SuitNumber"></param>
public string GetTwoNumberCode(List<SerialNumbers> 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;
}
/// <summary>
/// 批量修改
/// </summary>
/// <param name="entitys"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<bool> EditEntityList(List<SerialNumbers> entitys, bool isTransaction = true)
{
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _context.Database.BeginTransaction();
List<long> 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;
}
/// <summary>
/// 获取集合
/// </summary>
/// <param name="serialNumbers"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<List<SerialNumbers>> GetEntityList(List<string> serialNumbers)
{
return await _context.SerialNumbers.AsNoTracking()
.Where(f => serialNumbers.Contains(f.SerialNumber))
.ToListAsync();
}
/// <summary>
/// 根据生成记录Id查询序列号
/// </summary>
/// <param name="gRIds"></param>
/// <returns></returns>
public async Task<List<SerialNumbers>> GetEntityListByGRIds(List<int> gRIds)
{
return await _context.SerialNumbers.AsNoTracking()
.Where(f => gRIds.Contains(f.GenerateRecordId))
.ToListAsync();
}
/// <summary>
/// 根据生成记录Id查询序列号
/// </summary>
/// <param name="gRIds"></param>
/// <returns></returns>
public async Task<List<SerialNumbers>> GetUseEntityListByGRIds(List<int> gRIds)
{
return await _context.SerialNumbers.AsNoTracking()
.Where(f => gRIds.Contains(f.GenerateRecordId) && f.IsUse==true)
.ToListAsync();
}
/// <summary>
/// 根据生成记录Id查询序列号
/// </summary>
/// <param name="gRIds"></param>
/// <returns></returns>
public async Task<List<SerialNumbers>> GetEntityListByGRId(int gRId)
{
return await _context.SerialNumbers.AsNoTracking()
.Where(f => gRId == f.GenerateRecordId)
.ToListAsync();
}
/// <summary>
/// 列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<(List<SerialNumberInfoResponse> list, int total)> GetListAsync(SerialNumberQueryRequest dto, LoginInDto loginInfo)
{
int companyId = loginInfo.UserInfo.CompanyId;
List<string> mNumber = new List<string>();
var materials_result = await _erpService.BillQueryForMaterial();
List<ErpMaterialDto> materials = new List<ErpMaterialDto>();
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);
}
/// <summary>
/// 列表2
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<(List<SerialNumberInfoResponse2> list, int total)> GetListAsync2(SerialNumberQueryRequest dto, LoginInDto loginInfo)
{
int companyId = loginInfo.UserInfo.CompanyId;
List<string> mNumber = new List<string>();
var materials_result = await _erpService.BillQueryForMaterial();
List<ErpMaterialDto> materials = new List<ErpMaterialDto>();
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<SerialNumberInfoResponse2> returnList= new List<SerialNumberInfoResponse2>();
for (int i = 0; i < list.Count; i++)
{
SerialNumberInfoResponse2 list2 = new SerialNumberInfoResponse2();
if (list[i] != null)
{
if (list[i].SuitNumber == list[i].SerialNumber)
{
List<string> sn = new List<string>();
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<string> sn = new List<string>();
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<string> sn2 = new List<string>();
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);
}
/// <summary>
/// 导出列表
/// </summary>
/// <param name="dto"></param>
/// <param name="loginInfo"></param>
/// <returns></returns>
public async Task<(object obj, int total)> GetListField(SerialNumbersExportRequest dto, LoginInDto loginInfo)
{
List<string> mNumber = new List<string>();
var materials_result = await _erpService.BillQueryForMaterial();
List<ErpMaterialDto> materials = new List<ErpMaterialDto>();
if (materials_result.IsSuccess)
materials = materials_result.Data.ToList();
//供应商
var supplier_result = await _erpService.BillQueryForSupplier();
List<ErpSupplierDto> suppliers = new List<ErpSupplierDto>();
if (supplier_result.IsSuccess)
suppliers = supplier_result.Data.ToList();
//取组织
var org_result = await _erpService.BillQueryForOrg();
List<ErpOrgDto> orgs = new List<ErpOrgDto>();
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<SerialNumbersExportReponse2> returnList = new List<SerialNumbersExportReponse2>();
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<string> sn = new List<string>();
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);
}
}
/// <summary>
/// 根据箱Id来搜索序列号
/// </summary>
/// <param name="boxId"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<(List<SerialNumbersResponse> list, int total)> GetEntityListByBoxId(SerialNumberByBoxIdQueryRequest dto)
{
var materials_result = await _erpService.BillQueryForMaterial();
List<ErpMaterialDto> materials = new List<ErpMaterialDto>();
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<List<SerialNumbersResponse>?> GetEntityList(string serialNumber, string orgCode, LoginInDto loginInfo)
{
var materials_result = await _erpService.BillQueryForMaterial();
List<ErpMaterialDto> materials = new List<ErpMaterialDto>();
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<SerialNumbersResponse> list = new List<SerialNumbersResponse>();
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<SerialNumbersResponse?> GetEntity(string serialNumber, string orgCode, LoginInDto loginInfo)
{
var materials_result = await _erpService.BillQueryForMaterial();
List<ErpMaterialDto> materials = new List<ErpMaterialDto>();
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
// //};
// }
}
/// <summary>
/// 条码列表导出
/// </summary>
/// <param name="dto"></param>
/// <param name="loginInfo"></param>
/// <returns></returns>
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);
}
}
///// <summary>
///// 两件装条码列表导出
///// </summary>
///// <param name="dto"></param>
///// <param name="loginInfo"></param>
///// <returns></returns>
//public async Task<(object obj, int total)> GetListField2(SerialNumberQueryRequest dto, LoginInDto loginInfo)
//{
// return await GetListAsync2(dto, loginInfo);
//}
/// <summary>
/// 根据箱Id获取序列码
/// </summary>
/// <param name="boxIds"></param>
/// <returns></returns>
public async Task<List<SerialNumbers>> GetEntityListByBoxIds(List<int> boxIds)
{
return await _context.SerialNumbers.AsNoTracking()
.Where(f => boxIds.Contains(f.BoxId))
.ToListAsync();
}
/// <summary>
/// 根据套装码获取序列码
/// </summary>
/// <param name="boxIds"></param>
/// <returns></returns>
public async Task<List<SerialNumbers>> GetEntityListBySuitNumber(string suitNumber)
{
return await _context.SerialNumbers.AsNoTracking()
.Where(f => f.TwoSerialNumber.Contains(suitNumber))
.ToListAsync();
}
///// <summary>
///// 跟据特定条件得到产生的序列号列表(主要是内部使用)
///// </summary>
///// <param name="boxIds"></param>
///// <returns></returns>
//public async Task<List<SerialNumbers>> GetEntityListBySuitNumber(string suitNumber)
//{
// return await _context.SerialNumbers.AsNoTracking()
// .Where(f => f.TwoSerialNumber.Contains(suitNumber))
// .ToListAsync();
//}
/// <summary>
/// wms系统查询序列码 支持数字序列码
/// </summary>
/// <param name="serialNumbers"></param>
/// <returns></returns>
public async Task<SerialNumbers> 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;
}
/// <summary>
/// wms系统查询序列码 支持数字序列码
/// </summary>
/// <param name="serialNumbers"></param>
/// <returns></returns>
public async Task<List<SerialNumbers>> GetEntityWmsBySuitNumber(string suitNumber)
{
return await _context.SerialNumbers.AsNoTracking()
.Where(f => f.TwoSerialNumber.Contains(suitNumber) || f.TwoNumberCode.Contains(suitNumber))
.ToListAsync();
}
public async Task<List<SerialNumbers>> GetEntityListContainNumber(List<string> 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<SerialNumbersExternalResponse> GetExternal(string serialNumber)
{
List<string> mNumber = new List<string>();
var materials_result = await _erpService.BillQueryForMaterial();
List<ErpMaterialDto> materials = new List<ErpMaterialDto>();
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;
}
}
}