using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate; using SJZY.Track.Domain.Dtos.Order; using SJZY.Track.Domain.Dtos.TrackContents; using SJZY.Track.Domain.Dtos.TrackPull; using SJZY.Track.Domain.Queries; using SJZY.Track.Domain.VEntities; namespace SJZY.Track.Repository.Queries; /// /// 提供服务相关查询 /// public class ProvideQueries : ISugarRepository, IProvideQueries, ITransientDependency { /// /// ctor /// public ProvideQueries() { Context = SqlsugarScopeBasic.GetContextSafely("default"); } public async Task> MapTrackCodesAsync(int upSubSystemId, int subSystemId, params string[] trackCodes) { // 根据上游code得到下游code return await Context.Queryable() .Where(x => x.SubSystemId == subSystemId && x.MapSubSystemId == upSubSystemId && trackCodes.Contains(x.MapTrackContentCode)) .Select(x => x.TrackContentCode) .ToListAsync(); } /// public async Task> FindOrderWithServiceProviderAsync(List orderNos) { return await Context.Queryable() .InnerJoin((a, b) => a.Id == b.OrderId) .LeftJoin((a, b, c) => b.ServiceProviderCode == c.Code) .LeftJoin((a, b, c, d) => a.SubSystemId == d.Id) .Where(a => !a.IsCompleted && orderNos.Contains(a.OrderNo)) .Select((a, b, c, d) => new OrderWithServiceProviderVO { OrderNo = a.OrderNo, OrderType = a.OrderType, ServiceProviderCode = c.Code, ServiceProviderName = c.Name, SubSystemId = a.SubSystemId, SubSystemCode = d.Key }) .ToListAsync(); } /// public async Task> FindOrderWithServiceProviderAsync(int serviceProviderId, int pageIndex, int pageSize = 1000) { return await Context.Queryable() .RightJoin((a, b) => a.Id == b.OrderId) .LeftJoin((a, b, c) => b.ServiceProviderCode == c.Code) .LeftJoin((a, b, c, d) => a.SubSystemId == d.Id) .Where((a, b, c) => c.Id == serviceProviderId && !a.IsCompleted && b.StartTime <= DateTime.Now && b.EndTime >= DateTime.Now) .Select((a, b, c, d) => new OrderWithServiceProviderVO { OrderNo = a.OrderNo, OrderType = a.OrderType, ServiceProviderCode = c.Code, ServiceProviderName = c.Name, SubSystemId = a.SubSystemId, SubSystemCode = d.Key }) .Skip((pageIndex - 1) * pageSize) .Take(pageSize) .ToListAsync(); } /// public async Task GetTrackContentAsync(int subSystemId, string trackCode) { return await Context.Queryable() .LeftJoin((x, y) => x.TrackStatusId == y.Id) .Where(x => x.SubSystemId == subSystemId && x.Code == trackCode) .Select((x, y) => new TrackContentVO { TrackStatusId = x.TrackStatusId, TrackStatus = y.Status, TrackContent = x.Content, TrackEnContent = x.EnContent, IsCompleted = y.IsCompleted }) .FirstAsync(); } public async Task> GetAllPullConfigsAsync() { return await Context.Queryable() .LeftJoin((a, b) => a.ServiceProviderId == b.Id) .LeftJoin((a, b, c) => a.SubSystemId == c.Id) .Select((a, b, c) => new TrackPullConfigVo { PullInterval = a.PullInterval, ServiceProviderId = a.ServiceProviderId, ServiceProviderCode = b.Code, SubSystemCode = c.Key, SubSystemId = c.Id }) .ToListAsync(); } /// /// db context /// public ISqlSugarClient Context { get; set; } }