This commit is contained in:
xiaolipro 2024-08-06 10:50:00 +08:00
parent 62fc0a5168
commit e21f3b8460
5 changed files with 38 additions and 15 deletions

View File

@ -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" ]
}

View File

@ -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<string>();
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<string>();
var trackCode = trackToken[paramConfig.TrackContentCodeName!]?.Value<string>();
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<string>();
var trackStatus = trackToken[paramConfig.TrackStatusName!]?.Value<string>();
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<string>();
var trackContent = trackToken[paramConfig.TrackContentName!]?.Value<string>();
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<float>();
//兜底时区
// 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)
{

View File

@ -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;
}
/// <summary>
/// 轨迹刷新测试
/// </summary>
/// <param name="trackRefreshEventHandler"></param>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Track/TrackRefreshEventTest")]
#if DEBUG
[AllowAnonymous]
#endif
public async Task<bool> TrackRefreshEventTest([FromServices]TrackRefreshEventHandler trackRefreshEventHandler, InterfaceRelayForwardReplayEvent input)
{
await trackRefreshEventHandler.ConsumerAsync(input);
return true;
}
private async Task RefreshForConfigAsync(TrackPullConfigDto config)
{

View File

@ -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();

View File

@ -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;
}