public void Guardar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { MC_Lectura lectura = new MC_Lectura { EsNuevo = true, CodRPtoMedFto = resumen.PkCodFormato, NombreArchivo = resumen.ArchivoLectura, FkCodPtoMed = resumen.PkCodPuntoMedicion, FechaLectura = DateTime.Now }; if (this.Guardar(lectura)) { string sql = @"INSERT INTO F_MC_LECTURA_DETALLE (PK_FECHA, PK_COD_INTERVALO, VALOR, ESTADO, SEC_LOG, D_COD_ORIGEN, PK_COD_MAGNITUD_ELEC, PK_COD_LECTURA,fk_cod_punto_medicion) VALUES(:PK_FECHA, :PK_COD_INTERVALO, :VALOR, :ESTADO, :SEC_LOG, :D_COD_ORIGEN, :PK_COD_MAGNITUD_ELEC, :PK_COD_LECTURA,:fk_cod_punto_medicion)"; OracleCommand cmd = base.CrearCommand(); cmd.CommandText = sql; cmd.ArrayBindCount = res.Tabla.Rows.Count; cmd.Parameters.Add("PK_FECHA", OracleDbType.Date, GetArray(res.Tabla, "Fecha"), ParameterDirection.Input); cmd.Parameters.Add("PK_COD_INTERVALO", OracleDbType.Int64, GetArray(res.Tabla, "CodIntervalo"), ParameterDirection.Input); cmd.Parameters.Add("VALOR", OracleDbType.Decimal, GetArray(res.Tabla, "Valor"), ParameterDirection.Input); cmd.Parameters.Add("ESTADO", OracleDbType.Int64, GetArray(res.Tabla.Rows.Count, 1), ParameterDirection.Input); cmd.Parameters.Add("SEC_LOG", OracleDbType.Int64, GetArray(res.Tabla.Rows.Count, lectura.SecLog), ParameterDirection.Input); cmd.Parameters.Add("D_COD_ORIGEN", OracleDbType.Int64, GetArray(res.Tabla.Rows.Count, 1), ParameterDirection.Input); cmd.Parameters.Add("PK_COD_MAGNITUD_ELEC", OracleDbType.Int64, GetArray(res.Tabla, "CodInfCanal"), ParameterDirection.Input); cmd.Parameters.Add("PK_COD_LECTURA", OracleDbType.Int64, GetArray(res.Tabla.Rows.Count, lectura.PkCodLectura), ParameterDirection.Input); cmd.Parameters.Add("fk_cod_punto_medicion", OracleDbType.Int64, GetArray(res.Tabla.Rows.Count, resumen.PkCodPuntoMedicion), ParameterDirection.Input); cmd.BindByName = true; base.Actualizar(cmd); } }
public static void EliminarFueraDeIntervalo(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { MC_IntervaloMaestro intervaloMaestro = MC_IntervaloMaestroMgr.Instancia.GetIntervaloPorFecha(DateTime.Now.Date); DataTable tabla = MC_IntervaloDetalleMgr.Instancia.GetPorPkCodMaestro(intervaloMaestro.PkCodIntervaloMaestro); List <string> horasIntervalos = new List <string>(); foreach (DataRow r in tabla.Rows) { horasIntervalos.Add((string)r[MC_IntervaloDetalle.C_HORA_INTERVALO]); } for (int i = 0; i < res.Registros.Count; i++) { RegistroLectura registro = res.Registros[i]; if (!horasIntervalos.Contains(registro.Hora)) { res.Registros.RemoveAt(i); foreach (DataRow r in registro.RowsItems) { res.Tabla.Rows.Remove(r); } i--; } } }
public bool Validar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { bool resultado = true; MC_IntervaloMaestro intervaloMaestro = MC_IntervaloMaestroMgr.Instancia.GetIntervaloPorFecha(DateTime.Now.Date); DataTable tabla = MC_IntervaloDetalleMgr.Instancia.GetPorPkCodMaestro(intervaloMaestro.PkCodIntervaloMaestro); Dictionary <string, long> horasIntervalos = new Dictionary <string, long>(); foreach (DataRow r in tabla.Rows) { horasIntervalos.Add((string)r[MC_IntervaloDetalle.C_HORA_INTERVALO], (long)r[MC_IntervaloDetalle.C_PK_COD_INTERVALO]); } int contadorFueraIntervalo = 0; foreach (RegistroLectura registro in res.Registros) { if (horasIntervalos.ContainsKey(registro.Hora)) { foreach (DataRow row in registro.RowsItems) { row["CodIntervalo"] = horasIntervalos[registro.Hora]; } } else { contadorFueraIntervalo++; } } resumen[Nombre] = contadorFueraIntervalo; return(resultado); }
public bool Validar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { bool resultado = true; Dictionary <string, int> contadores = new Dictionary <string, int>(); foreach (RegistroLectura registro in res.Registros) { string llave = registro.Fecha.Date.ToString("ddMMyy") + " " + registro.Hora; if (contadores.ContainsKey(llave)) { contadores[llave]++; } else { contadores[llave] = 1; } } int registroRepetidos = 0; foreach (int c in contadores.Values) { if (c > 1) { registroRepetidos++; } } resumen[Nombre] = registroRepetidos; return(resultado); }
private void Guardar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { MC_LecturaDetalle.EliminarMarcadosParaBorrar(resumen, res, parametros); MC_LecturaDetalle.EliminarDuplicados(resumen, res, parametros); MC_LecturaDetalle.EliminarFueraDeIntervalo(resumen, res, parametros); MC_LecturaMgr.Instancia.Guardar(resumen, res, parametros); }
private void AplicarMultiplicadores(ResultadoLectura res, ParametrosLectura parametros) { foreach (DataRow r in res.Tabla.Rows) { MC_RPuntoMedicionFormatoDetalle rmc = GetRMedidorCanal(parametros.DetalleMagElec, (long)r["CodInfCanal"]); r["Valor"] = (double)r["Valor"] * rmc.Kc * rmc.Kct * rmc.Kpt; } }
public bool AplicarValidaciones(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros, TipoValidador tipo) { bool resultado = true; foreach (IValidadorLectura v in _validadores) { if (v.Tipo == tipo) { resultado = resultado && v.Validar(resumen, res, parametros); } } return(resultado); }
public static void EliminarMarcadosParaBorrar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { for (int i = 0; i < res.Registros.Count; i++) { RegistroLectura registro = res.Registros[i]; if (registro.MarcadoParaBorrar) { res.Registros.RemoveAt(i); foreach (DataRow r in registro.RowsItems) { res.Tabla.Rows.Remove(r); } i--; } } }
public bool Validar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { bool resultado = true; MC_IntervaloMaestro intervaloMaestro = MC_IntervaloMaestroMgr.Instancia.GetIntervaloPorFecha(DateTime.Now.Date); DataTable tabla = MC_IntervaloDetalleMgr.Instancia.GetPorPkCodMaestro(intervaloMaestro.PkCodIntervaloMaestro); List <string> horasIntervalos = new List <string>(); Dictionary <DateTime, List <string> > dicVerifDatosInterv = new Dictionary <DateTime, List <string> >(); foreach (DataRow r in tabla.Rows) { horasIntervalos.Add((string)r[MC_IntervaloDetalle.C_HORA_INTERVALO]); } int contadorFaltantes = 0; foreach (RegistroLectura registro in res.Registros) { if (!dicVerifDatosInterv.ContainsKey(registro.Fecha.Date)) { dicVerifDatosInterv[registro.Fecha.Date] = new List <string>(); foreach (string h in horasIntervalos) { dicVerifDatosInterv[registro.Fecha.Date].Add(h); } } dicVerifDatosInterv[registro.Fecha.Date].Remove(registro.Hora); } int idx = 0; foreach (List <string> lista in dicVerifDatosInterv.Values) { if (idx > 0 && idx < dicVerifDatosInterv.Values.Count - 1) { contadorFaltantes += lista.Count; } idx++; } resumen[Nombre] = contadorFaltantes; return(resultado); }
private void ProcesarArchivo(string archivo) { MC_RPuntoMedicionFormato formato = null; ResumenLecturaMedidor resumen = null; GetFormatoLectura(archivo, out resumen, out formato); if (formato != null) { resumen.PkCodFormato = formato.FkCodFormato; resumen.ArchivoLectura = Path.GetFileName(archivo); if (_lectores.ContainsKey(resumen.PkCodFormato)) { ParametrosLectura parametros = new ParametrosLectura(); parametros.DetalleMagElec = OraDalMC_RPuntoMedicionFormatoDetalleMgr.Instancia.GetListaDefMagElec(formato.PkCodRptoMedFto); try { ResultadoLectura res = _lectores[resumen.PkCodFormato].Leer(archivo, parametros); AplicarMultiplicadores(res, parametros); ValidadorLecturaMgr.Instancia.AplicarValidaciones(resumen, res, parametros, TipoValidador.Consistencia); if (ValidadorLecturaMgr.Instancia.AplicarValidaciones(resumen, res, parametros, TipoValidador.Cargado)) { Guardar(resumen, res, parametros); } resumen.RegistrosArchivo = res.Registros.Count; if (res.Registros.Count > 0) { resumen.FechaHoraPrimerRegistro = res.Registros[0].Fecha.ToString("dd/MMM/yyyy") + " " + res.Registros[0].Hora; resumen.FechaHoraUltimoRegistro = res.Registros[res.Registros.Count - 1].Fecha.ToString("dd/MMM/yyyy") + " " + res.Registros[res.Registros.Count - 1].Hora; } OnArchivoProcesado(resumen); } catch (Exception ex) { PistaMgr.Instance.Error("MC", ex); } _cantidadProcesados++; } } }
public bool Validar(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { bool resultado = true; RegistroLectura ultimoEnBD = MC_LecturaMgr.Instancia.GetUltimoRegistroBD(resumen.PkCodPuntoMedicion); MC_IntervaloMaestro defIntervaloActual = MC_IntervaloMaestroMgr.Instancia.GetIntervaloPorFecha(DateTime.Now.Date); if (ultimoEnBD == null || ultimoEnBD.Fecha.AddMinutes(defIntervaloActual.PeriodoTiempo) == res.Registros[0].Fecha) { resumen[Nombre] = "OK"; } else if (ultimoEnBD.Fecha.AddMinutes(defIntervaloActual.PeriodoTiempo) < res.Registros[0].Fecha) {//hay hueco resumen[Nombre] = "Faltan Registros"; resultado = false; } else { List <RegistroLectura> registrosAnteriores = MC_LecturaMgr.Instancia.GetRegistrosDesdeFecha(resumen.PkCodPuntoMedicion, res.Registros[0].Fecha.Date); MC_LecturaDetalle.EliminarDuplicados(resumen, res, parametros); MC_LecturaDetalle.EliminarFueraDeIntervalo(resumen, res, parametros); int i = 0, j = 0; for (; i < registrosAnteriores.Count && j < res.Registros.Count; i++) { if (registrosAnteriores[i].Igual(res.Registros[j])) { res.Registros[j].MarcadoParaBorrar = true; } else { resumen[Nombre] = "Datos Inconsistentes"; resultado = false; } j++; } if (resultado) { resumen[Nombre] = "OK"; } } return(resultado); }
public static void EliminarDuplicados(ResumenLecturaMedidor resumen, ResultadoLectura res, ParametrosLectura parametros) { Dictionary <string, int> contadores = new Dictionary <string, int>(); for (int i = 0; i < res.Registros.Count; i++) { RegistroLectura registro = res.Registros[i]; string llave = registro.Fecha.Date.ToString("ddMMyy") + " " + registro.Hora; if (contadores.ContainsKey(llave)) { res.Registros.RemoveAt(i); foreach (DataRow r in registro.RowsItems) { res.Tabla.Rows.Remove(r); } i--; } else { contadores[llave] = 1; } } }