调整轨迹变更导致订单更新逻辑

This commit is contained in:
李鹏军 2024-03-19 14:35:34 +08:00
parent 6cc32ffbad
commit b17f01b157
7 changed files with 52 additions and 58 deletions

View File

@ -1,6 +1,6 @@
namespace SJZY.Track.Application.Contract.Events;
public class TrackUpsertAfterUpdateOrderEvent
public class TrackChangeAfterUpdateOrderEvent
{
/// <summary>
/// 订单Id
@ -13,10 +13,15 @@ public class TrackUpsertAfterUpdateOrderEvent
public bool IsDelete { get; set; }
/// <summary>
/// 此次发生的轨迹是否意味完成
/// 这条轨迹是否意味着完成
/// </summary>
public bool IsCompleted { get; set; }
/// <summary>
/// 轨迹代码
/// </summary>
public string TrackCode { get; set; } = null!;
/// <summary>
/// 轨迹内容
/// </summary>
@ -41,9 +46,4 @@ public class TrackUpsertAfterUpdateOrderEvent
/// 轨迹时区
/// </summary>
public float TrackTimeZone { get; set; }
/// <summary>
/// 轨迹代码
/// </summary>
public string TrackCode { get; set; } = null!;
}

View File

@ -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;
}
}
// 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
{

View File

@ -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);
});
}
// 根据订单关联关系异步向下刷

View File

@ -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,

View File

@ -48,7 +48,7 @@ public class TrackDetailsIndex : IdBaseIndex
public int TrackContentId { get; set; }
/// <summary>
/// 这条轨迹是否意味着完成(删除回退需要用到)
/// 这条轨迹是否意味着完成
/// </summary>
public bool IsCompleted { get; set; }

View File

@ -25,7 +25,7 @@ public partial class GlobalConst
/// <summary>
/// 轨迹新增/更新后触发更新订单主表
/// </summary>
public const string TrackUpsertAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder";
public const string TrackChangeAfterUpdateOrderSubscribe = "SJZY.Track.TrackUpsertAfterUpdateOrder";
/// <summary>
/// 轨迹推送后触发更新订单主表

View File

@ -165,7 +165,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
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() // 可选:立即刷新索引使更改立即可见
.WaitForCompletion()
);
if (!r.IsValid)