track/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs

142 lines
5.2 KiB
C#

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<IInterfaceForwardServiceV2> _httpClientProxy;
private readonly ITrackPushRecordsRepository _trackPushRecordsRepository;
private readonly ICapPublisher _capPublisher;
public TrackPushEventHandler(IHttpClientProxy<IInterfaceForwardServiceV2> 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<InterfaceRelayUnifyResultDto> 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<InterfaceRelayUnifyResultDto> 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;
}
}