private void GravarModelo(RegistroModelo registroModelo)
        {
            DalConnection dal = new DalConnection(configuration, logger);

            try
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("DELETE FROM DSDH_MODELOS_CMV");
                sb.AppendLine("WHERE FILIAL = &FIL");
                sb.AppendLine("AND SECAO = &SEC");
                sb.AppendLine("AND GRUPO = &GRP");
                sb.AppendLine("AND SUBGRUPO = &SGRP");

                Dictionary <string, object> param = new Dictionary <string, object>
                {
                    { "FIL", registroModelo.Filial },
                    { "SEC", registroModelo.Secao },
                    { "GRP", registroModelo.Grupo },
                    { "SGRP", registroModelo.SubGrupo }
                };

                dal.ExecuteNonQuery(sb, param);

                sb = new StringBuilder();
                sb.AppendLine("INSERT INTO DSDH_MODELOS_CMV (");
                sb.AppendLine("FILIAL, SECAO, GRUPO, SUBGRUPO,");
                sb.AppendLine("MEANABSOLUTEERROR,MEANSQUAREDERROR,ROOTMEANSQUAREDERROR,");
                sb.AppendLine("LOSSFUNC,RSQUARED,MODELO)");
                sb.AppendLine("VALUES (&FIL, &SEC, &GRP, &SGRP,");
                sb.AppendLine("&MAB, &MSE, &RMSE, &LSFNC, &RSQ, &MDL)");

                param = new Dictionary <string, object>
                {
                    { "FIL", registroModelo.Filial },
                    { "SEC", registroModelo.Secao },
                    { "GRP", registroModelo.Grupo },
                    { "SGRP", registroModelo.SubGrupo },
                    { "MAB", registroModelo.MeanAbsoluteError },
                    { "MSE", registroModelo.MeanSquaredError },
                    { "RMSE", registroModelo.RootMeanSquaredError },
                    { "LSFNC", registroModelo.LossFunc },
                    { "RSQ", registroModelo.RSquared },
                    { "MDL", registroModelo.Modelo }
                };

                dal.ExecuteNonQuery(sb, param);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dal = null;
            }
        }
        public List <RegistroFilial> ListarFiliais()
        {
            DalConnection dal = new DalConnection(configuration, logger);

            try
            {
                List <RegistroFilial> registroFilials = new List <RegistroFilial>();
                StringBuilder         sb = new StringBuilder();
                sb.AppendLine("SELECT codigo FILIAL,");
                sb.AppendLine("'LOJA '||codigo NOME");
                sb.AppendLine("FROM gs_mvw_filiais");
                sb.AppendLine("WHERE tipofilial = 'L'");
                sb.AppendLine("AND natureza = 'LS'");
                sb.AppendLine("AND codigo >= 5"); // TODO: REMOVER EM PRODUCAO ESTA TRAVADO APENAS UMA FILIAL
                sb.AppendLine("ORDER BY codigo");

                var dt = dal.ExecuteQuery(sb, null);

                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow dataRow in dt.Rows)
                    {
                        RegistroFilial registro = new RegistroFilial();

                        foreach (DataColumn dataColumn in dt.Columns)
                        {
                            switch (dataColumn.ColumnName.ToUpper())
                            {
                            case "FILIAL": registro.Filial = Convert.ToInt32(dataRow[dataColumn]); break;

                            case "NOME": registro.Nome = Convert.ToString(dataRow[dataColumn]); break;

                            default:
                                break;
                            }
                        }

                        registroFilials.Add(registro);
                    }
                }

                return(registroFilials);
            }
            catch
            {
                throw;
            }
            finally
            {
                if (dal != null)
                {
                    dal = null;
                }
            }
        }
Exemple #3
0
        private RegistroCmv CarregaClima(DateTime dia, int Filial)
        {
            DalConnection dal    = new DalConnection(configuration, logger);
            RegistroCmv   result = new RegistroCmv();

            try
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("SELECT c.maxtempc, c.mintempc, c.avgtempc, c.precipmm");
                sb.AppendLine("FROM GS_MVW_FILIAIS f");
                sb.AppendLine("INNER JOIN clima c on c.city = f.cidade");
                sb.AppendLine("                   and c.dia = &DIA");
                sb.AppendLine("WHERE f.codigo = &FIL");

                Dictionary <string, object> param = new Dictionary <string, object>
                {
                    { "DIA", ((dia.Year - 1900) * 100 + dia.Month) * 100 + dia.Day },
                    { "FIL", Filial }
                };

                var dt = dal.ExecuteQuery(sb, param);

                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        foreach (DataColumn dc in dt.Columns)
                        {
                            switch (dc.ColumnName.ToUpper())
                            {
                            case "MAXTEMPC": result.MaxTempC = dr[dc] != DBNull.Value ? (float)Convert.ToDouble(dr[dc]) : 0; break;

                            case "MINTEMPC": result.MinTempC = dr[dc] != DBNull.Value ? (float)Convert.ToDouble(dr[dc]) : 0; break;

                            case "AVGTEMPC": result.AvgTempC = dr[dc] != DBNull.Value ? (float)Convert.ToDouble(dr[dc]) : 0; break;

                            case "PRECIPMM": result.PrecipMm = dr[dc] != DBNull.Value ? (float)Convert.ToDouble(dr[dc]) : 0; break;

                            default: break;
                            }
                        }
                    }
                }

                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dal = null;
            }
        }
Exemple #4
0
        private void GravaPrevisoes(List <RegistroCmv> previsoes, RegistroModelo modelo)
        {
            DalConnection dal = new DalConnection(configuration, logger);

            try
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("DELETE FROM DSDH_PREVISAO_CMV");
                sb.AppendLine("WHERE FILIAL = &FIL");
                sb.AppendLine("AND SECAO = &SEC");
                sb.AppendLine("AND GRUPO = &GRP");
                sb.AppendLine("AND SUBGRUPO = &SGRP");

                Dictionary <string, object> param = new Dictionary <string, object>
                {
                    { "FIL", modelo.Filial },
                    { "SEC", modelo.Secao },
                    { "GRP", modelo.Grupo },
                    { "SGRP", modelo.SubGrupo }
                };

                dal.ExecuteNonQuery(sb, param);

                sb = new StringBuilder();
                sb.AppendLine("INSERT INTO DSDH_PREVISAO_CMV (");
                sb.AppendLine("DIA, FILIAL, SECAO, GRUPO, SUBGRUPO, CMV )");
                sb.AppendLine("VALUES (&DIA, &FIL, &SEC, &GRP, &SGRP, &CMV)");

                foreach (var previsao in previsoes)
                {
                    param = new Dictionary <string, object>
                    {
                        { "DIA", ((previsao.Dia.Year - 1900) * 100 + previsao.Dia.Month) * 100 + previsao.Dia.Day },
                        { "FIL", modelo.Filial },
                        { "SEC", modelo.Secao },
                        { "GRP", modelo.Grupo },
                        { "SGRP", modelo.SubGrupo },
                        { "CMV", Math.Round(previsao.Valor, 2) }
                    };

                    dal.ExecuteNonQuery(sb, param);
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                dal = null;
            }
        }
Exemple #5
0
        public RegistroModelo CarregaModeloMetrica()
        {
            DalConnection dal = new DalConnection(configuration, logger);

            try
            {
                RegistroModelo registro = new RegistroModelo();
                StringBuilder  sb       = new StringBuilder();

                sb.AppendLine("SELECT count(distinct FILIAL) filial, ");
                sb.AppendLine("       count(1) MODELOS,              ");
                sb.AppendLine("       round(avg(rootmeansquarederror), 2) rmse ");
                sb.AppendLine("FROM DSDH_MODELOS_CMV                 ");

                var dt = dal.ExecuteQuery(sb, null);

                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        foreach (DataColumn dc in dt.Columns)
                        {
                            switch (dc.ColumnName.ToUpper())
                            {
                            case "FILIAL": registro.Filial = Convert.ToInt32(dr[dc]); break;

                            case "MODELOS": registro.Secao = Convert.ToInt32(dr[dc]); break;

                            case "RMSE": registro.RootMeanSquaredError = Convert.ToSingle(dr[dc]); break;

                            default:
                                break;
                            }
                        }
                    }
                }

                return(registro);
            }
            catch
            {
                throw;
            }
            finally
            {
                dal = null;
            }
        }
Exemple #6
0
        private bool VerificaFeriado(DateTime dia, int Filial)
        {
            DalConnection dal = new DalConnection(configuration, logger);

            try
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("SELECT 1 feriado");
                sb.AppendLine("FROM DUAL");
                sb.AppendLine("WHERE EXISTS (SELECT 1 FROM GS_META_DIASATIPICO WHERE dia_meta = &DIA)");
                sb.AppendLine("OR exists (select 1 from gs_meta_diasatipico_filial where dia_meta = &DIA and filial = &FIL)");

                Dictionary <string, object> param = new Dictionary <string, object>
                {
                    { "DIA", dia },
                    { "FIL", Filial }
                };

                var dt = dal.ExecuteQuery(sb, param);

                if (dt != null && dt.Rows.Count > 0)
                {
                    return(Convert.ToInt32(dt.Rows[0][0]) == 1);
                }

                return(false);
            }
            catch
            {
                throw;
            }
            finally
            {
                dal = null;
            }
        }
        public List <RegistroCategoria> ListarCategorias()
        {
            DalConnection dal = new DalConnection(configuration, logger);

            try
            {
                List <RegistroCategoria> registroCategorias = new List <RegistroCategoria>();

                StringBuilder sb = new StringBuilder();
                sb.AppendLine("select secao,");
                sb.AppendLine("       grupo,");
                sb.AppendLine("       subgrupo,");
                sb.AppendLine("       dsecao,");
                sb.AppendLine("       dgrupo,");
                sb.AppendLine("       dsubgrupo");
                sb.AppendLine("from gs_mvw_estr_mercadologica");
                sb.AppendLine("where secao > 0");
                sb.AppendLine("and grupo > 0");
                sb.AppendLine("and subgrupo > 0");
                sb.AppendLine("and categoria = 0");
                sb.AppendLine("order by secao, grupo, subgrupo");

                var dt = dal.ExecuteQuery(sb, null);

                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow dataRow in dt.Rows)
                    {
                        RegistroCategoria registro = new RegistroCategoria();

                        foreach (DataColumn dataColumn in dt.Columns)
                        {
                            switch (dataColumn.ColumnName.ToUpper())
                            {
                            case "SECAO": registro.Secao = Convert.ToInt32(dataRow[dataColumn]); break;

                            case "GRUPO": registro.Grupo = Convert.ToInt32(dataRow[dataColumn]); break;

                            case "SUBGRUPO": registro.SubGrupo = Convert.ToInt32(dataRow[dataColumn]); break;

                            case "DSECAO": registro.DSecao = Convert.ToString(dataRow[dataColumn]); break;

                            case "DGRUPO": registro.DGrupo = Convert.ToString(dataRow[dataColumn]); break;

                            case "DSUBGRUPO": registro.DSubGrupo = Convert.ToString(dataRow[dataColumn]); break;

                            default:
                                break;
                            }
                        }

                        registroCategorias.Add(registro);
                    }
                }

                return(registroCategorias);
            }
            catch
            {
                throw;
            }
            finally
            {
                dal = null;
            }
        }
        private List <RegistroCmv> ListarHistorico(int Filial, int Secao, int Grupo, int SubGrupo)
        {
            DalConnection dal = new DalConnection(configuration, logger);

            try
            {
                List <RegistroCmv> registroCmvs = new List <RegistroCmv>();

                StringBuilder sb = new StringBuilder();
                sb.AppendLine("select RMS7TO_DATE(g.dia) DIA,");
                sb.AppendLine("       case when df.dia_meta is null");
                sb.AppendLine("              and d.dia_meta is null then 0 else 1 end feriado,");
                sb.AppendLine("       C.MAXTEMPC,");
                sb.AppendLine("       C.MINTEMPC,");
                sb.AppendLine("       C.AVGTEMPC,");
                sb.AppendLine("       C.PRECIPMM,");
                sb.AppendLine("       G.VDA_CMV VALOR");
                sb.AppendLine("from gs_agg_coml_sgrp_dia g");
                sb.AppendLine("inner join gs_mvw_filiais f on f.codigo = g.filial");
                sb.AppendLine("left join clima c on c.city = f.cidade");
                sb.AppendLine("                 and c.dia = g.dia");
                sb.AppendLine("left join gs_meta_diasatipico_filial df on df.filial = g.filial");
                sb.AppendLine("                                        and df.dia_meta = rms7to_date(g.dia)");
                sb.AppendLine("left join gs_meta_diasatipico d on d.dia_meta = rms7to_date(g.dia)");
                sb.AppendLine("where g.filial = &FILIAL");
                sb.AppendLine("and g.secao = &SECAO");
                sb.AppendLine("and g.grp = &GRUPO");
                sb.AppendLine("and g.sgrp = &SUBGRUPO");
                sb.AppendLine("and g.dia between 1170101 and 1190831"); // TODO: REMOVER ESSE FILTRO DE DATA EM PRODUÇÃO
                sb.AppendLine("and g.vda_cmv > 0");
                sb.AppendLine("order by g.dia");

                Dictionary <string, object> param = new Dictionary <string, object>
                {
                    { "FILIAL", Filial },
                    { "SECAO", Secao },
                    { "GRUPO", Grupo },
                    { "SUBGRUPO", SubGrupo }
                };

                var dt = dal.ExecuteQuery(sb, param);

                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow dataRow in dt.Rows)
                    {
                        RegistroCmv registro = new RegistroCmv();

                        foreach (DataColumn dataColumn in dt.Columns)
                        {
                            switch (dataColumn.ColumnName.ToUpper())
                            {
                            case "DIA": registro.Dia = Convert.ToDateTime(dataRow[dataColumn]); break;

                            case "VALOR": registro.Valor = (float)Convert.ToDouble(dataRow[dataColumn]); break;

                            case "FERIADO": registro.Feriado = Convert.ToInt32(dataRow[dataColumn]) == 1; break;

                            case "MAXTEMPC": registro.MaxTempC = dataRow[dataColumn] != DBNull.Value ? (float)Convert.ToDouble(dataRow[dataColumn]) : 0; break;

                            case "MIMTEMPC": registro.MinTempC = dataRow[dataColumn] != DBNull.Value ? (float)Convert.ToDouble(dataRow[dataColumn]) : 0; break;

                            case "AVGTEMPC": registro.AvgTempC = dataRow[dataColumn] != DBNull.Value ? (float)Convert.ToDouble(dataRow[dataColumn]) : 0; break;

                            case "PRECIPMM": registro.PrecipMm = dataRow[dataColumn] != DBNull.Value ? (float)Convert.ToDouble(dataRow[dataColumn]) : 0; break;

                            default:
                                break;
                            }
                        }

                        registroCmvs.Add(registro);
                    }
                }

                return(registroCmvs);
            }
            catch (OracleException ex)
            {
                if (ex.Message.ToLower().Contains("timeout"))
                {
                    logger.LogError(ex, $"Time out ao consultar historico, sera realizada uma nova tentativa! Filial: {Filial} Categoria: {Secao}/{Grupo}/{SubGrupo}");
                    Task.Delay(1000).Wait();
                    return(ListarHistorico(Filial, Secao, Grupo, SubGrupo));
                }
                else
                {
                    throw ex;
                }
            }
            catch
            {
                throw;
            }
            finally
            {
                dal = null;
            }
        }
Exemple #9
0
        public List <RegistroModelo> CarregaModelosMetricas()
        {
            DalConnection         dal             = new DalConnection(configuration, logger);
            List <RegistroModelo> registroModelos = null;

            try
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("SELECT FILIAL, SECAO, GRUPO, SUBGRUPO,");
                sb.AppendLine("ROUND(MEANABSOLUTEERROR, 2) MEANABSOLUTEERROR, ROUND(MEANSQUAREDERROR, 2) MEANSQUAREDERROR, ROUND(ROOTMEANSQUAREDERROR, 2) ROOTMEANSQUAREDERROR");
                sb.AppendLine("FROM DSDH_MODELOS_CMV");
                sb.AppendLine("ORDER BY FILIAL, SECAO, GRUPO, SUBGRUPO");

                var dt = dal.ExecuteQuery(sb, null);

                if (dt != null && dt.Rows.Count > 0)
                {
                    registroModelos = new List <RegistroModelo>();

                    foreach (DataRow dr in dt.Rows)
                    {
                        RegistroModelo modelo = new RegistroModelo();

                        foreach (DataColumn dc in dt.Columns)
                        {
                            switch (dc.ColumnName.ToUpper())
                            {
                            case "FILIAL": modelo.Filial = Convert.ToInt32(dr[dc]); break;

                            case "SECAO": modelo.Secao = Convert.ToInt32(dr[dc]); break;

                            case "GRUPO": modelo.Grupo = Convert.ToInt32(dr[dc]); break;

                            case "SUBGRUPO": modelo.SubGrupo = Convert.ToInt32(dr[dc]); break;

                            case "MODELO": modelo.Modelo = dr[dc] != DBNull.Value ? (byte[])dr[dc] : null; break;

                            case "MEANABSOLUTEERROR": modelo.MeanAbsoluteError = Convert.ToDouble(dr[dc]); break;

                            case "MEANSQUAREDERROR": modelo.MeanSquaredError = Convert.ToDouble(dr[dc]); break;

                            case "ROOTMEANSQUAREDERROR": modelo.RootMeanSquaredError = Convert.ToDouble(dr[dc]); break;

                            default:
                                break;
                            }
                        }

                        registroModelos.Add(modelo);
                    }
                }

                return(registroModelos);
            }
            catch
            {
                throw;
            }
            finally
            {
                dal = null;
            }
        }
Exemple #10
0
        public List <RegistroCmv> CarregaPrevisaoDetalhada(DateTime dtIni, DateTime dtFim, int[] Filiais, int[] Categorias)
        {
            DalConnection dal = new DalConnection(configuration, logger);

            try
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("select p.secao, p.grupo, p.subgrupo,");
                sb.AppendLine("       sum(p.cmv) previsao,");
                sb.AppendLine("       sum((r.vda_cmv)) cmv_real");
                sb.AppendLine("from dsdh_previsao_cmv p");
                sb.AppendLine("inner join gs_agg_coml_sgrp_dia r on r.dia = p.dia");
                sb.AppendLine("                                and r.filial = p.filial");
                sb.AppendLine("                                and r.secao = p.secao");
                sb.AppendLine("                                and r.grp = p.grupo");
                sb.AppendLine("                                and r.sgrp = p.subgrupo");
                sb.AppendLine("where p.dia between &DTINI and &DTFIM");
                sb.AppendLine("and r.vda_cmv > 0");

                if (Filiais != null && Filiais.Length > 0)
                {
                    sb.AppendLine("and p.filial in (");

                    for (int i = 0; i < Filiais.Length; i++)
                    {
                        sb.Append($"{Filiais[i]}");
                        if (i + 1 < Filiais.Length)
                        {
                            sb.Append(",");
                        }
                    }

                    sb.AppendLine(")");
                }

                if (Categorias != null && Categorias.Length > 0)
                {
                    sb.AppendLine("and (p.secao, p.grupo, p.subgrupo ) in (");

                    for (int i = 0; i < Categorias.Length; i++)
                    {
                        int secao    = 0;
                        int grupo    = 0;
                        int subgrupo = 0;

                        secao    = (int)Math.Truncate((decimal)Categorias[i] / 1000000);
                        grupo    = (int)Math.Truncate(Math.Truncate((decimal)Categorias[i] / 1000) % 1000);
                        subgrupo = (int)Math.Truncate((decimal)Categorias[i] % 1000);

                        sb.AppendLine($"select {secao} s, {grupo} g, {subgrupo} sg from dual");

                        if (i + 1 < Categorias.Length)
                        {
                            sb.AppendLine("UNION ALL");
                        }
                    }

                    sb.AppendLine(")");
                }

                sb.AppendLine("group by p.secao, p.grupo, p.subgrupo");
                sb.AppendLine("order by p.secao, p.grupo, p.subgrupo");

                Dictionary <string, object> param = new Dictionary <string, object>
                {
                    { "DTINI", ((dtIni.Year - 1900) * 100 + dtIni.Month) * 100 + dtIni.Day },
                    { "DTFIM", ((dtFim.Year - 1900) * 100 + dtFim.Month) * 100 + dtFim.Day },
                };

                var dt = dal.ExecuteQuery(sb, param);

                List <RegistroCmv> registroCmvs = null;

                if (dt != null && dt.Rows.Count > 0)
                {
                    registroCmvs = new List <RegistroCmv>();
                    foreach (DataRow dr in dt.Rows)
                    {
                        RegistroCmv registroCmv = new RegistroCmv();

                        foreach (DataColumn dc in dt.Columns)
                        {
                            switch (dc.ColumnName.ToUpper())
                            {
                            //case "FILIAL": registroCmv.Filial = Convert.ToInt32(dr[dc]); break;
                            case "SECAO": registroCmv.Secao = Convert.ToInt32(dr[dc]); break;

                            case "GRUPO": registroCmv.Grupo = Convert.ToInt32(dr[dc]); break;

                            case "SUBGRUPO": registroCmv.SubGrupo = Convert.ToInt32(dr[dc]); break;

                            case "PREVISAO": registroCmv.Previsao = Convert.ToSingle(dr[dc]); break;

                            case "CMV_REAL":
                                registroCmv.ValorIsNull = dr[dc] == DBNull.Value;
                                registroCmv.Valor       = dr[dc] != DBNull.Value ? Convert.ToSingle(dr[dc]) : 0;
                                break;

                            default:
                                break;
                            }
                        }

                        registroCmvs.Add(registroCmv);
                    }
                }

                return(registroCmvs);
            }
            catch
            {
                throw;
            }
            finally
            {
                dal = null;
            }
        }