Merge remote-tracking branch 'origin/S03-轨迹中台优化项' into test

This commit is contained in:
dingenwen 2024-04-25 18:21:40 +08:00
commit 23a900de07
2 changed files with 38 additions and 12 deletions

View File

@ -8,7 +8,6 @@ public interface ITrackDetailsRepository
Task<List<TrackDetailsIndex>> GetLatestListAsync(int[] eventOrderIds, List<string> trackCodes);
Task<bool> AnyAsync(int orderId, DateTime trackTime);
Task<bool> AnyAsync(int orderId, string originTrackData);

View File

@ -1,4 +1,3 @@
using Elasticsearch.Net;
using Nest;
using SJZY.Expand.ElasticSearch.Services;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
@ -235,20 +234,48 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
public async Task DeleteTrackAsync(int[] orderIds, List<string> trackCodes)
{
var r = await Context.DeleteByQueryAsync<TrackDetailsIndex>(x => x
.Conflicts(Conflicts.Abort)
.Query(
q =>
q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds))
&& q.Term(t => t.IsCanDelete, true)
&& q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes)))
.WaitForCompletion()
var search = await Context.SearchAsync<TrackDetailsIndex>(s => s
.Source(fd => fd.Includes(f => f.Field("indexName")))
.Size(1000)
.Query(q => q
.Bool(b => b
.Must(
mu => mu.Terms(t => t.Field(f => f.OrderId).Terms(orderIds)),
mu => mu.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))
)
)
)
.Scroll("1m") // 设置滚动时间
);
while (search.IsValid && search.Documents.Any())
{
// 处理滚动查询结果
var tracks = search.ToIdList();
foreach (var track in tracks)
{
var r = await Context.DeleteAsync<TrackDetailsIndex>(track.Id, u => u
.Index(track.IndexName)
);
if (!r.IsValid)
throw new Exception($"轨迹数据删除失败,原因:{r.ServerError.Error}");
}
var scrollId = search.ScrollId; // 更新滚动ID
// 滚动查询
search = await Context.ScrollAsync<TrackDetailsIndex>("1m", scrollId);
}
if (!search.IsValid)
{
throw new Exception($"轨迹查询异常,原因:{search.DebugInformation}。");
}
}
public async Task<(List<TrackDetailsIndex> list, long total)> GetListAsync(TrackDetailsQueryInput input)
{
if (input.OrderNos.Count < 1) return default;