From 6ed311bc1f3ec5096bacdb311cef7b2b4bd203c9 Mon Sep 17 00:00:00 2001
From: xiaolipro <2357729423@qq.com>
Date: Sun, 15 Sep 2024 18:33:12 +0800
Subject: [PATCH] temp
---
.../Dtos/TrackPull/TrackRefreshAttach.cs | 15 +-
.../Dtos/TrackPull/TrackRefreshContext.cs | 4 +-
.../Events/TrackRefreshStruct.cs | 4 +-
.../Events/TrackUpsertEvent.cs | 5 -
.../Services/ITrackPullCacheService.cs | 7 +-
.../OrderPullStatusScanner.cs | 3 +
.../TrackButtonUpScanner.cs | 156 ++++++++++++++
.../EventHandlers/TrackUpsertEventHandler.cs | 5 +-
.../Rabbit/TrackRefreshEventHandler.cs | 192 +++---------------
.../ProvideServices/TrackPullService.cs | 14 +-
.../TrackPull/TrackPullCacheService.cs | 18 +-
.../TrackDetailsIndex.cs | 12 +-
.../ITrackPullConfigRepository.cs | 2 +-
.../Dtos/Order/OrderWithServiceProviderVO.cs | 16 +-
.../GetTrackPullConfigDetailOutputVO.cs | 2 +-
.../Queries/IProvideQueries.cs | 4 +-
.../Queries/ProvideQueries.cs | 27 +--
.../Repositories/TrackPullConfigRepository.cs | 9 +-
18 files changed, 235 insertions(+), 260 deletions(-)
create mode 100644 src/SJZY.Track.Application/BackgroundServices/TrackButtonUpScanner.cs
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();
}