diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertAfterUpdateOrderEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs similarity index 91% rename from src/SJZY.Track.Application.Contract/Events/TrackUpsertAfterUpdateOrderEvent.cs rename to src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs index bf3907b4..448b5bf2 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertAfterUpdateOrderEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs @@ -1,6 +1,6 @@ namespace SJZY.Track.Application.Contract.Events; -public class TrackUpsertAfterUpdateOrderEvent +public class TrackChangeAfterUpdateOrderEvent { /// /// 订单Id @@ -13,10 +13,15 @@ public class TrackUpsertAfterUpdateOrderEvent public bool IsDelete { get; set; } /// - /// 此次发生的轨迹是否意味完成 + /// 这条轨迹是否意味着完成 /// public bool IsCompleted { get; set; } + /// + /// 轨迹代码 + /// + public string TrackCode { get; set; } = null!; + /// /// 轨迹内容 /// @@ -41,9 +46,4 @@ public class TrackUpsertAfterUpdateOrderEvent /// 轨迹时区 /// public float TrackTimeZone { get; set; } - - /// - /// 轨迹代码 - /// - public string TrackCode { get; set; } = null!; } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs similarity index 50% rename from src/SJZY.Track.Application/EventHandlers/TrackUpsertAfterUpdateOrderEventHandler.cs rename to src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs index 1ce9ae93..82dae4c9 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertAfterUpdateOrderEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs @@ -1,33 +1,39 @@ using DotNetCore.CAP; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Consts; using Volo.Abp.DependencyInjection; namespace SJZY.Track.Application.EventHandlers; -public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe +public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe { private readonly IOrderRepository _orderRepository; + private readonly ITrackDetailsRepository _trackDetailsRepository; - public TrackUpsertAfterUpdateOrderEventHandler(IOrderRepository orderRepository) + public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository, + ITrackDetailsRepository trackDetailsRepository) { _orderRepository = orderRepository; + _trackDetailsRepository = trackDetailsRepository; } - [CapSubscribe(GlobalConst.TrackUpsertAfterUpdateOrderSubscribe)] - public async Task ConsumerAsync(TrackUpsertAfterUpdateOrderEvent @event) + [CapSubscribe(GlobalConst.TrackChangeAfterUpdateOrderSubscribe)] + public async Task ConsumerAsync(TrackChangeAfterUpdateOrderEvent @event) { var order = await _orderRepository.GetFirstAsync(x => x.Id == @event.OrderId); if (order == default) return; if (@event.IsDelete) { - if (@event.TrackTime == default) + var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId); + + // 删除全部轨迹导致的重置行为 + if (track == default) { if (order.LatestTrackTime == null) return; - // 删除全部轨迹导致的重置行为 // tips:订单是支持从已完成态到未完成态的 order.ResetTrackInfo(); @@ -37,14 +43,14 @@ public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICa } // 删除引发的回退更新 - if (order.LatestTrackTime != null && - @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) == - order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0))) - { - return; - } + order.IsCompleted = track.IsCompleted; + order.LatestTrackContent = track.TrackContent; + order.LatestTrackEnContent = track.TrackEnContent; + order.LatestTrackPlace = track.TrackPlace; + order.LatestTrackTime = track.TrackTime; + order.LatestTrackTimeZone = track.TrackTimeZone; } - else // upsert引发的更新 + else { if (order.LatestTrackTime != null && @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) < @@ -52,14 +58,15 @@ public class TrackUpsertAfterUpdateOrderEventHandler : ITransientDependency, ICa { return; } - } - order.IsCompleted = @event.IsCompleted; - order.LatestTrackContent = @event.TrackContent; - order.LatestTrackEnContent = @event.TrackEnContent; - order.LatestTrackPlace = @event.TrackPlace; - order.LatestTrackTime = @event.TrackTime; - order.LatestTrackTimeZone = @event.TrackTimeZone; + // upsert引发的更新 + order.IsCompleted = @event.IsCompleted; + order.LatestTrackContent = @event.TrackContent; + order.LatestTrackEnContent = @event.TrackEnContent; + order.LatestTrackPlace = @event.TrackPlace; + order.LatestTrackTime = @event.TrackTime; + order.LatestTrackTimeZone = @event.TrackTimeZone; + } await _orderRepository.UpdateColumnAsync(order, x => new { diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index 1a1f0df0..f17fbb86 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -13,16 +13,16 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe { private readonly IOrderRepository _orderRepository; private readonly IProvideQueries _provideQueries; - private readonly ITrackDetailsRepository _trackDetailsRepository; private readonly ICapPublisher _capPublisher; + private readonly ITrackDetailsRepository _trackDetailsRepository; - public TrackDeleteEventHandler(IProvideQueries provideQueries, ITrackDetailsRepository trackDetailsRepository, - IOrderRepository orderRepository, ICapPublisher capPublisher) + public TrackDeleteEventHandler(IProvideQueries provideQueries, + IOrderRepository orderRepository, ICapPublisher capPublisher, ITrackDetailsRepository trackDetailsRepository) { _provideQueries = provideQueries; - _trackDetailsRepository = trackDetailsRepository; _orderRepository = orderRepository; _capPublisher = capPublisher; + _trackDetailsRepository = trackDetailsRepository; } [CapSubscribe(GlobalConst.TrackDeleteSubscribe)] @@ -59,28 +59,15 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe // 删除轨迹 var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes); - // 触发订单主表更新事件 if (isOk) { - var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId); - var updateOrderEvent = track == default - ? new TrackUpsertAfterUpdateOrderEvent + // 触发订单主表更新事件 + await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe, + new TrackChangeAfterUpdateOrderEvent { OrderId = @event.OrderId, IsDelete = true - } - : new TrackUpsertAfterUpdateOrderEvent - { - OrderId = @event.OrderId, - IsCompleted = track.IsCompleted, - TrackContent = track.TrackContent, - TrackEnContent = track.TrackEnContent, - TrackPlace = track.TrackPlace, - TrackTime = track.TrackTime, - TrackTimeZone = track.TrackTimeZone, - IsDelete = true - }; - await _capPublisher.PublishAsync(GlobalConst.TrackUpsertAfterUpdateOrderSubscribe, updateOrderEvent); + }); } // 根据订单关联关系异步向下刷 diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 9d375716..e1bccee4 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -70,8 +70,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe await HandleTrackPushAsync(@event, track); // step3、触发订单主表更新事件(异步) - await _capPublisher.PublishAsync(GlobalConst.TrackUpsertAfterUpdateOrderSubscribe, - new TrackUpsertAfterUpdateOrderEvent + await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe, + new TrackChangeAfterUpdateOrderEvent { OrderId = track.OrderId, IsCompleted = track.IsCompleted, diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index 43721588..5581c19d 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -48,7 +48,7 @@ public class TrackDetailsIndex : IdBaseIndex public int TrackContentId { get; set; } /// - /// 这条轨迹是否意味着完成(删除回退需要用到) + /// 这条轨迹是否意味着完成 /// public bool IsCompleted { get; set; } diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs index d9dfd74b..2685b8b0 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs @@ -25,7 +25,7 @@ public partial class GlobalConst /// /// 轨迹新增/更新后触发更新订单主表 /// - public const string TrackUpsertAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder"; + public const string TrackChangeAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder"; /// /// 轨迹推送后触发更新订单主表 diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index f50d7ebb..06288928 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -160,12 +160,12 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract DeleteTrackAsync(int orderId, List trackCodes) { var r = await Context.DeleteByQueryAsync(x => x - .Query( - q => - q.Term(t => t.OrderId, orderId) - && q.Term(t => t.IsCanDelete, true) - && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) - .Refresh() // 可选:立即刷新索引使更改立即可见 + .Query( + q => + q.Term(t => t.OrderId, orderId) + && q.Term(t => t.IsCanDelete, true) + && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) + .WaitForCompletion() ); if (!r.IsValid)