public ConsultarSePapelExisteResponse ConsultarSePapelExiste(ConsultarSePapelExisteRequest pRequest) { ConsultarSePapelExisteResponse lResposta = new ConsultarSePapelExisteResponse(); try { //Se ainda não estiver carregado, pedimos para carregar novamente os dados na //hashtable chamando o método ListarPapeisNegociadosBovespaBmf if (ListaPapeisNegociados == null) { ListarPapeisNegociadosBovespaBmf(null); logger.InfoFormat("HashTable de Papéis negociados preenchida com [{0}] entradas", ListaPapeisNegociados.Count); } string lAtivo = pRequest.Ativo.ToUpper(); if (lAtivo.Substring(lAtivo.Length - 1) == "F") { lAtivo = lAtivo.Remove(lAtivo.Length - 1); } var lPapeis = from a in ListaPapeisNegociados.Cast <DictionaryEntry>() where a.Key.ToString().ToUpper().Contains(lAtivo) select a; lResposta.PapelExiste = (lPapeis.Count <DictionaryEntry>() > 0); if (lResposta.PapelExiste == false) { if (PapeisExistentesServicoCotacao.Contains(lAtivo)) { lResposta.PapelExiste = true; } } } catch (Exception ex) { lResposta.DescricaoResposta = ex.Message; lResposta.StatusResposta = MensagemResponseStatusEnum.ErroPrograma; logger.Error(ex.StackTrace); } return(lResposta); }
/// <summary> /// Consulta na memória Efetuando um query de Linq dentro de uma hashtable que está na memória /// </summary> /// <param name="pRequest">Request do papel negociado</param> /// <returns>Retorna uma lista dos papeis que estão em na memória</returns> public ConsultarPapelNegociadoResponse ConsultarPapelNegociado(ConsultarPapelNegociadoRequest pRequest) { ConsultarPapelNegociadoResponse lResposta = new ConsultarPapelNegociadoResponse(pRequest.CodigoMensagem); PapelNegociadoBmfDbLib lPapelBmfDb = new PapelNegociadoBmfDbLib(); PapelNegociadoBovespaDbLib lPapelBovespaDb = new PapelNegociadoBovespaDbLib(); bool lPapelEncontrado = false; string lAtivosParaLog = ""; List <string> lstAtivosTemp = new List <string>(); foreach (string lAtivo in pRequest.LstAtivos) { lAtivosParaLog += string.Format("{0}, ", lAtivo); if (lAtivo.ToLower().Substring(lAtivo.Length - 1).Equals("f")) { lstAtivosTemp.Add(lAtivo.Remove(lAtivo.Length - 1)); } else { lstAtivosTemp.Add(lAtivo); } } lAtivosParaLog = lAtivosParaLog.TrimEnd(", ".ToCharArray()); logger.InfoFormat("> Chamada ConsultarPapelNegociado [{0}]", lAtivosParaLog); try { //Se ainda não estiver carregado, pedimos para carregar novamente os dados na //hashtable chamando o método ListarPapeisNegociadosBovespaBmf if (ListaPapeisNegociados == null) { ListarPapeisNegociadosBovespaBmf(null); logger.InfoFormat("HashTable de Papéis negociados preenchida com [{0}] entradas", ListaPapeisNegociados.Count); } //lock (ListaPapeisNegociados) //{ var lPapeis = from a in ListaPapeisNegociados.Cast <DictionaryEntry>() select a; logger.InfoFormat("[{0}] Papéis selecionados depois do cast", lPapeis.Count()); if (lPapeis.Count() > 0) { ///Filtro de ativos if (pRequest.LstAtivos.Count > 0) { if (pRequest.LstAtivos.Count == 1) { string lBusca = pRequest.LstAtivos[0]; if (lBusca.ToLower().Substring(lBusca.Length - 1).Equals("f")) { lBusca = lBusca.Remove(lBusca.Length - 1); } lPapeis = from a in ListaPapeisNegociados.Cast <DictionaryEntry>() where a.Key.ToString().Contains(lBusca) select a; } else { lPapeis = from a in ListaPapeisNegociados.Cast <DictionaryEntry>() where lstAtivosTemp.Contains(a.Key.ToString()) select a; } } //filtro com a data de vencimento no resultado if (pRequest.DataVencimento != null) { lPapeis = lPapeis.Where(delegate(DictionaryEntry dic) { bool lReturn = false; string lNameType = dic.Value.GetType().Name; if (lNameType.Equals("PapelNegociadoBovespaInfo")) { lReturn = (((PapelNegociadoBovespaInfo)dic.Value).DataVencimento != null && ((PapelNegociadoBovespaInfo)dic.Value).DataVencimento.Value.ToString("dd/MM/yyyy").Equals(pRequest.DataVencimento.Value.ToString("dd/MM/yyyy"))); } else if (lNameType.Equals("PapelNegociadoBmfInfo")) { lReturn = (((PapelNegociadoBmfInfo)dic.Value).DataVencimento != null && ((PapelNegociadoBmfInfo)dic.Value).DataVencimento.Value.ToString("dd/MM/yyyy").Equals(pRequest.DataVencimento.Value.ToString("dd/MM/yyyy"))); } else { return(lReturn); } return(lReturn); }); } ///Filtro com o tipo de mercado no resultado if (!pRequest.TipoMercado.Equals(0)) { lPapeis = lPapeis.Where(delegate(DictionaryEntry dic) { string lNameType = dic.Value.GetType().Name; if (lNameType.Equals("PapelNegociadoBovespaInfo")) { return(((PapelNegociadoBovespaInfo)dic.Value).TipoMercado == pRequest.TipoMercado); } else { return(false); } }); } ///Filtro de Tipo Segmento de mercado: Se for BMF efetua o filtro if (pRequest.DescTipoMercado != null && pRequest.DescTipoMercado.Equals("BMF")) { lPapeis = lPapeis.Where(delegate(DictionaryEntry dic) { string lNameType = dic.Value.GetType().Name; if (lNameType.Equals("PapelNegociadoBmfInfo")) { return(pRequest.DescTipoMercado.Equals("BMF")); } else { return(false); } }); } if (pRequest.DescTipoMercado != null && pRequest.DescTipoMercado.Equals("BOV")) { lPapeis = lPapeis.Where(delegate(DictionaryEntry dic) { string lNameType = dic.Value.GetType().Name; if (lNameType.Equals("PapelNegociadoBovespaInfo")) { return(pRequest.DescTipoMercado.Equals("BOV")); } else { return(false); } }); } foreach (var item in lPapeis) { var lItem = item.Value; string lNameType = item.Value.GetType().Name; if (lNameType.Equals("PapelNegociadoBmfInfo")) { lResposta.LstPapelBmfInfo.Add((PapelNegociadoBmfInfo)item.Value); } if (lNameType.Equals("PapelNegociadoBovespaInfo")) { lResposta.LstPapelBovespaInfo.Add((PapelNegociadoBovespaInfo)item.Value); } if (!lResposta.LstPapelInfo.Contains(item.Key)) { lResposta.LstPapelInfo.Add(item.Key, item.Value); } } lPapelEncontrado = true; string lAtivo = "n/e"; if (pRequest.LstAtivos.Count > 0) { lAtivo = pRequest.LstAtivos[0]; } logger.InfoFormat("< Papel [{0}] encontrado com sucesso. LstPapelBmfInfo.Count: [{1}], LstPapelBovespaInfo.Count: [{2}], LstPapelInfo.Count: [{3}]" , lAtivo , lResposta.LstPapelBmfInfo.Count , lResposta.LstPapelBovespaInfo.Count , lResposta.LstPapelInfo.Count); } if (lPapelEncontrado) { lResposta.DescricaoResposta = "Ativo(s) encontrado(s) com sucesso."; lResposta.StatusResposta = MensagemResponseStatusEnum.OK; } else { lResposta.DescricaoResposta = "Ativo(s) não encontrado(s)"; lResposta.StatusResposta = MensagemResponseStatusEnum.ErroValidacao; } //} } catch (Exception ex) { lResposta.DescricaoResposta = ex.Message; lResposta.StatusResposta = MensagemResponseStatusEnum.ErroPrograma; logger.Error(ex.StackTrace); } return(lResposta); }