diff --git a/src/SJZY.Track.Api/appsettings.json b/src/SJZY.Track.Api/appsettings.json index 6f7fc2b9..d69cb0c1 100644 --- a/src/SJZY.Track.Api/appsettings.json +++ b/src/SJZY.Track.Api/appsettings.json @@ -5,7 +5,7 @@ "Apollo": { "AppId": "SJZY.Track.Configuration", "Env": "DEV", - "Namespace": "DEV", + "Namespace": "Test", "MetaServer": "http://apollo-service-test-apollo-configservice.apollo.svc.cluster.local:8080", "ConfigServer": [ "http://apollo-service-test-apollo-configservice.apollo.svc.cluster.local:8080" ] } diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs index 8411bf76..cbecb958 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackRefreshEventHandler.cs @@ -48,7 +48,8 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe if (@event.Data == null || config == null) return; var data = JObject.Parse(@event.Data); - var orderToken = data[config.ParamConfig.OrderPath]; + + var orderToken = data.SelectToken(config.ParamConfig.OrderPath); if (orderToken is JArray orderTokens) { foreach (var token in orderTokens) @@ -69,7 +70,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe var orderNo = orderToken[paramConfig.OrderNoName]?.Value(); if (orderNo.IsNullOrWhiteSpace()) return; - var trackToken = orderToken[paramConfig.TrackDetailsPath]; + var trackToken = orderToken.SelectToken(paramConfig.TrackDetailsPath); if (trackToken is null) return; var order = await _orderRepository.GetFirstAsync(x => @@ -115,33 +116,34 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe TrackPullContentConfigDto? matchedContentConfig = null; // 1、匹配轨迹代码 - if (paramConfig.TrackContentCodeName != null) + if (!paramConfig.TrackContentCodeName.IsNullOrWhiteSpace()) { - var trackCode = trackToken[paramConfig.TrackContentCodeName]?.Value(); + var trackCode = trackToken[paramConfig.TrackContentCodeName!]?.Value(); if (!trackCode.IsNullOrWhiteSpace()) { matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackContentCodeValue == trackCode); } } // 2、匹配轨迹状态 - else if (paramConfig.TrackStatusName != null) + else if (!paramConfig.TrackStatusName.IsNullOrWhiteSpace()) { - var trackStatus = trackToken[paramConfig.TrackStatusName]?.Value(); + var trackStatus = trackToken[paramConfig.TrackStatusName!]?.Value(); if (!trackStatus.IsNullOrWhiteSpace()) { matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackStatusValue == trackStatus); } } // 3、匹配轨迹内容 - else if (paramConfig.TrackContentName != null) + else if (!paramConfig.TrackContentName.IsNullOrWhiteSpace()) { - var trackContent = trackToken[paramConfig.TrackContentName]?.Value(); + var trackContent = trackToken[paramConfig.TrackContentName!]?.Value(); if (!trackContent.IsNullOrWhiteSpace()) { Debug.Assert(trackContent != null, nameof(trackContent) + " != null"); + // 3.1 按内容直接匹配 matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackContentValue == trackContent); - // 按关键字分析轨迹内容 + // 3.2 按关键字分析轨迹内容 if (matchedContentConfig is null) { foreach (var contentConfig in contentConfigs) @@ -191,10 +193,10 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe var trackTimeZone = paramConfig.TrackTimeZoneName == null ? null : trackToken[paramConfig.TrackTimeZoneName]?.Value(); - - //兜底时区 + + // todo:兜底时区是slow path var hasTimezoneBottomLine = false; //执行了兜底但是没有兜底住,需要记录 - if (!trackTimeZone.HasValue && matchedContentConfig?.TrackZonePlaceValue != null && matchedContentConfig.TrackZonePlaceValue.HasValue) + if (!trackTimeZone.HasValue && matchedContentConfig?.TrackZonePlaceValue is not null) { //兜底没配置的就不需要兜底,拉取的发生地没就没 var timezone= await GetTimezone(matchedContentConfig,context.OrderId); @@ -214,7 +216,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe OriginTrackData = JsonConvert.SerializeObject(trackToken), TrackPlace = trackPlace ?? GlobalConst.EmptyString, TrackTime = trackTime ?? DateTime.Now, - TrackTimeZone = trackTimeZone ?? 8 + TrackTimeZone = trackTimeZone ?? GlobalConst.NoneTrackTimeZone, }; if (paramConfig.TrackContentName != null) { diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs index 00715aa9..393d31e5 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs @@ -4,6 +4,7 @@ using SJZY.Expand.ABP.Core; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.InterfaceRelay.Application.Contracts; +using SJZY.Track.Application.CAP.EventHandlers; using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Dtos.TrackPull; using SJZY.Track.Application.Contract.Services; @@ -88,6 +89,23 @@ public class TrackPullService : ApplicationService await Task.WhenAll(tasks); return true; } + + /// + /// 轨迹刷新测试 + /// + /// + /// + /// + [HttpPost("Track/TrackRefreshEventTest")] +#if DEBUG + [AllowAnonymous] +#endif + public async Task TrackRefreshEventTest([FromServices]TrackRefreshEventHandler trackRefreshEventHandler, InterfaceRelayForwardReplayEvent input) + { + await trackRefreshEventHandler.ConsumerAsync(input); + + return true; + } private async Task RefreshForConfigAsync(TrackPullConfigDto config) { diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs index 74f4e52f..259ee8d9 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs @@ -1,5 +1,6 @@ using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; +using SJZY.Track.Domain.Consts; namespace SJZY.Track.Application.Services.ProvideServices; @@ -41,7 +42,7 @@ public partial class TrackService Content = x.TrackContent, OriginContent = x.OriginTrackContent, Location = x.TrackPlace, - Time = x.TrackTime.AddHours(input.TimeZone ?? 8 - x.TrackTimeZone), + Time = Math.Abs(x.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1 ?x.TrackTime: x.ZeroTrackTime.AddHours(input.TimeZone ?? 8), TimeZone = input.TimeZone ?? 8 }).ToList(); diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.cs index 22beb8e1..11690ae7 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.cs @@ -5,4 +5,6 @@ public partial class GlobalConst public const string SystemUser = "系统"; public const string EmptyString = "--"; public const int ChunkSize = 100; + + public const float NoneTrackTimeZone = 99999; } \ No newline at end of file