private ExecutarOrdemResponse EnviarOrdemRoteador(OrdemInfo OrdemInfo) { try { // Instancia servico de ordens logger.Info("Invoca servico de roteamento de ordens"); IRoteadorOrdens ServicoRoteador = Ativador.Get <IRoteadorOrdens>(); OrdemInfo.TransactTime = DateTime.Now; // Envia a ordem para o reteador e aguarda o retorno logger.Info("Envia a ordem para o roteador"); ExecutarOrdemResponse RespostaOrdem = ServicoRoteador.ExecutarOrdem(new RoteadorOrdens.Lib.Mensagens.ExecutarOrdemRequest() { info = OrdemInfo }); return(RespostaOrdem); } catch (Exception ex) { logger.Info("Ocorreu um erro ao enviar a ordem para o roteador"); logger.Info("Descrição :" + ex.Message); throw (ex); } }
/// <summary> ///MONITOR DE CONEXOES DO ROTEADOR /// </summary> private void RunMonitor() { try { logger.Info("Iniciando thread de monitoracao do roteador de ordens"); int _iMonitorConexoes = 0; if (ServicoRoteador == null) { ServicoRoteador = Ativador.Get <IRoteadorOrdens>(); } while (_bKeepRunning) { // 4 * 250 = 1 segundo if (_iMonitorConexoes == 30 * 4) { lock (ServicoRoteador) { try { if (ServicoRoteador == null) { ServicoRoteador = Ativador.Get <IRoteadorOrdens>(); } ServicoRoteador.Ping(new PingRequest()); } catch (Exception ex) { Ativador.AbortChannel(ServicoRoteador); ServicoRoteador = null; } } _iMonitorConexoes = 0; } else { _iMonitorConexoes++; } Thread.Sleep(250); } } catch (Exception ex) { logger.Error("RunMonitor(): " + ex.Message, ex); } logger.Info("THREAD DE MONITORAMENTO DO ROTEADOR FINALIZADA"); }
private void button3_Click(object sender, EventArgs e) { _roteador = Ativador.Get <IRoteadorOrdens>(); lastCLOrdID = Convert.ToInt64(txtClOrdID.Text); for (int i = 0; i < 50; i++) { lastCLOrdID++; enviar_ordem(lastCLOrdID); } txtClOrdID.Text = lastCLOrdID.ToString(); }
private OrdemInfo enviarNovaOrdem(ParametroTesteConfig parametro, string ativo, OrdemDirecaoEnum sentido) { OrdemInfo ordem = new OrdemInfo(); ordem.ClOrdID = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-" + ativo + parametro.Porta + parametro.Account; ordem.Account = Convert.ToInt32(parametro.Account); ordem.OrdType = OrdemTipoEnum.Limitada; ordem.TimeInForce = OrdemValidadeEnum.ValidaParaODia; ordem.Symbol = ativo; ordem.SecurityID = ativo; ordem.Price = obterPrecoOrdem(ativo); ordem.Exchange = parametro.Bolsa; ordem.ChannelID = Convert.ToInt32(parametro.Porta); ordem.Side = sentido; ordem.OrdStatus = OrdemStatusEnum.ENVIADAPARAOROTEADORDEORDENS; ordem.OrderQty = parametro.Qtde; ordem.RegisterTime = DateTime.Now; if (String.IsNullOrEmpty(parametro.EnteringTrader)) { ordem.ExecBroker = "227"; } else { ordem.ExecBroker = parametro.EnteringTrader; } lock (dctOrdens) { dctOrdens.Add(ordem.ClOrdID, ordem); } ExecutarOrdemRequest request = new ExecutarOrdemRequest(); request.info = ordem; IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>(); ExecutarOrdemResponse response = roteador.ExecutarOrdem(request); if (response.DadosRetorno.StatusResposta != StatusRoteamentoEnum.Sucesso) { logger.Error("Erro ao enviar ordem [" + ordem.ClOrdID + "]"); foreach (OcorrenciaRoteamentoOrdem ocorr in response.DadosRetorno.Ocorrencias) { logger.Error("Erro: " + ocorr.Ocorrencia); } } return(ordem); }
private void button4_Click_1(object sender, EventArgs e) { _roteador = Ativador.Get <IRoteadorOrdens>(); lastCLOrdID = Convert.ToInt64(txtClOrdID.Text); for (int j = 0; j < 30; j++) { for (int i = 0; i < 10; i++) { lastCLOrdID++; enviar_ordem(lastCLOrdID); Application.DoEvents(); } Application.DoEvents(); Thread.Sleep(500); Application.DoEvents(); } txtClOrdID.Text = lastCLOrdID.ToString(); }
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); } }
private void btOrderX_Click(object sender, EventArgs e) { try { frmPontaVenda frm = new frmPontaVenda(); OrdemInfo ordemCompra = new OrdemInfo(); ordemCompra.ClOrdID = txtClOrdID.Text; ordemCompra.Account = Convert.ToInt32(txtCodCliente.Text); ordemCompra.ChannelID = Convert.ToInt32(txtOperador.Text); if (cmbBolsa.SelectedItem.Equals("BOVESPA")) { ordemCompra.Exchange = "BOVESPA"; } else { ordemCompra.Exchange = "BMF"; } ordemCompra.ExchangeNumberID = txtExchangeNumber.Text; ordemCompra.Price = Convert.ToDouble(txtPreco.Text); ordemCompra.OrderQty = Convert.ToInt32(txtQtde.Text); ordemCompra.MinQty = Convert.ToInt32(txtQtdeMin.Text); ordemCompra.MaxFloor = Convert.ToInt32(txtQtdeAparente.Text); ordemCompra.Symbol = txtPapel.Text; ordemCompra.SecurityID = txtSecurityId.Text; ordemCompra.RegisterTime = DateTime.Now; ordemCompra.TransactTime = DateTime.Now; ordemCompra.ExecBroker = txtTraderID.Text; if (rdCompra.Checked) { ordemCompra.Side = OrdemDirecaoEnum.Compra; } else { ordemCompra.Side = OrdemDirecaoEnum.Venda; } if (txtStopPX.Text.Length > 0 && Convert.ToDouble(txtStopPX.Text) > 0) { ordemCompra.StopPrice = Convert.ToDouble(txtStopPX.Text); } if (txtInvestorID.Text.Length > 0) { ordemCompra.InvestorID = txtInvestorID.Text; } switch (cmbOrderType.SelectedIndex) { case 0: ordemCompra.OrdType = OrdemTipoEnum.Limitada; break; case 1: ordemCompra.OrdType = OrdemTipoEnum.StopLimitada; break; case 2: ordemCompra.OrdType = OrdemTipoEnum.MarketWithLeftOverLimit; break; case 3: ordemCompra.OrdType = OrdemTipoEnum.OnClose; break; case 4: ordemCompra.OrdType = OrdemTipoEnum.StopStart; break; case 5: ordemCompra.OrdType = OrdemTipoEnum.Mercado; break; case 6: ordemCompra.OrdType = OrdemTipoEnum.StopLoss; break; default: ordemCompra.OrdType = OrdemTipoEnum.OnClose; break; } switch (cmbTipoValidade.SelectedIndex) { case 0: ordemCompra.TimeInForce = OrdemValidadeEnum.ValidaParaODia; ordemCompra.ExpireDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59); break; case 1: ordemCompra.TimeInForce = OrdemValidadeEnum.ExecutaIntegralParcialOuCancela; break; case 2: ordemCompra.TimeInForce = OrdemValidadeEnum.ExecutaIntegralOuCancela; break; case 3: ordemCompra.TimeInForce = OrdemValidadeEnum.ValidaAteSerCancelada; break; case 4: ordemCompra.TimeInForce = OrdemValidadeEnum.ValidoAteDeterminadaData; ordemCompra.ExpireDate = DateTime.ParseExact(txtDataValidade.Text + " 23:59:59", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); break; default: ordemCompra.TimeInForce = OrdemValidadeEnum.ValidaParaAberturaDoMercado; break; } lastCLOrdID++; frm.ClOrdID = lastCLOrdID.ToString(); frm.Qtde = txtQtde.Text; DialogResult result = frm.ShowDialog(); if (result == DialogResult.OK) { OrdemInfo ordemVenda = RoteadorOrdensUtil.CloneOrder(ordemCompra); ordemVenda.Account = Convert.ToInt32(frm.Account); ordemVenda.OrderQty = Convert.ToInt32(frm.Qtde); ordemVenda.ClOrdID = frm.ClOrdID; if (frm.InvestorID.Length > 0) { ordemVenda.InvestorID = frm.ClOrdID; } OrdemCrossInfo cross = new OrdemCrossInfo(); cross.ChannelID = ordemCompra.ChannelID; cross.CrossID = ordemCompra.ClOrdID + "X"; cross.Exchange = ordemCompra.Exchange; cross.OrdType = ordemCompra.OrdType; cross.Price = ordemCompra.Price; cross.SecurityID = ordemCompra.SecurityID; cross.SecurityIDSource = ordemCompra.SecurityIDSource; cross.Symbol = ordemCompra.Symbol; cross.TransactTime = ordemCompra.RegisterTime; cross.OrdemInfoCompra = ordemCompra; cross.OrdemInfoVenda = ordemVenda; cross.Memo5149 = "Cross " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.fff"); IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>(); if (roteador != null) { ExecutarOrdemCrossRequest request = new ExecutarOrdemCrossRequest(); request.info = cross; ExecutarOrdemCrossResponse resp = roteador.ExecutarOrdemCross(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); lock (ofertasenviadas) { ofertasenviadas.Add(ordemCompra); SerializadorOfertas.SaveOfertas(ofertasenviadas); } } } } } } catch (Exception ex) { _addMsg(ex.Message); logger.Error("Erro: " + ex.Message, ex); } lastCLOrdID++; txtClOrdID.Text = lastCLOrdID.ToString(); }
/// <summary> /// Alteracao da Ordem /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btAlterar_Click(object sender, EventArgs e) { try { OrdemInfo ordem = new OrdemInfo(); ordem.OrigClOrdID = txtOrigOrdID.Text; ordem.ClOrdID = txtClOrdID.Text; ordem.Account = Convert.ToInt32(txtCodCliente.Text); ordem.ChannelID = Convert.ToInt32(txtOperador.Text); if (cmbBolsa.SelectedItem.Equals("BOVESPA")) { ordem.Exchange = "BOVESPA"; } else { ordem.Exchange = "BMF"; } ordem.ExchangeNumberID = txtExchangeNumber.Text; ordem.Price = Convert.ToDouble(txtPreco.Text); ordem.OrderQty = Convert.ToInt32(txtQtde.Text); ordem.MinQty = Convert.ToInt32(txtQtdeMin.Text); ordem.MaxFloor = Convert.ToInt32(txtQtdeAparente.Text); ordem.Symbol = txtPapel.Text; ordem.SecurityID = txtSecurityId.Text; ordem.ExecBroker = txtTraderID.Text; ordem.Memo5149 = "Alteracao " + 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 (rdCompra.Checked) { ordem.Side = OrdemDirecaoEnum.Compra; } else { ordem.Side = OrdemDirecaoEnum.Venda; } switch (cmbOrderType.SelectedIndex) { case 0: ordem.OrdType = OrdemTipoEnum.Limitada; break; case 1: ordem.OrdType = OrdemTipoEnum.StopLimitada; break; case 2: ordem.OrdType = OrdemTipoEnum.MarketWithLeftOverLimit; break; case 3: ordem.OrdType = OrdemTipoEnum.OnClose; break; case 4: ordem.OrdType = OrdemTipoEnum.StopStart; break; case 5: ordem.OrdType = OrdemTipoEnum.Mercado; break; case 6: ordem.OrdType = OrdemTipoEnum.StopLoss; break; default: ordem.OrdType = OrdemTipoEnum.OnClose; break; } //0- Para o dia"); //1- Executa ou cancela"); //2- Tudo ou Nada"); //3- Ate cancelar"); //4- Data especifica"); //5- Abertura Mercado"); //6- Fechamento Mercado"); //7- Boa para Leilao"); switch (cmbTipoValidade.SelectedIndex) { case 0: ordem.TimeInForce = OrdemValidadeEnum.ValidaParaODia; ordem.ExpireDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59); break; case 1: ordem.TimeInForce = OrdemValidadeEnum.ExecutaIntegralParcialOuCancela; break; case 2: ordem.TimeInForce = OrdemValidadeEnum.ExecutaIntegralOuCancela; break; case 3: ordem.TimeInForce = OrdemValidadeEnum.ValidaAteSerCancelada; break; case 4: ordem.TimeInForce = OrdemValidadeEnum.ValidoAteDeterminadaData; ordem.ExpireDate = DateTime.ParseExact(txtDataValidade.Text + " 23:59:59", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); break; case 5: ordem.TimeInForce = OrdemValidadeEnum.ValidaParaAberturaDoMercado; break; case 6: ordem.TimeInForce = OrdemValidadeEnum.FechamentoDoMercado; break; case 7: ordem.TimeInForce = OrdemValidadeEnum.BoaParaLeilao; break; default: MessageBox.Show("Time in force invalido"); break; } if (txtStopPX.Text.Length > 0 && Convert.ToDouble(txtStopPX.Text) > 0) { ordem.StopPrice = Convert.ToDouble(txtStopPX.Text); } if (txtInvestorID.Text.Length > 0) { ordem.InvestorID = txtInvestorID.Text; } IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>(); if (roteador != null) { ExecutarModificacaoOrdensRequest request = new ExecutarModificacaoOrdensRequest(); request.info = ordem; ExecutarModificacaoOrdensResponse resp = roteador.ModificarOrdem(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); lock (ofertasenviadas) { ofertasenviadas.Add(ordem); SerializadorOfertas.SaveOfertas(ofertasenviadas); } } } } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); logger.Error("Erro: " + 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); } }
private OrdemInfo alterarOrdem(OrdemInfo ordem) { OrdemInfo alterada = new OrdemInfo(); try { lock (dctOrdens) { if (dctOrdens.ContainsKey(ordem.ClOrdID)) { if (dctOrdens[ordem.ClOrdID].OrdStatus == OrdemStatusEnum.CANCELADA || dctOrdens[ordem.ClOrdID].OrdStatus == OrdemStatusEnum.REJEITADA || dctOrdens[ordem.ClOrdID].OrdStatus == OrdemStatusEnum.EXECUTADA) { return(ordem); } } } alterada.Account = ordem.Account; alterada.ChannelID = ordem.ChannelID; alterada.ClOrdID = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-A" + ordem.Symbol + ordem.ChannelID + ordem.Account; alterada.OrigClOrdID = ordem.ClOrdID; alterada.Symbol = ordem.Symbol; alterada.OrderQty = ordem.OrderQty + 1; alterada.Price = obterPrecoOrdem(ordem.Symbol); alterada.SecurityID = ordem.SecurityID; alterada.Exchange = ordem.Exchange; alterada.ChannelID = ordem.ChannelID; if (!String.IsNullOrEmpty(ordem.ExecBroker)) { alterada.ExecBroker = ordem.ExecBroker; } alterada.OrdStatus = OrdemStatusEnum.ENVIADAPARAOROTEADORDEORDENS; alterada.Side = ordem.Side; alterada.TimeInForce = ordem.TimeInForce; alterada.OrdType = ordem.OrdType; ExecutarModificacaoOrdensRequest request = new ExecutarModificacaoOrdensRequest(); request.info = alterada; IRoteadorOrdens roteador = Ativador.Get <IRoteadorOrdens>(); ExecutarModificacaoOrdensResponse response = roteador.ModificarOrdem(request); if (response.DadosRetorno.StatusResposta != StatusRoteamentoEnum.Sucesso) { logger.Error("Erro ao alterar ordem [" + alterada.ClOrdID + "] alteracao de [" + ordem.ClOrdID + "]"); foreach (OcorrenciaRoteamentoOrdem ocorr in response.DadosRetorno.Ocorrencias) { logger.Error("Erro: " + ocorr.Ocorrencia); } return(ordem); } lock (dctOrdens) { dctOrdens.Add(alterada.ClOrdID, alterada); } return(alterada); } catch (Exception ex) { logger.Error("alterarOrdem(): " + ex.Message, ex); } return(alterada); }
/// <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); }