opt:优化轨迹刷新定时任务等待超时问题

This commit is contained in:
李鹏军 2024-05-14 17:17:14 +08:00
parent 7482521e75
commit 4b0acb1978

View File

@ -78,46 +78,50 @@ public class TrackPullService : ApplicationService
/// <returns></returns> /// <returns></returns>
[AllowAnonymous] [AllowAnonymous]
[HttpPost("Track/RefreshForTask")] [HttpPost("Track/RefreshForTask")]
public async Task<bool> RefreshForTaskAsync() public bool RefreshForTaskAsync()
{ {
var configs = await _trackPullCacheService.GetAllPullConfigsAsync(); Task.Run(async () =>
foreach (var config in configs)
{ {
var redisKey = _trackPullCacheService.TrackPullKey(config.SubSystemId, config.ServiceProviderId); var configs = await _trackPullCacheService.GetAllPullConfigsAsync();
if (await RedisHelper.Client.ExistsAsync(redisKey))
{
continue;
}
var page = 1; foreach (var config in configs)
var orders = await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderId, page);
while (orders.Any())
{ {
var serviceProviderCode = orders.FirstOrDefault()?.ServiceProviderCode; var redisKey = _trackPullCacheService.TrackPullKey(config.SubSystemId, config.ServiceProviderId);
var serviceProviderName = orders.FirstOrDefault()?.ServiceProviderName; if (await RedisHelper.Client.ExistsAsync(redisKey))
foreach (var group in orders.GroupBy(x =>
new { x.SubSystemId, x.OrderType }))
{ {
var data = group.Select(x => new continue;
{
x.OrderNo
}).ToList();
var attach = Base64Helper.SerializeObject(new TrackRefreshAttach(config.ServiceProviderId,
serviceProviderName!,
group.Key.SubSystemId, group.Key.OrderType));
// 批量获取轨迹
await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
InterfaceRelayConst.GetTrackInterfaceCode, serviceProviderCode, data,
GlobalConst.TrackRefreshSubscribe, attach);
} }
orders = await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderId, ++page); var page = 1;
} var orders = await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderId, page);
while (orders.Any())
{
var serviceProviderCode = orders.FirstOrDefault()?.ServiceProviderCode;
var serviceProviderName = orders.FirstOrDefault()?.ServiceProviderName;
await RedisHelper.Client.SetExAsync(redisKey, config.PullInterval * 60, orders.Count); foreach (var group in orders.GroupBy(x =>
} new { x.SubSystemId, x.OrderType }))
{
var data = group.Select(x => new
{
x.OrderNo
}).ToList();
var attach = Base64Helper.SerializeObject(new TrackRefreshAttach(config.ServiceProviderId,
serviceProviderName!,
group.Key.SubSystemId, group.Key.OrderType));
// 批量获取轨迹
await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
InterfaceRelayConst.GetTrackInterfaceCode, serviceProviderCode, data,
GlobalConst.TrackRefreshSubscribe, attach);
}
orders = await _provideQueries.FindOrderWithServiceProviderAsync(config.ServiceProviderId, ++page);
}
await RedisHelper.Client.SetExAsync(redisKey, config.PullInterval * 60, orders.Count);
}
});
return true; return true;
} }