diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs index dd4704ca..08e079d6 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs @@ -201,9 +201,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe } else //原有逻辑,根据轨迹code和订单进行删除 { - var trackCodes = @event.TrackIdentifiers.Select(x => x.TrackCode).ToList(); - // 删除轨迹(删的是同子系统下的单,所以code是统一的) - tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, trackCodes,null); + //根据订单查询出所有的轨迹,查所有是因为主单上需要进行回退更新 + tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds); //构建标识符集合 var ids = @event.TrackIdentifiers.Select(x => $"{x.TrackCode}{x.TrackTime}").ToList(); @@ -217,8 +216,10 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe await _trackDetailsEsRepository.DeleteTrackByIdAsync(track.Id, track.IndexName); } - orderIds = tracks.Select(m => m.OrderId).Distinct().ToList(); - tracks = deleteTracks; + //从被删除轨迹寻找订单id,稍后会更新订单主表 + orderIds = deleteTracks.Select(m => m.OrderId).Distinct().ToList(); + //排除掉已经删除的轨迹 + tracks = tracks.Except(deleteTracks).ToList(); } @@ -236,7 +237,9 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe foreach (var order in orders) { - var track = tracks.FirstOrDefault(x => x.OrderId == order.Id); + //找到最新的轨迹数据 + var track = tracks?.OrderByDescending(x=>x.TrackTime) + .FirstOrDefault(x => x.OrderId == order.Id); // 删除全部轨迹导致的重置行为 if (track == default) @@ -264,7 +267,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe OrderId = order.Id, OrderNo = order.OrderNo, OptionType = OrderOperationType.删除轨迹.ToString(), - Content = tracks?.Where(m => m.OrderId == order.Id)?.ToList().ToJson(), + Content = tracks?.Where(m => m.OrderId == order.Id).ToList().ToJson(), CreateUserId = @event.OperationManId, CreateUserName = @event.OperationMan ?? "", CreateTime = DateTime.Now diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs index c57b797b..bf5e3af3 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs @@ -24,7 +24,7 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService> GetListAsync(int orderId); - Task> GetListAsync(int[] orderIds, List trackCodes, TrackSourceEnum? source); + Task> GetListAsync(int[] orderIds, List? trackCodes = null, TrackSourceEnum? source = null); Task> DeleteTrackAsync(int[] orderIds, List trackCodes); diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs index 346d8c57..e4dbd518 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs @@ -357,7 +357,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract> GetListAsync(int[] orderIds, List trackCodes, TrackSourceEnum? source) + public async Task> GetListAsync(int[] orderIds, List? trackCodes = null, TrackSourceEnum? source = null) { var query = new QueryContainer(); @@ -365,10 +365,12 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract.Terms(t => t.Field(f => f.OrderId).Terms(orderIds)); } - if (trackCodes.Count > 0) + + if (trackCodes != null && trackCodes.Count > 0) { query &= Query.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes)); } + if (source.HasValue) { query &= Query.Term(t => t.Field(f => f.Source).Value(source.Value));