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; } }
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; } } }
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; } }
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; } }
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; } }
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; } }