Dados de medição agrupados por hora antes de escolher entre Inspeção lógica e coleta diária. Após escolha realizada são feitas as estimativas com base na média dos dados consolidados.
This commit is contained in:
parent
a8d87addad
commit
654d363d12
@ -225,12 +225,7 @@ namespace Application
|
||||
reat_g
|
||||
);
|
||||
})
|
||||
.GroupBy(x => new { x.Ponto, x.DiaNum, x.Minuto })
|
||||
.Select(g =>
|
||||
{
|
||||
var logica = g.FirstOrDefault(x => x.Origem == "Inspeção Lógica");
|
||||
return logica ?? g.First();
|
||||
}).ToList();
|
||||
.ToList();
|
||||
|
||||
var minutosEsperados = new[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60 };
|
||||
|
||||
@ -243,13 +238,26 @@ namespace Application
|
||||
{
|
||||
var grupoHora = medidasPorHora.Where(h => h.Key.Hora == hora).ToList();
|
||||
var lista = grupoHora.SelectMany(g => g).OrderBy(m => m.Minuto).ToList();
|
||||
var minutosPresentes = lista.Select(m => m.Minuto).ToHashSet();
|
||||
|
||||
// Separar por origem
|
||||
var logicas = lista.Where(m => m.Origem == "Inspeção Lógica").ToList();
|
||||
var diarias = lista.Where(m => m.Origem == "Coleta Diária").ToList();
|
||||
|
||||
// Regra de prioridade
|
||||
List<Medicao> selecionados;
|
||||
if (logicas.Count > diarias.Count)
|
||||
{
|
||||
selecionados = logicas;
|
||||
}
|
||||
else
|
||||
{
|
||||
selecionados = diarias;
|
||||
}
|
||||
|
||||
var minutosPresentes = selecionados.Select(m => m.Minuto).ToHashSet();
|
||||
var minutosEsperadosAbsolutos = minutosEsperados.Select(m => m + (60 * hora)).ToList();
|
||||
var faltantes = minutosEsperadosAbsolutos.Except(minutosPresentes).OrderBy(m => m).ToList();
|
||||
|
||||
// Use apenas valores reais para interpolação
|
||||
var reais = lista.ToDictionary(m => m.Minuto, m => m);
|
||||
|
||||
var estimadas = new List<Medicao>();
|
||||
|
||||
foreach (var faltante in faltantes)
|
||||
@ -272,15 +280,10 @@ namespace Application
|
||||
}
|
||||
else
|
||||
{
|
||||
// Busca anterior real
|
||||
var anterior = reais.Values.Where(m => m.Minuto < faltante).OrderByDescending(m => m.Minuto).FirstOrDefault();
|
||||
// Busca posterior real
|
||||
var posterior = reais.Values.Where(m => m.Minuto > faltante).OrderBy(m => m.Minuto).FirstOrDefault();
|
||||
|
||||
var ativaConsumo = Interpolar(anterior?.Minuto, anterior?.AtivaConsumo, posterior?.Minuto, posterior?.AtivaConsumo, faltante) ?? 0;
|
||||
var ativaGeracao = Interpolar(anterior?.Minuto, anterior?.AtivaGeracao, posterior?.Minuto, posterior?.AtivaGeracao, faltante) ?? 0;
|
||||
var reativaConsumo = Interpolar(anterior?.Minuto, anterior?.ReativaConsumo, posterior?.Minuto, posterior?.ReativaConsumo, faltante) ?? 0;
|
||||
var reativaGeracao = Interpolar(anterior?.Minuto, anterior?.ReativaGeracao, posterior?.Minuto, posterior?.ReativaGeracao, faltante) ?? 0;
|
||||
var ativaConsumo = selecionados.Average(m => m.AtivaConsumo);
|
||||
var ativaGeracao = selecionados.Average(m => m.AtivaGeracao);
|
||||
var reativaConsumo = selecionados.Average(m => m.ReativaConsumo);
|
||||
var reativaGeracao = selecionados.Average(m => m.ReativaGeracao);
|
||||
|
||||
var estimada = new Medicao(
|
||||
grupoHora.First().Key.Ponto,
|
||||
@ -297,7 +300,7 @@ namespace Application
|
||||
}
|
||||
|
||||
// Adiciona todos (originais + estimados) ao resultado final
|
||||
medidasComEstimativa.AddRange(lista);
|
||||
medidasComEstimativa.AddRange(selecionados);
|
||||
medidasComEstimativa.AddRange(estimadas);
|
||||
}
|
||||
|
||||
|
||||
@ -23,6 +23,7 @@ namespace Infrastructure
|
||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and (Cliente = 'RMC ALIMENTOS' OR Cliente = 'FERREIRA SUPERMERCADO' OR Cliente = 'VANGUARDA ALIMENTOS') AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'ABEVÊ' and Unidade = 'ABV LOJA 29 - COXIM' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Cliente = 'calvi granitos' AND Unidade_gerenciada ORDER BY PerfilCCEE";
|
||||
//string sql = "SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 and Codigo_SCDE = 'DFLBCEENTR101'";
|
||||
|
||||
using var command = new OleDbCommand(sql, connection);
|
||||
using var reader = await command.ExecuteReaderAsync(ct);
|
||||
|
||||
@ -7,13 +7,13 @@ class Program
|
||||
static async Task Main()
|
||||
{
|
||||
DateTime inicio = DateTime.Now;
|
||||
string PG_CONN_STRING_PROD = "Server = smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port = 5432; Database = smartenergiaprod; Username = postgres; Password = VfHml#Z78!%kvvNM; Timeout = 60; CommandTimeout = 60; ApplicationName = new_med_5_min; Connection Lifetime = 120; Minimum Pool Size = 2; Maximum Pool Size = 2;";
|
||||
string PG_CONN_STRING_PROD = "Server = smart-energia-dev-pgsql.cykff7tj7mik.us-east-1.rds.amazonaws.com; Port = 5432; Database = smartenergiaprod; Username = postgres; Password = VfHml#Z78!%kvvNM; Timeout = 60; CommandTimeout = 60; ApplicationName = new_med_5_min; Connection Lifetime = 120; Minimum Pool Size = 2; Maximum Pool Size = 4;";
|
||||
string ACCESS_CONN_STRING = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\srv-dados\documentos\Middle\Informativo Setorial\Modelo Word\BD1_dados cadastrais e faturas.accdb;Jet OLEDB:Database Password=gds21";
|
||||
string caminhoLog = $@"\\srv-dados\documentos\Back\Carteira x.x\Codigo\Erros\log_erros_{inicio:MM_dd_HH_mm}.csv";
|
||||
//DateTime dataIni = new DateTime(inicio.Year, inicio.Month, 1);
|
||||
//DateTime dataFim = new DateTime(inicio.Year, inicio.Month, inicio.Day);
|
||||
DateTime dataIni = new DateTime(inicio.Year, 10, 1);
|
||||
DateTime dataFim = new DateTime(inicio.Year, 10, 14);
|
||||
DateTime dataIni = new DateTime(inicio.Year, 01, 01);
|
||||
DateTime dataFim = new DateTime(inicio.Year, 02, 01);
|
||||
|
||||
// Configuração de dependências (pode usar um container DI depois)
|
||||
var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user