diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs index 2ce8b135..f316d794 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs @@ -28,23 +28,7 @@ public partial class TrackService var res = new List(); input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空 - object[]? searchAfter = null; - List details = new(); - int limit = 1000, cnt, time = 10; - - do - { - var (currentResults, nextSearchAfter) = - await _trackDetailsRepository.GetListAsync(input.OrderType, input.OrderNos, searchAfter, limit); - cnt = currentResults.Count; - details.AddRange(currentResults); - - // 更新 searchAfter 以获取下一批数据 - searchAfter = nextSearchAfter; - time--; - } while (cnt > 0 && time > 0); - - if (details.Count == limit * time) throw new BusinessException(message: "查询轨迹量过大,请缩小查询范围"); + var details = await _trackDetailsRepository.GetListAsync(input.OrderType, input.OrderNos); foreach (var group in details.GroupBy(x => x.OrderId)) { diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs index 6eb24be8..50f2328f 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs @@ -9,8 +9,7 @@ public interface ITrackDetailsRepository : IElasticsearchClientService> GetLatestListAsync(int[] eventOrderIds, List trackCodes); - Task<(List results, object[]? nextSearchAfter)> GetListAsync(int orderType, - List orderNos, object[]? searchAfter = null, int limit = 1000); + Task> GetListAsync(int orderType, List orderNos); Task AnyAsync(int orderId, string originTrackDataHash); diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.cs index 11690ae7..1bba2863 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.cs @@ -5,6 +5,7 @@ public partial class GlobalConst public const string SystemUser = "系统"; public const string EmptyString = "--"; public const int ChunkSize = 100; + public const int SafelyLimit = 10000; public const float NoneTrackTimeZone = 99999; } \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index 15d98aa9..8bc5e4cf 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -9,6 +9,7 @@ namespace SJZY.Track.Repository.Repositories; internal class TrackDetailsRepository : ElasticSearchContextAbstract, ITrackDetailsRepository, ITransientDependency { + const int SafelyLimit = GlobalConst.SafelyLimit; public TrackDetailsRepository(ConnectionFactory connectionFactory) : base(connectionFactory) { } @@ -19,7 +20,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(s => s .Source() - .Size(1000) + .Size(SafelyLimit) .Query(q => q .Bool(b => b .Must( @@ -36,7 +37,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract f.TrackTime) .Field(f => f.TrackPlace) )) - .Size(1000) + .Size(SafelyLimit) .Query(q => q .Bool(b => b .Must( @@ -83,7 +84,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract a .Terms("orders", t => t .Field(f => f.OrderId) @@ -176,10 +177,9 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract results, object[]? nextSearchAfter)> GetListAsync(int orderType, - List orderNos, object[]? searchAfter = null, int limit = 1000) + public async Task> GetListAsync(int orderType, List orderNos) { - if (orderNos.Count < 1) return (new List(), null); + if (orderNos.Count < 1) return new List(); var r = await Context.SearchAsync(x => x .Source(s => s.Includes(fd => fd @@ -202,17 +202,13 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract mu .Term(f => f.OrderType, orderType) ) + // tips:对外不暴露服务商轨迹 .MustNot(mn => mn .Term(t => t.TrackCode.Suffix("keyword"), GlobalConst.EmptyString) ) ) ) - .Sort(s => s - .Ascending(f => f.TrackTime) // 需要根据某个字段排序 - .Ascending(f => f.OrderNo) // 可以添加更多排序字段以确保唯一性 - ) - .Size(limit) - .SearchAfter(searchAfter) + .Size(SafelyLimit) ); if (!r.IsValid) @@ -221,10 +217,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract> GetListAsync(int orderId) @@ -233,7 +226,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract q.Term(t => t.OrderId, orderId) ) - .Size(1000) + .Size(SafelyLimit) .Sort(s => s.Field(f => f.ZeroTrackTime, SortOrder.Descending))); if (!r.IsValid) @@ -248,7 +241,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(x => x .Source(s => s.Includes(fd => fd.Field(f => f.IndexName))) - .Size(orderIds.Length * trackCodes.Count * 2) + .Size(SafelyLimit) .Query(q => q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds)) && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))