diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs index 85d0ef57..1cbff4a3 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs @@ -12,13 +12,14 @@ namespace SJZY.Track.Application.CAP.EventHandlers; public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe { - private readonly IOrderRepository _orderRepository; private readonly IForewarningNotifyService _forewarningNotifyService; - private readonly ITrackPullCacheService _trackPullCacheService; + private readonly IOrderRepository _orderRepository; private readonly IProvideQueries _provideQueries; - + private readonly ITrackPullCacheService _trackPullCacheService; + public TrackChangeAfterUpdateOrderEventHandler(IOrderRepository orderRepository, - IForewarningNotifyService forewarningNotifyService, ITrackPullCacheService trackPullCacheService, IProvideQueries provideQueries) + IForewarningNotifyService forewarningNotifyService, ITrackPullCacheService trackPullCacheService, + IProvideQueries provideQueries) { _orderRepository = orderRepository; _forewarningNotifyService = forewarningNotifyService; @@ -34,7 +35,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa if (orders.Count == 0) return; var updateOrders = new List(); - var providerDic= await GetProviderDic(@event.OrderIds); + var providerDic = await GetProviderDic(@event.OrderIds); foreach (var order in orders) { if (order.LatestTrackContent != @event.TrackContent) @@ -48,11 +49,11 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa } // 执行轨迹兜底时 时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种 - if (@event.DeficiencyTagValue > 0 && @event.DeficiencyTagValue<=3) + if (@event.DeficiencyTagValue > 0 && @event.DeficiencyTagValue <= 3) { order.DeficiencyTag = @event.DeficiencyTagValue; } - + if (!order.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)) { - var config = await _trackPullCacheService.GetPullParamWithContentConfigAsync(provider.SubSystemId, provider.ServiceProviderId); - - if (!string.IsNullOrEmpty(config?.ParamConfig.TrackContentCode) && config.ParamConfig.TrackContentCode!.ToLower() == @event.TrackCode.ToLower()) + var config = + await _trackPullCacheService.GetPullParamWithContentConfigAsync(provider.SubSystemId, + provider.ServiceProviderId); + + if (!string.IsNullOrEmpty(config?.ParamConfig.TrackContentCode) && + config.ParamConfig.TrackContentCode!.ToLower() == @event.TrackCode.ToLower()) { // 触发拉取节点 order.IsTriggerPull = 1; } } - + order.LatestTrackContent = @event.TrackContent; order.LatestTrackEnContent = @event.TrackEnContent; order.LatestTrackPlace = @event.TrackPlace; @@ -80,7 +84,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa await _orderRepository.UpdateRangeAsync(updateOrders, x => new { 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, IsTransit = order.IsTransit, LeavePort = order.LeavePort, - ProductCode = order.ProductCode + ProductCode = order.ProductCode, + IsTriggerPull = order.IsTriggerPull }); } @@ -139,7 +144,7 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa }).ToList() }; } - + /// /// 获取服务商字典 /// diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs index 19dc5ac0..abc24922 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs @@ -19,11 +19,11 @@ namespace SJZY.Track.Application.CAP.EventHandlers; public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe { - private readonly IOrderRepository _orderRepository; private readonly ICapPublisher _capPublisher; - private readonly ITrackPullCacheService _trackPullCacheService; - private readonly ITrackDetailsRepository _trackDetailsRepository; + private readonly IOrderRepository _orderRepository; private readonly ITimezoneQueries _timezoneQueries; + private readonly ITrackDetailsRepository _trackDetailsRepository; + private readonly ITrackPullCacheService _trackPullCacheService; public TrackRefreshEventHandler(IOrderRepository orderRepository, ICapPublisher capPublisher, ITrackPullCacheService trackPullCacheService, @@ -176,39 +176,19 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe } } - // 轨迹发生地 - var trackPlace = paramConfig.TrackPlaceName == null - ? null - : trackToken[paramConfig.TrackPlaceName]?.Value(); - 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 ? null : trackToken[paramConfig.TrackTimeName]?.Value(); - // 轨迹发生时区 - var trackTimeZone = paramConfig.TrackTimeZoneName == null - ? null - : trackToken[paramConfig.TrackTimeZoneName]?.Value(); - // todo:兜底时区是slow path - var hasTimezoneBottomLine = false; //执行了兜底但是没有兜底住,需要记录 - if (!trackTimeZone.HasValue && matchedContentConfig?.TrackZonePlaceValue is not null) - { - //兜底没配置的就不需要兜底,拉取的发生地没就没 - var timezone = await GetTimezone(matchedContentConfig, context.OrderId); + // 轨迹时区 + var (trackTimeZone, hasTimezoneBottomLine) = + await GetTimezone(paramConfig, matchedContentConfig, context.OrderId, trackToken); - trackTimeZone = timezone; - hasTimezoneBottomLine = !timezone.HasValue; - } + // 轨迹发生地 + var (trackPlace, hasPlaceBottomLine) = + await GetTrackPlace(paramConfig, matchedContentConfig, context.OrderId, trackToken); - // 没匹配上,新增服务商轨迹 if (matchedContentConfig is null) { await InsertNotMappedTrackAsync(trackToken, context, trackPlace, trackTime, trackTimeZone, paramConfig); @@ -288,6 +268,63 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe await _trackDetailsRepository.AddAsync(track); } + /// + /// 获取轨迹时区 + /// + /// 配置信息 + /// 配置信息 + /// 订单id + /// + /// 时区,是否执行了兜底轨迹时区 + 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(); + + 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); + } + + /// + /// 获得轨迹地址 + /// + /// 配置信息 + /// 配置信息 + /// 订单id + /// + /// 时区,是否执行了兜底轨迹时区 + 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(); + 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); + } + /// /// 根据订单id获取兜底位置 ///