96 lines
3.8 KiB
C#
96 lines
3.8 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using Quartz;
|
|
using System.Threading.Tasks;
|
|
using Newtonsoft.Json;
|
|
using System.Text;
|
|
using birzha_contracts.Managers;
|
|
using birzha_contracts.Models;
|
|
using System.Collections.Generic;
|
|
|
|
namespace birzha_contracts.Jobs{
|
|
[DisallowConcurrentExecution]
|
|
public class UpdateJob : IJob
|
|
{
|
|
|
|
private readonly ILogger<UpdateJob> _logger;
|
|
private readonly IServiceProvider _provider;
|
|
private static HttpClient _client = new HttpClient();
|
|
|
|
|
|
|
|
public UpdateJob(ILogger<UpdateJob> logger, IServiceProvider provider)
|
|
{
|
|
_logger = logger;
|
|
_provider = provider;
|
|
}
|
|
|
|
private async Task<string> GetData(HttpRequestMessage request)
|
|
{
|
|
var response = await _client.SendAsync(request);
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadAsStringAsync();
|
|
}
|
|
|
|
public async Task Execute(IJobExecutionContext context)
|
|
{
|
|
var tasks = new List<Task<string>>();
|
|
using(var scope = _provider.CreateScope())
|
|
{
|
|
var firstTimeDB = Convert.ToBoolean(ConfigManager.AppSetting["FirstTimeDB"]);
|
|
var dbContext = scope.ServiceProvider.GetService<MvcContractContext>();
|
|
var contracts = new List<ContractResolution>();
|
|
var domain = Convert.ToString(ConfigManager.AppSetting["Domain"]);
|
|
_client.BaseAddress = new Uri(domain);
|
|
var api = ConfigManager.AppSetting["API_contract_resolution"];
|
|
|
|
if(firstTimeDB){
|
|
var dateFrom = Convert.ToDateTime(ConfigManager.AppSetting["FirstTimeDBFillDateFrom"]);
|
|
contracts = dbContext!.ContractResolution.Where(x => x.ModifiedDate >= dateFrom).OrderByDescending(d => d.ModifiedDate).ToList();
|
|
while(contracts.Any()){
|
|
_logger.LogInformation("Sending request: Contract-Resolution");
|
|
var chunk = contracts.Take(500).ToList();
|
|
contracts = contracts.Skip(500).ToList();
|
|
|
|
var data = JsonConvert.SerializeObject(chunk);
|
|
|
|
var content = new StringContent(data.ToString(), Encoding.UTF8, "application/json");
|
|
|
|
var request = new HttpRequestMessage(HttpMethod.Post, $""+api+"");
|
|
request.Content = content;
|
|
|
|
tasks.Add(GetData(request));
|
|
|
|
_logger.LogInformation("Sending resolution success!");
|
|
}
|
|
}
|
|
else{
|
|
var minutesAgo = Convert.ToDouble(ConfigManager.AppSetting["DataMinutesAgo"]);
|
|
minutesAgo = minutesAgo * (-1);
|
|
contracts = dbContext!.ContractResolution.Where(x => x.ModifiedDate > DateTime.Now.AddMinutes(minutesAgo)).OrderByDescending(d => d.ModifiedDate).ToList();
|
|
while(contracts.Any()){
|
|
_logger.LogInformation("Sending request: Contract-Resolution");
|
|
var chunk = contracts.Take(500).ToList();
|
|
contracts = contracts.Skip(500).ToList();
|
|
|
|
var data = JsonConvert.SerializeObject(chunk);
|
|
|
|
var content = new StringContent(data.ToString(), Encoding.UTF8, "application/json");
|
|
|
|
var request = new HttpRequestMessage(HttpMethod.Post, $""+api+"");
|
|
request.Content = content;
|
|
|
|
tasks.Add(GetData(request));
|
|
|
|
_logger.LogInformation("Sending resolution success!");
|
|
}
|
|
}
|
|
}
|
|
|
|
_logger.LogInformation("Success!");
|
|
await Task.WhenAll(tasks);
|
|
}
|
|
}
|
|
}
|
|
|
|
|