using InterfaceForward.Domain.Shared.Helpers;
using Microsoft.Extensions.Options;
using TrackCenter.Application.Dtos.ProvideServices;
using TrackCenter.Application.Dtos.TrackPull;
using TrackCenter.Application.Helpers;
using TrackCenter.Application.Options;
using TrackCenter.Application.Queries;
using TrackCenter.Application.Track2InterfaceRelay;
using TrackCenter.Domain.Consts;
namespace TrackCenter.Application.Services.ProvideServices;
///
/// 轨迹刷新服务
///
[ApiExplorerSettings(GroupName = "OpenApi")]
[Route("/ProviderService")]
public class TrackPullService(
ProvideQueries provideQueries,
InterfaceForwardService interfaceForwardService,
IOptionsMonitor options)
: ApplicationServiceBase
{
///
/// 手动刷新轨迹
///
///
///
[HttpPost("Track/Refresh")]
public async Task RefreshTrackAsync(RefreshTrackInput input)
{
input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList();
if (input.OrderNos.Count == 0)
{
throw ProviderServiceActionResult.Exception("刷新失败", "未传入有效订单号");
}
// tips:这里没有区分订单类型,就算的不同类型的单一起刷新了也无所谓
var (orders, skipReasons) =
await provideQueries.DiagnoseManualRefreshAsync(input.AppKey, input.OrderNos);
if (orders.Count == 0)
{
var reason = skipReasons.Count > 0
? string.Join(";", skipReasons)
: "可能原因:订单不存在、已完成、无拉取状态或不在拉取时间窗口内";
throw ProviderServiceActionResult.Exception("刷新失败:没有可刷新的订单", reason);
}
var forwardErrors = new List();
var submittedOrderCount = 0;
foreach (var group in orders.GroupBy(x => new
{
x.ServiceProviderCode,
x.AppKey,
x.OrderType
}))
{
var data = new List