private ValidacaoRiscoResponse ValidarPipeLineOrdem(ValidacaoRiscoRequest pParametros, string CodigoCarteiraRecomendada) { ValidacaoRiscoResponse PipeLineResponse = new ValidacaoRiscoResponse(); if (pParametros.EnviarOrdemRequest.OrdemInfo.Side == RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Compra) { PipeLineResponse = ComprarCarteiraRecomendada(pParametros, CodigoCarteiraRecomendada); } if (pParametros.EnviarOrdemRequest.OrdemInfo.Side == RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Venda) { PipeLineResponse = VenderCarteiraRecomendada(pParametros, CodigoCarteiraRecomendada); } return(PipeLineResponse); }
public EnviarOrdemResponse EnviarOrdem(EnviarOrdemRequest pParametros, string CodigoCarteiraRecomendada) { EnviarOrdemResponse OrdemResposta = new EnviarOrdemResponse(); OrdemFIXResponse <OrdemInfo> OrdemFixResponse = this.ParsearOrdemCliente(pParametros.ClienteOrdemInfo, CodigoCarteiraRecomendada); if (OrdemFixResponse.StatusResposta == OMS.Ordens.Lib.Enum.CriticaRiscoEnum.Sucesso) { EnviarOrdemRoteadorRequest OrdemRoteadorRequest = new EnviarOrdemRoteadorRequest(); OrdemRoteadorRequest.OrdemInfo = OrdemFixResponse.Objeto; ValidacaoRiscoRequest RiscoRequisicao = new ValidacaoRiscoRequest(); RiscoRequisicao.EnviarOrdemRequest = OrdemRoteadorRequest; ValidacaoRiscoResponse RiscoResposta = this.ValidarPipeLineOrdem(RiscoRequisicao, CodigoCarteiraRecomendada); if (RiscoResposta.CriticaInfo.Count >= 0) { OrdemResposta.CriticaInfo = new List <PipeLineCriticaInfo>(); foreach (var RiscoItem in RiscoResposta.CriticaInfo) { PipeLineCriticaInfo _PipeLineCriticaInfo = new PipeLineCriticaInfo(); OrdemResposta.CriticaInfo.Add( new PipeLineCriticaInfo() { Critica = RiscoItem.Critica, CriticaTipo = (OMS.Ordens.Lib.Enum.CriticaRiscoEnum)RiscoItem.CriticaTipo, DataHoraCritica = RiscoItem.DataHoraCritica }); } OrdemResposta.DataResposta = RiscoResposta.DataResposta; OrdemResposta.DescricaoResposta = RiscoResposta.DescricaoResposta; OrdemResposta.StackTrace = RiscoResposta.StackTrace; OrdemResposta.StatusResposta = (OMS.Ordens.Lib.Enum.CriticaRiscoEnum)RiscoResposta.StatusResposta; } else { OrdemResposta.CriticaInfo = new List <PipeLineCriticaInfo>(); foreach (var RiscoItem in OrdemFixResponse.CriticaInfo) { PipeLineCriticaInfo _PipeLineCriticaInfo = new PipeLineCriticaInfo(); OrdemResposta.CriticaInfo.Add( new PipeLineCriticaInfo() { Critica = RiscoItem.Critica, CriticaTipo = (OMS.Ordens.Lib.Enum.CriticaRiscoEnum)RiscoItem.CriticaTipo, DataHoraCritica = RiscoItem.DataHoraCritica }); } OrdemResposta.DataResposta = OrdemResposta.DataResposta; OrdemResposta.DescricaoResposta = OrdemResposta.DescricaoResposta; OrdemResposta.StackTrace = OrdemResposta.StackTrace; OrdemResposta.StatusResposta = (OMS.Ordens.Lib.Enum.CriticaRiscoEnum)OrdemResposta.StatusResposta; } } return(OrdemResposta); }
private ValidacaoRiscoResponse VenderCarteiraRecomendada(ValidacaoRiscoRequest pParametros, string CodigoCarteiraRecomendada) { ValidacaoRiscoResponse PipeLineResponse = new ValidacaoRiscoResponse(); List <PipeLineCriticaInfo> CriticaInfoCollection = new List <PipeLineCriticaInfo>(); PipeLineCriticaInfo CriticaInfo = null; logger.Info("Inicia Rotina de validação de compra de ações, cliente: " + pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString()); logger.Info("Caracteristicas da ordem"); logger.Info("Cliente :" + pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString()); logger.Info("Operação : Compra"); logger.Info("Instrumento :" + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol); logger.Info("Quantidade :" + pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty.ToString()); logger.Info("Preco : ORDEM A MERCADO "); logger.Info("DtVencimento :" + pParametros.EnviarOrdemRequest.OrdemInfo.ExpireDate.ToString()); logger.Info("ClasseCliente : Institucional"); CadastroPapeisRequest _CadastroPapeisRequest = new CadastroPapeisRequest(); _CadastroPapeisRequest.Instrumento = pParametros.EnviarOrdemRequest.OrdemInfo.Symbol; CadastroPapeisResponse <CadastroPapelInfo> CadastroPapeis = new PersistenciaCarteiraRecomendada().ObterInformacoesPapeis(_CadastroPapeisRequest); int FatorCotacao = int.Parse(CadastroPapeis.Objeto.FatorCotacao); // TRATAMENTO [ FRACIONARIO / INTEGRAL ] int LoteNegociacao = int.Parse(CadastroPapeis.Objeto.LoteNegociacao); int ModuloLoteNegociacao = pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty % LoteNegociacao; if (pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty >= LoteNegociacao) { // ENVIAR INTEGRAL pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty -= ModuloLoteNegociacao; logger.Info("Inicia operação de compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado Integral"); // Inseri a Ordem solicitada no banco de dados if (InserirOrdemCliente(pParametros.EnviarOrdemRequest)) { //TODO: COMPRA O PAPEL COM O SERVICO DE ORDENS logger.Info("Compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado integral efetuada com sucesso."); logger.Info("Envia a ordem para o roteador de ordens"); pParametros.EnviarOrdemRequest.OrdemInfo.Account = RetornaCodigoCliente(227, pParametros.EnviarOrdemRequest.OrdemInfo.Account); ExecutarOrdemResponse RespostaRoteador = this.EnviarOrdemRoteador(pParametros.EnviarOrdemRequest.OrdemInfo); pParametros.EnviarOrdemRequest.OrdemInfo.Account = int.Parse(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Remove(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Length - 1, 1)); // VERIFICA SE A ORDEM FOI ENVIADA COM SUCESSO PARA O ROTEADOR if (RespostaRoteador.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Sucesso) { logger.Info("Ordem institucional enviada com sucesso para o Roteador de Ordens"); PipeLineResponse.DataResposta = DateTime.Now; PipeLineResponse.DescricaoResposta = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia; PipeLineResponse.StatusResposta = OMS.Risco.Lib.Enum.CriticaRiscoEnum.Sucesso; } else { logger.Info("Ocorreu um erro ao enviar a ordem para o roteador de Ordens"); CriticaInfo = new PipeLineCriticaInfo(); CriticaInfo.Critica = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia; CriticaInfo.CriticaTipo = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.ErroRoteadorOrdem; CriticaInfo.DataHoraCritica = DateTime.Now; // Adiciona as criticas no pipeline de risco. CriticaInfoCollection.Add(CriticaInfo); } } if (ModuloLoteNegociacao > 0) { // ENVIAR FRACIONARIO logger.Info("Calcula restante a ser enviado para o mercado fracionário"); // ENVIAR FRACIONARIO pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty = ModuloLoteNegociacao; pParametros.EnviarOrdemRequest.OrdemInfo.Symbol += "F"; pParametros.EnviarOrdemRequest.OrdemInfo.ClOrdID = this.CtrlNumber(CodigoCarteiraRecomendada); logger.Info("Inicia compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado fracionário"); // Inseri a Ordem solicitada no banco de dados if (InserirOrdemCliente(pParametros.EnviarOrdemRequest)) { //TODO: COMPRA O PAPEL COM O SERVICO DE ORDENS logger.Info("Compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado fracionario efetuada com sucesso."); logger.Info("Envia a ordem para o roteador de ordens"); pParametros.EnviarOrdemRequest.OrdemInfo.Account = RetornaCodigoCliente(227, pParametros.EnviarOrdemRequest.OrdemInfo.Account); ExecutarOrdemResponse RespostaRoteador = this.EnviarOrdemRoteador(pParametros.EnviarOrdemRequest.OrdemInfo); pParametros.EnviarOrdemRequest.OrdemInfo.Account = int.Parse(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Remove(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Length - 1, 1)); // VERIFICA SE A ORDEM FOI ENVIADA COM SUCESSO PARA O ROTEADOR if (RespostaRoteador.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Sucesso) { logger.Info("Ordem enviada com sucesso para o Roteador de Ordens"); PipeLineResponse.DataResposta = DateTime.Now; PipeLineResponse.DescricaoResposta = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia; PipeLineResponse.StatusResposta = OMS.Risco.Lib.Enum.CriticaRiscoEnum.Sucesso; } else { logger.Info("Ocorreu um erro ao enviar a ordem para o roteador de Ordens"); CriticaInfo = new PipeLineCriticaInfo(); CriticaInfo.Critica = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia; CriticaInfo.CriticaTipo = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.ErroRoteadorOrdem; CriticaInfo.DataHoraCritica = DateTime.Now; // Adiciona as criticas no pipeline de risco. CriticaInfoCollection.Add(CriticaInfo); } } } } else { //FRACIONARIO pParametros.EnviarOrdemRequest.OrdemInfo.Symbol += "F"; logger.Info("Inicia compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado fracionário"); // Inseri a Ordem solicitada no banco de dados if (InserirOrdemCliente(pParametros.EnviarOrdemRequest)) { //TODO: COMPRA O PAPEL COM O SERVICO DE ORDENS logger.Info("Compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado fracionário efetuada com sucesso."); //ENVIA ORDEM PARA O ROTEADOR pParametros.EnviarOrdemRequest.OrdemInfo.Account = RetornaCodigoCliente(227, pParametros.EnviarOrdemRequest.OrdemInfo.Account); logger.Info("Envia a ordem para o roteador de ordens"); var RespostaRoteador = this.EnviarOrdemRoteador(pParametros.EnviarOrdemRequest.OrdemInfo); pParametros.EnviarOrdemRequest.OrdemInfo.Account = int.Parse(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Remove(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Length - 1, 1)); //// VERIFICA SE A ORDEM FOI ENVIADA COM SUCESSO PARA O ROTEADOR if (RespostaRoteador.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Sucesso) { logger.Info("Ordem enviada com sucesso para o Roteador de Ordens"); PipeLineResponse.DataResposta = DateTime.Now; PipeLineResponse.DescricaoResposta = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia; PipeLineResponse.StatusResposta = OMS.Risco.Lib.Enum.CriticaRiscoEnum.Sucesso; } else { logger.Info("Ocorreu um erro ao enviar a ordem para o roteador de Ordens"); CriticaInfo = new PipeLineCriticaInfo(); CriticaInfo.Critica = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia; CriticaInfo.CriticaTipo = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.ErroRoteadorOrdem; CriticaInfo.DataHoraCritica = DateTime.Now; // Adiciona as criticas no pipeline de risco. CriticaInfoCollection.Add(CriticaInfo); } } } return(PipeLineResponse); }