轨迹刷新初步完成
This commit is contained in:
parent
3baf9aea8b
commit
9ae2a8335a
@ -38,7 +38,7 @@ public class TrackPullContentConfigDto
|
||||
public int? TrackPlaceValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹时区GMT
|
||||
/// 轨迹时区GMT值
|
||||
/// </summary>
|
||||
public float? TrackTimeZone { get; set; }
|
||||
public float? TrackTimeZoneValue { get; set; }
|
||||
}
|
||||
@ -37,6 +37,11 @@ public class TrackPullParamConfigDto
|
||||
/// </summary>
|
||||
public string TrackTimeName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹发生时间参数名
|
||||
/// </summary>
|
||||
public string TrackTimeZoneName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 订单数组路径
|
||||
/// </summary>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 服务商id
|
||||
/// </summary>
|
||||
public int ServiceProviderId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 服务商code
|
||||
/// </summary>
|
||||
public string ServiceProviderCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 订单类型(主数据枚举TrackOrderType)
|
||||
/// </summary>
|
||||
public int OrderType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 子系统id
|
||||
/// </summary>
|
||||
public int SubSystemId { get; set; }
|
||||
}
|
||||
@ -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<int>();
|
||||
var orderType = attach["OrderType"]!.Value<int>();
|
||||
var config = await _trackPullCacheService.GetPullConfigAsync(serviceProviderId);
|
||||
var attach = JsonConvert.DeserializeObject<TrackRefreshAttach>(@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<string>();
|
||||
var orderNo = orderToken[paramConfig.OrderNoName]?.Value<string>();
|
||||
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<string>();
|
||||
if (!serviceProviderTrackCode.IsNullOrWhiteSpace())
|
||||
{
|
||||
trackContent = contentConfigs.FirstOrDefault(x => x.TrackContentCodeValue == serviceProviderTrackCode);
|
||||
}
|
||||
|
||||
// 2、匹配轨迹状态
|
||||
if (trackContent is null)
|
||||
{
|
||||
var serviceProviderTrackStatus = trackToken[paramConfig.TrackStatusName]?.Value<string>();
|
||||
if (!serviceProviderTrackStatus.IsNullOrWhiteSpace())
|
||||
{
|
||||
trackContent = contentConfigs.FirstOrDefault(x => x.TrackStatusValue == serviceProviderTrackCode);
|
||||
}
|
||||
}
|
||||
|
||||
// 3、匹配轨迹内容
|
||||
if (trackContent is null)
|
||||
{
|
||||
var serviceProviderTrackContent = trackToken[paramConfig.TrackContentName]?.Value<string>();
|
||||
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<string>();
|
||||
if (trackPlace.IsNullOrWhiteSpace())
|
||||
{
|
||||
Expression<Func<OrderEntity, string?>> 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>() ?? DateTime.Now;
|
||||
trackUpsertEvent.TrackTimeZone = trackToken[paramConfig.TrackTimeZoneName]?.Value<float>() ??
|
||||
trackContent.TrackTimeZoneValue ?? 8;
|
||||
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent);
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -17,4 +17,9 @@ public class OrderTemplateVO
|
||||
/// 服务商code
|
||||
/// </summary>
|
||||
public string ServiceProviderCode { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 子系统id
|
||||
/// </summary>
|
||||
public int SubSystemId { get; set; }
|
||||
}
|
||||
11
src/SJZY.Track.Domain/Enums/TrackLocationValue.cs
Normal file
11
src/SJZY.Track.Domain/Enums/TrackLocationValue.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace SJZY.Track.Domain.Enums;
|
||||
|
||||
public enum TrackLocationValue
|
||||
{
|
||||
ArrivalPort = 2,
|
||||
LeavePort = 3,
|
||||
ArrivalCountry = 4,
|
||||
LeaveCountry = 5,
|
||||
ArriveCity = 6,
|
||||
LeaveCity = 7
|
||||
}
|
||||
@ -252,7 +252,8 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
||||
OrderType = a.OrderType,
|
||||
TemplateId = b.TrackTemplateId,
|
||||
ServiceProviderId = b.ServiceProviderId,
|
||||
ServiceProviderCode = c.Code
|
||||
ServiceProviderCode = c.Code,
|
||||
SubSystemId = a.SubSystemId
|
||||
})
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
@ -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<TrackDetail
|
||||
{
|
||||
// 按天写入es
|
||||
var r = await Context.IndexAsync(index, request => request
|
||||
.Index(index.IndexName)
|
||||
.Index(index.IndexName)
|
||||
.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
|
||||
);
|
||||
|
||||
if (!r.IsValid)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user