private void cancelarOrdem(OrdemInfo ordem) { try { OrdemCancelamentoInfo info = new OrdemCancelamentoInfo(); info.ClOrdID = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-C" + ordem.Symbol + ordem.ChannelID + ordem.Account; info.Account = ordem.Account; info.ChannelID = ordem.ChannelID; info.Exchange = ordem.Exchange; info.OrigClOrdID = ordem.ClOrdID; info.Symbol = ordem.Symbol; info.SecurityID = ordem.SecurityID; info.Side = ordem.Side; if (!String.IsNullOrEmpty(ordem.ExecBroker)) { info.ExecBroker = ordem.ExecBroker; } ExecutarCancelamentoOrdemRequest request = new ExecutarCancelamentoOrdemRequest(); IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>(); ExecutarCancelamentoOrdemResponse response = roteador.CancelarOrdem(request); if (response.DadosRetorno.StatusResposta != StatusRoteamentoEnum.Sucesso) { logger.Error("Erro ao cancelar ordem [" + ordem.ClOrdID + "] alteracao de [" + ordem.ClOrdID + "]"); foreach (OcorrenciaRoteamentoOrdem ocorr in response.DadosRetorno.Ocorrencias) { logger.Error("Erro: " + ocorr.Ocorrencia); } } } catch (Exception ex) { logger.Error("cancelarOrdem(): " + ex.Message, ex); } }
/// <summary> /// Cancelamento da ordem /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btCancelar_Click(object sender, EventArgs e) { try { OrdemCancelamentoInfo ordem = new OrdemCancelamentoInfo(); ordem.ClOrdID = txtClOrdID.Text; ordem.OrigClOrdID = txtOrigOrdID.Text; ordem.ChannelID = Convert.ToInt32(txtOperador.Text); if (cmbBolsa.SelectedItem.Equals("BOVESPA")) { ordem.Exchange = "BOVESPA"; } else { ordem.Exchange = "BMF"; } ordem.OrderID = txtExchangeNumber.Text; ordem.Account = Convert.ToInt32(txtCodCliente.Text); ordem.Symbol = txtPapel.Text; ordem.SecurityID = txtSecurityId.Text; ordem.ExecBroker = txtTraderID.Text; ordem.Memo5149 = "Cancelto " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.fff"); if (txtSenderLocation.Text.Length > 0) { ordem.SenderLocation = txtSenderLocation.Text; } if (txtExecTrader.Text.Length > 0) { ordem.ExecutingTrader = txtExecTrader.Text; } /*if (!String.IsNullOrEmpty(txtCompIDBolsa.Text)) * { * ordem.CompIDBolsa = txtCompIDBolsa.Text; * }*/ if (rdCompra.Checked) { ordem.Side = OrdemDirecaoEnum.Compra; } else { ordem.Side = OrdemDirecaoEnum.Venda; } ordem.OrderQty = Convert.ToInt32(txtQtde.Text); IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>(); if (roteador != null) { ExecutarCancelamentoOrdemRequest request = new ExecutarCancelamentoOrdemRequest(); request.info = ordem; ExecutarCancelamentoOrdemResponse resp = roteador.CancelarOrdem(request); if (resp.DadosRetorno != null) { string msg = ""; foreach (OcorrenciaRoteamentoOrdem ocorr in resp.DadosRetorno.Ocorrencias) { msg += ocorr.Ocorrencia + "\r\n"; } if (resp.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Erro) { MessageBox.Show(msg); } else { _addMsg(msg); } } } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); logger.Error("Erro: " + ex.Message, ex); } }
/// <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); }