77 lines
2.8 KiB
C#
77 lines
2.8 KiB
C#
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 TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe
|
||
{
|
||
private readonly IOrderRepository _orderRepository;
|
||
private readonly ITrackDetailsRepository _trackDetailsRepository;
|
||
|
||
public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository,
|
||
ITrackDetailsRepository trackDetailsRepository)
|
||
{
|
||
_orderRepository = orderRepository;
|
||
_trackDetailsRepository = trackDetailsRepository;
|
||
}
|
||
|
||
[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)
|
||
{
|
||
var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId);
|
||
|
||
// 删除全部轨迹导致的重置行为
|
||
if (track == default)
|
||
{
|
||
if (order.LatestTrackTime == null) return;
|
||
|
||
// tips:订单是支持从已完成态到未完成态的
|
||
order.ResetTrackInfo();
|
||
|
||
await _orderRepository.UpdateAsync(order);
|
||
|
||
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
|
||
{
|
||
if (order.LatestTrackTime != null &&
|
||
@event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) <
|
||
order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)))
|
||
{
|
||
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
|
||
{
|
||
x.IsCompleted, x.LatestTrackContent, x.LatestTrackEnContent, x.LatestTrackPlace, x.LatestTrackTime,
|
||
x.LatestTrackTimeZone
|
||
});
|
||
}
|
||
} |