public Lib.Mensagens.ExcluirAlertaResponse ExcluirAlerta(Lib.Mensagens.ExcluirAlertaRequest request) { logger.Debug("Excluir Alerta: IdCliente=[" + request.IdCliente + "] IdAlerta=[" + request.IdAlerta + "]"); ExcluirAlertaResponse response = new ExcluirAlertaResponse(); dbAlertas.ExcluirAlerta(request.IdAlerta); logger.Debug("IdAlerta=[" + request.IdAlerta + "] removido da base."); DadosAlerta alertaExcluido = gerenciadorAlertas.Excluir(request.IdAlerta); if (alertaExcluido != null) { // Serializa alerta exlcuido e envia para AlertasCliente string alertaExcluidoSerializado = JsonConvert.SerializeObject(alertaExcluido); StringBuilder retornoExcluido = new StringBuilder(); retornoExcluido.Append("EX"); retornoExcluido.Append(alertaExcluidoSerializado); logger.Debug("Server - Enviando alerta excluído: [" + retornoExcluido.ToString() + "]"); serverAlertas.SendToAll(retornoExcluido.ToString()); } logger.Debug("IdAlerta=[" + request.IdAlerta + "] removido da memória."); response.StatusResposta = Library.MensagemResponseStatusEnum.OK; return(response); }
public Lib.Mensagens.MarcarComoExibidoResponse MarcarComoExibido( Lib.Mensagens.MarcarComoExibidoRequest request) { logger.Debug("MarcarComoExibido: IdCliente = [" + request.IdCliente + "]"); List <DadosAlerta> listaMarcados = new List <DadosAlerta>(); foreach (String idAlertaParametro in request.listaIdAlerta) { DadosAlerta alertaMarcado = gerenciadorAlertas.MarcarComoExibido(idAlertaParametro); dbAlertas.AtualizarAlertaExibido(idAlertaParametro); if (alertaMarcado != null) { listaMarcados.Add(alertaMarcado); } } // Serializa alerta exlcuido e envia para AlertasCliente string listaMarcadosSerializado = JsonConvert.SerializeObject(listaMarcados); StringBuilder retornoMarcarExibido = new StringBuilder(); retornoMarcarExibido.Append("AT"); retornoMarcarExibido.Append(listaMarcadosSerializado); logger.Debug("Server - Enviando alertas marcados como exibido: [" + retornoMarcarExibido.ToString() + "]"); serverAlertas.SendToAll(retornoMarcarExibido.ToString()); // Monta response MarcarComoExibidoResponse response = new MarcarComoExibidoResponse(); response.StatusResposta = Library.MensagemResponseStatusEnum.OK; return(response); }
public void AtualizarAlerta(string idAlerta, DadosAlerta alerta) { lock (alertas) { if (alertas.ContainsKey(idAlerta)) { alertas[idAlerta] = alerta; } else { alertas.Add(idAlerta, alerta); } // Adiciona em clienteVsAlertas HashSet <string> alertasCliente; if (clienteVsAlertas.ContainsKey(alerta.IdCliente)) { alertasCliente = clienteVsAlertas[alerta.IdCliente]; } else { alertasCliente = new HashSet <string>(); clienteVsAlertas.Add(alerta.IdCliente, alertasCliente); } alertasCliente.Add(idAlerta); } }
public DadosAlerta Cadastrar( string Chave, string IdCliente, string Instrumento, Operando TipoOperando, Operador TipoOperador, decimal Valor, DateTime dataHoraCadastro) { DadosAlerta Dados = new DadosAlerta(); Dados.IdAlerta = Chave; Dados.IdCliente = IdCliente; Dados.Instrumento = Instrumento; Dados.TipoOperando = TipoOperando; Dados.TipoOperador = TipoOperador; Dados.Valor = Valor; Dados.DataCadastro = dataHoraCadastro; alertas.Add(Chave, Dados); // Adiciona em clienteVsAlertas HashSet <string> alertasCliente; if (clienteVsAlertas.ContainsKey(IdCliente)) { alertasCliente = clienteVsAlertas[IdCliente]; alertasCliente.Add(Chave); } else { alertasCliente = new HashSet <string>(); alertasCliente.Add(Chave); clienteVsAlertas.Add(IdCliente, alertasCliente); } // Adiciona em instrumentosVsAlertas HashSet <string> alertasInstrumento; if (instrumentoVsAlertas.ContainsKey(Instrumento)) { alertasInstrumento = instrumentoVsAlertas[Instrumento]; alertasInstrumento.Add(Chave); } else { alertasInstrumento = new HashSet <string>(); alertasInstrumento.Add(Chave); instrumentoVsAlertas.Add(Instrumento, alertasInstrumento); } return(Dados); }
public DadosAlerta MarcarComoExibido(String idAlerta) { DadosAlerta alertaMarcado = null; if (alertas.ContainsKey(idAlerta)) { alertas[idAlerta].Exibido = true; alertaMarcado = alertas[idAlerta]; } else { logger.Error("Solicitado MarcarComoExibido de IdAlerta=[" + idAlerta + "] inexistente"); } return(alertaMarcado); }
public DadosAlerta Excluir(string chave) { if (alertas.ContainsKey(chave)) { string instrumento = alertas[chave].Instrumento; if (instrumentoVsAlertas.ContainsKey(instrumento)) { HashSet <string> alertasDoInstrumento = instrumentoVsAlertas[instrumento]; if (alertasDoInstrumento.Contains(chave)) { alertasDoInstrumento.Remove(chave); } } string cliente = alertas[chave].IdCliente; if (clienteVsAlertas.ContainsKey(cliente)) { HashSet <string> alertasDoCliente = clienteVsAlertas[cliente]; if (alertasDoCliente.Contains(chave)) { alertasDoCliente.Remove(chave); } } DadosAlerta alertaExcluido = alertas[chave]; alertas.Remove(chave); return(alertaExcluido); } else { logger.Error("Solicitada exclusão de IdAlerta=[" + chave + "] inexistente"); return(null); } }
public CadastrarAlertaResponse CadastrarAlerta(CadastrarAlertaRequest request) { CadastrarAlertaResponse responseAlerta = new CadastrarAlertaResponse(); try { logger.Debug("Executando Cadastrar Alerta - IdCliente=[" + request.Alerta.IdCliente + "] " + "Instrumento=[" + request.Alerta.Instrumento + "] " + "TipoOperador=[" + (int)request.Alerta.TipoOperador + "] " + "TipoOperando=[" + (int)request.Alerta.TipoOperando + "] " + "Valor=[" + request.Alerta.Valor + "] " ); DateTime dataHoraCadastro = DateTime.Now; if (!instrumentosMonitorados.Keys.Contains(request.Alerta.Instrumento)) { DadosInstrumento dadosInstrumento = new DadosInstrumento(); dadosInstrumento.minimo = Decimal.MaxValue; dadosInstrumento.maximo = Decimal.MinValue; instrumentosMonitorados.Add(request.Alerta.Instrumento, dadosInstrumento); StringBuilder requisicaoAlerta = new StringBuilder(); requisicaoAlerta.Append("AL"); requisicaoAlerta.Append(" "); requisicaoAlerta.Append(dataHoraCadastro.ToString(string.Format("{0}{1}", "yyyyMMddHHmmssmmm", "0"))); string instrumento = String.Format("{0,-20}", request.Alerta.Instrumento); requisicaoAlerta.Append(instrumento); requisicaoAlerta.Append("1"); if (mdsSocket.IsConectado()) { logger.Debug("Cadastrando alerta MDS [" + requisicaoAlerta.ToString() + "]"); mdsSocket.Send(requisicaoAlerta.ToString()); } } String idCadastrado = dbAlertas.CadastrarAlerta( request.Alerta.IdCliente, request.Alerta.Instrumento, request.Alerta.TipoOperando, request.Alerta.TipoOperador, request.Alerta.Valor, dataHoraCadastro ); if (idCadastrado == null) { logger.Error("CadastrarAlerta: Erro na inserção na base."); responseAlerta.StatusResposta = Library.MensagemResponseStatusEnum.ErroPrograma; responseAlerta.DescricaoErro = "Ocorreu erro na inserção das informações na base de dados. Alerta não foi cadastrado"; } else { logger.Debug("Cadastrar Alerta - Atribuído IdAlerta=[" + idCadastrado + "]"); responseAlerta.IdAlerta = idCadastrado; responseAlerta.StatusResposta = Library.MensagemResponseStatusEnum.OK; DadosAlerta dados = gerenciadorAlertas.Cadastrar( idCadastrado, request.Alerta.IdCliente, request.Alerta.Instrumento, request.Alerta.TipoOperando, request.Alerta.TipoOperador, request.Alerta.Valor, dataHoraCadastro); // Serializa alerta cadastrado e envia para AlertasCliente string alertaCadastradoSerializado = JsonConvert.SerializeObject(dados); StringBuilder retornoCadastrado = new StringBuilder(); retornoCadastrado.Append("CA"); retornoCadastrado.Append(alertaCadastradoSerializado); logger.Debug("Server - Enviando alertas cadastrado: [" + retornoCadastrado.ToString() + "]"); serverAlertas.SendToAll(retornoCadastrado.ToString()); } } catch (Exception e) { logger.Debug("CadastrarAlerta: Exception [" + e.Message + "]"); logger.Debug(e.StackTrace); responseAlerta.StatusResposta = Library.MensagemResponseStatusEnum.ErroPrograma; responseAlerta.IdAlerta = null; } return(responseAlerta); }
public List <DadosAlerta> Checar(string mensagem, Dictionary <String, DadosInstrumento> instrumentosMonitorados) { List <DadosAlerta> idAlertasAtingidos = new List <DadosAlerta>(); if (mensagem.Length != TamanhoMensagemAR) { logger.Error("Recebida mensagem AR com tamanho inválido: [" + mensagem + "]"); return(idAlertasAtingidos); } String instrumento = mensagem.Substring(InstrumentoPos, InstrumentoTam).Trim(); Decimal preco = Convert.ToDecimal(mensagem.Substring(PrecoPos, PrecoTam)); Decimal maximo = Convert.ToDecimal(mensagem.Substring(MaximaPos, MaximaTam)); Decimal minimo = Convert.ToDecimal(mensagem.Substring(MinimaPos, MinimaTam)); Decimal oscilacao = Math.Round(Convert.ToDecimal(mensagem.Substring(VariacaoPos, VariacaoTam)), 2); bool maximoAtingido = false; bool minimoAtingido = false; if (instrumentosMonitorados.ContainsKey(instrumento)) { // Atualiza Valores de máximo e mínimo if (maximo > instrumentosMonitorados[instrumento].maximo) { if (!instrumentosMonitorados[instrumento].maximo.Equals(Decimal.MinValue)) { maximoAtingido = true; } else { if (preco.Equals(maximo)) { maximoAtingido = true; } } instrumentosMonitorados[instrumento].maximo = maximo; } } else { logger.Error("Dictionary de instrumentos monitorados não contém instrumento [" + instrumento + "]"); } if (instrumentosMonitorados.ContainsKey(instrumento)) { if (minimo < instrumentosMonitorados[instrumento].minimo) { if (!instrumentosMonitorados[instrumento].minimo.Equals(Decimal.MaxValue)) { minimoAtingido = true; } else { if (preco.Equals(minimo)) { minimoAtingido = true; } } instrumentosMonitorados[instrumento].minimo = minimo; } } else { logger.Error("Dictionary de instrumentos monitorados não contém instrumento [" + instrumento + "]"); } if (instrumentoVsAlertas.ContainsKey(instrumento)) { foreach (string idAlerta in instrumentoVsAlertas[instrumento]) { DadosAlerta dadosAlerta = alertas[idAlerta]; if (dadosAlerta.Atingido) { continue; } if (dadosAlerta.TipoOperando == Operando.Preco) { if (ExecutarOperacao(preco, dadosAlerta.Valor, dadosAlerta.TipoOperador)) { dadosAlerta.Atingido = true; dadosAlerta.DataAtingimento = System.DateTime.Now; dadosAlerta.Cotacao = preco; idAlertasAtingidos.Add(dadosAlerta); } } else if (dadosAlerta.TipoOperando == Operando.Maximo) { if (maximoAtingido) { dadosAlerta.Atingido = true; dadosAlerta.DataAtingimento = System.DateTime.Now; dadosAlerta.Cotacao = preco; idAlertasAtingidos.Add(dadosAlerta); } } else if (dadosAlerta.TipoOperando == Operando.Minimo) { if (minimoAtingido) { dadosAlerta.Atingido = true; dadosAlerta.DataAtingimento = System.DateTime.Now; dadosAlerta.Cotacao = preco; idAlertasAtingidos.Add(dadosAlerta); } } else if (dadosAlerta.TipoOperando == Operando.Oscilacao) { if (ExecutarOperacao(oscilacao, dadosAlerta.Valor, dadosAlerta.TipoOperador)) { dadosAlerta.Atingido = true; dadosAlerta.DataAtingimento = System.DateTime.Now; dadosAlerta.Cotacao = oscilacao; idAlertasAtingidos.Add(dadosAlerta); } } } } return(idAlertasAtingidos); }
public Dictionary <String, DadosAlerta> ListarAlertas() { Dictionary <String, DadosAlerta> dadosRetorno = new Dictionary <String, DadosAlerta>(); SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Alertas"].ConnectionString); SqlDataReader rdr = null; try { conn.Open(); SqlCommand command = new SqlCommand(); command.CommandType = CommandType.StoredProcedure; command.Connection = conn; command.CommandText = "prc_TB_ALERTAS_lst"; rdr = command.ExecuteReader(); while (rdr.Read()) { String idAlertaDb = (String)rdr["IdAlerta"]; DadosAlerta registro = new DadosAlerta(); registro.IdAlerta = idAlertaDb; registro.IdCliente = (String)rdr["IdCliente"]; registro.Instrumento = (String)rdr["Instrumento"]; registro.TipoOperando = (Operando)rdr["TipoOperando"]; registro.TipoOperador = (Operador)rdr["TipoOPerador"]; registro.Valor = (Decimal)rdr["Valor"]; if (!rdr.IsDBNull(rdr.GetOrdinal("Atingido"))) { registro.Atingido = ((((String)rdr["Atingido"]).ElementAt(0) == '0') ? false : true); } else { registro.Atingido = false; } if (!rdr.IsDBNull(rdr.GetOrdinal("Exibido"))) { registro.Exibido = ((((String)rdr["Exibido"]).ElementAt(0) == '0') ? false : true); } else { registro.Exibido = false; } if (!rdr.IsDBNull(rdr.GetOrdinal("DataCadastro"))) { registro.DataCadastro = (DateTime)rdr["DataCadastro"]; } if (!rdr.IsDBNull(rdr.GetOrdinal("DataAtingimento"))) { registro.DataAtingimento = (DateTime)rdr["DataAtingimento"]; } if (!rdr.IsDBNull(rdr.GetOrdinal("Cotacao"))) { registro.Cotacao = (Decimal)rdr["Cotacao"]; } dadosRetorno.Add(idAlertaDb, registro); } } catch (SqlException ex) { logger.Error("CadastrarAlertas(): " + ex.Message, ex); } finally { if (conn != null && conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); } } return(dadosRetorno); }