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(int subSystemId, List orderNos) { return await Context.Queryable() .InnerJoin((a, b) => a.Id == b.OrderId) .LeftJoin((a, b, c) => a.SubSystemId == c.Id) .WhereIF(subSystemId > 0, a => a.SubSystemId == subSystemId) .Where((a, b) => !a.IsCompleted && orderNos.Contains(a.OrderNo) && b.StartTime <= DateTime.Now && b.EndTime >= DateTime.Now) .Select((a, b, c) => new OrderWithServiceProviderVO { //优先使用第三方的订单号,为空时才使用主单号 OrderNo = b.OrderNo ?? a.OrderNo, OrderType = a.OrderType, SubSystemId = a.SubSystemId, ServiceProviderCode = b.ServiceProviderCode, SubSystemCode = c.Key }) .ToListAsync(); } public async Task> FindOrderWithServiceProviderAsync( string serviceProviderCode, int pageIndex, int pageSize = 1000) { return await Context.Queryable() .InnerJoin((a, b) => a.Id == b.OrderId) .Where((a, b) => b.ServiceProviderCode == serviceProviderCode && !a.IsCompleted && b.StartTime <= DateTime.Now && b.EndTime >= DateTime.Now) .Select((a, b) => new OrderWithServiceProviderVO { //优先使用第三方的订单号,为空时才使用主单号 OrderNo = b.OrderNo ?? a.OrderNo, OrderType = a.OrderType, SubSystemId = a.SubSystemId, ServiceProviderCode = b.ServiceProviderCode }) .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) .LeftJoin((x, y, z) => x.SubSystemId == z.Id) .Where(x => x.SubSystemId == subSystemId && x.Code == trackCode) .Select((x, y, z) => new TrackContentVO { SubSystemCode = z.Key, TrackStatusId = x.TrackStatusId, TrackStatus = y.Status, TrackStatusCode = y.Code, TrackContent = x.Content, TrackEnContent = x.EnContent, IsCompleted = y.IsCompleted, IsRepeatable = x.IsRepeatable, IsAllowManuallyUpdate = x.IsAllowManuallyUpdate, IsAllowManuallyCreate = x.IsAllowManuallyCreate, IsToMq = y.IsToMq, }) .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(); } public async Task SubSystemId2CodeAsync(int subSystemId) { return await Context.Queryable() .Where(x => x.Id == subSystemId) .Select(x => x.Key) .FirstAsync(); } /// /// db context /// public ISqlSugarClient Context { get; set; } }