临时提交
This commit is contained in:
parent
0e8af92756
commit
e17eb425a4
@ -0,0 +1,8 @@
|
||||
namespace SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||
|
||||
public class TrackPullConfigDto
|
||||
{
|
||||
public TrackPullParamConfigDto ParamConfig { get; set; }
|
||||
|
||||
public List<TrackPullContentConfigDto> ContentConfigs { get; set; }
|
||||
}
|
||||
@ -1,11 +1,16 @@
|
||||
namespace SJZY.Track.Domain.Dtos.Order;
|
||||
namespace SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||
|
||||
public class TrackPullContentConfigVO
|
||||
public class TrackPullContentConfigDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 轨迹内容id
|
||||
/// 轨迹内容代码
|
||||
/// </summary>
|
||||
public int TrackContentId { get; set; }
|
||||
public string TrackContentCode { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 服务商轨迹状态参数值
|
||||
/// </summary>
|
||||
public string? TrackStatusValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 服务商轨迹代码参数值
|
||||
@ -32,13 +37,8 @@ public class TrackPullContentConfigVO
|
||||
/// </summary>
|
||||
public int? TrackPlaceValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 服务商轨迹状态参数值
|
||||
/// </summary>
|
||||
public string? TrackStatusValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹时区GMT
|
||||
/// </summary>
|
||||
public double? TrackTimeZone { get; set; }
|
||||
public float? TrackTimeZone { get; set; }
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
namespace SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||
|
||||
public class TrackPullParamConfigDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 单号参数名
|
||||
/// </summary>
|
||||
public string OrderNoName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹时区参数名
|
||||
/// </summary>
|
||||
public string TackTimeZoneName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹代码参数名
|
||||
/// </summary>
|
||||
public string TrackContentCodeName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹内容参数名
|
||||
/// </summary>
|
||||
public string TrackContentName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹发生地参数名
|
||||
/// </summary>
|
||||
public string TrackPlaceName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹状态参数名
|
||||
/// </summary>
|
||||
public string TrackStatusName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹发生时间参数名
|
||||
/// </summary>
|
||||
public string TrackTimeName { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 订单数组路径
|
||||
/// </summary>
|
||||
public string OrderPath { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹明细数组路径
|
||||
/// </summary>
|
||||
public string TrackDetailsPath { get; set; } = null!;
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
using SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||
|
||||
namespace SJZY.Track.Application.Contract.Services;
|
||||
|
||||
public interface ITrackPullCacheService
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取服务商拉取配置
|
||||
/// </summary>
|
||||
/// <param name="serviceProviderId"></param>
|
||||
/// <returns></returns>
|
||||
Task<TrackPullConfigDto> GetPullConfigAsync(int serviceProviderId);
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
using DotNetCore.CAP;
|
||||
using Newtonsoft.Json;
|
||||
using SJZY.InterfaceRelay.Application.Contracts;
|
||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||
using SJZY.Track.Domain.Queries;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
|
||||
namespace SJZY.Track.Application.EventHandlers;
|
||||
|
||||
public class InterfaceRelayTrackRefreshEventHandler : ITransientDependency, ICapSubscribe
|
||||
{
|
||||
private readonly IOrderRepository _orderRepository;
|
||||
private readonly IProvideQueries _provideQueries;
|
||||
|
||||
public InterfaceRelayTrackRefreshEventHandler(IOrderRepository orderRepository, IProvideQueries provideQueries)
|
||||
{
|
||||
_orderRepository = orderRepository;
|
||||
_provideQueries = provideQueries;
|
||||
}
|
||||
|
||||
[CapSubscribe(GlobalConst.InterfaceRelayTrackRefreshSubscribe)]
|
||||
public async Task ConsumerAsync(InterfaceRelayTrackRefreshEvent @event)
|
||||
{
|
||||
if (@event.RequestParams is List<OrderNoInfo> requestParams)
|
||||
{
|
||||
var orderNos = requestParams.Select(x => x.OrderNo).ToList();
|
||||
|
||||
// tips:attach返回的是服务商id,必有
|
||||
var pullContentConfigs = await _provideQueries.GetPullContentConfigsAsync(int.Parse(@event.Attach));
|
||||
|
||||
// 轨迹清洗入库
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,95 @@
|
||||
using DotNetCore.CAP;
|
||||
using Newtonsoft.Json.Linq;
|
||||
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 Volo.Abp.DependencyInjection;
|
||||
|
||||
namespace SJZY.Track.Application.EventHandlers;
|
||||
|
||||
public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
|
||||
{
|
||||
private readonly IOrderRepository _orderRepository;
|
||||
private readonly ICapPublisher _capPublisher;
|
||||
private readonly ITrackPullCacheService _trackPullCacheService;
|
||||
|
||||
public TrackRefreshEventHandler(IOrderRepository orderRepository,
|
||||
ICapPublisher capPublisher, ITrackPullCacheService trackPullCacheService)
|
||||
{
|
||||
_orderRepository = orderRepository;
|
||||
_capPublisher = capPublisher;
|
||||
_trackPullCacheService = trackPullCacheService;
|
||||
}
|
||||
|
||||
[CapSubscribe(GlobalConst.TrackRefreshSubscribe)]
|
||||
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 data = JObject.FromObject(@event.Data)["Data"]!;
|
||||
var orderToken = data[config.ParamConfig.OrderPath];
|
||||
if (orderToken is JArray orderTokens)
|
||||
{
|
||||
foreach (var token in orderTokens)
|
||||
{
|
||||
await HandleOrderAsync(token, config, orderType);
|
||||
}
|
||||
}
|
||||
else if (orderToken is JObject)
|
||||
{
|
||||
await HandleOrderAsync(orderToken, config, orderType);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task HandleOrderAsync(JToken token, TrackPullConfigDto config, int orderType)
|
||||
{
|
||||
var paramConfig = config.ParamConfig;
|
||||
var orderNo = token[paramConfig.OrderNoName]?.Value<string>();
|
||||
if (orderNo.IsNullOrWhiteSpace()) return;
|
||||
|
||||
var order = await _orderRepository.GetFirstAsync(x =>
|
||||
x.OrderType == orderType && x.OrderNo == orderNo, x => new
|
||||
{
|
||||
x.Id, x.SubSystemId, x.IsPushCompleted, x.CustomId
|
||||
});
|
||||
if (order == default) return;
|
||||
|
||||
var trackToken = token[paramConfig.TrackDetailsPath];
|
||||
if (trackToken is null) return;
|
||||
var trackUpsertEvent = new TrackUpsertEvent
|
||||
{
|
||||
OrderId = order.Id,
|
||||
SubSystemId = order.SubSystemId,
|
||||
IsPushCompleted = order.IsPushCompleted,
|
||||
CustomId = order.CustomId,
|
||||
OrderType = orderType,
|
||||
OrderNo = orderNo!,
|
||||
};
|
||||
|
||||
if (trackToken is JArray trackTokens)
|
||||
{
|
||||
foreach (var item in trackTokens)
|
||||
{
|
||||
await HandleTrackAsync(item, config, trackUpsertEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task HandleTrackAsync(JToken token, TrackPullConfigDto config,
|
||||
TrackUpsertEvent trackUpsertEvent)
|
||||
{
|
||||
// 新增/更新轨迹
|
||||
trackUpsertEvent.TrackCode = null;
|
||||
trackUpsertEvent.TrackPlace = null;
|
||||
trackUpsertEvent.TrackTime = null;
|
||||
trackUpsertEvent.TrackTimeZone = null;
|
||||
trackUpsertEvent.UpSubSystemId = 0;
|
||||
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent);
|
||||
}
|
||||
}
|
||||
@ -88,6 +88,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
TrackStatus = trackContent.Status,
|
||||
TrackCode = @event.TrackCode,
|
||||
TrackContent = trackContent.Content,
|
||||
|
||||
TrackEnContent = trackContent.EnContent,
|
||||
TrackPlace = @event.TrackPlace,
|
||||
TrackTime = @event.TrackTime!.Value,
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
||||
using SJZY.Track.Domain.Dtos.Order;
|
||||
using SJZY.UserCenter.HttpApi.Services;
|
||||
|
||||
namespace SJZY.Track.Application.Services.ProvideServices;
|
||||
@ -14,14 +12,10 @@ namespace SJZY.Track.Application.Services.ProvideServices;
|
||||
public class OrderService : ApplicationService
|
||||
{
|
||||
private readonly IOrderRepository _orderRepository;
|
||||
private readonly ITrackDetailsRepository _trackDetailsRepository;
|
||||
|
||||
public OrderService(IOrderRepository orderRepository,
|
||||
ITrackDetailsRepository trackDetailsRepository
|
||||
)
|
||||
public OrderService(IOrderRepository orderRepository)
|
||||
{
|
||||
_orderRepository = orderRepository;
|
||||
_trackDetailsRepository = trackDetailsRepository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using SJZY.InterfaceRelay.Application.Contracts;
|
||||
using Newtonsoft.Json;
|
||||
using SJZY.InterfaceRelay.Application.Contracts;
|
||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||
using Volo.Abp.Http.Client.DynamicProxying;
|
||||
@ -39,17 +40,19 @@ public class TrackPullService : ApplicationService
|
||||
|
||||
var orderTemplates = await _orderRepository.GetOrderTemplatesAsync(input.OrderNos);
|
||||
|
||||
foreach (var group in orderTemplates.GroupBy(x => x.ServiceProviderId))
|
||||
foreach (var group in orderTemplates.GroupBy(x => new
|
||||
{
|
||||
var data = group.Select(x => new OrderNoInfo
|
||||
x.ServiceProviderId, x.OrderType, x.ServiceProviderCode
|
||||
}))
|
||||
{
|
||||
OrderType = x.OrderType,
|
||||
OrderNo = x.OrderNo
|
||||
var data = group.Select(x => new
|
||||
{
|
||||
x.OrderNo
|
||||
}).ToList();
|
||||
|
||||
await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
|
||||
"A012", "yicang", 42, data, GlobalConst.InterfaceRelayTrackRefreshSubscribe
|
||||
, group.Key.ToString());
|
||||
"A012", group.Key.ServiceProviderCode, 42, data,
|
||||
GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@ -12,4 +12,9 @@ public class OrderTemplateVO
|
||||
public int TemplateId { get; set; }
|
||||
|
||||
public int ServiceProviderId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 服务商code
|
||||
/// </summary>
|
||||
public string ServiceProviderCode { get; set; } = null!;
|
||||
}
|
||||
@ -20,7 +20,7 @@ public class GlobalConst
|
||||
/// <summary>
|
||||
/// 接口通批量轨迹刷新 mq订阅名称
|
||||
/// </summary>
|
||||
public const string InterfaceRelayTrackRefreshSubscribe = "SJZY.Track.TrackRefresh";
|
||||
public const string TrackRefreshSubscribe = "SJZY.Track.TrackRefresh";
|
||||
|
||||
/// <summary>
|
||||
/// 轨迹新增/更新后触发更新订单轨迹 mq订阅名称
|
||||
|
||||
@ -48,11 +48,4 @@ public interface IProvideQueries
|
||||
/// <param name="trackCodes"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<string>> MapTrackCodesAsync(int upSubSystemId, int subSystemId, params string[] trackCodes);
|
||||
|
||||
/// <summary>
|
||||
/// 获取服务商模板配置
|
||||
/// </summary>
|
||||
/// <param name="serviceProviderId"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<TrackPullContentConfigVO>> GetPullContentConfigsAsync(int serviceProviderId);
|
||||
}
|
||||
@ -1,6 +1,5 @@
|
||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
||||
using SJZY.Track.Domain.Dtos.Order;
|
||||
@ -105,22 +104,4 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
|
||||
.Select(x => x.TrackContentCode)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<List<TrackPullContentConfigVO>> GetPullContentConfigsAsync(int serviceProviderId)
|
||||
{
|
||||
return await Context.Queryable<TrackPullConfigEntity>()
|
||||
.LeftJoin<TrackPullContentConfigEntity>((a, b) => a.Id == b.TrackPullConfigId)
|
||||
.Where(a => a.ServiceProviderId == serviceProviderId)
|
||||
.Select(x => new TrackPullContentConfigVO
|
||||
{
|
||||
TrackContentId = 0,
|
||||
TrackContentCodeValue = null,
|
||||
TrackContentValue = null,
|
||||
TrackKeyword = null,
|
||||
TrackKeywordReverse = null,
|
||||
TrackPlaceValue = null,
|
||||
TrackStatusValue = null,
|
||||
TrackTimeZone = null
|
||||
}).ToListAsync();
|
||||
}
|
||||
}
|
||||
@ -16,7 +16,7 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
||||
ITrackDetailsRepository trackDetailsRepository
|
||||
)
|
||||
{
|
||||
this._trackDetailsRepository=trackDetailsRepository;
|
||||
this._trackDetailsRepository = trackDetailsRepository;
|
||||
}
|
||||
|
||||
public async Task CreateOrderAsync(OrderEntity order)
|
||||
@ -172,44 +172,45 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
||||
var orderIds = pageList.List.Select(a => a.Id).ToList();
|
||||
//查询轨迹模版
|
||||
var trackTemplateList = await Context.Queryable<OrderTemplateEntity>()
|
||||
.LeftJoin<TrackTemplateEntity>((a, b) => a.TrackTemplateId==b.Id)
|
||||
.LeftJoin<TrackTemplateEntity>((a, b) => a.TrackTemplateId == b.Id)
|
||||
.Where((a, b) => orderIds.Contains(a.OrderId))
|
||||
.Select((a, b) => new { OrderId = a.OrderId, Name = b.Name, TemplateId = b.Id })
|
||||
.ToListAsync();
|
||||
var esTrackDetails = await _trackDetailsRepository.GetListAsync(orderIds);
|
||||
pageList.List.ForEach(a =>
|
||||
{
|
||||
var esDetails = esTrackDetails?.Where(b => b.OrderId== a.Id).OrderByDescending(b => b.TrackTime);
|
||||
var esDetails = esTrackDetails?.Where(b => b.OrderId == a.Id).OrderByDescending(b => b.TrackTime);
|
||||
var trackDetail = esDetails?.FirstOrDefault();
|
||||
if (trackDetail!=null)
|
||||
if (trackDetail != null)
|
||||
{
|
||||
if (trackDetail.TrackContent!=a.NewestTrackContent)
|
||||
if (trackDetail.TrackContent != a.NewestTrackContent)
|
||||
{
|
||||
a.NewestTrackContent=trackDetail.TrackContent;
|
||||
a.NewestTrackContent = trackDetail.TrackContent;
|
||||
}
|
||||
if (trackDetail.TrackEnContent!=a.NewestTrackEnContent)
|
||||
|
||||
if (trackDetail.TrackEnContent != a.NewestTrackEnContent)
|
||||
{
|
||||
a.NewestTrackEnContent=trackDetail.TrackEnContent;
|
||||
a.NewestTrackEnContent = trackDetail.TrackEnContent;
|
||||
}
|
||||
if (trackDetail.TrackPlace!=a.NewestTrackPlace)
|
||||
|
||||
if (trackDetail.TrackPlace != a.NewestTrackPlace)
|
||||
{
|
||||
a.NewestTrackPlace=trackDetail.TrackPlace;
|
||||
a.NewestTrackPlace = trackDetail.TrackPlace;
|
||||
}
|
||||
if (trackDetail.TrackTime!= a.NewestTrackTime)
|
||||
|
||||
if (trackDetail.TrackTime != a.NewestTrackTime)
|
||||
{
|
||||
a.NewestTrackTime=trackDetail.TrackTime;
|
||||
a.NewestTrackTime = trackDetail.TrackTime;
|
||||
}
|
||||
}
|
||||
|
||||
a.TrackTemplateNames =trackTemplateList.Where(b => b.OrderId== a.Id).Select(a => a.Name).JoinAsString(",");
|
||||
a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId== a.Id).Select(a => a.TemplateId).ToList();
|
||||
a.TrackTemplateNames = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.Name)
|
||||
.JoinAsString(",");
|
||||
a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.TemplateId).ToList();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#region 暂时注释
|
||||
|
||||
//if (pageList.List.Any())
|
||||
@ -243,13 +244,15 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
||||
{
|
||||
return await Context.Queryable<OrderEntity>()
|
||||
.LeftJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
|
||||
.LeftJoin<VServiceProviderEntity>((a, b, c) => b.ServiceProviderId == c.Id)
|
||||
.Where(a => orderNos.Contains(a.OrderNo))
|
||||
.Select((a, b) => new OrderTemplateVO
|
||||
.Select((a, b, c) => new OrderTemplateVO
|
||||
{
|
||||
OrderNo = a.OrderNo,
|
||||
OrderType = a.OrderType,
|
||||
TemplateId = b.TrackTemplateId,
|
||||
ServiceProviderId = b.ServiceProviderId
|
||||
ServiceProviderId = b.ServiceProviderId,
|
||||
ServiceProviderCode = c.Code
|
||||
})
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user