From a3e395a2723d71778d73186bc0d845128a120494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=96=9C=E6=97=BA?= Date: Tue, 6 Aug 2024 11:09:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=8A=BD=E8=B1=A1=E5=87=BA?= =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E5=8F=91=E7=94=9F=E5=9C=B0=E5=92=8C=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E6=97=B6=E5=8C=BA=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackRefreshEventHandler.cs | 115 ++++++++++++------ 1 file changed, 76 insertions(+), 39 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs index cbecb958..f29513a0 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, @@ -48,7 +48,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe if (@event.Data == null || config == null) return; var data = JObject.Parse(@event.Data); - + var orderToken = data.SelectToken(config.ParamConfig.OrderPath); if (orderToken is JArray orderTokens) { @@ -173,38 +173,19 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe } } - // 轨迹发生地 - 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,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); - - trackTimeZone = timezone; - hasTimezoneBottomLine = !timezone.HasValue; - } - + + // 轨迹时区 + var (trackTimeZone, hasTimezoneBottomLine) = + await GetTimezone(paramConfig, matchedContentConfig, context.OrderId, trackToken); + + // 轨迹发生地 + var (trackPlace, hasPlaceBottomLine) = + await GetTrackPlace(paramConfig, matchedContentConfig, context.OrderId, trackToken); + if (matchedContentConfig is null) { var notMappedEvent = new TrackInsertForNotMappedEvent @@ -236,7 +217,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe var timezoneTagValue = hasTimezoneBottomLine ? 1 : 0; deficiencyTagValue = placeTagValue + timezoneTagValue; } - + // 新增/更新轨迹 var trackUpsertEvent = new TrackUpsertEvent { @@ -249,7 +230,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe OrderType = context.OrderType, } }, - + TrackRefreshData = new TrackRefreshStruct { ServiceProviderName = context.ServiceProviderName, @@ -272,13 +253,70 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe await _capPublisher.PublishAsync(GlobalConst.TrackUpsertForRefreshSubscribe, trackUpsertEvent); } + /// + /// 获取轨迹时区 + /// + /// 配置信息 + /// 配置信息 + /// 订单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获取兜底位置 /// /// /// /// - private Task GetPlaceByOrder(int trackValue,int orderId) + private Task GetPlaceByOrder(int trackValue, int orderId) { Expression> resultExpression = (TrackLocationValue)trackValue switch @@ -291,7 +329,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe TrackLocationValue.LeaveCountry => x => x.LeaveCountry, _ => x => x.LeaveCountry }; - return _orderRepository.GetFirstAsync(x => x.Id == orderId, resultExpression); + return _orderRepository.GetFirstAsync(x => x.Id == orderId, resultExpression); } /// @@ -300,13 +338,12 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe /// /// /// - private async Task GetTimezone(TrackPullContentConfigDto matchedContentConfig,int orderId ) + private async Task GetTimezone(TrackPullContentConfigDto matchedContentConfig, int orderId) { - var placeOrCode = await GetPlaceByOrder(matchedContentConfig!.TrackZonePlaceValue.Value,orderId); + var placeOrCode = await GetPlaceByOrder(matchedContentConfig!.TrackZonePlaceValue.Value, orderId); string timezone = null; if (!string.IsNullOrEmpty(placeOrCode)) { - if (matchedContentConfig!.TrackZonePlaceValue.Value == (int)TrackLocationValue.ArrivalPort || matchedContentConfig!.TrackZonePlaceValue.Value == (int)TrackLocationValue.LeavePort) { From 1805cc5b76ce1e00caf7ee4ff2ce07c950bd744e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=96=9C=E6=97=BA?= Date: Tue, 6 Aug 2024 11:35:52 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20IsTriggerPull=20=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E5=88=B7=E8=BD=A8=E8=BF=B9=E8=A2=AB=E7=BD=AE=E4=B8=BAnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...TrackChangeAfterUpdateOrderEventHandler.cs | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) 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() }; } - + /// /// 获取服务商字典 ///