From 8f032a28ed10848d91f72d108bf41ebcc87b7ed4 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Tue, 13 Aug 2024 10:12:14 +0800 Subject: [PATCH 1/3] =?UTF-8?q?change=EF=BC=9A=E6=8E=A7=E5=88=B6es=20safel?= =?UTF-8?q?y=20limit-10000?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/TrackService.Query.cs | 18 +----------- .../ITrackDetailsRepository.cs | 3 +- src/SJZY.Track.Domain/Consts/GlobalConst.cs | 1 + .../Repositories/TrackDetailsRepository.cs | 29 +++++++------------ 4 files changed, 14 insertions(+), 37 deletions(-) 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)) From d3060adbd87aa3ddf651bb5450ffcbd8e9f576b3 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Tue, 13 Aug 2024 10:17:03 +0800 Subject: [PATCH 2/3] =?UTF-8?q?opt=EF=BC=9Aremote=20service=20assign=20dto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ITrackPushConfigService.cs | 2 +- src/SJZY.Track.Application.Contract/Services/ITrackService.cs | 2 +- .../Services/ProvideServices/TrackPushConfigService.cs | 4 ++-- .../Services/ProvideServices/TrackService.Query.cs | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushConfigService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushConfigService.cs index e191f6bb..f6633539 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPushConfigService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushConfigService.cs @@ -15,6 +15,6 @@ namespace SJZY.Track.Application.Contract.Services /// /// /// - Task QueryTrackPullMappingsAsync(QueryTrackPullMappingsInput input); + Task>> QueryTrackPullMappingsAsync(QueryTrackPullMappingsInput input); } } diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackService.cs index 904f834d..a586f69d 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackService.cs @@ -31,5 +31,5 @@ public interface ITrackService : IRemoteService /// /// /// - Task QueryAsync(GetTrackInput input); + Task>> QueryAsync(GetTrackInput input); } \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs index 04a8ea53..0be9fa0d 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs @@ -33,13 +33,13 @@ namespace SJZY.Track.Application.Services.ProvideServices /// /// [HttpPost("Track/QueryTrackPullMappings")] - public async Task QueryTrackPullMappingsAsync(QueryTrackPullMappingsInput input) + public async Task>> QueryTrackPullMappingsAsync(QueryTrackPullMappingsInput input) { var vo = ObjectMapper.Map(input); var result = await _trackPushConfigRepository.QueryTrackPullMappingsAsync(vo); var output = ObjectMapper.Map, List>(result); - return new UnifyResultDto(true, output, "操作成功"); + return new UnifyResultDto>(true, output, "操作成功"); } } } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs index f316d794..f2dee9a6 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs @@ -18,7 +18,7 @@ public partial class TrackService /// /// [HttpPost("Track/Query")] - public async Task QueryAsync(GetTrackInput input) + public async Task>> QueryAsync(GetTrackInput input) { if (input.OrderNos.Count > 500) { @@ -56,7 +56,7 @@ public partial class TrackService await TrackDetailSort(res, input); - return new UnifyResultDto(true, res, "操作成功"); + return new UnifyResultDto>(true, res, "操作成功"); } private async Task TrackDetailSort(List list, GetTrackInput input) From af04e28130bb56846d666aa7d67940586974cd77 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Tue, 13 Aug 2024 10:19:42 +0800 Subject: [PATCH 3/3] =?UTF-8?q?attach=EF=BC=9Av7.0.3=20=E5=AF=B9=E5=A4=96?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=85=B7=E5=90=8DDTO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SJZY.Track.Application.Contract.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj index 82b6c428..4783c051 100644 --- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj +++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj @@ -5,7 +5,7 @@ net7.0 True - 7.0.2 + 7.0.3 True