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
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 2ce8b135..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)
{
@@ -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))
{
@@ -72,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)
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))