Código funcional.
Consulta da data máxima de cada banco de dados realizada individualmente. Dados sendo inseridos conforme a data máxima de cada banco de dados. Pendente realizar paginação da requisição http.
This commit is contained in:
parent
d656f07613
commit
751e7da3a6
@ -26,7 +26,7 @@ public class PLDProcessor
|
||||
"yyyy-MM-dd'T'HH:mm:ss'-03:00'", null
|
||||
);
|
||||
|
||||
double dia = data.ToOADate() - data.ToOADate() % 1;
|
||||
DateTime dia = data.Date;
|
||||
int hora = data.Hour + 1;
|
||||
string mes = data.ToString("yyMM");
|
||||
int diaSemana = (int)data.DayOfWeek == 0 ? 7 : (int)data.DayOfWeek;
|
||||
@ -35,7 +35,7 @@ public class PLDProcessor
|
||||
{
|
||||
string submercado = valorNode.SelectSingleNode("bo:submercado//bo:nome", nsmgr).InnerText;
|
||||
double valor = double.Parse(valorNode.SelectSingleNode("bo:valor//bo:valor", nsmgr).InnerText, new CultureInfo("en-US"));
|
||||
pldList.Add(new PLDModel(data, hora, submercado, valor, mes, diaSemana));
|
||||
pldList.Add(new PLDModel(dia, hora, submercado, valor, mes, diaSemana));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -19,11 +19,16 @@ public class AccessRepository : IDataRepository
|
||||
return cmd.ExecuteScalar() is DateTime data ? data.AddDays(1) : new DateTime(2022, 01, 01);
|
||||
}
|
||||
|
||||
public void SalvarPLDs(List<PLDModel> plds)
|
||||
public void SalvarPLDs(List<PLDModel> plds, DateTime ultimaData)
|
||||
{
|
||||
using var conn = new OleDbConnection(_connectionString);
|
||||
conn.Open();
|
||||
foreach (var pld in plds)
|
||||
|
||||
// Filtrar apenas os PLDs mais recentes
|
||||
var novosPLDs = plds.FindAll(pld => pld.Dia >= ultimaData);
|
||||
if (novosPLDs.Count == 0) return; // Nenhum dado novo, então sair da função
|
||||
|
||||
foreach (var pld in novosPLDs)
|
||||
{
|
||||
string query = "INSERT INTO PLD_comp (Data, Hora, Submercado, Valor, Mes_ref, Dia_da_semana) " +
|
||||
"VALUES (@Data, @Hora, @Submercado, @Valor, @MesRef, @DiaSemana)";
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
public interface IDataRepository
|
||||
{
|
||||
DateTime ObterDataInicial();
|
||||
void SalvarPLDs(List<PLDModel> plds);
|
||||
void SalvarPLDs(List<PLDModel> plds, DateTime ultimaData);
|
||||
}
|
||||
|
||||
@ -28,11 +28,15 @@ using PI_Assync_PLD.Models;
|
||||
: DateTime.Now.AddYears(-2);
|
||||
}
|
||||
|
||||
public void SalvarPLDs(List<PLDModel> plds)
|
||||
public void SalvarPLDs(List<PLDModel> plds, DateTime ultimaData)
|
||||
{
|
||||
using var conn = new NpgsqlConnection(_connectionString);
|
||||
conn.Open();
|
||||
|
||||
// Filtrar apenas os PLDs mais recentes
|
||||
var novosPLDs = plds.FindAll(pld => pld.Dia >= ultimaData);
|
||||
if (novosPLDs.Count == 0) return; // Nenhum dado novo, então sair da função
|
||||
|
||||
using var transaction = conn.BeginTransaction();
|
||||
|
||||
string query = "INSERT INTO pld (dia_num, hora, submercado, valor, mes_ref, dia_da_semana) " +
|
||||
@ -40,10 +44,10 @@ using PI_Assync_PLD.Models;
|
||||
|
||||
using var cmd = new NpgsqlCommand(query, conn, transaction);
|
||||
|
||||
foreach (var pld in plds)
|
||||
foreach (var pld in novosPLDs)
|
||||
{
|
||||
cmd.Parameters.Clear();
|
||||
cmd.Parameters.AddWithValue("@Dia", pld.Dia);
|
||||
cmd.Parameters.AddWithValue("@Dia", pld.Dia.ToOADate());
|
||||
cmd.Parameters.AddWithValue("@Hora", pld.Hora);
|
||||
cmd.Parameters.AddWithValue("@Submercado", pld.Submercado);
|
||||
cmd.Parameters.AddWithValue("@Valor", pld.Valor);
|
||||
|
||||
@ -18,13 +18,11 @@ public class PLDService
|
||||
|
||||
public async Task SincronizarPLDsAsync()
|
||||
{
|
||||
List<DateTime> datasIniciais = _repositories.ConvertAll(repo => repo.ObterDataInicial());
|
||||
DateTime dataInicial = DateTime.MinValue;
|
||||
foreach (var data in datasIniciais)
|
||||
{
|
||||
if (data > dataInicial) dataInicial = data;
|
||||
}
|
||||
DateTime dataFinal = DateTime.Now.AddDays(1);
|
||||
Dictionary<IDataRepository, DateTime> datasIniciais = _repositories
|
||||
.ToDictionary(repo => repo, repo => repo.ObterDataInicial());
|
||||
|
||||
DateTime dataFinal = DateTime.Now.Date.AddDays(1);
|
||||
DateTime dataInicial = datasIniciais.Values.Min();
|
||||
|
||||
// Criar um timer que reseta a cada segundo 00
|
||||
_ = Task.Run(() => ResetarLimitePorMinuto());
|
||||
@ -43,7 +41,14 @@ public class PLDService
|
||||
// Atualiza ambos os bancos apenas se houver novos dados
|
||||
if (plds.Count > 0)
|
||||
{
|
||||
Parallel.ForEach(_repositories, repo => repo.SalvarPLDs(plds));
|
||||
// Para cada repositório, passar a data inicial correta
|
||||
Parallel.ForEach(datasIniciais, kvp =>
|
||||
{
|
||||
var repo = kvp.Key;
|
||||
var ultimaData = kvp.Value;
|
||||
repo.SalvarPLDs(plds, ultimaData);
|
||||
});
|
||||
|
||||
Console.WriteLine("PLDs salvos com sucesso.");
|
||||
}
|
||||
}
|
||||
@ -66,10 +71,4 @@ public class PLDService
|
||||
.Replace("DATA_FIM", fim.ToString("yyyy-MM-ddT00:00:00"))
|
||||
.Replace("PAG_NUM", "1");
|
||||
}
|
||||
|
||||
private List<PLDModel> ProcessarXML(string xml)
|
||||
{
|
||||
// Simulação de parser XML (substituir pela lógica real)
|
||||
return new List<PLDModel> { new PLDModel(DateTime.Now, 1, "Sul", 123.45, "2403", 3) };
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user