Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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);
        }