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..36bada1d 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
@@ -13,19 +13,19 @@ 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)]
+ [CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
public async Task ConsumerAsync(TrackDeleteEvent @event)
{
if (@event.Visited.Contains(@event.OrderId))
@@ -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/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
index c1ca1b19..a4336631 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
@@ -22,7 +22,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
_capPublisher = capPublisher;
}
- [CapSubscribe(GlobalConst.TrackPushSubscribe)]
+ [CapSubscribe(GlobalConst.TrackPushSubscribe, Group = GlobalConst.TrackPushSubscribe)]
public async Task ConsumerAsync(TrackPushEvent @event)
{
InterfaceRelayUnifyResultDto res = null!;
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
index 9d375716..6de64141 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
@@ -33,7 +33,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_trackPushCacheService = trackPushCacheService;
}
- [CapSubscribe(GlobalConst.TrackUpsertSubscribe)]
+ [CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
public async Task ConsumerAsync(TrackUpsertEvent @event)
{
if (@event.Visited.Contains(@event.OrderId))
@@ -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)