From 04ef34548128f28f0d41516eebc0a85e67e8f17b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 23 Apr 2024 12:00:53 +0800 Subject: [PATCH] =?UTF-8?q?opt=EF=BC=9A=E6=8B=86=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackDeleteEventHandler.cs | 17 ++++++-- .../EventHandlers/TrackUpsertEventHandler.cs | 29 +++++++++---- src/SJZY.Track.Domain/Consts/GlobalConst.cs | 1 + .../Repositories/TrackDetailsRepository.cs | 42 ++++++++++++++++--- 4 files changed, 71 insertions(+), 18 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index e9ed2dec..5272757f 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -49,7 +49,6 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe nextEvent.Visited.AddRange(@event.OrderIds); nextEvent.TrackCodes = @event.TrackCodes; nextEvent.SubSystemId = group.Key; - nextEvent.OrderIds = group.Select(x => x.OrderId).ToArray(); // 不同子系统需要做内容映射 if (@event.SubSystemId != nextEvent.SubSystemId) @@ -60,13 +59,25 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe if (mapCodes.Count == 0) { //throw new BusinessException(message: "订单跨子系统,未配置内容映射,请联系管理员"); - return; + continue; } nextEvent.TrackCodes = mapCodes; } - await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, nextEvent); + var identifiers = group.Select(x => x.OrderId).ToList(); + var idx = 0; + while (idx < identifiers.Count) + { + var subEvent = nextEvent.DeepCopy(); + var cnt = idx + GlobalConst.ChunkSize > identifiers.Count + ? identifiers.Count - idx + : GlobalConst.ChunkSize; + subEvent.OrderIds = identifiers.GetRange(idx, cnt).ToArray(); + idx += GlobalConst.ChunkSize; + + await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, subEvent); + } } } } diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index f7746db2..fc282668 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -53,12 +53,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe var nextEvent = @event.DeepCopy(); nextEvent.Visited.AddRange(orderIds); nextEvent.SubSystemId = group.Key; - nextEvent.OrderIdentifiers = group.Select(x => new OrderIdentifier - { - OrderId = x.OrderId, - OrderNo = x.OrderNo, - OrderType = x.OrderType - }).ToArray(); nextEvent.TrackRefreshData = new TrackRefreshStruct { ServiceProviderName = @event.TrackRefreshData.ServiceProviderName, @@ -78,13 +72,30 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe if (mapCode == default) { // 跨子系统没做映射的轨迹不处理 - return; + continue; } nextEvent.TrackCode = mapCode; } - await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, nextEvent); + var identifiers = group.Select(x => new OrderIdentifier + { + OrderId = x.OrderId, + OrderNo = x.OrderNo, + OrderType = x.OrderType + }).ToList(); + var idx = 0; + while (idx < identifiers.Count) + { + var subEvent = nextEvent.DeepCopy(); + var cnt = idx + GlobalConst.ChunkSize > identifiers.Count + ? identifiers.Count - idx + : GlobalConst.ChunkSize; + subEvent.OrderIdentifiers = identifiers.GetRange(idx, cnt).ToArray(); + idx += GlobalConst.ChunkSize; + + await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, subEvent); + } } } } @@ -94,7 +105,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray(); var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode); - TrackDetailsIndex firstTrack = null; + TrackDetailsIndex? firstTrack = null; var insertTracks = new List(); diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.cs index ec269ee2..22beb8e1 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.cs @@ -4,4 +4,5 @@ public partial class GlobalConst { public const string SystemUser = "系统"; public const string EmptyString = "--"; + public const int ChunkSize = 100; } \ 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 644beb65..fdd64ce4 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -28,6 +28,11 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(x => x + var r = await Context.SearchAsync(x => x .Source(s => s.Includes(fd => fd .Field(f => f.TrackEnContent) .Field(f => f.TrackContent) @@ -74,7 +79,12 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract AnyAsync(int orderId, DateTime trackTime) @@ -87,6 +97,11 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract 0; } @@ -100,6 +115,11 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract 0; } @@ -150,7 +170,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(); - var data = await Context.SearchAsync(x => x + var r = await Context.SearchAsync(x => x .Source(s => s.Includes(fd => fd .Field(f => f.OrderNo) .Field(f => f.TrackStatus) @@ -170,19 +190,29 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract> GetListAsync(int orderId) { - var data = await Context.SearchAsync(x => x + var r = await Context.SearchAsync(x => x .Query(q => q.Term(t => t.OrderId, orderId) ) .Size(1000) .Sort(s => s.Field(f => f.ZeroTrackTime, SortOrder.Descending))); - return data.Documents.ToList(); + if (!r.IsValid) + { + throw new Exception($"轨迹查询,原因:{r.DebugInformation}。"); + } + + return r.Documents.ToList(); } public async Task DeleteTrackAsync(int[] orderIds, List trackCodes)