102 lines
3.7 KiB
C#
102 lines
3.7 KiB
C#
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,
|
||
});
|
||
}
|
||
}
|