using AutoMapper; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using BarCode.Web.Core.Dto; using BarCode.Web.Core.Dto.Erp; using BarCode.Web.Domain.Entitys; using BarCode.Web.Domain.Infrastructure; using BarCode.Web.Domain.IService.Public; using BarCode.Web.Domain.Values.Single; using BarCode.Web.Repositories.Configuration; using BarCode.Web.Core.Dto.Login; namespace BarCode.Web.Repositories { /// /// 箱唛-仓储 /// public class BoxMarkRepositories : IBoxMarkRepositories { private readonly ILoginRepositories _loginRepositories; private readonly RepositoryDbContext _context; private readonly ISingleDataService _singleDataService; private readonly IErpService _erpService; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; private readonly IBasicsRepositories _basicsRepositories; public BoxMarkRepositories(RepositoryDbContext context, IErpService erpService, ILoginRepositories loginRepositories, ISingleDataService singleDataService, IBasicsRepositories basicsRepositories, IErpBasicDataExtendService erpBasicDataExtendService) { _context = context; _erpService = erpService; _basicsRepositories = basicsRepositories; _loginRepositories = loginRepositories; _singleDataService = singleDataService; _erpBasicDataExtendService = erpBasicDataExtendService; } /// /// 列表-分页 /// /// /// public async Task<(List list, int total)> GetPagedList(BoxMarkQueryRequest dto, LoginInDto loginInfo) { //1.获取物料集合和组织集合和供应商的集合 var materials = new List(); var materials_result = await _erpService.BillQueryForMaterial(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); List materialNumbs = new List(); //物料集合;模糊查询后的物料集合 if (!string.IsNullOrEmpty(dto.Material)) materialNumbs = materials.Where(w => w.MaterialNumber.Contains(dto.Material) || w.MaterialName.Contains(dto.Material) || w.Specifications.Contains(dto.Material)).Select(x => x.MaterialNumber).ToList(); List cr_ids = new List(); if (!string.IsNullOrEmpty(dto.Creator)) { cr_ids = await _basicsRepositories.GetUserIdsAsync(dto.Creator, loginInfo.UserInfo.CompanyId); } var query = _context.BoxMarkBillNo .GroupJoin(_context.BoxMark, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) .OrderByDescending(x => x.order.Id).ThenByDescending(x => x.detail.FirstBillNo).ThenByDescending(x => x.detail.LastBillNo) .Where(adv => 1 == 1); 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.order.SupplierCode); else//查其他单据(组织) query = query.Where(w => rec_code == w.order.OrgCode); } ////编号查询 //if (!string.IsNullOrEmpty(dto.BeginBillNo) && // !string.IsNullOrEmpty(dto.EndBillNo)) //{ // if (dto.BeginBillNo.ToString().Length >= 13 && dto.EndBillNo.ToString().Length >= 13) // { // var begYMD = Convert.ToInt32(dto.BeginBillNo.Substring(2, 6)); // var endYMD = Convert.ToInt32(dto.EndBillNo.Substring(2, 6)); // var begNo = Convert.ToInt32(dto.BeginBillNo.Substring(8)); // var endNo = Convert.ToInt32(dto.EndBillNo.Substring(8)); // query = query.Where(w => w.detail.FirstBillNo >= begYMD && w.detail.FirstBillNo <= endYMD && w.detail.LastBillNo >= begNo && w.detail.LastBillNo <= endNo); // } // else // query = query.Where(w => w.detail.BillNo == dto.BeginBillNo || w.detail.BillNo == dto.EndBillNo); //} //else if (!string.IsNullOrEmpty(dto.BeginBillNo)) // query = query.Where(w => w.detail.BillNo == dto.BeginBillNo); //else if (!string.IsNullOrEmpty(dto.EndBillNo)) // query = query.Where(w => w.detail.BillNo == dto.EndBillNo); if (!string.IsNullOrEmpty(dto.BeginBillNo) && dto.BeginBillNo.ToString().Length >= 13) { var begYMD = Convert.ToInt32(dto.BeginBillNo.Substring(2, 6)); var begNo = Convert.ToInt32(dto.BeginBillNo.Substring(8)); query = query.Where(w => w.detail.FirstBillNo >= begYMD && w.detail.LastBillNo >= begNo); } if (!string.IsNullOrEmpty(dto.EndBillNo) && dto.EndBillNo.ToString().Length >= 13) { var endYMD = Convert.ToInt32(dto.EndBillNo.Substring(2, 6)); var endNo = Convert.ToInt32(dto.EndBillNo.Substring(8)); query = query.Where(w => w.detail.FirstBillNo <= endYMD && w.detail.LastBillNo <= endNo); } //订单号查询 if (!string.IsNullOrEmpty(dto.OrderBillNos)) { var orderBNS = dto.OrderBillNos.Replace(",", ","); var orderBillNoList = orderBNS.Split(",").Where(x => !string.IsNullOrEmpty(x)).ToList(); if (orderBillNoList != null && orderBillNoList.Count != 0) { query = query.Where(w => orderBillNoList.Contains(w.order.OrderBillNo)); } } //物料ID在模糊后的物料 if (!string.IsNullOrEmpty(dto.Material)) { query = query.Where(w => materialNumbs.Contains(w.order.MaterialNumber)); } if (!string.IsNullOrEmpty(dto.Creator)) query = query.Where(w => cr_ids.Contains(w.order.CreatorId)); if (dto.CreateBeginDate != null) query = query.Where(w => w.order.CreateTime.Date >= dto.CreateBeginDate.Value); if (dto.CreateEndDate != null) query = query.Where(w => w.order.CreateTime.Date <= dto.CreateEndDate.Value); int total = await query.CountAsync(); var list = await query.Select(s => new BoxMarkQueryResponse() { Id = s.order.Id, DetailId=s.detail.Id, BillNo = s.detail.BillNo, OrderBillNo = s.order.OrderBillNo, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.order.MaterialNumber), MaterialNumber = s.order.MaterialNumber, Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.order.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.order.MaterialNumber), CratingQty = s.order.CratingQty, CratingNetWeightQty = s.order.CratingNetWeightQty, CratingGrossWeightQty = s.order.CratingGrossWeightQty, TailboxQty = s.order.TailboxQty, TailboxNetWeightQty = s.order.TailboxNetWeightQty, TailboxGrossWeightQty = s.order.TailboxGrossWeightQty, IsTail=s.detail.IsTail, Sort = s.detail.Sort, Creator = _singleDataService.GetSingleData(SingleAction.Users, loginInfo.UserInfo.CompanyId, s.order.CreatorId), CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), Remark = s.order.Remark, ProductQty=s.order.ProductQty, BeginNumber=s.detail.BeginNumber, EndNumber=s.detail.EndNumber }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); return (list, total); } /// /// 新增 /// /// /// /// public async Task Add(BoxMark entity, bool isTransaction = true) { IDbContextTransaction _transaction = null; if (isTransaction) _transaction = _context.Database.BeginTransaction(); try { await _context.BoxMark.AddAsync(entity); await _context.SaveChangesAsync(); if (_transaction != null) _transaction.Commit(); return entity; } catch (Exception ex) { if (_transaction != null) _transaction.Rollback(); return null; } } /// /// 详情-根据最新的ID /// /// /// public async Task GetBy() { var entity = await _context.BoxMark.OrderByDescending(x => x.Id).FirstOrDefaultAsync(); return entity; } /// /// 列表-详情信息列表 /// /// /// /// public async Task> GetListInfoBy(int id, int companyId) { //1.获取物料集合和组织集合和供应商的集合 var materials = new List(); var materials_result = await _erpService.BillQueryForMaterial(); if (materials_result.IsSuccess) materials = materials_result.Data.ToList(); var query = _context.BoxMarkBillNo .GroupJoin(_context.BoxMark, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) .OrderByDescending(x => x.order.Id).ThenByDescending(x => x.detail.FirstBillNo).ThenByDescending(x => x.detail.LastBillNo) .Where(adv => adv.order.Id == id); var list = await query.Select(s => new BoxMarkQueryResponse() { Id = s.order.Id, DetailId = s.detail.Id, BillNo = s.detail.BillNo, OrderBillNo = s.order.OrderBillNo, MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, s.order.MaterialNumber), MaterialNumber = s.order.MaterialNumber, Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, s.order.MaterialNumber), BarCode = _erpBasicDataExtendService.GetMaterialBarCode(materials, s.order.MaterialNumber), CratingQty = s.order.CratingQty, CratingNetWeightQty = s.order.CratingNetWeightQty, CratingGrossWeightQty = s.order.CratingGrossWeightQty, TailboxQty = s.order.TailboxQty, TailboxNetWeightQty = s.order.TailboxNetWeightQty, TailboxGrossWeightQty = s.order.TailboxGrossWeightQty, IsTail = s.detail.IsTail, Sort=s.detail.Sort, Creator = _singleDataService.GetSingleData(SingleAction.Users, companyId, s.order.CreatorId), CreateTime = s.order.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), Remark = s.order.Remark, ProductQty = s.order.ProductQty, BeginNumber = s.detail.BeginNumber, EndNumber = s.detail.EndNumber }).ToListAsync(); return list; } /// /// 详情-根据最新的ID /// /// /// public async Task GetLastBillNo() { var entity = await _context.BoxMarkBillNo.OrderByDescending(x => x.Id).FirstOrDefaultAsync(); return entity; } /// /// 批量删除 /// /// /// public async Task DeleteRange(List ids, bool isTransaction = true) { IDbContextTransaction _transaction = null; if (isTransaction) _transaction = _context.Database.BeginTransaction(); try { var list = await _context.BoxMark.Include(x=>x.BillNos).Where(f => ids.Contains(f.Id)).ToListAsync(); _context.BoxMark.RemoveRange(list); await _context.SaveChangesAsync(); if (_transaction != null) _transaction.Commit(); } catch (Exception ex) { if (_transaction != null) _transaction.Rollback(); return false; } return true; } } }