예제 #1
0
        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);
            }
        }
예제 #2
0
        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--;
                }
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
 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);
 }
예제 #6
0
 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;
     }
 }
예제 #7
0
        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);
        }
예제 #8
0
 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--;
         }
     }
 }
예제 #9
0
        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);
        }
예제 #10
0
        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++;
                }
            }
        }
예제 #11
0
        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);
        }
예제 #12
0
        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;
                }
            }
        }