using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Dtos.Order; using SJZY.Track.Domain.Queries; using SJZY.Track.Domain.VEntities; using SJZY.Track.Repository.VData.Entitys; namespace SJZY.Track.Repository.Queries; public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries, ITransientDependency { public ISqlSugarClient Context { get; set; } public TrackOrderQueries() { Context = SqlsugarScopeBasic.GetContextSafely("default"); } /// /// 获取分页的轨迹订单 /// /// /// public async Task> GetPageTrackOrder(GetPageTrackOrderInputVO input) { List orderNoList = new List(); List questionTypeIds = new List(); int ques = 0; if (!input.OrderNos.IsNullOrWhiteSpace()) { orderNoList = input.OrderNos!.Split(new[] { ',', ',', ':', ':' }).ToList(); } if (input.TabType == 1) { questionTypeIds = new List { 1, 4 }; ques = questionTypeIds.Sum(); } else if (input.TabType == 2) { questionTypeIds = new List { 2, 4 }; ques = questionTypeIds.Sum(); } var pageList = await Context.Queryable() .LeftJoin((a, b) => a.CustomId == b.Id && b.IsDeleted == false) .LeftJoin((a, b, c) => a.SubSystemId == c.Id && c.IsDeleted == false) .WhereIF(input.SubSystemId > 0, (a, b, c) => a.SubSystemId == input.SubSystemId) .WhereIF(!orderNoList.IsNullOrEmpty(), (a, b, c) => orderNoList.Contains(a.OrderNo)) .WhereIF(input.CreateTimeStart.HasValue && input.CreateTimeEnd.HasValue, (a, b, c) => a.CreateTime >= input.CreateTimeStart && a.CreateTime <= input.CreateTimeEnd) .WhereIF(input.CreateTimeStart.HasValue && (!input.CreateTimeEnd.HasValue), (a, b, c) => a.CreateTime >= input.CreateTimeStart) .WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue, (a, b, c) => a.CreateTime <= input.CreateTimeEnd) .WhereIF(input.CustomerId > 0, (a, b, c) => a.CustomId == input.CustomerId) .WhereIF(input.TrackOrderType > 0, (a, b, c) => a.OrderType == input.TrackOrderType) .WhereIF(input.TabType > 0 && !questionTypeIds.IsNullOrEmpty(), (a, b, c) => (a.QuestionType & ques) > 0) .OrderByDescending((a, b, c) => a.CreateTime) .Select((a, b, c) => new TrackOrderVO { Id = a.Id, OrderNumber = a.OrderNo, OrderType = a.OrderType, OrderTypeName = SqlFunc.IF(a.OrderType == 1).Return("干线提单").ElseIF(a.OrderType == 2).Return("小包运单") .ElseIF(a.OrderType == 3) .Return("箱/袋单").ElseIF(a.OrderType == 4).Return("FBA订单").End(""), CustomerShortName = b.Abbreviation, CustomerCode = b.Code, CustomerId = a.CustomId, QuestionType = a.QuestionType, QuestionTypeName = SqlFunc.IF(a.QuestionType == 1).Return("异常").ElseIF(a.QuestionType == 2).Return("预警") .End(""), ProblemDescription = a.ProblemDescription, ProblemDescriptionName = SqlFunc.IF(a.ProblemDescription == 1).Return("推送异常") .ElseIF(a.ProblemDescription == 2).Return("推送预警").End(""), //TrackTemplateNames = SqlFunc.Subqueryable() // .LeftJoin((aa, bb) => aa.TrackTemplateId == bb.Id) // .Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Name, ","), //TrackTemplateIds = SqlFunc.Subqueryable() // .LeftJoin((aa, bb) => aa.TrackTemplateId == bb.Id) // .Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Id, ","), NewestTrackContent = a.LatestTrackContent, NewestTrackEnContent = a.LatestTrackEnContent, NewestTrackPlace = a.LatestTrackPlace, NewestTrackTime = a.LatestTrackTime, IsFinish = a.IsCompleted, CreateTime = a.CreateTime, SubSystem = c.CnName, SubSystemId = c.Id }) .ToPagedListAsync(input.PageIndex, input.PageSize); if (pageList.List.Any()) { //查询也需要最新的轨迹 var orderIds = pageList.List.Select(a => a.Id).ToList(); //查询轨迹模版 var trackTemplateList = await Context.Queryable() .LeftJoin((a, b) => a.TrackTemplateId == b.Id) .Where((a, b) => orderIds.Contains(a.OrderId)) .Select((a, b) => new { a.OrderId, b.Name, TemplateId = b.Id }) .ToListAsync(); pageList.List.ForEach(a => { a.TrackTemplateNames = trackTemplateList.Where(b => b.OrderId == a.Id).Select(x => x.Name) .JoinAsString(","); a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Where(b => b.TemplateId > 0) .Select(x => x.TemplateId).ToList(); }); } return pageList; } }