206 lines
6.7 KiB
Ruby
206 lines
6.7 KiB
Ruby
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
# ==========================================================
|
|
# Verificación Final Comparativa - FENIX vs DASU-SQL4
|
|
# ==========================================================
|
|
|
|
require 'tiny_tds'
|
|
require_relative 'drones/lib/dasu_executor'
|
|
|
|
puts "═" * 70
|
|
puts " VERIFICACIÓN FINAL - FENIX (PRODUCCIÓN) vs DASU-SQL4"
|
|
puts " Fecha: #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
|
|
puts "═" * 70
|
|
|
|
# ==========================================
|
|
# 1. FENIX - Obtener datos
|
|
# ==========================================
|
|
puts "\n[1] Conectando a FENIX (PRODUCCIÓN)..."
|
|
|
|
begin
|
|
pass_cmd = `ruby adn/tools/candados/candados.rb get utnlarioja.intranet:monlaricardo 2>/dev/null`.strip
|
|
sql_user = 'UTNlarioja\\monlaricardo'
|
|
sql_host = '10.0.10.200'
|
|
|
|
client_fenix = TinyTds::Client.new(
|
|
username: sql_user,
|
|
password: pass_cmd,
|
|
host: sql_host,
|
|
timeout: 600,
|
|
database: 'sysdasuten'
|
|
)
|
|
puts "[+] Conectado a FENIX"
|
|
|
|
# Consultas a FENIX
|
|
puts "\n[2] Obteniendo datos de FENIX..."
|
|
|
|
fenix_data = {}
|
|
|
|
# Total BonosAfiliado
|
|
result = client_fenix.execute("SELECT COUNT(*) as c FROM BonosAfiliado")
|
|
fenix_data[:total_bonos] = result.first['c']
|
|
|
|
# Registros por día (últimos 5 días)
|
|
result = client_fenix.execute("
|
|
SELECT TOP 5
|
|
CAST(fecha AS DATE) as dia,
|
|
COUNT(*) as c
|
|
FROM BonosAfiliado
|
|
GROUP BY CAST(fecha AS DATE)
|
|
ORDER BY dia DESC
|
|
")
|
|
fenix_data[:por_dia] = {}
|
|
result.each { |r| fenix_data[:por_dia][r['dia']] = r['c'] }
|
|
|
|
# Última fecha
|
|
result = client_fenix.execute("SELECT MAX(fecha) as ultima FROM BonosAfiliado")
|
|
fenix_data[:ultima_fecha] = result.first['ultima']
|
|
|
|
# MAX(idsolicitud)
|
|
result = client_fenix.execute("SELECT MAX(idsolicitud) as max_id FROM BonosAfiliado")
|
|
fenix_data[:max_idsolicitud] = result.first['max_id']
|
|
|
|
# AutorizacionBonosExcepcion
|
|
result = client_fenix.execute("SELECT COUNT(*) as c FROM AutorizacionBonosExcepcion")
|
|
fenix_data[:total_aut] = result.first['c']
|
|
|
|
result = client_fenix.execute("SELECT MAX(fechasolicitud) as ultima FROM AutorizacionBonosExcepcion")
|
|
fenix_data[:ultima_fecha_aut] = result.first['ultima']
|
|
|
|
client_fenix.close
|
|
|
|
puts " Total BonosAfiliado: #{fenix_data[:total_bonos]}"
|
|
puts " Última fecha: #{fenix_data[:ultima_fecha]}"
|
|
puts " MAX(idsolicitud): #{fenix_data[:max_idsolicitud]}"
|
|
puts " Total AutorizacionBonosExcepcion: #{fenix_data[:total_aut]}"
|
|
|
|
rescue => e
|
|
puts "[!] Error conectando a FENIX: #{e.message}"
|
|
fenix_data = {}
|
|
end
|
|
|
|
# ==========================================
|
|
# 2. DASU-SQL4 - Obtener datos
|
|
# ==========================================
|
|
puts "\n[3] Conectando a DASU-SQL4..."
|
|
|
|
ps_script = <<~PSCMD.strip
|
|
$ErrorActionPreference = "Stop"
|
|
$JSON_PATH = "C:\\temp\\verificacion_final_output.json"
|
|
$connString = "Server=localhost;Database=sysdasuten;Integrated Security=true;TrustServerCertificate=yes;"
|
|
$conn = New-Object System.Data.SqlClient.SqlConnection($connString)
|
|
$conn.Open()
|
|
|
|
$data = @{}
|
|
|
|
# Total BonosAfiliado
|
|
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT COUNT(*) as c FROM BonosAfiliado", $conn)
|
|
$data.total_bonos = $cmd.ExecuteScalar()
|
|
|
|
# Por día
|
|
$cmd = New-Object System.Data.SqlClient.SqlCommand("
|
|
SELECT TOP 5
|
|
CONVERT(varchar, CAST(fecha AS DATE), 120) as dia,
|
|
COUNT(*) as c
|
|
FROM BonosAfiliado
|
|
GROUP BY CAST(fecha AS DATE)
|
|
ORDER BY dia DESC
|
|
", $conn)
|
|
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
|
|
$ds = New-Object System.Data.DataSet
|
|
$adapter.Fill($ds)
|
|
$por_dia = @{}
|
|
$ds.Tables[0].Rows | ForEach-Object { $por_dia[$($_.dia)] = $($_.c) }
|
|
$data.por_dia = $por_dia
|
|
|
|
# Última fecha
|
|
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT MAX(fecha) as ultima FROM BonosAfiliado", $conn)
|
|
$data.ultima_fecha = $cmd.ExecuteScalar()
|
|
|
|
# MAX(idsolicitud)
|
|
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT MAX(idsolicitud) as max_id FROM BonosAfiliado", $conn)
|
|
$data.max_idsolicitud = $cmd.ExecuteScalar()
|
|
|
|
# AutorizacionBonosExcepcion
|
|
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT COUNT(*) as c FROM AutorizacionBonosExcepcion", $conn)
|
|
$data.total_aut = $cmd.ExecuteScalar()
|
|
|
|
$cmd = New-Object System.Data.SqlClient.SqlCommand("SELECT MAX(fechasolicitud) as ultima FROM AutorizacionBonosExcepcion", $conn)
|
|
$data.ultima_fecha_aut = $cmd.ExecuteScalar()
|
|
|
|
$conn.Close()
|
|
|
|
$data | ConvertTo-Json -Depth 5 | Out-File -FilePath $JSON_PATH -Encoding utf8
|
|
PSCMD
|
|
|
|
begin
|
|
DasuExecutor.execute_ps_on_dasu(ps_script, output_path: 'C:\temp\verificacion_final_output.json')
|
|
dasu_data = DasuExecutor.read_json_from_dasu('C:\temp\verificacion_final_output.json')
|
|
puts "[+] Conectado a DASU-SQL4"
|
|
|
|
puts " Total BonosAfiliado: #{dasu_data['total_bonos']}"
|
|
puts " Última fecha: #{dasu_data['ultima_fecha']}"
|
|
puts " MAX(idsolicitud): #{dasu_data['max_idsolicitud']}"
|
|
puts " Total AutorizacionBonosExcepcion: #{dasu_data['total_aut']}"
|
|
|
|
rescue => e
|
|
puts "[!] Error consultando DASU-SQL4: #{e.message}"
|
|
dasu_data = {}
|
|
end
|
|
|
|
# ==========================================
|
|
# 3. COMPARAR
|
|
# ==========================================
|
|
puts "\n" + "═" * 70
|
|
puts " COMPARACIÓN"
|
|
puts "═" * 70
|
|
|
|
def comparar(nombre, fenix, dasu, formato = nil)
|
|
fenix_val = fenix.nil? ? "N/A" : (formato ? formato.call(fenix) : fenix.to_s)
|
|
dasu_val = dasu.nil? ? "N/A" : (formato ? formato.call(dasu) : dasu.to_s)
|
|
|
|
coincide = fenix.to_s == dasu.to_s
|
|
estado = coincide ? "✅" : "⚠️"
|
|
|
|
puts " #{estado} #{nombre}:"
|
|
puts " FENIX: #{fenix_val}"
|
|
puts " DASU: #{dasu_val}"
|
|
|
|
coincide
|
|
end
|
|
|
|
todos_coinciden = true
|
|
|
|
# Comparar totales
|
|
todos_coinciden &= comparar("Total BonosAfiliado", fenix_data[:total_bonos], dasu_data['total_bonos'])
|
|
|
|
# Comparar última fecha
|
|
todos_coinciden &= comparar("Última fecha", fenix_data[:ultima_fecha], dasu_data['ultima_fecha'])
|
|
|
|
# Comparar MAX(idsolicitud)
|
|
todos_coinciden &= comparar("MAX(idsolicitud)", fenix_data[:max_idsolicitud], dasu_data['max_idsolicitud'])
|
|
|
|
# Comparar total autorizaciones
|
|
todos_coinciden &= comparar("Total AutorizacionBonosExcepcion", fenix_data[:total_aut], dasu_data['total_aut'])
|
|
|
|
# Comparar por día
|
|
puts "\n Registros por día (últimos 5 días):"
|
|
if fenix_data[:por_dia] && dasu_data['por_dia']
|
|
fenix_data[:por_dia].each do |dia, count|
|
|
dasu_count = dasu_data['por_dia'][dia.to_s]
|
|
coincide = count == dasu_count
|
|
estado = coincide ? "✅" : "⚠️"
|
|
puts " #{estado} #{dia}: FENIX=#{count} | DASU=#{dasu_count}"
|
|
todos_coinciden = false unless coincide
|
|
end
|
|
end
|
|
|
|
puts "\n" + "═" * 70
|
|
if todos_coinciden
|
|
puts " ✅ TODOS LOS DATOS COINCIDEN - EL SISTEMA ESTÁ ACTUALIZADO"
|
|
else
|
|
puts " ⚠️ HAY DIFERENCIAS - REVISAR"
|
|
end
|
|
puts "═" * 70
|