using Mapster; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using wms.sqlsugar.model.fj; using WMS.BZModels; using WMS.BZModels.Dto.FJ.BillBom; using WMS.Info; using WMS.BZSqlSugar; namespace WMS.BZServices.FJ { public class BillBomInfoService { private readonly Repository _billBominfoRepository; public BillBomInfoService(Repository billBominfoRepository) { _billBominfoRepository = billBominfoRepository; } public PagedInfo GetPageList(Pagination pagination, BillBominfoQueryDto billBominfoQueryDto) { var total = 0; var codes = GetQueryable(billBominfoQueryDto).Select(o => o.Code).Distinct() .ToPageList(pagination.page, pagination.rows, ref total); var arr=new List(); if (billBominfoQueryDto != null && !string.IsNullOrWhiteSpace(billBominfoQueryDto.StrSpoolType)) { arr = billBominfoQueryDto.StrSpoolType.Split(',').ToList(); } var list = _billBominfoRepository.Context.Queryable((billBominfo, baseMatinfo, ProbaseMatinfo) => new object[] { JoinType.Left,billBominfo.MatId == baseMatinfo.Id , JoinType.Left,billBominfo.ProMatCode == ProbaseMatinfo.Code , }) .Select((billBominfo, baseMatinfo, ProbaseMatinfo) => new BillBominfoDto { Id = billBominfo.Id.ToString(), ProCode = billBominfo.ProCode, IsStop = billBominfo.IsStop, IsDelete = billBominfo.IsDelete == null ? 0 : billBominfo.IsDelete.Value, Code = billBominfo.Code, Name = billBominfo.Name, MatCode = billBominfo.MatCode, MatId = billBominfo.MatId.ToString(), ProMatCode = billBominfo.ProMatCode, ProMatName= ProbaseMatinfo.Name, HWCountQty = billBominfo.HWCountQty, Memo = billBominfo.Memo, AddWho = billBominfo.AddWho, AddTime = billBominfo.AddTime, EditWho = billBominfo.EditWho, EditTime = billBominfo.EditTime, SpoolType = baseMatinfo.SpoolType, TimeOut = ProbaseMatinfo.TimeOut }).MergeTable().Where(o => codes.Contains(o.Code)) .WhereIF(arr!=null && arr.Count>0,o=> arr.Contains(o.SpoolType)) .OrderByIF(!pagination.sidx.IsEmpty(), $"{pagination.sidx.ToSqlFilter()} {(!string.IsNullOrWhiteSpace(pagination.sord) && pagination.sord.ToLower().Contains("desc") ? "desc" : "asc")}").ToList().Adapt>(); var page = new PagedInfo { PageSize = pagination.rows, PageIndex = pagination.page, TotalNum = total, Result = list }; return page; } private ISugarQueryable GetQueryable(BillBominfoQueryDto billBominfoQueryDto) { var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(billBominfoQueryDto?.KeyWord), (billBominfo, baseMatinfo) => billBominfo.Code.Contains(billBominfoQueryDto.KeyWord) || billBominfo.Name.Contains(billBominfoQueryDto.KeyWord) || billBominfo.MatCode.Contains(billBominfoQueryDto.KeyWord)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billBominfoQueryDto?.Code), (billBominfo, baseMatinfo) => billBominfo.Code.Contains(billBominfoQueryDto.Code)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billBominfoQueryDto?.ProCode), (billBominfo, baseMatinfo) => billBominfo.ProCode.Contains(billBominfoQueryDto.ProCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billBominfoQueryDto?.Name), (billBominfo, baseMatinfo) => billBominfo.Name.Contains(billBominfoQueryDto.Name)); predicate = predicate.AndIF(billBominfoQueryDto != null && billBominfoQueryDto.IsStop.HasValue, (billBominfo, baseMatinfo) => billBominfo.IsStop == billBominfoQueryDto.IsStop); predicate = predicate.AndIF(billBominfoQueryDto != null && billBominfoQueryDto.IsDelete.HasValue, (billBominfo, baseMatinfo) => billBominfo.IsDelete == billBominfoQueryDto.IsDelete); if (billBominfoQueryDto != null && billBominfoQueryDto.SpoolType != null && billBominfoQueryDto.SpoolType.Count() > 0) { predicate = predicate.And((billBominfo, baseMatinfo) => billBominfoQueryDto.SpoolType.Contains(baseMatinfo.SpoolType.ToLower())); } if(billBominfoQueryDto != null && !string.IsNullOrWhiteSpace(billBominfoQueryDto.StrSpoolType)) { var arr = billBominfoQueryDto.StrSpoolType.Split(','); predicate = predicate.And((billBominfo, baseMatinfo) => arr.Contains(baseMatinfo.SpoolType )); } var sugarQueryable = _billBominfoRepository.Context.Queryable((billBominfo, baseMatinfo) => new object[] { JoinType.Left,billBominfo.MatId == baseMatinfo.Id }).Where(predicate.ToExpression()).MergeTable(); return sugarQueryable; } public IList GetList(BillBominfoQueryDto billBominfoQueryDto) { var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(billBominfoQueryDto?.KeyWord), (billBominfo, baseMatinfo) => billBominfo.Code.Contains(billBominfoQueryDto.KeyWord) || billBominfo.Name.Contains(billBominfoQueryDto.KeyWord) || billBominfo.MatCode.Contains(billBominfoQueryDto.KeyWord)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billBominfoQueryDto?.Code), (billBominfo, baseMatinfo) => billBominfo.Code.Contains(billBominfoQueryDto.Code)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billBominfoQueryDto?.ProCode), (billBominfo, baseMatinfo) => billBominfo.ProCode.Contains(billBominfoQueryDto.ProCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(billBominfoQueryDto?.Name), (billBominfo, baseMatinfo) => billBominfo.Name.Contains(billBominfoQueryDto.Name)); predicate = predicate.AndIF(billBominfoQueryDto != null && billBominfoQueryDto.IsStop.HasValue, (billBominfo, baseMatinfo) => billBominfo.IsStop == billBominfoQueryDto.IsStop); predicate = predicate.AndIF(billBominfoQueryDto != null && billBominfoQueryDto.IsDelete.HasValue, (billBominfo, baseMatinfo) => billBominfo.IsDelete == billBominfoQueryDto.IsDelete); if (billBominfoQueryDto != null && billBominfoQueryDto.SpoolType != null && billBominfoQueryDto.SpoolType.Count() > 0) { predicate = predicate.And((billBominfo, baseMatinfo) => billBominfoQueryDto.SpoolType.Contains(baseMatinfo.SpoolType.ToLower())); } var sugarQueryable = _billBominfoRepository.Context.Queryable((billBominfo, baseMatinfo) => new object[] { JoinType.Left,billBominfo.MatId == baseMatinfo.Id }).Where(predicate.ToExpression()) .Select((billBominfo, baseMatinfo) => new BillBominfoDto { Id = billBominfo.Id.ToString(), ProCode= billBominfo.ProCode, IsStop = billBominfo.IsStop, IsDelete = billBominfo.IsDelete == null ? 0 : billBominfo.IsDelete.Value, Code = billBominfo.Code, Name = billBominfo.Name, MatCode = billBominfo.MatCode, MatId = billBominfo.MatId.ToString(), ProMatCode = billBominfo.ProMatCode, HWCountQty = billBominfo.HWCountQty, Memo = billBominfo.Memo, AddWho = billBominfo.AddWho, AddTime = billBominfo.AddTime, EditWho = billBominfo.EditWho, EditTime = billBominfo.EditTime, SpoolType = baseMatinfo.SpoolType }).MergeTable(); var list = sugarQueryable.ToList() .Adapt>(); return list; } public IList GetBillBominfoItem(string matCode) { var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(matCode), m => m.MatCode.Contains(matCode)); var list = _billBominfoRepository.Queryable().Where(predicate.ToExpression()).ToList().Adapt>(); return list; } } }