track/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
hardstylewyl 3fe2b64a76 perf:优化轨迹订单冗余第三方单号以提高性能(原:使用本地缓存)
pref:接口反参增加,查询轨迹订单增加轨迹状态最新轨迹时区
2025-02-21 11:31:15 +08:00

102 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DotNetCore.CAP;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.CAP.EventHandlers;
public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe
{
private readonly IOrderRepository _orderRepository;
public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
[CapSubscribe(GlobalConst.TrackChangeAfterUpdateOrderSubscribe)]
public async Task ConsumerAsync(TrackChangeAfterUpdateOrderEvent @event)
{
var orders = await GetOrdersAsync(@event.OrderIds);
if (orders.Count == 0)
{
LogHelper.Warn($"没有找到订单信息:{@event.OrderIds.JoinAsString(",")},无法更新轨迹信息");
return;
}
var updateOrders = new List<OrderEntity>();
foreach (var order in orders)
{
if (order.LatestTrackContent != @event.TrackContent)
{
if (order.LatestTrackTime != null &&
@event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) <
order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)))
{
continue;
}
}
// 执行轨迹兜底时 时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种
if (@event.DeficiencyTagValue is > 0 and <= 3)
{
order.DeficiencyTag = @event.DeficiencyTagValue;
}
if (!order.IsCompleted)
{
order.IsCompleted = @event.IsCompleted;
}
order.LatestTrackStatus = @event.TrackStatus;
order.LatestTrackContent = @event.TrackContent;
order.LatestTrackEnContent = @event.TrackEnContent;
order.LatestTrackPlace = @event.TrackPlace;
order.LatestTrackTime = @event.TrackTime;
order.LatestTrackTimeZone = @event.TrackTimeZone;
//当【预计签收时间】【签收地时区】同时存在时则更新主表
if (@event.EstimatedDeliveryDate.HasValue && @event.DestinationTimeZone.HasValue)
{
order.EstimatedDeliveryDate = @event.EstimatedDeliveryDate.Value;
order.DestinationTimeZone = @event.DestinationTimeZone.Value;
}
updateOrders.Add(order);
}
await _orderRepository.UpdateRangeAsync(updateOrders, x => new
{
x.IsCompleted,
x.LatestTrackContent,
x.LatestTrackEnContent,
x.LatestTrackPlace,
x.LatestTrackTime,
x.LatestTrackTimeZone,
x.DeficiencyTag,
x.EstimatedDeliveryDate,
x.DestinationTimeZone
}
);
}
private async Task<List<OrderEntity>> GetOrdersAsync(int[] orderIds)
{
return await _orderRepository.GetListAsync(order => orderIds.Contains(order.Id), order => new OrderEntity
{
Id = order.Id,
// 轨迹
IsCompleted = order.IsCompleted,
LatestTrackContent = order.LatestTrackContent,
LatestTrackEnContent = order.LatestTrackEnContent,
LatestTrackPlace = order.LatestTrackPlace,
LatestTrackTime = order.LatestTrackTime,
LatestTrackTimeZone = order.LatestTrackTimeZone,
DestinationTimeZone = order.DestinationTimeZone,
EstimatedDeliveryDate = order.EstimatedDeliveryDate,
});
}
}