From 02533696ec29e081a1d90f511a03b136cd1728c8 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Sat, 14 Sep 2024 16:57:19 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=9010.=E6=89=B9=E9=87=8F=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E8=BD=A8=E8=BF=B9=E5=92=8C=E5=88=A0=E9=99=A4=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E4=BC=98=E5=8C=96=E5=88=A4=E6=96=AD=EF=BC=9A=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E6=A0=B9=E6=8D=AEcode=EF=BC=8C=E5=91=BD=E4=B8=AD?= =?UTF-8?q?=E5=A4=9A=E6=9D=A1=EF=BC=8C=E7=9B=B4=E6=8E=A5=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=81=9A=E4=BB=BB=E4=BD=95=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E3=80=91=20https://www.tapd.cn/60863849/prong/tasks/view/11608?= =?UTF-8?q?63849001028879?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackUpsertEventHandler.cs | 24 +++++-- .../Repositories/TrackDetailsEsRepository.cs | 63 +++++++++++-------- 2 files changed, 57 insertions(+), 30 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 27c92b41..b8e6225a 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -144,11 +144,27 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe foreach (var order in @event.OrderIdentifiers) { - var track = tracks.FirstOrDefault(x => - x.OrderId == order.OrderId && x.TrackTime == @event.TrackTime && x.TrackPlace == @event.TrackPlace); + TrackDetailsIndex? track; + if (!@event.IsAdd) + { + var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray(); + if (existTracks.Length > 1) + { + // 修改轨迹时,订单存在多条轨迹不允许修改 + continue; + } - if (track == null && !@event.IsAdd) continue; // 不存在不让改 - if (track != null && @event.IsAdd) continue; // 存在不让创建 + track = existTracks.FirstOrDefault(); + + if (track == null) continue; // 不存在不让改 + } + else + { + track = tracks.FirstOrDefault(x => + x.OrderId == order.OrderId && x.TrackTime == @event.TrackTime && x.TrackPlace == @event.TrackPlace); + + if (track != null) continue; // 存在不让创建 + } if (track == default) { diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs index 63d0818e..6cf163ff 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs @@ -247,41 +247,52 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract trackCodes) { - var deleteResponse = await Context.DeleteByQueryAsync(d => d - .Index($"{GlobalConst.TrackDetailsIndex}-*") // 使用通配符匹配所有相关索引 - .Query(q => - q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds)) - && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes)) - ) - ); - - if (!deleteResponse.IsValid) - { - throw new InvalidOperationException( - $"删除轨迹失败,orderIds:[{string.Join(", ", orderIds)}],trackCodes:[{string.Join(", ", trackCodes)}],原因:{deleteResponse.DebugInformation}。"); - } - - // var search = await Context.SearchAsync(x => x - // .Source(s => s.Includes(fd => fd.Field(f => f.IndexName))) - // .Size(SafelyLimit) + // var deleteResponse = await Context.DeleteByQueryAsync(d => d + // .Index($"{GlobalConst.TrackDetailsIndex}-*") // 使用通配符匹配所有相关索引 // .Query(q => // q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds)) // && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes)) // ) // ); // - // if (!search.IsValid) + // if (!deleteResponse.IsValid) // { // throw new InvalidOperationException( - // $"轨迹查询失败,orderIds:[{orderIds.JoinAsString(", ")}],trackCodes:[{trackCodes.JoinAsString(", ")}],原因:{search.DebugInformation}。"); - // } - // - // var tracks = search.ToIdList(); - // - // foreach (var track in tracks) - // { - // await DeleteTrackByIdAsync(track.Id, track.IndexName); + // $"删除轨迹失败,orderIds:[{string.Join(", ", orderIds)}],trackCodes:[{string.Join(", ", trackCodes)}],原因:{deleteResponse.DebugInformation}。"); // } + + var search = await Context.SearchAsync(x => x + .Source(s => s.Includes(fd => fd + .Field(f => f.IndexName) + .Field(f => f.OrderId) + .Field(f => f.TrackCode) + )) + .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)) + ) + ); + + if (!search.IsValid) + { + throw new InvalidOperationException( + $"轨迹查询失败,orderIds:[{orderIds.JoinAsString(", ")}],trackCodes:[{trackCodes.JoinAsString(", ")}],原因:{search.DebugInformation}。"); + } + + var tracks = search.ToIdList().GroupBy(doc => new + { + doc.OrderId, + doc.TrackCode + }) + .Where(g => g.Count() == 1) + .Select(g => g.First()) // 只保留每组的第一个元素 + .ToList(); + + foreach (var track in tracks) + { + await DeleteTrackByIdAsync(track.Id, track.IndexName); + } } public async Task DeleteTrackByIdAsync(string id, string indexName)