using DotNetCore.CAP; using SJZY.InterfaceRelay.Application.Contracts; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Consts; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.DynamicProxying; namespace SJZY.Track.Application.EventHandlers; public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { private readonly IHttpClientProxy _httpClientProxy; private readonly ITrackPushRecordsRepository _trackPushRecordsRepository; private readonly ICapPublisher _capPublisher; public TrackPushEventHandler(IHttpClientProxy httpClientProxy, ITrackPushRecordsRepository trackPushRecordsRepository, ICapPublisher capPublisher) { _httpClientProxy = httpClientProxy; _trackPushRecordsRepository = trackPushRecordsRepository; _capPublisher = capPublisher; } [CapSubscribe(GlobalConst.TrackPushSubscribe, Group = GlobalConst.TrackPushSubscribe)] public async Task ConsumerAsync(TrackPushEvent @event) { InterfaceRelayUnifyResultDto res = null!; switch (@event.OptionType) { case OptionType.无: return; case OptionType.新增: res = await PushAddAsync(@event); break; case OptionType.删除: break; case OptionType.修改: res = await PushUpdateAsync(@event); break; default: throw new ArgumentOutOfRangeException(); } var isSuccess = res.Code == InterfaceRelayConst.SuccessCode; // 往es 写推送日志 await _trackPushRecordsRepository.AddAsync(new TrackPushRecordIndex { IndexName = $"{GlobalConst.TrackPushRecordsIndex}-{DateTime.Now:yyyy.MM.dd}", RequestId = res.RequestId, Message = res.Msg, OptionType = @event.OptionType.ToString(), OrderId = @event.OrderId, OrderType = @event.OrderType, OrderNo = @event.OrderNo, TrackStatus = @event.TrackStatus, TrackCode = @event.TrackCode, TrackContent = @event.TrackContent, TrackPlace = @event.TrackPlace, TrackTime = @event.TrackTime, TrackTimeZone = @event.TrackTimeZone, TrackContentCodeValue = @event.TrackContentCodeValue, TrackContentValue = @event.TrackContentValue, TrackEnContentValue = @event.TrackEnContentValue, TrackStatusValue = @event.TrackStatusValue, ExpandFieldsValue = @event.ExpandFieldsValue, IsSuccess = isSuccess, CreateUser = @event.OperationMan ?? "系统", CreateTime = DateTime.Now }); // 更新订单主表(异步) await _capPublisher.PublishAsync(GlobalConst.TrackPushAfterUpdateOrderSubscribe, new TrackPushAfterUpdateOrderEvent { OptionType = @event.OptionType, OrderId = @event.OrderId, TrackContentId = @event.TrackContentId, IsSuccess = isSuccess, Message = res.Msg }); } private async Task PushAddAsync(TrackPushEvent @event) { var data = new { orderNo = @event.OrderNo, data = new[] { new { // 推真实的发生地和发生时间(时间是计算后的) location = @event.TrackPlace, date = @event.TrackTime, timeZone = @event.TrackTimeZone, description = @event.TrackEnContentValue, description_cn = @event.TrackContentValue, code = @event.TrackContentCodeValue, status = @event.TrackStatusValue, extra = @event.ExpandFieldsValue } } }; var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.PushTrackInterfaceCode, @event.ServiceProviderCode, data); return res; } private async Task PushUpdateAsync(TrackPushEvent @event) { var data = new { orderNo = @event.OrderNo, data = new[] { new { // 推真实的发生地和发生时间 location = @event.TrackPlace, date = @event.TrackTime, timeZone = @event.TrackTimeZone, description = @event.TrackEnContentValue, description_cn = @event.TrackContentValue, code = @event.TrackContentCodeValue, status = @event.TrackStatusValue, extra = @event.ExpandFieldsValue } } }; var res = await _httpClientProxy.Service.ForwardWithSubscribeAsync(InterfaceRelayConst.TrackUpdateInterfaceCode, @event.ServiceProviderCode, data); return res; } }