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); } } } }