93 lines
3.5 KiB
C#
93 lines
3.5 KiB
C#
using SJZY.InterfaceRelay.Application.Contracts;
|
|
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
|
using SJZY.Track.Application.Contract.Services;
|
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
|
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
|
using Volo.Abp.Http.Client.DynamicProxying;
|
|
|
|
namespace SJZY.Track.Application.Services.ProvideServices;
|
|
|
|
/// <summary>
|
|
/// 轨迹推送服务
|
|
/// </summary>
|
|
[ApiExplorerSettings(GroupName = "提供接口")]
|
|
[Route("/ProviderService")]
|
|
public class TrackPushService : ApplicationService
|
|
{
|
|
private readonly ITrackDetailsRepository _trackDetailsRepository;
|
|
private readonly IOrderRepository _orderRepository;
|
|
private readonly ITrackPushCacheService _pushCacheService;
|
|
private readonly IHttpClientProxy<IInterfaceForwardServiceV2> _httpClientProxy;
|
|
|
|
public TrackPushService(
|
|
IHttpClientProxy<IInterfaceForwardServiceV2> httpClientProxy, ITrackPushCacheService pushCacheService,
|
|
ITrackDetailsRepository trackDetailsRepository, IOrderRepository orderRepository)
|
|
{
|
|
_httpClientProxy = httpClientProxy;
|
|
_pushCacheService = pushCacheService;
|
|
_trackDetailsRepository = trackDetailsRepository;
|
|
_orderRepository = orderRepository;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 手工推送轨迹
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("Track/Push")]
|
|
public async Task<bool> PushTrackAsync(PushTrackInput input)
|
|
{
|
|
input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空
|
|
|
|
|
|
var orders = await _orderRepository.GetListAsync(x =>
|
|
x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo), x => new
|
|
{
|
|
x.Id, x.OrderNo, x.SubSystemId, x.CustomId
|
|
});
|
|
|
|
if (input.OrderNos.Count == 0)
|
|
{
|
|
throw new BusinessException(message: "一个推送配置都不存在");
|
|
}
|
|
|
|
var tracks = await _trackDetailsRepository.GetListAsync(input.OrderType, input.OrderNos, input.TrackCode);
|
|
|
|
foreach (var order in orders)
|
|
{
|
|
// 如果没有轨迹,就不需要推
|
|
var track = tracks.FirstOrDefault(x => x.OrderId == order.Id);
|
|
if (track == null) continue;
|
|
|
|
// 手工推送不推断,直接无脑推
|
|
var config =
|
|
await _pushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId,
|
|
track.TrackContentId);
|
|
|
|
var data = new
|
|
{
|
|
order.OrderNo,
|
|
data = new[]
|
|
{
|
|
new
|
|
{
|
|
// 推真实的发生地和发生时间
|
|
location = track.TrackPlace,
|
|
date = track.TrackTime.AddHours(config.TrackTimeZone ??
|
|
track.TrackTimeZone - track.TrackTimeZone),
|
|
timeZone = config.TrackTimeZone ?? track.TrackTimeZone,
|
|
description = config.TrackEnContentValue,
|
|
description_cn = config.TrackContentValue,
|
|
code = config.TrackContentCodeValue,
|
|
status = config.TrackStatusValue,
|
|
extra = config.ExpandFieldsValue
|
|
}
|
|
}
|
|
};
|
|
|
|
await _httpClientProxy.Service.ForwardWithSubscribeAsync("A024", config.ServiceProviderCode, data);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
} |