using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackFlagAggregate; 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> GetTrackCodeMapsAsync(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 => new TrackCodeMapVO() { SubSystemId = x.SubSystemId, TrackContentCode = x.TrackContentCode, MapSubSystemId = x.MapSubSystemId, MapTrackContentCode = x.MapTrackContentCode }) .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) .LeftJoin((x, y, z, k) => x.SubSystemId == k.SubSystemId && k.Code == x.Code) .Where(x => x.SubSystemId == subSystemId && x.Code == trackCode) .Select((x, y, z, k) => new TrackContentVO { SubSystemId = x.SubSystemId, SubSystemCode = z.Key, TrackStatusId = x.TrackStatusId, TrackStatus = y.Status, TrackStatusCode = y.Code, TrackContentCode = x.Code, TrackContentId = x.Id, TrackContent = x.Content, TrackEnContent = x.EnContent, IsCompleted = y.IsCompleted, IsRepeatable = x.IsRepeatable, IsExternal = x.IsExternal, IsAllowManuallyUpdate = x.IsAllowManuallyUpdate, IsAllowManuallyCreate = x.IsAllowManuallyCreate, IsToMq = y.IsToMq || k.IsToMq, }) .FirstAsync(); } public async Task> GetTrackContentsAsync(int[] subSystemIds, string[] trackCodes) { return await Context.Queryable() .LeftJoin((x, y) => x.TrackStatusId == y.Id) .LeftJoin((x, y, z) => x.SubSystemId == z.Id) .LeftJoin((x, y, z, k) => x.SubSystemId == k.SubSystemId && k.Code == x.Code) .Where(x => subSystemIds.Contains(x.SubSystemId) && trackCodes.Contains(x.Code)) .Select((x, y, z, k) => new TrackContentVO { SubSystemId = x.SubSystemId, SubSystemCode = z.Key, TrackStatusId = x.TrackStatusId, TrackStatus = y.Status, TrackStatusCode = y.Code, TrackContentCode = x.Code, TrackContentId = x.Id, TrackContent = x.Content, TrackEnContent = x.EnContent, IsCompleted = y.IsCompleted, IsRepeatable = x.IsRepeatable, IsExternal = x.IsExternal, IsAllowManuallyUpdate = x.IsAllowManuallyUpdate, IsAllowManuallyCreate = x.IsAllowManuallyCreate, IsToMq = y.IsToMq || k.IsToMq, }) .ToListAsync(); } 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; } }