diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshAttach.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshAttach.cs index 38d01ed5..5f6894e1 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshAttach.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshAttach.cs @@ -2,12 +2,9 @@ namespace SJZY.Track.Application.Contract.Dtos.TrackPull; public class TrackRefreshAttach { - public TrackRefreshAttach(string serviceProviderCode, string serviceProviderName, string subSystemCode, - int subSystemId, int orderType) + public TrackRefreshAttach(string serviceProviderCode, int subSystemId, int orderType) { ServiceProviderCode = serviceProviderCode; - ServiceProviderName = serviceProviderName; - SubSystemCode = subSystemCode; SubSystemId = subSystemId; OrderType = orderType; } @@ -17,21 +14,11 @@ public class TrackRefreshAttach /// public string ServiceProviderCode { get; set; } - /// - /// 服务商name - /// - public string ServiceProviderName { get; set; } - /// /// 订单类型(主数据枚举TrackOrderType) /// public int OrderType { get; set; } - /// - /// 子系统code - /// - public string SubSystemCode { get; set; } - /// /// 子系统id /// diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshContext.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshContext.cs index 83aa4b27..89e55afe 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshContext.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshContext.cs @@ -18,9 +18,9 @@ public class TrackRefreshContext public string OrderNo { get; set; } = null!; /// - /// 服务商 + /// 服务商代码 /// - public string ServiceProviderName { get; set; } = null!; + public string ServiceProviderCode { get; set; } = null!; /// /// 客户id diff --git a/src/SJZY.Track.Application.Contract/Events/TrackRefreshStruct.cs b/src/SJZY.Track.Application.Contract/Events/TrackRefreshStruct.cs index bc3ef03a..4e73f046 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackRefreshStruct.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackRefreshStruct.cs @@ -3,9 +3,9 @@ namespace SJZY.Track.Application.Contract.Events; public struct TrackRefreshStruct { /// - /// 服务商 + /// 服务商code /// - public string? ServiceProviderName { get; set; } + public string? ServiceProviderCode { get; set; } /// /// 原轨迹内容 diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index 021c5da6..1bd4b033 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -54,11 +54,6 @@ public class TrackUpsertEvent public TrackRefreshStruct TrackRefreshData { get; set; } - /// - /// 时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种 - /// - public int DeficiencyTagValue { get; set; } - public override string ToString() { return diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPullCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPullCacheService.cs index da3fb64b..308cd8ff 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPullCacheService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPullCacheService.cs @@ -4,17 +4,16 @@ namespace SJZY.Track.Application.Contract.Services; public interface ITrackPullCacheService { - string TrackPullKey(string subSystemCode, string serviceProviderCode); - string TrackPullContentKey(string subSystemCode, string serviceProviderCode); + string TrackPullKey(int subSystemId, string serviceProviderCode); /// /// 获取服务商拉取配置 /// - /// 子系统code + /// 子系统id /// 服务商code /// Task - GetPullParamsWithContentAsync(string subSystemCode, string serviceProviderCode); + GetPullParamsWithContentAsync(int subSystemId, string serviceProviderCode); /// /// 设置拉取配置缓存 diff --git a/src/SJZY.Track.Application/BackgroundServices/OrderPullStatusScanner.cs b/src/SJZY.Track.Application/BackgroundServices/OrderPullStatusScanner.cs index b28ac929..f334db45 100644 --- a/src/SJZY.Track.Application/BackgroundServices/OrderPullStatusScanner.cs +++ b/src/SJZY.Track.Application/BackgroundServices/OrderPullStatusScanner.cs @@ -4,6 +4,9 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate; namespace SJZY.Track.Application.BackgroundServices; +/// +/// 订单拉取状态扫描 +/// public class OrderPullStatusScanner : BackgroundService { private readonly IOrderRepository _orderRepository; diff --git a/src/SJZY.Track.Application/BackgroundServices/TrackButtonUpScanner.cs b/src/SJZY.Track.Application/BackgroundServices/TrackButtonUpScanner.cs new file mode 100644 index 00000000..0f26fcc8 --- /dev/null +++ b/src/SJZY.Track.Application/BackgroundServices/TrackButtonUpScanner.cs @@ -0,0 +1,156 @@ +using System.Linq.Expressions; +using Microsoft.Extensions.Hosting; +using Newtonsoft.Json.Linq; +using SJZY.Track.Application.Contract.Dtos.TrackPull; +using SJZY.Track.Application.Helpers; +using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Enums; +using SJZY.Track.Domain.Queries; + +namespace SJZY.Track.Application.BackgroundServices; + +/// +/// 轨迹兜底扫描 +/// +public class TrackButtonUpScanner : BackgroundService +{ + private readonly IOrderRepository _orderRepository; + private readonly ITimezoneQueries _timezoneQueries; + + public TrackButtonUpScanner(ITimezoneQueries timezoneQueries, IOrderRepository orderRepository) + { + _timezoneQueries = timezoneQueries; + _orderRepository = orderRepository; + } + + + protected override Task ExecuteAsync(CancellationToken stoppingToken) + { + throw new NotImplementedException(); + } + + /// + /// 获取轨迹时区 + /// + /// 配置信息 + /// 订单id + /// 时区,是否执行了兜底轨迹时区 + private async Task<(float? trackTimeZone, bool hasTimezoneBottomLine)> GetTimezone( + TrackPullContentConfigDto? matchedContentConfig, + TrackRefreshContext context) + { + float? trackTimeZone = null; + var hasTimezoneBottomLine = false; // 执行了兜底但是没有兜底住,需要记录 + if (matchedContentConfig?.TrackZonePlaceValue is not null) + { + //兜底没配置的就不需要兜底,拉取的发生地没就没 + var timezone = await GetTimezone(matchedContentConfig, context.OrderId); + + trackTimeZone = timezone; + hasTimezoneBottomLine = !timezone.HasValue; + } + + return (trackTimeZone, hasTimezoneBottomLine); + } + + /// + /// 获得轨迹地址 + /// + /// 配置信息 + /// 订单id + /// 时区,是否执行了兜底轨迹时区 + private async Task<(string? trackPlace, bool hasPlaceBottomLine)> GetTrackPlace( + TrackPullContentConfigDto? matchedContentConfig, TrackRefreshContext context) + { + string? trackPlace = null; + var hasPlaceBottomLine = false; //执行了兜底但是没有兜底住,需要记录 + if (matchedContentConfig?.TrackPlaceValue is not null) + { + //兜底没配置的就不需要兜底,拉取的发生地没就没 + trackPlace = await GetPlaceByOrder(matchedContentConfig!.TrackPlaceValue.Value, context.OrderId); + hasPlaceBottomLine = string.IsNullOrWhiteSpace(trackPlace); + } + + return (trackPlace, hasPlaceBottomLine); + } + + /// + /// 根据订单id获取兜底位置 + /// + /// + /// + /// + private Task GetPlaceByOrder(int trackValue, int orderId) + { + Expression> resultExpression = + (TrackLocationValue) trackValue switch + { + TrackLocationValue.ArrivalPort => x => x.ArrivalPort, + TrackLocationValue.ArriveCity => x => x.ArrivalCity, + TrackLocationValue.ArrivalCountry => x => x.ArrivalCountry, + TrackLocationValue.LeavePort => x => x.LeavePort, + TrackLocationValue.LeaveCity => x => x.LeaveCity, + TrackLocationValue.LeaveCountry => x => x.LeaveCountry, + _ => x => x.LeaveCountry + }; + return _orderRepository.GetFirstAsync(x => x.Id == orderId, resultExpression); + } + + /// + /// 获取时区 + /// + /// + /// + /// + private async Task GetTimezone(TrackPullContentConfigDto matchedContentConfig, int 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) + { + timezone = await _timezoneQueries.GetPortTimezone(placeOrCode); + return DateTimeHelper.ConvertTimeZoneToFloat(timezone); + } + + timezone = await _timezoneQueries.GetCityTimezone(placeOrCode); + return DateTimeHelper.ConvertTimeZoneToFloat(timezone); + } + + return null; + } + + + /// + /// 触发了兜底,但是没有兜底住,对订单进行标记 + /// 1表示时区,2表示发生地,3表示两种 + /// + /// + /// + /// + /// + /// + private int CalcDeficiencyTagValue(bool hasPlaceBottomLine, bool hasTimezoneBottomLine, JToken trackToken, + TrackRefreshContext context) + { + var deficiencyTagValue = 0; + + if (hasTimezoneBottomLine) + { + // _logger.LogWarning("订单号:{@OrderNo}, 轨迹发生时区无法解析,触发了兜底,但是没有兜底住:{@Data}", context.OrderNo, + // trackToken.ToString()); + deficiencyTagValue += 1; + } + + if (hasPlaceBottomLine) + { + // _logger.LogWarning("订单号:{@OrderNo}, 轨迹发生地无法解析,触发了兜底,但是没有兜底住:{@Data}", context.OrderNo, + // trackToken.ToString()); + deficiencyTagValue += 2; + } + + return deficiencyTagValue; + } +} diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 5f666525..20755b68 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -61,7 +61,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe nextEvent.CustomId = group.Key.CustomId; nextEvent.TrackRefreshData = new TrackRefreshStruct { - ServiceProviderName = @event.TrackRefreshData.ServiceProviderName, + ServiceProviderCode = @event.TrackRefreshData.ServiceProviderCode, OriginTrackContent = @event.TrackRefreshData.OriginTrackContent, OriginTrackDataHash = @event.TrackRefreshData.OriginTrackDataHash, }; @@ -171,7 +171,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackPlace = @event.TrackPlace, TrackTime = @event.TrackTime, TrackTimeZone = @event.TrackTimeZone, - DeficiencyTagValue = @event.DeficiencyTagValue }); // 触发轨迹推送事件(异步) @@ -241,7 +240,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackPlace = @event.TrackPlace, TrackTime = @event.TrackTime, TrackTimeZone = @event.TrackTimeZone, - ServiceProviderName = @event.TrackRefreshData.ServiceProviderName ?? GlobalConst.EmptyString, + ServiceProviderCode = @event.TrackRefreshData.ServiceProviderCode ?? GlobalConst.EmptyString, OriginTrackContent = @event.TrackRefreshData.OriginTrackContent ?? GlobalConst.EmptyString, OriginTrackDataHash = @event.TrackRefreshData.OriginTrackDataHash ?? GlobalConst.EmptyString, CreateUser = @event.OperationMan ?? GlobalConst.SystemUser, diff --git a/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs index e456bf44..1e8c2cc3 100644 --- a/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Linq.Expressions; using System.Text; using BSI.Stack.Rabbit; using BSI.Stack.Rabbit.Handler; @@ -16,8 +15,6 @@ using SJZY.Track.Application.Contract.Services; using SJZY.Track.Application.Helpers; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; -using SJZY.Track.Domain.Enums; -using SJZY.Track.Domain.Queries; using Volo.Abp.DependencyInjection; namespace SJZY.Track.Application.Rabbit; @@ -27,20 +24,18 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler private readonly ICapPublisher _capPublisher; private readonly ILogger _logger; private readonly IOrderRepository _orderRepository; - private readonly ITimezoneQueries _timezoneQueries; private readonly ITrackDetailsEsRepository _trackDetailsEsRepository; private readonly ITrackPullCacheService _trackPullCacheService; public TrackRefreshEventHandler(IOrderRepository orderRepository, ICapPublisher capPublisher, ITrackPullCacheService trackPullCacheService, - ITrackDetailsEsRepository trackDetailsEsRepository, ITimezoneQueries timezoneQueries, + ITrackDetailsEsRepository trackDetailsEsRepository, ILogger logger) { _orderRepository = orderRepository; _capPublisher = capPublisher; _trackPullCacheService = trackPullCacheService; _trackDetailsEsRepository = trackDetailsEsRepository; - _timezoneQueries = timezoneQueries; _logger = logger; } @@ -79,7 +74,7 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler return; } - var config = await _trackPullCacheService.GetPullParamsWithContentAsync(attach.SubSystemCode, + var config = await _trackPullCacheService.GetPullParamsWithContentAsync(attach.SubSystemId, attach.ServiceProviderCode); if (config == null) { @@ -114,11 +109,10 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler if (trackToken is null) return; var order = await _orderRepository.GetFirstAsync(x => - x.OrderType == attach.OrderType && x.OrderNo == orderNo, + x.SubSystemId == attach.SubSystemId && x.OrderType == attach.OrderType && x.OrderNo == orderNo, x => new { x.Id, - x.LatestPushTrackCode, x.CustomId }); if (order == default) return; @@ -128,7 +122,7 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler OrderId = order.Id, OrderType = attach.OrderType, OrderNo = orderNo!, - ServiceProviderName = attach.ServiceProviderName, + ServiceProviderCode = attach.ServiceProviderCode, CustomId = order.CustomId, SubSystemId = attach.SubSystemId }; @@ -161,6 +155,11 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler var contentConfigs = paramsWithContent.ContentConfigs; TrackPullContentConfigDto? matchedContentConfig = null; + // 轨迹内容 + var trackContent = paramConfig.TrackContentName == null + ? null + : trackToken[paramConfig.TrackContentName]?.Value(); + // 1、匹配轨迹代码 // 2、匹配轨迹状态 @@ -175,7 +174,6 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler // 3、匹配轨迹内容 else if (!paramConfig.TrackContentName.IsNullOrWhiteSpace()) { - var trackContent = trackToken[paramConfig.TrackContentName!]?.Value(); if (!trackContent.IsNullOrWhiteSpace()) { Debug.Assert(trackContent != null, nameof(trackContent) + " != null"); @@ -215,25 +213,24 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler var trackTime = paramConfig.TrackTimeName == null ? null : trackToken[paramConfig.TrackTimeName]?.Value(); - - // 轨迹时区 - var (trackTimeZone, hasTimezoneBottomLine) = - await GetTimezone(paramConfig, matchedContentConfig, context, trackToken); - + // 轨迹发生时区 + var trackTimeZone = paramConfig.TrackTimeZoneName == null + ? null + : trackToken[paramConfig.TrackTimeZoneName]?.Value(); // 轨迹发生地 - var (trackPlace, hasPlaceBottomLine) = - await GetTrackPlace(paramConfig, matchedContentConfig, context, trackToken); + var trackPlace = paramConfig.TrackPlaceName == null + ? null + : trackToken[paramConfig.TrackPlaceName]?.Value(); + if (matchedContentConfig is null) { _logger.LogDebug("订单号:{OrderNo},未匹配到轨迹内容,轨迹报文:{TrackContent}", context.OrderNo, trackToken.ToString()); - await InsertNotMappedTrackAsync(trackToken, context, trackPlace, trackTime, trackTimeZone, paramConfig); + await InsertNotMappedTrackAsync(trackToken, context, trackPlace, trackTime, trackTimeZone, trackContent); return; } - var deficiencyTagValue = CalcDeficiencyTagValue(hasPlaceBottomLine, hasTimezoneBottomLine, trackToken, context); - // 新增/更新轨迹 var trackUpsertEvent = new TrackUpsertEvent { @@ -249,57 +246,23 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler }, TrackRefreshData = new TrackRefreshStruct { - ServiceProviderName = context.ServiceProviderName, + ServiceProviderCode = context.ServiceProviderCode, OriginTrackDataHash = originTrackDataHash, - OriginTrackContent = paramConfig.TrackContentName != null - ? trackToken[paramConfig.TrackContentName]?.Value() - : GlobalConst.EmptyString + OriginTrackContent = trackContent ?? GlobalConst.EmptyString, }, SubSystemId = context.SubSystemId, TrackCode = matchedContentConfig.TrackContentCode, TrackPlace = trackPlace ?? GlobalConst.EmptyString, TrackTime = trackTime ?? DateTime.Now, TrackTimeZone = trackTimeZone ?? GlobalConst.NoneTrackTimeZone, - DeficiencyTagValue = deficiencyTagValue, IsAdd = true, }; await _capPublisher.PublishAsync(GlobalConst.TrackUpsertForRefreshSubscribe, trackUpsertEvent); } - /// - /// 触发了兜底,但是没有兜底住,对订单进行标记 - /// 1表示时区,2表示发生地,3表示两种 - /// - /// - /// - /// - /// - /// - private int CalcDeficiencyTagValue(bool hasPlaceBottomLine, bool hasTimezoneBottomLine, JToken trackToken, - TrackRefreshContext context) - { - var deficiencyTagValue = 0; - - if (hasTimezoneBottomLine) - { - _logger.LogWarning("订单号:{@OrderNo}, 轨迹发生时区无法解析,触发了兜底,但是没有兜底住:{@Data}", context.OrderNo, - trackToken.ToString()); - deficiencyTagValue += 1; - } - - if (hasPlaceBottomLine) - { - _logger.LogWarning("订单号:{@OrderNo}, 轨迹发生地无法解析,触发了兜底,但是没有兜底住:{@Data}", context.OrderNo, - trackToken.ToString()); - deficiencyTagValue += 2; - } - - return deficiencyTagValue; - } - private async Task InsertNotMappedTrackAsync(JToken trackToken, TrackRefreshContext context, string? trackPlace, - DateTime? trackTime, float? trackTimeZone, TrackPullParamConfigDto paramConfig) + DateTime? trackTime, float? trackTimeZone, string? trackContent) { // 新增服务商轨迹到es var track = new TrackDetailsIndex @@ -312,16 +275,12 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler TrackPlace = trackPlace ?? GlobalConst.EmptyString, TrackTime = trackTime ?? DateTime.Now, TrackTimeZone = trackTimeZone ?? GlobalConst.NoneTrackTimeZone, - ServiceProviderName = context.ServiceProviderName, + ServiceProviderCode = context.ServiceProviderCode, OriginTrackDataHash = StringHelper.GetHash(JsonConvert.SerializeObject(trackToken)), + OriginTrackContent = trackContent ?? GlobalConst.EmptyString, CreateUser = GlobalConst.SystemUser, CreateTime = DateTime.Now }; - if (!paramConfig.TrackContentName.IsNullOrWhiteSpace()) - { - track.OriginTrackContent = - trackToken[paramConfig.TrackContentName!]?.Value() ?? GlobalConst.EmptyString; - } track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1 ? track.TrackTime @@ -329,109 +288,4 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler await _trackDetailsEsRepository.AddAsync(track); } - - /// - /// 获取轨迹时区 - /// - /// 配置信息 - /// 配置信息 - /// 订单id - /// - /// 时区,是否执行了兜底轨迹时区 - private async Task<(float? trackTimeZone, bool hasTimezoneBottomLine)> GetTimezone( - TrackPullParamConfigDto paramConfig, TrackPullContentConfigDto? matchedContentConfig, - TrackRefreshContext context, - 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, context.OrderId); - - trackTimeZone = timezone; - hasTimezoneBottomLine = !timezone.HasValue; - } - - return (trackTimeZone, hasTimezoneBottomLine); - } - - /// - /// 获得轨迹地址 - /// - /// 配置信息 - /// 配置信息 - /// 订单id - /// - /// 时区,是否执行了兜底轨迹时区 - private async Task<(string? trackPlace, bool hasPlaceBottomLine)> GetTrackPlace(TrackPullParamConfigDto paramConfig, - TrackPullContentConfigDto? matchedContentConfig, TrackRefreshContext context, JToken trackToken) - { - // 轨迹发生地 - 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); - } - - return (trackPlace, hasPlaceBottomLine); - } - - /// - /// 根据订单id获取兜底位置 - /// - /// - /// - /// - private Task GetPlaceByOrder(int trackValue, int orderId) - { - Expression> resultExpression = - (TrackLocationValue) trackValue switch - { - TrackLocationValue.ArrivalPort => x => x.ArrivalPort, - TrackLocationValue.ArriveCity => x => x.ArrivalCity, - TrackLocationValue.ArrivalCountry => x => x.ArrivalCountry, - TrackLocationValue.LeavePort => x => x.LeavePort, - TrackLocationValue.LeaveCity => x => x.LeaveCity, - TrackLocationValue.LeaveCountry => x => x.LeaveCountry, - _ => x => x.LeaveCountry - }; - return _orderRepository.GetFirstAsync(x => x.Id == orderId, resultExpression); - } - - /// - /// 获取时区 - /// - /// - /// - /// - private async Task GetTimezone(TrackPullContentConfigDto matchedContentConfig, int 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) - { - timezone = await _timezoneQueries.GetPortTimezone(placeOrCode); - return DateTimeHelper.ConvertTimeZoneToFloat(timezone); - } - - timezone = await _timezoneQueries.GetCityTimezone(placeOrCode); - return DateTimeHelper.ConvertTimeZoneToFloat(timezone); - } - - return null; - } } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs index 5c6ef940..6ed62ad9 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs @@ -59,7 +59,7 @@ public class TrackPullService : ApplicationService, ITrackPullService foreach (var group in orders.GroupBy(x => new { - x.ServiceProviderName, + x.ServiceProviderCode, x.SubSystemId, x.SubSystemCode, x.OrderType @@ -71,7 +71,8 @@ public class TrackPullService : ApplicationService, ITrackPullService })); var serviceProviderCode = group.FirstOrDefault()!.ServiceProviderCode; - var attach = Base64Helper.SerializeObject(group.Key); + var attach = Base64Helper.SerializeObject(new TrackRefreshAttach(group.Key.ServiceProviderCode, + group.Key.SubSystemId, group.Key.OrderType)); using (Track2InterfaceRelaySubSystemContext.Use( new Track2InterfaceRelaySubSystemContext(group.Key.SubSystemCode))) @@ -130,7 +131,7 @@ public class TrackPullService : ApplicationService, ITrackPullService private async Task RefreshForConfigAsync(TrackPullConfigVo config) { - var redisKey = _trackPullCacheService.TrackPullKey(config.SubSystemCode, config.ServiceProviderCode); + var redisKey = _trackPullCacheService.TrackPullKey(config.SubSystemId, config.ServiceProviderCode); if (await RedisHelper.Client.ExistsAsync(redisKey)) { return; @@ -145,11 +146,10 @@ public class TrackPullService : ApplicationService, ITrackPullService { var page = 1; var orders = - await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderId, page); + await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderCode, page); while (orders.Any()) { var serviceProviderCode = orders.FirstOrDefault()?.ServiceProviderCode; - var serviceProviderName = orders.FirstOrDefault()?.ServiceProviderName; foreach (var group in orders.GroupBy(x => x.OrderType)) { @@ -158,7 +158,7 @@ public class TrackPullService : ApplicationService, ITrackPullService OrderNo = x.OrderNo })); var attach = Base64Helper.SerializeObject(new TrackRefreshAttach(config.ServiceProviderCode, - serviceProviderName!, config.SubSystemCode, config.SubSystemId, group.Key)); + config.SubSystemId, group.Key)); var res = await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync( InterfaceRelayConst.GetTrackInterfaceCode, serviceProviderCode, data, GlobalConst.TrackRefreshSubscribe, attach); @@ -169,7 +169,7 @@ public class TrackPullService : ApplicationService, ITrackPullService } } - orders = await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderId, + orders = await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderCode, ++page); } } diff --git a/src/SJZY.Track.Application/Services/TrackPull/TrackPullCacheService.cs b/src/SJZY.Track.Application/Services/TrackPull/TrackPullCacheService.cs index cd1373b0..d609af29 100644 --- a/src/SJZY.Track.Application/Services/TrackPull/TrackPullCacheService.cs +++ b/src/SJZY.Track.Application/Services/TrackPull/TrackPullCacheService.cs @@ -19,19 +19,16 @@ public class TrackPullCacheService : ITransientDependency, ITrackPullCacheServic _objectMapper = objectMapper; } - public string TrackPullKey(string subSystemCode, string serviceProviderCode) => - $"{GlobalConst.TrackPullKeyPrefix}:{subSystemCode}:{serviceProviderCode}"; + public string TrackPullKey(int subSystemId, string serviceProviderCode) => + $"{GlobalConst.TrackPullKeyPrefix}:{subSystemId}:{serviceProviderCode}"; - public string TrackPullContentKey(string subSystemCode, string serviceProviderCode) => - $"{GlobalConst.TrackPullContentKeyPrefix}:{subSystemCode}:{serviceProviderCode}"; - - public async Task GetPullParamsWithContentAsync(string subSystemCode, + public async Task GetPullParamsWithContentAsync(int subSystemId, string serviceProviderCode) { var data = await RedisHelper.Client.GetAsync(TrackPullContentKey( - subSystemCode, serviceProviderCode)); + subSystemId, serviceProviderCode)); - var pullId = await _trackPullConfigRepository.FindIdAsync(subSystemCode, serviceProviderCode); + var pullId = await _trackPullConfigRepository.FindIdAsync(subSystemId, serviceProviderCode); data ??= await SetPullConfigAsync(pullId); return data; @@ -54,8 +51,11 @@ public class TrackPullCacheService : ITransientDependency, ITrackPullCacheServic }; await RedisHelper.Client.SetAsync( - TrackPullContentKey(trackPullConfigDetail.SubSystemCode, trackPullConfigDetail.ServiceProviderCode), data); + TrackPullContentKey(trackPullConfigDetail.SubSystemId, trackPullConfigDetail.ServiceProviderCode), data); return data; } + + public string TrackPullContentKey(int subSystemId, string serviceProviderCode) => + $"{GlobalConst.TrackPullContentKeyPrefix}:{subSystemId}:{serviceProviderCode}"; } diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index 522daf0d..a89fb67e 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -53,14 +53,14 @@ public class TrackDetailsIndex : IdBaseIndex public string TrackEnContent { get; set; } = GlobalConst.EmptyString; /// - /// 服务商 + /// 服务商code /// - public string ServiceProviderName { get; set; } = null!; + public string ServiceProviderCode { get; set; } = GlobalConst.EmptyString; /// /// 原轨迹内容 /// - public string OriginTrackContent { get; set; } = null!; + public string? OriginTrackContent { get; set; } = GlobalConst.EmptyString; /// /// 原轨迹报文hash(刷新轨迹重复性校验使用) @@ -70,7 +70,7 @@ public class TrackDetailsIndex : IdBaseIndex /// /// 轨迹发生地 /// - public string TrackPlace { get; set; } = null!; + public string TrackPlace { get; set; } = GlobalConst.EmptyString; /// /// 轨迹发生时间 @@ -90,7 +90,7 @@ public class TrackDetailsIndex : IdBaseIndex /// /// 创建人 /// - public string? CreateUser { get; set; } + public string CreateUser { get; set; } = GlobalConst.EmptyString; /// /// 创建时间 @@ -100,7 +100,7 @@ public class TrackDetailsIndex : IdBaseIndex /// /// 修改人 /// - public string? UpdateUser { get; set; } + public string UpdateUser { get; set; } = GlobalConst.EmptyString; /// /// 修改时间 diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs index d1cc0e36..28534b3f 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs @@ -49,5 +49,5 @@ public interface ITrackPullConfigRepository : IBasicRepository UpdateContentAsync(TrackPullContentConfigEntity updateObj); Task IsContentAnyAsync(Expression> whereExpression); - Task FindIdAsync(string subSystemCode, string serviceProviderCode); + Task FindIdAsync(int subSystemId, string serviceProviderCode); } diff --git a/src/SJZY.Track.Domain/Dtos/Order/OrderWithServiceProviderVO.cs b/src/SJZY.Track.Domain/Dtos/Order/OrderWithServiceProviderVO.cs index 448805af..b3f6488a 100644 --- a/src/SJZY.Track.Domain/Dtos/Order/OrderWithServiceProviderVO.cs +++ b/src/SJZY.Track.Domain/Dtos/Order/OrderWithServiceProviderVO.cs @@ -1,5 +1,3 @@ -using SJZY.Track.Domain.Aggregates.OrderAggregate; - namespace SJZY.Track.Domain.Dtos.Order; public class OrderWithServiceProviderVO @@ -16,23 +14,13 @@ public class OrderWithServiceProviderVO /// public string ServiceProviderCode { get; set; } = null!; - /// - /// 服务商name - /// - public string ServiceProviderName { get; set; } = null!; - - /// - /// 子系统code - /// - public string SubSystemCode { get; set; } - /// /// 子系统id /// public int SubSystemId { get; set; } /// - /// 轨迹拉取状态 + /// 子系统code /// - public TrackPullStatus TrackPullStatus { get; set; } + public string SubSystemCode { get; set; } } diff --git a/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs index dbaa37b3..c83dc163 100644 --- a/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs @@ -37,7 +37,7 @@ public class GetTrackPullConfigDetailOutputVO /// /// 子系统code /// - public string SubSystemCode { get; set; } + public int SubSystemId { get; set; } /// /// 拉取轨迹时区 diff --git a/src/SJZY.Track.Domain/Queries/IProvideQueries.cs b/src/SJZY.Track.Domain/Queries/IProvideQueries.cs index b531eef9..e9ba5b27 100644 --- a/src/SJZY.Track.Domain/Queries/IProvideQueries.cs +++ b/src/SJZY.Track.Domain/Queries/IProvideQueries.cs @@ -29,11 +29,11 @@ public interface IProvideQueries /// /// 获取服务商下所有单(未完成的) /// - /// + /// 服务商代码 /// /// /// - Task> FindOrderWithServiceProviderAsync(int serviceProviderId, int pageIndex, + Task> FindOrderWithServiceProviderAsync(string serviceProviderCode, int pageIndex, int pageSize = 1000); /// diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs index 63c385b7..1d90ecf8 100644 --- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs +++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs @@ -39,41 +39,36 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, ITransientDepen { return await Context.Queryable() .InnerJoin((a, b) => a.Id == b.OrderId) - .LeftJoin((a, b, c) => b.ServiceProviderCode == c.Code) - .LeftJoin((a, b, c, d) => a.SubSystemId == d.Id) + .LeftJoin((a, b, c) => a.SubSystemId == c.Id) .WhereIF(subSystemId > 0, a => a.SubSystemId == subSystemId) .Where((a, b) => !a.IsCompleted && orderNos.Contains(a.OrderNo) && b.StartTime <= DateTime.Now && b.EndTime >= DateTime.Now) - .Select((a, b, c, d) => new OrderWithServiceProviderVO + .Select((a, b, c) => new OrderWithServiceProviderVO { OrderNo = a.OrderNo, OrderType = a.OrderType, - ServiceProviderCode = c.Code, - ServiceProviderName = c.Name, SubSystemId = a.SubSystemId, - SubSystemCode = d.Key + ServiceProviderCode = b.ServiceProviderCode, + SubSystemCode = c.Key }) .ToListAsync(); } public async Task> FindOrderWithServiceProviderAsync( - int serviceProviderId, + string serviceProviderCode, int pageIndex, int pageSize = 1000) { return await Context.Queryable() - .RightJoin((a, b) => a.Id == b.OrderId) - .LeftJoin((a, b, c) => b.ServiceProviderCode == c.Code) - .LeftJoin((a, b, c, d) => a.SubSystemId == d.Id) - .Where((a, b, c) => c.Id == serviceProviderId && !a.IsCompleted - && b.StartTime <= DateTime.Now && b.EndTime >= DateTime.Now) - .Select((a, b, c, d) => new OrderWithServiceProviderVO + .InnerJoin((a, b) => a.Id == b.OrderId) + .Where((a, b) => b.ServiceProviderCode == serviceProviderCode && !a.IsCompleted + && b.StartTime <= DateTime.Now && + b.EndTime >= DateTime.Now) + .Select((a, b) => new OrderWithServiceProviderVO { OrderNo = a.OrderNo, OrderType = a.OrderType, - ServiceProviderCode = c.Code, - ServiceProviderName = c.Name, SubSystemId = a.SubSystemId, - SubSystemCode = d.Key + ServiceProviderCode = b.ServiceProviderCode }) .Skip((pageIndex - 1) * pageSize) .Take(pageSize) diff --git a/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs index 22dc7200..ab759279 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs @@ -84,7 +84,7 @@ public class TrackPullConfigRepository : BasicRepository, { Id = trackPull.Id, SubSystem = system.CnName, - SubSystemCode = system.Key, + SubSystemId = system.Id, ServiceProvider = service.Name, ServiceProviderCode = service.Code, }, true) @@ -141,12 +141,11 @@ public class TrackPullConfigRepository : BasicRepository, return await Context.Queryable().Where(whereExpression).AnyAsync(); } - public async Task FindIdAsync(string subSystemCode, string serviceProviderCode) + public async Task FindIdAsync(int subSystemId, string serviceProviderCode) { return await AsQueryable() - .LeftJoin((trackPull, system) => trackPull.SubSystemId == system.Id) - .LeftJoin((trackPull, system, service) => trackPull.ServiceProviderId == service.Id) - .Where((trackPull, system, service) => system.Key == subSystemCode && service.Code == serviceProviderCode) + .LeftJoin((trackPull, service) => trackPull.ServiceProviderId == service.Id) + .Where((trackPull, service) => trackPull.SubSystemId == subSystemId && service.Code == serviceProviderCode) .Select(trackPull => trackPull.Id) .FirstAsync(); }