track/src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs
2024-03-18 09:44:42 +08:00

62 lines
2.3 KiB
C#

using DotNetCore.CAP;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.EventHandlers;
public class OrderLinkAfterFillTrackHandler : ITransientDependency, ICapSubscribe
{
private readonly ITrackDetailsRepository _trackDetailsRepository;
private readonly ICapPublisher _capPublisher;
private readonly IOrderRepository _orderRepository;
public OrderLinkAfterFillTrackHandler(ITrackDetailsRepository trackDetailsRepository, ICapPublisher capPublisher,
IOrderRepository orderRepository)
{
_trackDetailsRepository = trackDetailsRepository;
_capPublisher = capPublisher;
_orderRepository = orderRepository;
}
[CapSubscribe(GlobalConst.OrderLinkAfterFillTrack)]
public async Task ConsumerAsync(OrderLinkAfterFillTrackEvent @event)
{
var tracks = await _trackDetailsRepository.GetListAsync(@event.OrderId);
foreach (var linkOrderId in @event.LinkedOrderIds)
{
var order = await _orderRepository.GetFirstAsync(x =>
x.Id == linkOrderId, x => new
{
x.OrderType, x.OrderNo, x.CustomId, x.LatestPushTrackContentId, x.SubSystemId
});
if (order == default) continue;
// 补轨迹
foreach (var track in tracks)
{
var fillTrackEvent = new TrackUpsertEvent
{
OrderType = order.OrderType,
OrderNo = order.OrderNo,
TrackCode = track.TrackCode,
TrackPlace = track.TrackPlace,
TrackTime = track.TrackTime,
TrackTimeZone = track.TrackTimeZone,
OrderId = linkOrderId,
CustomId = order.CustomId,
SubSystemId = order.SubSystemId,
LatestPushTrackContentId = order.LatestPushTrackContentId,
UpSubSystemId = @event.SubSystemId,
};
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, fillTrackEvent);
}
}
}
}