Merge remote-tracking branch 'origin/S04轨迹预警' into S04轨迹预警
# Conflicts: # src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs
This commit is contained in:
commit
8bcef37b74
@ -12,13 +12,14 @@ namespace SJZY.Track.Application.CAP.EventHandlers;
|
|||||||
|
|
||||||
public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe
|
public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe
|
||||||
{
|
{
|
||||||
private readonly IOrderRepository _orderRepository;
|
|
||||||
private readonly IForewarningNotifyService _forewarningNotifyService;
|
private readonly IForewarningNotifyService _forewarningNotifyService;
|
||||||
private readonly ITrackPullCacheService _trackPullCacheService;
|
private readonly IOrderRepository _orderRepository;
|
||||||
private readonly IProvideQueries _provideQueries;
|
private readonly IProvideQueries _provideQueries;
|
||||||
|
private readonly ITrackPullCacheService _trackPullCacheService;
|
||||||
|
|
||||||
public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository,
|
public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository,
|
||||||
IForewarningNotifyService forewarningNotifyService, ITrackPullCacheService trackPullCacheService, IProvideQueries provideQueries)
|
IForewarningNotifyService forewarningNotifyService, ITrackPullCacheService trackPullCacheService,
|
||||||
|
IProvideQueries provideQueries)
|
||||||
{
|
{
|
||||||
_orderRepository = orderRepository;
|
_orderRepository = orderRepository;
|
||||||
_forewarningNotifyService = forewarningNotifyService;
|
_forewarningNotifyService = forewarningNotifyService;
|
||||||
@ -34,7 +35,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
if (orders.Count == 0) return;
|
if (orders.Count == 0) return;
|
||||||
|
|
||||||
var updateOrders = new List<OrderEntity>();
|
var updateOrders = new List<OrderEntity>();
|
||||||
var providerDic= await GetProviderDic(@event.OrderIds);
|
var providerDic = await GetProviderDic(@event.OrderIds);
|
||||||
foreach (var order in orders)
|
foreach (var order in orders)
|
||||||
{
|
{
|
||||||
if (order.LatestTrackContent != @event.TrackContent)
|
if (order.LatestTrackContent != @event.TrackContent)
|
||||||
@ -48,11 +49,11 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 执行轨迹兜底时 时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种
|
// 执行轨迹兜底时 时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种
|
||||||
if (@event.DeficiencyTagValue > 0 && @event.DeficiencyTagValue<=3)
|
if (@event.DeficiencyTagValue > 0 && @event.DeficiencyTagValue <= 3)
|
||||||
{
|
{
|
||||||
order.DeficiencyTag = @event.DeficiencyTagValue;
|
order.DeficiencyTag = @event.DeficiencyTagValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!order.IsCompleted)
|
if (!order.IsCompleted)
|
||||||
{
|
{
|
||||||
order.IsCompleted = @event.IsCompleted;
|
order.IsCompleted = @event.IsCompleted;
|
||||||
@ -60,15 +61,18 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
|
|
||||||
if (!string.IsNullOrEmpty(@event.TrackCode) && providerDic.TryGetValue(order.Id, out var provider))
|
if (!string.IsNullOrEmpty(@event.TrackCode) && providerDic.TryGetValue(order.Id, out var provider))
|
||||||
{
|
{
|
||||||
var config = await _trackPullCacheService.GetPullParamWithContentConfigAsync(provider.SubSystemId, provider.ServiceProviderId);
|
var config =
|
||||||
|
await _trackPullCacheService.GetPullParamWithContentConfigAsync(provider.SubSystemId,
|
||||||
if (!string.IsNullOrEmpty(config?.ParamConfig.TrackContentCode) && config.ParamConfig.TrackContentCode!.ToLower() == @event.TrackCode.ToLower())
|
provider.ServiceProviderId);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(config?.ParamConfig.TrackContentCode) &&
|
||||||
|
config.ParamConfig.TrackContentCode!.ToLower() == @event.TrackCode.ToLower())
|
||||||
{
|
{
|
||||||
// 触发拉取节点
|
// 触发拉取节点
|
||||||
order.IsTriggerPull = 1;
|
order.IsTriggerPull = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
order.LatestTrackContent = @event.TrackContent;
|
order.LatestTrackContent = @event.TrackContent;
|
||||||
order.LatestTrackEnContent = @event.TrackEnContent;
|
order.LatestTrackEnContent = @event.TrackEnContent;
|
||||||
order.LatestTrackPlace = @event.TrackPlace;
|
order.LatestTrackPlace = @event.TrackPlace;
|
||||||
@ -80,7 +84,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
await _orderRepository.UpdateRangeAsync(updateOrders, x => new
|
await _orderRepository.UpdateRangeAsync(updateOrders, x => new
|
||||||
{
|
{
|
||||||
x.IsCompleted, x.LatestTrackContent, x.LatestTrackEnContent, x.LatestTrackPlace, x.LatestTrackTime,
|
x.IsCompleted, x.LatestTrackContent, x.LatestTrackEnContent, x.LatestTrackPlace, x.LatestTrackTime,
|
||||||
x.LatestTrackTimeZone,x.IsTriggerPull,x.DeficiencyTag
|
x.LatestTrackTimeZone, x.IsTriggerPull, x.DeficiencyTag
|
||||||
});
|
});
|
||||||
|
|
||||||
// 预警计算
|
// 预警计算
|
||||||
@ -110,7 +114,8 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
ArrivalPostCode = order.ArrivalPostCode,
|
ArrivalPostCode = order.ArrivalPostCode,
|
||||||
IsTransit = order.IsTransit,
|
IsTransit = order.IsTransit,
|
||||||
LeavePort = order.LeavePort,
|
LeavePort = order.LeavePort,
|
||||||
ProductCode = order.ProductCode
|
ProductCode = order.ProductCode,
|
||||||
|
IsTriggerPull = order.IsTriggerPull
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +144,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
|
|||||||
}).ToList()
|
}).ToList()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取服务商字典
|
/// 获取服务商字典
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -19,11 +19,11 @@ namespace SJZY.Track.Application.CAP.EventHandlers;
|
|||||||
|
|
||||||
public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
|
public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
|
||||||
{
|
{
|
||||||
private readonly IOrderRepository _orderRepository;
|
|
||||||
private readonly ICapPublisher _capPublisher;
|
private readonly ICapPublisher _capPublisher;
|
||||||
private readonly ITrackPullCacheService _trackPullCacheService;
|
private readonly IOrderRepository _orderRepository;
|
||||||
private readonly ITrackDetailsRepository _trackDetailsRepository;
|
|
||||||
private readonly ITimezoneQueries _timezoneQueries;
|
private readonly ITimezoneQueries _timezoneQueries;
|
||||||
|
private readonly ITrackDetailsRepository _trackDetailsRepository;
|
||||||
|
private readonly ITrackPullCacheService _trackPullCacheService;
|
||||||
|
|
||||||
public TrackRefreshEventHandler(IOrderRepository orderRepository,
|
public TrackRefreshEventHandler(IOrderRepository orderRepository,
|
||||||
ICapPublisher capPublisher, ITrackPullCacheService trackPullCacheService,
|
ICapPublisher capPublisher, ITrackPullCacheService trackPullCacheService,
|
||||||
@ -176,39 +176,19 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 轨迹发生地
|
|
||||||
var trackPlace = paramConfig.TrackPlaceName == null
|
|
||||||
? null
|
|
||||||
: trackToken[paramConfig.TrackPlaceName]?.Value<string>();
|
|
||||||
var hasPlaceBottomLine = false; //执行了兜底但是没有兜底住,需要记录
|
|
||||||
if (trackPlace.IsNullOrWhiteSpace() && matchedContentConfig?.TrackPlaceValue is not null)
|
|
||||||
{
|
|
||||||
//兜底没配置的就不需要兜底,拉取的发生地没就没
|
|
||||||
trackPlace = await GetPlaceByOrder(matchedContentConfig.TrackPlaceValue.Value, context.OrderId);
|
|
||||||
hasPlaceBottomLine = string.IsNullOrWhiteSpace(trackPlace);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 轨迹发生时间
|
// 轨迹发生时间
|
||||||
var trackTime = paramConfig.TrackTimeName == null
|
var trackTime = paramConfig.TrackTimeName == null
|
||||||
? null
|
? null
|
||||||
: trackToken[paramConfig.TrackTimeName]?.Value<DateTime>();
|
: trackToken[paramConfig.TrackTimeName]?.Value<DateTime>();
|
||||||
// 轨迹发生时区
|
|
||||||
var trackTimeZone = paramConfig.TrackTimeZoneName == null
|
|
||||||
? null
|
|
||||||
: trackToken[paramConfig.TrackTimeZoneName]?.Value<float>();
|
|
||||||
|
|
||||||
// todo:兜底时区是slow path
|
// 轨迹时区
|
||||||
var hasTimezoneBottomLine = false; //执行了兜底但是没有兜底住,需要记录
|
var (trackTimeZone, hasTimezoneBottomLine) =
|
||||||
if (!trackTimeZone.HasValue && matchedContentConfig?.TrackZonePlaceValue is not null)
|
await GetTimezone(paramConfig, matchedContentConfig, context.OrderId, trackToken);
|
||||||
{
|
|
||||||
//兜底没配置的就不需要兜底,拉取的发生地没就没
|
|
||||||
var timezone = await GetTimezone(matchedContentConfig, context.OrderId);
|
|
||||||
|
|
||||||
trackTimeZone = timezone;
|
// 轨迹发生地
|
||||||
hasTimezoneBottomLine = !timezone.HasValue;
|
var (trackPlace, hasPlaceBottomLine) =
|
||||||
}
|
await GetTrackPlace(paramConfig, matchedContentConfig, context.OrderId, trackToken);
|
||||||
|
|
||||||
// 没匹配上,新增服务商轨迹
|
|
||||||
if (matchedContentConfig is null)
|
if (matchedContentConfig is null)
|
||||||
{
|
{
|
||||||
await InsertNotMappedTrackAsync(trackToken, context, trackPlace, trackTime, trackTimeZone, paramConfig);
|
await InsertNotMappedTrackAsync(trackToken, context, trackPlace, trackTime, trackTimeZone, paramConfig);
|
||||||
@ -288,6 +268,63 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
await _trackDetailsRepository.AddAsync(track);
|
await _trackDetailsRepository.AddAsync(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取轨迹时区
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="paramConfig">配置信息</param>
|
||||||
|
/// <param name="matchedContentConfig">配置信息</param>
|
||||||
|
/// <param name="orderId">订单id</param>
|
||||||
|
/// <param name="trackToken"></param>
|
||||||
|
/// <returns>时区,是否执行了兜底轨迹时区</returns>
|
||||||
|
private async Task<(float? trackTimeZone, bool hasTimezoneBottomLine)> GetTimezone(
|
||||||
|
TrackPullParamConfigDto paramConfig, TrackPullContentConfigDto? matchedContentConfig, int orderId,
|
||||||
|
JToken trackToken)
|
||||||
|
{
|
||||||
|
// 轨迹发生时区
|
||||||
|
var trackTimeZone = paramConfig.TrackTimeZoneName == null
|
||||||
|
? null
|
||||||
|
: trackToken[paramConfig.TrackTimeZoneName]?.Value<float>();
|
||||||
|
|
||||||
|
bool hasTimezoneBottomLine = false; //执行了兜底但是没有兜底住,需要记录
|
||||||
|
if (!trackTimeZone.HasValue && matchedContentConfig?.TrackZonePlaceValue is not null)
|
||||||
|
{
|
||||||
|
//兜底没配置的就不需要兜底,拉取的发生地没就没
|
||||||
|
var timezone = await GetTimezone(matchedContentConfig, orderId);
|
||||||
|
|
||||||
|
trackTimeZone = timezone;
|
||||||
|
hasTimezoneBottomLine = !timezone.HasValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (trackTimeZone, hasTimezoneBottomLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获得轨迹地址
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="paramConfig">配置信息</param>
|
||||||
|
/// <param name="matchedContentConfig">配置信息</param>
|
||||||
|
/// <param name="orderId">订单id</param>
|
||||||
|
/// <param name="trackToken"></param>
|
||||||
|
/// <returns>时区,是否执行了兜底轨迹时区</returns>
|
||||||
|
private async Task<(string? trackPlace, bool hasPlaceBottomLine)> GetTrackPlace(TrackPullParamConfigDto paramConfig,
|
||||||
|
TrackPullContentConfigDto? matchedContentConfig, int orderId, JToken trackToken)
|
||||||
|
{
|
||||||
|
// 轨迹发生地
|
||||||
|
var trackPlace = paramConfig.TrackPlaceName == null
|
||||||
|
? null
|
||||||
|
: trackToken[paramConfig.TrackPlaceName]?.Value<string>();
|
||||||
|
var hasPlaceBottomLine = false; //执行了兜底但是没有兜底住,需要记录
|
||||||
|
if (trackPlace.IsNullOrWhiteSpace() && matchedContentConfig?.TrackPlaceValue != null &&
|
||||||
|
matchedContentConfig.TrackPlaceValue.HasValue)
|
||||||
|
{
|
||||||
|
//兜底没配置的就不需要兜底,拉取的发生地没就没
|
||||||
|
trackPlace = await GetPlaceByOrder(matchedContentConfig!.TrackPlaceValue.Value, orderId);
|
||||||
|
hasPlaceBottomLine = string.IsNullOrWhiteSpace(trackPlace);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (trackPlace, hasPlaceBottomLine);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据订单id获取兜底位置
|
/// 根据订单id获取兜底位置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user