private OrdemFIXResponse <OrdemCancelamentoInfo> ParsearOrdemCancelamentoCliente(ClienteCancelamentoInfo pParametro) { OrdemFIXResponse <OrdemCancelamentoInfo> Response = new OrdemFIXResponse <OrdemCancelamentoInfo>(); try { OrdemInfo OrdemInfo = new PersistenciaOrdens().SelecionarOrdemCliente(pParametro.OrderID); OrdemCancelamentoInfo CancelamentoInfo = new OrdemCancelamentoInfo(); CancelamentoInfo.ClOrdID = CtrlNumber; CancelamentoInfo.OrigClOrdID = OrdemInfo.ClOrdID; CancelamentoInfo.ChannelID = OrdemInfo.ChannelID; CancelamentoInfo.Account = OrdemInfo.Account; CancelamentoInfo.OrderID = OrdemInfo.ExchangeNumberID; CancelamentoInfo.OrderQty = OrdemInfo.OrderQty; CancelamentoInfo.Side = OrdemInfo.Side; CancelamentoInfo.Symbol = OrdemInfo.Symbol; if ((OrdemInfo.OrdStatus != OrdemStatusEnum.NOVA) || (OrdemInfo.OrdStatus == OrdemStatusEnum.SUBSTITUIDA) || (OrdemInfo.OrdStatus == OrdemStatusEnum.PARCIALMENTEEXECUTADA)) { Lib.Info.PipeLineCriticaInfo info = new Lib.Info.PipeLineCriticaInfo(); info.Critica = "Não é possível cancelar uma oferta em processamento. Esta oferta pode estar cancelada ou cancelando / executada ou executando. "; info.CriticaTipo = CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <Lib.Info.PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = CriticaRiscoEnum.ErroNegocio; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "O Sistema de risco encontrou <" + Response.CriticaInfo.Count.ToString() + "> item(s) a serem verificados"; return(Response); } if (OrdemInfo.Symbol.Substring(OrdemInfo.Symbol.Length - 1, 1) == "F") { OrdemInfo.Symbol = OrdemInfo.Symbol.Remove(OrdemInfo.Symbol.Length - 1); } // Defini o Exchange pelo cadastro de papeis CadastroPapeisResponse <CadastroPapelInfo> CadastroPapeis = new ServicoCadastroPapeis().ObterInformacoesIntrumento( new CadastroPapeisRequest() { Instrumento = OrdemInfo.Symbol }); if (CadastroPapeis.Objeto == null) { Lib.Info.PipeLineCriticaInfo info = new Lib.Info.PipeLineCriticaInfo(); info.Critica = "Instrumento não encontrado"; info.CriticaTipo = CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <Lib.Info.PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = CriticaRiscoEnum.ErroNegocio; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "O Sistema de risco encontrou <" + Response.CriticaInfo.Count.ToString() + "> item(s) a serem verificados"; return(Response); } if (CadastroPapeis.Objeto.TipoMercado == OMS.CadastroPapeis.Lib.Enum.TipoMercadoEnum.FUTURO) { CancelamentoInfo.Exchange = "BMF"; CancelamentoInfo.SecurityID = new PersistenciaCadastroAtivos().ObterSecurityList(OrdemInfo.Symbol); } else { CancelamentoInfo.Exchange = "BOVESPA"; } Response.Objeto = CancelamentoInfo; Response.StatusResposta = CriticaRiscoEnum.Sucesso; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ordem parseado com sucesso"; } catch (Exception ex) { Lib.Info.PipeLineCriticaInfo info = new Lib.Info.PipeLineCriticaInfo(); info.Critica = ex.Message; info.CriticaTipo = CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <Lib.Info.PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = CriticaRiscoEnum.Exception; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ocorreu um erro ao parsear a mensagem"; } return(Response); }
private OrdemFIXResponse <OrdemInfo> ParsearOrdemCliente(ClienteOrdemInfo pParametro) { OrdemFIXResponse <OrdemInfo> Response = new OrdemFIXResponse <OrdemInfo>(); OrdemInfo OrdemInfo = new OrdemInfo(); try { DateTime DataAux = DateTime.Now; #region [Vencimento da ordens] // VALIDA O VENCIMENTO DA ORDEM if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaParaODia) { // ORDEM VALIDA PARA O DIA OrdemInfo.ExpireDate = new DateTime(DataAux.Year, DataAux.Month, DataAux.Day, 23, 59, 59); } else if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaAteSerCancelada) { //ORDEM VAC ( VALIDA ATE O CANCELAMENTO) OrdemInfo.ExpireDate = null; } else if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidoAteDeterminadaData) { logger.Info("Data Enviada: " + pParametro.DataValidade.Value.ToString()); OrdemInfo.ExpireDate = pParametro.DataValidade.Value; } #endregion OrdemInfo.StopStartID = pParametro.CodigoStopStart; OrdemInfo.MinQty = pParametro.QuantidadeMinima; if (string.IsNullOrEmpty(pParametro.NumeroControleOrdem)) { OrdemInfo.ClOrdID = CtrlNumber; } else { OrdemInfo.ClOrdID = CtrlNumber; OrdemInfo.OrigClOrdID = pParametro.NumeroControleOrdem; } OrdemInfo.MaxFloor = pParametro.QuantidadeAparente; OrdemInfo.Account = pParametro.CodigoCliente; OrdemInfo.ChannelID = int.Parse(pParametro.PortaControleOrdem); OrdemInfo.ExecBroker = "227"; OrdemInfo.ExpireDate = pParametro.DataValidade; OrdemInfo.OrderQty = pParametro.Quantidade; OrdemInfo.OrdStatus = OrdemStatusEnum.ENVIADAPARAOROTEADORDEORDENS; OrdemInfo.Price = pParametro.Preco; OrdemInfo.Side = pParametro.DirecaoOrdem; OrdemInfo.Symbol = pParametro.Instrumento; OrdemInfo.RegisterTime = DateTime.Now; OrdemInfo.OrdType = pParametro.TipoDeOrdem; OrdemInfo.Exchange = "BOVESPA"; OrdemInfo.TimeInForce = pParametro.ValidadeOrdem; if (OrdemInfo.Symbol.Substring(OrdemInfo.Symbol.Length - 1, 1) == "F") { OrdemInfo.Symbol = OrdemInfo.Symbol.Remove(OrdemInfo.Symbol.Length - 1); } // Defini o Exchange pelo cadastro de papeis CadastroPapeisResponse <CadastroPapelInfo> CadastroPapeis = new ServicoCadastroPapeis().ObterInformacoesIntrumento( new CadastroPapeisRequest() { Instrumento = OrdemInfo.Symbol }); if (CadastroPapeis.Objeto == null) { Lib.Info.PipeLineCriticaInfo info = new Lib.Info.PipeLineCriticaInfo(); info.Critica = "Instrumento não encontrado"; info.CriticaTipo = CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <Lib.Info.PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = CriticaRiscoEnum.ErroNegocio; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "O Sistema de risco encontrou <" + Response.CriticaInfo.Count.ToString() + "> item(s) a serem verificados"; return(Response); } if (CadastroPapeis.Objeto.TipoMercado == OMS.CadastroPapeis.Lib.Enum.TipoMercadoEnum.FUTURO) { OrdemInfo.Exchange = "BMF"; OrdemInfo.SecurityID = new PersistenciaCadastroAtivos().ObterSecurityList(OrdemInfo.Symbol); } else { OrdemInfo.Exchange = "BOVESPA"; } Response.Objeto = OrdemInfo; Response.StatusResposta = CriticaRiscoEnum.Sucesso; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ordem parseado com sucesso"; } catch (Exception ex) { Lib.Info.PipeLineCriticaInfo info = new Lib.Info.PipeLineCriticaInfo(); logger.Error("ERRO : " + ex.Message, ex); info.Critica = ex.Message; info.CriticaTipo = CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <Lib.Info.PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = CriticaRiscoEnum.Exception; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ocorreu um erro ao parsear a mensagem"; } return(Response); }
private OrdemFIXResponse <OrdemInfo> ParsearOrdemCliente(ClienteOrdemInfo pParametro, string CodigoCarteiraRecomendada) { OrdemFIXResponse <OrdemInfo> Response = new OrdemFIXResponse <OrdemInfo>(); OrdemInfo OrdemInfo = new OrdemInfo(); try { DateTime DataAux = DateTime.Now; #region [Vencimento da ordens] // VALIDA O VENCIMENTO DA ORDEM if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaParaODia) { // ORDEM VALIDA PARA O DIA OrdemInfo.ExpireDate = new DateTime(DataAux.Year, DataAux.Month, DataAux.Day, 23, 59, 59); } else if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaAteSerCancelada) { //ORDEM VAC ( VALIDA ATE O CANCELAMENTO) OrdemInfo.ExpireDate = null; } else if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidoAteDeterminadaData) { OrdemInfo.ExpireDate = pParametro.DataValidade.Value; } #endregion OrdemInfo.StopStartID = pParametro.CodigoStopStart; OrdemInfo.MinQty = pParametro.QuantidadeMinima; if (string.IsNullOrEmpty(pParametro.NumeroControleOrdem)) { OrdemInfo.ClOrdID = CtrlNumber(CodigoCarteiraRecomendada); } else { OrdemInfo.ClOrdID = CtrlNumber(CodigoCarteiraRecomendada); OrdemInfo.OrigClOrdID = pParametro.NumeroControleOrdem; } OrdemInfo.MaxFloor = pParametro.QuantidadeAparente; OrdemInfo.Account = pParametro.CodigoCliente; OrdemInfo.ChannelID = int.Parse(pParametro.PortaControleOrdem); OrdemInfo.ExecBroker = "227"; OrdemInfo.ExpireDate = pParametro.DataValidade; OrdemInfo.OrderQty = pParametro.Quantidade; OrdemInfo.OrdStatus = OrdemStatusEnum.ENVIADAPARAOROTEADORDEORDENS; OrdemInfo.Price = pParametro.Preco; OrdemInfo.Side = pParametro.DirecaoOrdem; OrdemInfo.Symbol = pParametro.Instrumento; OrdemInfo.RegisterTime = DateTime.Now; OrdemInfo.OrdType = pParametro.TipoDeOrdem; OrdemInfo.Exchange = "BOVESPA"; OrdemInfo.TimeInForce = pParametro.ValidadeOrdem; if (OrdemInfo.Symbol.Substring(OrdemInfo.Symbol.Length - 1, 1) == "F") { OrdemInfo.Symbol = OrdemInfo.Symbol.Remove(OrdemInfo.Symbol.Length - 1); } OrdemInfo.Exchange = "BOVESPA"; Response.Objeto = OrdemInfo; Response.StatusResposta = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.Sucesso; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ordem parseado com sucesso"; } catch (Exception ex) { PipeLineCriticaInfo info = new PipeLineCriticaInfo(); info.Critica = ex.Message; info.CriticaTipo = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.Exception; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ocorreu um erro ao parsear a mensagem"; } return(Response); }
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); }
/// <summary> /// Metodo responsável por invocar o pipeline de risco a verificar todos os parametros e permissões /// da ordem a ser enviada para o roteador de ordem. [ Efetua todo o controle pré-trading da ordem ] /// </summary> /// <param name="pParametros">Objeto de entidade da ordem do cliente</param> /// <returns> Resposta da requisição </returns> public EnviarOrdemResponse EnviarOrdem(EnviarOrdemRequest pParametros) { try { logger.Info("Solicitacao en envio de ordem acatada. Cliente: " + pParametros.ClienteOrdemInfo.CodigoCliente.ToString()); logger.Info("Cliente..... " + pParametros.ClienteOrdemInfo.CodigoCliente.ToString()); logger.Info("CodigoStopStart..... " + pParametros.ClienteOrdemInfo.CodigoStopStart.ToString()); logger.Info("DataHoraSolicitacao..... " + pParametros.ClienteOrdemInfo.DataHoraSolicitacao.ToString()); logger.Info("DataValidade..... " + pParametros.ClienteOrdemInfo.DataValidade.ToString()); logger.Info("DirecaoOrdem..... " + pParametros.ClienteOrdemInfo.DirecaoOrdem.ToString()); logger.Info("Instrumento..... " + pParametros.ClienteOrdemInfo.Instrumento.ToString()); logger.Info("Preco..... " + pParametros.ClienteOrdemInfo.Preco.ToString()); logger.Info("Quantidade..... " + pParametros.ClienteOrdemInfo.Quantidade.ToString()); logger.Info("TipoDeOrdem..... " + pParametros.ClienteOrdemInfo.TipoDeOrdem.ToString()); logger.Info("ValidadeOrdem..... " + pParametros.ClienteOrdemInfo.ValidadeOrdem.ToString()); logger.Info("QuantidadeMinima... " + pParametros.ClienteOrdemInfo.QuantidadeMinima.ToString()); logger.Info("QuantidadeAparente... " + pParametros.ClienteOrdemInfo.QuantidadeAparente.ToString()); EnviarOrdemResponse OrdemResposta = new EnviarOrdemResponse(); #region [ Validação do formato da mensagem enviada ] logger.Info("Verifica se todos os campos da solicitação foram preenchidos corretamente"); // VALIDA SE OS ATRIBUTOS INFORMADOS PELO CLIENTE SÃO VALIDOS ValidarFormatoOrdemResponse ValidarFormatoOrdemResponse = this.ValidarFormatoOrdemCliente(pParametros.ClienteOrdemInfo); //Obtem o numero da porta de controle a ser roteada pelo OMS #region Obter a porta de roteamento pelo perfil do cliente //logger.Info("Verifica a porta que a ordem sera roteada"); //if (pParametros.ClienteOrdemInfo.PortaControleOrdem != CodigoPortaRepassadorOrdem.ToString()) //{ // int GrupoAlavancagemCliente = new PersistenciaOrdens().ObterCodigoGrupoAlavancagem(pParametros.ClienteOrdemInfo.CodigoCliente); // logger.Info("Codigo do grupo de alavancagem do cliente : " + GrupoAlavancagemCliente.ToString()); // if(GrupoAlavancagemCliente == CodigoGrupoAlavancagemHomeBroker) // { // logger.Info("Cliente HomeBroker"); // pParametros.ClienteOrdemInfo.PortaControleOrdem = CodigoPortaClienteHomeBroker.ToString(); // } // if (GrupoAlavancagemCliente == CodigoGrupoAlavancagemDesktop) // { // logger.Info("Cliente Assessor"); // pParametros.ClienteOrdemInfo.PortaControleOrdem = CodigoPortaClienteAssessor.ToString(); // } // if ((GrupoAlavancagemCliente != CodigoGrupoAlavancagemDesktop) && (GrupoAlavancagemCliente != CodigoGrupoAlavancagemHomeBroker)) // { // // caso não encontre cobrar tabela mesa. // pParametros.ClienteOrdemInfo.PortaControleOrdem = CodigoPortaClienteAssessor.ToString(); // } // logger.Info("Numero da porta a ser roteado : " + pParametros.ClienteOrdemInfo.PortaControleOrdem); //} //else //{ // pParametros.ClienteOrdemInfo.PortaControleOrdem = CodigoPortaRepassadorOrdem.ToString(); // logger.Info("Numero da porta a ser roteado : " + pParametros.ClienteOrdemInfo.PortaControleOrdem); //} #endregion // VERIFICA SE A MENSAGEM ENVIADA PELO CLIENTE É VALIDA. if (ValidarFormatoOrdemResponse.StatusResposta == CriticaRiscoEnum.Sucesso) { #region [ Parseador de Mensagem FIX ] logger.Info("Inicia composição da mensagem FIX"); // INICIA PARSEADOR DE MENSAGEM PARA O FORMATO FIX. OrdemFIXResponse <OrdemInfo> OrdemFixResponse = this.ParsearOrdemCliente(pParametros.ClienteOrdemInfo); if (OrdemFixResponse.StatusResposta == CriticaRiscoEnum.ErroNegocio) { logger.Info("Mensagem FIX contem com sucesso"); logger.Info("Descrição da critica : Instrumento não encontrado"); //VERIFICA SE EXISTEM CRITICAS A SEREM OBSERVADAS if (OrdemFixResponse.CriticaInfo.Count >= 0) { OrdemResposta.CriticaInfo = new List <PipeLineCriticaInfo>(); // EFETUA O DE / PARA DOS OBJETOS PARA NÃO CRIAR VINCULO ALGUM ENTRE // AS BIBLIOTECAS DE RISCO E ORDEM foreach (var RiscoItem in OrdemFixResponse.CriticaInfo) { PipeLineCriticaInfo _PipeLineCriticaInfo = new PipeLineCriticaInfo(); OrdemResposta.CriticaInfo.Add( new PipeLineCriticaInfo() { Critica = RiscoItem.Critica, CriticaTipo = (CriticaRiscoEnum)RiscoItem.CriticaTipo, DataHoraCritica = RiscoItem.DataHoraCritica }); } // FORMATA A MENSAGEM DE SAIDA OrdemResposta.DataResposta = OrdemFixResponse.DataResposta; OrdemResposta.DescricaoResposta = OrdemFixResponse.DescricaoResposta; OrdemResposta.StackTrace = OrdemFixResponse.StackTrace; OrdemResposta.StatusResposta = (CriticaRiscoEnum)OrdemFixResponse.StatusResposta; return(OrdemResposta); } } #endregion logger.Info("Mensagem FIX composta com sucesso"); // OBTEM A ORDEM JÁ PARSEADA NO FORMATO FIX. EnviarOrdemRoteadorRequest OrdemRoteadorRequest = new EnviarOrdemRoteadorRequest() { OrdemInfo = OrdemFixResponse.Objeto }; #endregion #region [ Efetua chamada para as validações do sistema de risco ] ValidacaoRiscoRequest RiscoRequisicao = new ValidacaoRiscoRequest() { EnviarOrdemRequest = OrdemRoteadorRequest }; logger.Info("Inicia rotina de validação de risco: PipeLine Risco"); DateTime DataInicioExecucao = DateTime.Now; logger.Info("Data inicial da solicitação: " + DataInicioExecucao.ToString()); // EFETUA CHAMADA DO METODO VALIDAPIPEPINE RISCO PARA VALIDAR A ORDEM ENVIADA PELO CLIENTE. ValidacaoRiscoResponse RiscoResposta = new ServicoRisco().ValidarPipeLineRisco(RiscoRequisicao); TimeSpan datafinal = (DateTime.Now - DataInicioExecucao); #endregion #region [ Tratamento da resposta da validação de risco ] logger.Info("Prepara a resposta da solicitação"); //VERIFICA SE EXISTEM CRITICAS A SEREM OBSERVADAS if (RiscoResposta.CriticaInfo.Count >= 0) { OrdemResposta.CriticaInfo = new List <PipeLineCriticaInfo>(); // EFETUA O DE / PARA DOS OBJETOS PARA NÃO CRIAR VINCULO ALGUM ENTRE // AS BIBLIOTECAS DE RISCO E ORDEM foreach (var RiscoItem in RiscoResposta.CriticaInfo) { PipeLineCriticaInfo _PipeLineCriticaInfo = new PipeLineCriticaInfo(); OrdemResposta.CriticaInfo.Add( new PipeLineCriticaInfo() { Critica = RiscoItem.Critica, CriticaTipo = (CriticaRiscoEnum)RiscoItem.CriticaTipo, DataHoraCritica = RiscoItem.DataHoraCritica }); } // FORMATA A MENSAGEM DE SAIDA OrdemResposta.DataResposta = RiscoResposta.DataResposta; OrdemResposta.DescricaoResposta = RiscoResposta.DescricaoResposta; OrdemResposta.StackTrace = RiscoResposta.StackTrace; OrdemResposta.StatusResposta = (CriticaRiscoEnum)RiscoResposta.StatusResposta; logger.Info("Solicitação de resposta enviado ao solicitante com sucesso."); logger.Info("Tempo Total de execução :" + datafinal.ToString()); } #endregion } else // ERRO NA FORMATACAO DA MENSAGEM if (ValidarFormatoOrdemResponse.StatusResposta == CriticaRiscoEnum.ErroFormatoMensagem) { logger.Info("Ocorreu um erro ao formatar a mensagem de retorno."); #region [ Efetua tratamento da resposta da validação da mensamgem ] OrdemResposta.CriticaInfo = new List <PipeLineCriticaInfo>(); // EFETUA O DE / PARA DOS OBJETOS PARA NÃO CRIAR VINCULO ALGUM ENTRE // AS BIBLIOTECAS DE RISCO E ORDEM foreach (var RiscoItem in ValidarFormatoOrdemResponse.CriticaInfo) { PipeLineCriticaInfo _PipeLineCriticaInfo = new PipeLineCriticaInfo(); OrdemResposta.CriticaInfo.Add( new PipeLineCriticaInfo() { Critica = RiscoItem.Critica, CriticaTipo = (CriticaRiscoEnum)RiscoItem.CriticaTipo, DataHoraCritica = RiscoItem.DataHoraCritica }); } // FORMATA A MENSAGEM DE SAIDA OrdemResposta.DataResposta = ValidarFormatoOrdemResponse.DataResposta; OrdemResposta.DescricaoResposta = ValidarFormatoOrdemResponse.DescricaoResposta; OrdemResposta.StackTrace = ValidarFormatoOrdemResponse.StackTrace; OrdemResposta.StatusResposta = (CriticaRiscoEnum)ValidarFormatoOrdemResponse.StatusResposta; logger.Info("Envia mensagem de retorno com o erro."); #endregion } return(OrdemResposta); } catch (Exception ex) { logger.Error("Erro :" + ex.Message, ex); return(null); } }
/// <summary> /// Método responsável por enviar um cancelamento de ordens para o roteador cancelar. /// </summary> /// <param name="pParametroCancelamentoRequest"></param> /// <returns></returns> public EnviarCancelamentoOrdemResponse CancelarOrdem(EnviarCancelamentoOrdemRequest pParametroCancelamentoRequest) { logger.Info("Iniciar rotina de cancelamento de ordens"); DateTime DataInicioExecucao = DateTime.Now; logger.Info("Data de inicio de execução: " + DataInicioExecucao.ToString()); EnviarCancelamentoOrdemResponse CancelamentoOrderResponse = new EnviarCancelamentoOrdemResponse(); OrdemFIXResponse <OrdemCancelamentoInfo> OrdemCancelamentoInfo = this.ParsearOrdemCancelamentoCliente(pParametroCancelamentoRequest.ClienteCancelamentoInfo); if (OrdemCancelamentoInfo.StatusResposta == CriticaRiscoEnum.Sucesso) { logger.Info("Solicitação de cancelamento de ordem enviado "); logger.Info("Bovespa : " + OrdemCancelamentoInfo.Objeto.Account.ToString()); logger.Info("ChannelID : " + OrdemCancelamentoInfo.Objeto.ChannelID.ToString()); logger.Info("ClOrdID : " + OrdemCancelamentoInfo.Objeto.ClOrdID.ToString()); logger.Info("Exchange : " + OrdemCancelamentoInfo.Objeto.Exchange.ToString()); logger.Info("OrderID : " + OrdemCancelamentoInfo.Objeto.OrderID.ToString()); logger.Info("OrigClOrdID : " + OrdemCancelamentoInfo.Objeto.OrigClOrdID.ToString()); logger.Info("Side : " + OrdemCancelamentoInfo.Objeto.Side.ToString()); logger.Info("Symbol : " + OrdemCancelamentoInfo.Objeto.Symbol.ToString()); logger.Info("Mensagem parseado com sucesso!"); logger.Info("Inicializa serviço de roteamento de ordem"); //Invoca o serviço de roteamento de ordem IRoteadorOrdens ServicoRoteador = Ativador.Get <IRoteadorOrdens>(); logger.Info("Serviço do ativador inicializado com sucesso"); logger.Info("Calculando digito do cliente"); OrdemCancelamentoInfo.Objeto.Account = RetornaCodigoCliente(CodigoCorretora, OrdemCancelamentoInfo.Objeto.Account); logger.Info("Envia ordem para o roteador"); // Enviar a ordem para o roteador de ordens e aguarda o retorno. ExecutarCancelamentoOrdemResponse RespostaOrdem = ServicoRoteador.CancelarOrdem( new ExecutarCancelamentoOrdemRequest() { info = OrdemCancelamentoInfo.Objeto }); if (RespostaOrdem.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Sucesso) { logger.Info("Cancelamento enviado com sucesso."); CancelamentoOrderResponse.DescricaoResposta = RespostaOrdem.DadosRetorno.Ocorrencias[0].Ocorrencia; CancelamentoOrderResponse.DataResposta = DateTime.Now; CancelamentoOrderResponse.StatusResposta = CriticaRiscoEnum.Sucesso; } else { logger.Info("Erro ao enviar o cancelamento para o Roteador."); CancelamentoOrderResponse.DescricaoResposta = RespostaOrdem.DadosRetorno.Ocorrencias[0].Ocorrencia; CancelamentoOrderResponse.DataResposta = DateTime.Now; CancelamentoOrderResponse.StatusResposta = CriticaRiscoEnum.ErroNegocio; } } else { CancelamentoOrderResponse.DescricaoResposta = OrdemCancelamentoInfo.CriticaInfo[0].Critica.ToString(); CancelamentoOrderResponse.CriticaInfo = OrdemCancelamentoInfo.CriticaInfo; CancelamentoOrderResponse.DataResposta = DateTime.Now; CancelamentoOrderResponse.StatusResposta = CriticaRiscoEnum.Sucesso; } TimeSpan datafinal = (DateTime.Now - DataInicioExecucao); logger.Info("Tempo total de execução :" + datafinal.ToString()); return(CancelamentoOrderResponse); }