From faa7b6cd7ef9e3c2aec9e69605ddd223a8e47ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=BE=99=20=E7=8E=8B?= Date: Wed, 27 Nov 2024 09:41:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=9B=B4=E6=96=B0bug=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=B8=BAbulkAp?= =?UTF-8?q?i=E7=9A=84=E6=96=B9=E5=BC=8F=E8=BF=9B=E8=A1=8C=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit update: 获取时间轴数据,更新轨迹内容为空的轨迹 --- .../EventHandlers/TrackUpsertEventHandler.cs | 9 +-- .../Services/TrackOrders/TrackOrderService.cs | 2 + .../ITrackDetailsEsRepository.cs | 2 + .../Repositories/TrackDetailsEsRepository.cs | 80 +++++++++++++++++++ 4 files changed, 86 insertions(+), 7 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 8b067c6e..c26118a3 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -298,7 +298,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track = existTracks.FirstOrDefault(); if (track == null) continue; // 不存在不让改 - } else { @@ -454,12 +453,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe if (updateTracks.Any()) { - //逐条更新 - foreach (var track in updateTracks) - { - await _trackDetailsEsRepository.UpdateAsync(track); - } - await _trackDetailsEsRepository.UpdateManyAsync(updateTracks); + //批量差异化更新轨迹 + await _trackDetailsEsRepository.BulkUpdateAsync(updateTracks); } return insertTracks; diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index 18df3b65..2d856921 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -195,6 +195,8 @@ public class TrackOrderService : ApplicationService return new UnifyResultDto>(false, "未找到指定id的子系统"); var trackDetails = await _trackDetailsEsRepository.GetListAsync(order.Id); + //时间轴不显示轨迹内容为空的轨迹,进行过滤 + trackDetails = trackDetails.Where(x => !x.TrackContent.IsNullOrWhiteSpace() && x.TrackContent != GlobalConst.EmptyString).ToList(); res.Data = new List(); foreach (var item in trackDetails) diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs index bf5e3af3..6f182653 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs @@ -18,6 +18,8 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService indexes, int maxRetries = 3); + Task BulkUpdateAsync(List indexes, int maxRetries = 3); + Task AddManyAsync(List index); Task AddAsync(TrackDetailsIndex track); diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs index 8cbd290f..69ec223a 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs @@ -265,6 +265,86 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract indexes, int maxRetries = 3) + { + if (indexes.Count == 0) return; + + //构建批量更新操作描述符 + var desc = new BulkDescriptor(GlobalConst.TrackDetailsIndex); + foreach (var track in indexes) + { + desc = desc.AddOperation(new BulkUpdateDescriptor() + .Id(track.Id) + .Index(track.IndexName) + .Script(s => s.Source(@" + ctx._source.trackPlace = params.trackPlace; + ctx._source.trackTime = params.trackTime; + ctx._source.trackTimeZone = params.trackTimeZone; + ctx._source.updateUser = params.updateUser; + ctx._source.updateTime = params.updateTime; + ctx._source.trackContent = params.trackContent; + ctx._source.trackEnContent = params.trackEnContent; + ctx._source.isVisibility = params.isVisibility; + ctx._source.remarks = params.remarks; + ctx._source.files = params.files; + ctx._source.trackPlaceCity = params.trackPlaceCity; + ctx._source.trackPlaceCityId = params.trackPlaceCityId; + ctx._source.trackPlaceProvince = params.trackPlaceProvince; + ctx._source.trackPlaceProvinceId = params.trackPlaceProvinceId; + ctx._source.trackPlaceNation = params.trackPlaceNation; + ctx._source.trackPlaceNationId = params.trackPlaceNationId; + ctx._source.trackPlacePostcode = params.trackPlacePostcode; + ctx._source.destinationTimeZone = params.destinationTimeZone; + ctx._source.estimatedDeliveryDate = params.estimatedDeliveryDate; + ").Params(p => p + .Add("trackPlace", track.TrackPlace) + .Add("trackTime", track.TrackTime) + .Add("trackTimeZone", track.TrackTimeZone) + .Add("updateUser", track.UpdateUser) + .Add("updateTime", DateTime.Now) + //S06新增字段更新 + .Add("trackContent", track.TrackContent) + .Add("trackEnContent", track.TrackEnContent) + .Add("isVisibility", track.IsVisibility) + .Add("remarks", track.Remarks) + .Add("files", track.Files) + .Add("trackPlaceCity", track.TrackPlaceCity) + .Add("trackPlaceCityId", track.TrackPlaceCityId) + .Add("trackPlaceProvince", track.TrackPlaceProvince) + .Add("trackPlaceProvinceId", track.TrackPlaceProvinceId) + .Add("trackPlaceNation", track.TrackPlaceNation) + .Add("trackPlaceNationId", track.TrackPlaceNationId) + .Add("trackPlacePostcode", track.TrackPlacePostcode) + .Add("destinationTimeZone", track.DestinationTimeZone) + .Add("estimatedDeliveryDate", track.EstimatedDeliveryDate)) + )); + } + + var retryCount = 0; + var updateSuccessful = false; + while (retryCount < maxRetries && !updateSuccessful) + { + var response = await Context.BulkAsync(desc); + if (response.IsValid) + { + updateSuccessful = true; + } + else if (response.ServerError?.Status == 409) // 409 表示版本冲突 + { + retryCount++; + if (retryCount >= maxRetries) + { + throw new InvalidOperationException( + $"轨迹更新冲突达到最大次数,track:{indexes.Count}条,原因:{response.DebugInformation}。"); + } + } + else + { + throw new InvalidOperationException($"轨迹更新失败,track:{indexes.Count}条,原因:{response.DebugInformation}。"); + } + } + } + public async Task AddManyAsync(List tracks) { // 按天写入es