diff --git a/Infrastructure/AccessRepository.cs b/Infrastructure/AccessRepository.cs index c28f4d1..9c4956c 100644 --- a/Infrastructure/AccessRepository.cs +++ b/Infrastructure/AccessRepository.cs @@ -19,10 +19,10 @@ namespace Infrastructure using var connection = new OleDbConnection(_connectionString); await connection.OpenAsync(ct); - string sql = $"SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 AND Unidade_gerenciada ORDER BY cod_smart_unidade"; + //string sql = $"SELECT Cod_5min, Codigo_SCDE, Data_de_Migracao FROM Dados_cadastrais WHERE LEN(Codigo_SCDE) > 5 AND Unidade_gerenciada ORDER BY cod_smart_unidade"; //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 Cliente = 'SIDERQUÍMICA' 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); diff --git a/Infrastructure/PostgresRepository.cs b/Infrastructure/PostgresRepository.cs index 1bf36c0..e4555c1 100644 --- a/Infrastructure/PostgresRepository.cs +++ b/Infrastructure/PostgresRepository.cs @@ -1,4 +1,5 @@ -using Domain; +using System.Globalization; +using Domain; using Npgsql; using NpgsqlTypes; @@ -74,31 +75,65 @@ namespace Infrastructure await using var connection = await _dataSource.OpenConnectionAsync(ct); using var batch = new NpgsqlBatch(connection); - foreach (var m in medicoes) + // Gerar os parâmetros dinamicamente, mantendo a abordagem parametrizada + var valores = medicoes + .Select((m, index) => new + { + Index = index, + Ponto = m.Ponto, + DiaNum = m.DiaNum, + Minuto = m.Minuto, + Origem = m.Origem, + AtivaConsumo = m.AtivaConsumo, + AtivaGeracao = m.AtivaGeracao, + ReativaConsumo = m.ReativaConsumo, + ReativaGeracao = m.ReativaGeracao + }) + .ToList(); + + var query = @" + UPDATE med_5min + SET origem = nv.origem, + ativa_consumo = nv.ativa_consumo, + ativa_geracao = nv.ativa_geracao, + reativa_consumo = nv.reativa_consumo, + reativa_geracao = nv.reativa_geracao + FROM (VALUES"; + + // Adicionar os valores para o `VALUES` + for (int i = 0; i < valores.Count; i++) { - var cmd = new NpgsqlBatchCommand(@" - UPDATE med_5min - SET origem = @origem, - ativa_consumo = @ativa_consumo, - ativa_geracao = @ativa_geracao, - reativa_consumo = @reativa_consumo, - reativa_geracao = @reativa_geracao - WHERE ponto = @ponto - AND dia_num = @dia_num - AND minuto = @minuto;"); - - cmd.Parameters.AddWithValue("origem", m.Origem); - cmd.Parameters.AddWithValue("ativa_consumo", NpgsqlDbType.Numeric, m.AtivaConsumo ?? (object)DBNull.Value); - cmd.Parameters.AddWithValue("ativa_geracao", NpgsqlDbType.Numeric, m.AtivaGeracao ?? (object)DBNull.Value); - cmd.Parameters.AddWithValue("reativa_consumo", NpgsqlDbType.Numeric, m.ReativaConsumo ?? (object)DBNull.Value); - cmd.Parameters.AddWithValue("reativa_geracao", NpgsqlDbType.Numeric, m.ReativaGeracao ?? (object)DBNull.Value); - cmd.Parameters.AddWithValue("ponto", m.Ponto); - cmd.Parameters.AddWithValue("dia_num", m.DiaNum); - cmd.Parameters.AddWithValue("minuto", m.Minuto); - - batch.BatchCommands.Add(cmd); + query += $" (@ponto_{i}, @dia_num_{i}, @minuto_{i}, @origem_{i}, " + + $"@ativa_consumo_{i}, @ativa_geracao_{i}, @reativa_consumo_{i}, @reativa_geracao_{i})"; + if (i < valores.Count - 1) + { + query += ", "; + } } + query += @") AS nv (ponto, dia_num, minuto, origem, ativa_consumo, ativa_geracao, reativa_consumo, reativa_geracao) + WHERE med_5min.ponto = nv.ponto + AND med_5min.dia_num = nv.dia_num + AND med_5min.minuto = nv.minuto;"; + + // Agora, vamos adicionar os parâmetros à query + var cmd = new NpgsqlBatchCommand(query); + + foreach (var valor in valores) + { + cmd.Parameters.AddWithValue($"ponto_{valor.Index}", valor.Ponto); + cmd.Parameters.AddWithValue($"dia_num_{valor.Index}", valor.DiaNum); + cmd.Parameters.AddWithValue($"minuto_{valor.Index}", valor.Minuto); + cmd.Parameters.AddWithValue($"origem_{valor.Index}", valor.Origem); + cmd.Parameters.AddWithValue($"ativa_consumo_{valor.Index}", valor.AtivaConsumo ?? (object)DBNull.Value); + cmd.Parameters.AddWithValue($"ativa_geracao_{valor.Index}", valor.AtivaGeracao ?? (object)DBNull.Value); + cmd.Parameters.AddWithValue($"reativa_consumo_{valor.Index}", valor.ReativaConsumo ?? (object)DBNull.Value); + cmd.Parameters.AddWithValue($"reativa_geracao_{valor.Index}", valor.ReativaGeracao ?? (object)DBNull.Value); + } + + batch.BatchCommands.Add(cmd); + + // Executar a query await batch.ExecuteNonQueryAsync(ct); } } diff --git a/Presentation/Program.cs b/Presentation/Program.cs index 09405bc..68ec52d 100644 --- a/Presentation/Program.cs +++ b/Presentation/Program.cs @@ -12,8 +12,8 @@ class Program 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, 01, 01); - DateTime dataFim = new DateTime(inicio.Year, 02, 01); + DateTime dataIni = new DateTime(inicio.Year, 10, 01); + DateTime dataFim = new DateTime(inicio.Year, 10, 16); // Configuração de dependências (pode usar um container DI depois) var postgresRepo = new PostgresRepository(PG_CONN_STRING_PROD);