diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullContentConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullContentConfigDto.cs
index fd0fae59..cab541f3 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullContentConfigDto.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullContentConfigDto.cs
@@ -38,7 +38,7 @@ public class TrackPullContentConfigDto
public int? TrackPlaceValue { get; set; }
///
- /// 轨迹时区GMT
+ /// 轨迹时区GMT值
///
- public float? TrackTimeZone { get; set; }
+ public float? TrackTimeZoneValue { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs
index 37c18332..39de6d21 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs
@@ -37,6 +37,11 @@ public class TrackPullParamConfigDto
///
public string TrackTimeName { get; set; } = null!;
+ ///
+ /// 轨迹发生时间参数名
+ ///
+ public string TrackTimeZoneName { get; set; } = null!;
+
///
/// 订单数组路径
///
diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshAttach.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshAttach.cs
new file mode 100644
index 00000000..ae47f35a
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackRefreshAttach.cs
@@ -0,0 +1,32 @@
+namespace SJZY.Track.Application.Contract.Dtos.TrackPull;
+
+public class TrackRefreshAttach
+{
+ public TrackRefreshAttach(int serviceProviderId, string serviceProviderCode, int subSystemId, int orderType)
+ {
+ ServiceProviderId = serviceProviderId;
+ ServiceProviderCode = serviceProviderCode;
+ SubSystemId = subSystemId;
+ OrderType = orderType;
+ }
+
+ ///
+ /// 服务商id
+ ///
+ public int ServiceProviderId { get; set; }
+
+ ///
+ /// 服务商code
+ ///
+ public string ServiceProviderCode { get; set; }
+
+ ///
+ /// 订单类型(主数据枚举TrackOrderType)
+ ///
+ public int OrderType { get; set; }
+
+ ///
+ /// 子系统id
+ ///
+ public int SubSystemId { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
index 5d2187cb..50cabb23 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
@@ -1,10 +1,14 @@
-using DotNetCore.CAP;
+using System.Linq.Expressions;
+using DotNetCore.CAP;
+using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
+using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.Contract.Dtos.TrackPull;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
+using SJZY.Track.Domain.Enums;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.EventHandlers;
@@ -27,30 +31,29 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
public async Task ConsumerAsync(InterfaceRelayTrackRefreshEvent @event)
{
// tips:attach返回的是服务商id,必有
- var attach = JObject.Parse(@event.Attach);
- var serviceProviderId = attach["ServiceProviderId"]!.Value();
- var orderType = attach["OrderType"]!.Value();
- var config = await _trackPullCacheService.GetPullConfigAsync(serviceProviderId);
+ var attach = JsonConvert.DeserializeObject(@event.Attach);
+ if (attach is null) return;
+ var config = await _trackPullCacheService.GetPullConfigAsync(attach.ServiceProviderId, attach.SubSystemId);
- var data = JObject.FromObject(@event.Data)["Data"]!;
+ var data = JObject.FromObject(@event.Data);
var orderToken = data[config.ParamConfig.OrderPath];
if (orderToken is JArray orderTokens)
{
foreach (var token in orderTokens)
{
- await HandleOrderAsync(token, config, orderType);
+ await HandleOrderAsync(token, config, attach.OrderType);
}
}
else if (orderToken is JObject)
{
- await HandleOrderAsync(orderToken, config, orderType);
+ await HandleOrderAsync(orderToken, config, attach.OrderType);
}
}
- private async Task HandleOrderAsync(JToken token, TrackPullConfigDto config, int orderType)
+ private async Task HandleOrderAsync(JToken orderToken, TrackPullConfigDto config, int orderType)
{
var paramConfig = config.ParamConfig;
- var orderNo = token[paramConfig.OrderNoName]?.Value();
+ var orderNo = orderToken[paramConfig.OrderNoName]?.Value();
if (orderNo.IsNullOrWhiteSpace()) return;
var order = await _orderRepository.GetFirstAsync(x =>
@@ -60,7 +63,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
});
if (order == default) return;
- var trackToken = token[paramConfig.TrackDetailsPath];
+ var trackToken = orderToken[paramConfig.TrackDetailsPath];
if (trackToken is null) return;
var trackUpsertEvent = new TrackUpsertEvent
{
@@ -79,17 +82,78 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
await HandleTrackAsync(item, config, trackUpsertEvent);
}
}
+ else if (orderToken is JObject)
+ {
+ await HandleTrackAsync(orderToken, config, trackUpsertEvent);
+ }
}
- private async Task HandleTrackAsync(JToken token, TrackPullConfigDto config,
- TrackUpsertEvent trackUpsertEvent)
+ private async Task HandleTrackAsync(JToken trackToken, TrackPullConfigDto config,
+ TrackUpsertEvent @event)
{
+ var trackUpsertEvent = @event.DeepCopy();
+ var paramConfig = config.ParamConfig;
+ var contentConfigs = config.ContentConfigs;
+ TrackPullContentConfigDto? trackContent = null;
+
+ // 1、匹配轨迹代码
+ var serviceProviderTrackCode = trackToken[paramConfig.TrackContentCodeName]?.Value();
+ if (!serviceProviderTrackCode.IsNullOrWhiteSpace())
+ {
+ trackContent = contentConfigs.FirstOrDefault(x => x.TrackContentCodeValue == serviceProviderTrackCode);
+ }
+
+ // 2、匹配轨迹状态
+ if (trackContent is null)
+ {
+ var serviceProviderTrackStatus = trackToken[paramConfig.TrackStatusName]?.Value();
+ if (!serviceProviderTrackStatus.IsNullOrWhiteSpace())
+ {
+ trackContent = contentConfigs.FirstOrDefault(x => x.TrackStatusValue == serviceProviderTrackCode);
+ }
+ }
+
+ // 3、匹配轨迹内容
+ if (trackContent is null)
+ {
+ var serviceProviderTrackContent = trackToken[paramConfig.TrackContentName]?.Value();
+ if (!serviceProviderTrackContent.IsNullOrWhiteSpace())
+ {
+ trackContent = contentConfigs.FirstOrDefault(x => x.TrackContentValue == serviceProviderTrackCode);
+
+ // 3.1、按关键字匹配
+ if (trackContent is null)
+ {
+ }
+ }
+ }
+
+ if (trackContent is null) return;
+
+ var trackPlace = trackToken[paramConfig.TrackPlaceName]?.Value();
+ if (trackPlace.IsNullOrWhiteSpace())
+ {
+ Expression> resultExpression =
+ (TrackLocationValue?)trackContent.TrackPlaceValue 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
+ };
+ trackPlace = await _orderRepository.GetFirstAsync(x =>
+ x.Id == trackUpsertEvent.OrderId, resultExpression);
+ }
+
// 新增/更新轨迹
- trackUpsertEvent.TrackCode = null;
- trackUpsertEvent.TrackPlace = null;
- trackUpsertEvent.TrackTime = null;
- trackUpsertEvent.TrackTimeZone = null;
- trackUpsertEvent.UpSubSystemId = 0;
+ trackUpsertEvent.TrackCode = trackContent.TrackContentCode;
+ trackUpsertEvent.TrackPlace = trackPlace ?? "CN";
+ trackUpsertEvent.TrackTime = trackToken[paramConfig.TrackTimeName]?.Value() ?? DateTime.Now;
+ trackUpsertEvent.TrackTimeZone = trackToken[paramConfig.TrackTimeZoneName]?.Value() ??
+ trackContent.TrackTimeZoneValue ?? 8;
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent);
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
index 840ccba7..95a2d573 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
@@ -1,6 +1,7 @@
using Newtonsoft.Json;
using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
+using SJZY.Track.Application.Contract.Dtos.TrackPull;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using Volo.Abp.Http.Client.DynamicProxying;
@@ -40,10 +41,8 @@ public class TrackPullService : ApplicationService
var orderTemplates = await _orderRepository.GetOrderTemplatesAsync(input.OrderNos);
- foreach (var group in orderTemplates.GroupBy(x => new
- {
- x.ServiceProviderId, x.OrderType, x.ServiceProviderCode
- }))
+ foreach (var group in orderTemplates.GroupBy(x =>
+ new TrackRefreshAttach(x.ServiceProviderId, x.ServiceProviderCode, x.SubSystemId, x.OrderType)))
{
var data = group.Select(x => new
{
diff --git a/src/SJZY.Track.Domain/Dtos/Order/OrderTemplateVO.cs b/src/SJZY.Track.Domain/Dtos/Order/OrderTemplateVO.cs
index 723ed89e..6fe7d2b5 100644
--- a/src/SJZY.Track.Domain/Dtos/Order/OrderTemplateVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/Order/OrderTemplateVO.cs
@@ -17,4 +17,9 @@ public class OrderTemplateVO
/// 服务商code
///
public string ServiceProviderCode { get; set; } = null!;
+
+ ///
+ /// 子系统id
+ ///
+ public int SubSystemId { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Enums/TrackLocationValue.cs b/src/SJZY.Track.Domain/Enums/TrackLocationValue.cs
new file mode 100644
index 00000000..2aae150e
--- /dev/null
+++ b/src/SJZY.Track.Domain/Enums/TrackLocationValue.cs
@@ -0,0 +1,11 @@
+namespace SJZY.Track.Domain.Enums;
+
+public enum TrackLocationValue
+{
+ ArrivalPort = 2,
+ LeavePort = 3,
+ ArrivalCountry = 4,
+ LeaveCountry = 5,
+ ArriveCity = 6,
+ LeaveCity = 7
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index 1a7383f1..be9cc648 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -252,7 +252,8 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
OrderType = a.OrderType,
TemplateId = b.TrackTemplateId,
ServiceProviderId = b.ServiceProviderId,
- ServiceProviderCode = c.Code
+ ServiceProviderCode = c.Code,
+ SubSystemId = a.SubSystemId
})
.ToListAsync();
}
diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
index da6f784a..e6aae4f0 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
@@ -1,3 +1,4 @@
+using Elasticsearch.Net;
using Nest;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ElasticSearch.Services;
@@ -38,7 +39,8 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract request
- .Index(index.IndexName)
+ .Index(index.IndexName)
+ .Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
);
if (!r.IsValid)