/// <summary> /// Monta a string da mensagem de negocio pra envio ao HomeBroker /// </summary> /// <param name="registroNegocio"></param> /// <returns></returns> public static string montarNegocioHomeBroker(NegocioBase registroNegocio) { StringBuilder builder = new StringBuilder(); NEGDadosNegocio negocio = registroNegocio.Negocio; builder.Append(MDSUtils.montaHeaderHomeBroker(registroNegocio.Instrumento, ConstantesMDS.TIPO_REQUISICAO_HB_NEGOCIO, registroNegocio.TipoBolsa)); // Corpo da mensagem MDS de Negocio if (String.IsNullOrEmpty(negocio.Data)) { builder.Append("00000000"); } else { builder.Append(negocio.Data); } if (String.IsNullOrEmpty(negocio.Hora)) { builder.Append("000000000"); } else { builder.Append(negocio.Hora.PadRight(9, '0')); } if (String.IsNullOrEmpty(negocio.Compradora)) { builder.Append("00000000"); } else { builder.Append(negocio.Compradora.PadLeft(8, '0')); } if (String.IsNullOrEmpty(negocio.Vendedora)) { builder.Append("00000000"); } else { builder.Append(negocio.Vendedora.PadLeft(8, '0')); } if (negocio.Preco < 0) { builder.Append("000000000,000"); } else { builder.Append(negocio.Preco.ToString("000000000.000").Replace('.', ',')); } builder.Append(negocio.Quantidade.ToString().PadLeft(12, '0')); if (negocio.PrecoMaximo < 0) { builder.Append("000000000,000"); } else { builder.Append(negocio.PrecoMaximo.ToString("000000000.000").Replace('.', ',')); } if (negocio.PrecoMinimo < 0) { builder.Append("000000000,000"); } else { builder.Append(negocio.PrecoMinimo.ToString("000000000.000").Replace('.', ',')); } //BigDecimal volumeTotal = new BigDecimal(0); //try //{ // if (dadosInstrumentos.getTipoBolsa().equals(ConstantesMDS.DESCRICAO_DE_BOLSA_BMF)) // { // if (dadosInstrumentos.getPrecoMedio() != null && !dadosInstrumentos.getPrecoMedio().trim().isEmpty()) // { // BigDecimal precoMedio = new BigDecimal( // dadosInstrumentos.getPrecoMedio().replace(',', '.')); // if (!precoMedio.equals(new BigDecimal(0))) // { // volumeTotal = dadosInstrumentos.getVolumeTotal(). // divide(precoMedio, 6, RoundingMode.HALF_UP); // } // } // } // else // { // volumeTotal = dadosInstrumentos.getVolumeTotal(); // } //} //catch (Exception ex) { } //builder.Append(String.format("%013d", volumeTotal.longValue())); builder.Append(negocio.VolumeTotal.ToString("0000000000000", CultureInfo.InvariantCulture)); builder.Append(negocio.QtdeNegocios.ToString().PadLeft(8, '0')); Decimal variacao = Math.Abs(negocio.Variacao); if (negocio.Variacao >= Decimal.Zero) { builder.Append(" "); } else { builder.Append("-"); } if (variacao > 99999 || variacao < -99999) { builder.Append("00000,00"); } else { builder.Append(variacao.ToString("00000.00", CultureInfo.InvariantCulture).Replace('.', ',')); } builder.Append(negocio.EstadoInstrumento.ToString()); if (negocio.MelhorQuantidadeCompra < 0) { builder.Append("000000000000"); } else { builder.Append(negocio.MelhorQuantidadeCompra.ToString().PadLeft(12, '0')); } if (negocio.MelhorQuantidadeVenda < 0) { builder.Append("000000000000"); } else { builder.Append(negocio.MelhorQuantidadeVenda.ToString().PadLeft(12, '0')); } builder.Append(negocio.QtdeNegociadaDia.ToString().PadLeft(12, '0')); builder.Append(negocio.PrecoMedio.ToString("000000000.000", CultureInfo.InvariantCulture).Replace('.', ',')); // Dados do Leilao builder.Append(negocio.PrecoTeoricoAbertura.ToString("000000000.000", CultureInfo.InvariantCulture).Replace('.', ',')); if (negocio.Variacao >= Decimal.Zero) { builder.Append(" "); } else { builder.Append("-"); } variacao = Math.Abs(negocio.VariacaoTeorica); builder.Append(variacao.ToString("00000.00", CultureInfo.InvariantCulture).Replace('.', ',')); builder.Append(negocio.HorarioTeorico.ToString("yyyyMMddHHmmss")); return(builder.ToString()); }
/// <summary> /// Monta a string da mensagem de negocio pra envio ao HomeBroker /// </summary> /// <param name="registroNegocio"></param> /// <returns></returns> public static string montarLivroNegociosHomeBroker(NegocioBase registroNegocio) { StringBuilder builder = new StringBuilder(); NEGDadosNegocio negocio = registroNegocio.Negocio; builder.Append(MDSUtils.montaHeaderHomeBroker(registroNegocio.Instrumento, ConstantesMDS.TIPO_REQUISICAO_HB_LIVRO_NEGOCIOS, registroNegocio.TipoBolsa)); int numItens = 30; //TODO: parametrizar int posicaoItem = 0; while (posicaoItem < numItens && posicaoItem < registroNegocio.LivroNegocios.Count) { LNGDadosNegocio item = registroNegocio.LivroNegocios[posicaoItem]; if (item != null) { if (!String.IsNullOrEmpty(item.NumeroNegocio)) { builder.Append(item.NumeroNegocio.PadLeft(8, '0')); } else { builder.Append("00000000"); } if (!String.IsNullOrEmpty(item.Hora)) { builder.Append(item.Hora.PadLeft(6, '0')); } else { builder.Append("000000"); } builder.Append(item.Preco.ToString("0000000000.00")); builder.Append(String.Format("{0:d12}", item.Quantidade)); if (!String.IsNullOrEmpty(item.Compradora)) { builder.Append(item.Compradora.PadLeft(8, '0')); } else { builder.Append("00000000"); } if (!String.IsNullOrEmpty(item.Vendedora)) { builder.Append(item.Vendedora.PadLeft(8, '0')); } else { builder.Append("00000000"); } } posicaoItem++; } return(builder.ToString()); }
/// <summary> /// Monta um dicionario de valores correspondente a um sinal/evento de negocio /// para o streamer /// </summary> /// <param name="negocio"></param> /// <returns></returns> public static Dictionary <string, string> montarNegocioStreamer(NEGDadosNegocio negocio, int casasDecimais) { Dictionary <string, string> mensagem = new Dictionary <String, String>(); // Corpo da mensagem Streamer de Negocio if (String.IsNullOrEmpty(negocio.Data)) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_DATA, "00000000"); //DateTime.Now.ToString("yyyyMMdd")); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_DATA, negocio.Data); } if (String.IsNullOrEmpty(negocio.Hora)) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_HORA, "000000000"); //DateTime.Now.ToString("HHmmssfff")); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_HORA, negocio.Hora + "000"); } if (String.IsNullOrEmpty(negocio.Compradora)) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_COMPRADORA, "0"); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_COMPRADORA, negocio.Compradora); } if (String.IsNullOrEmpty(negocio.Vendedora)) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_VENDEDORA, "0"); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_VENDEDORA, negocio.Vendedora); } mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_PRECO, String.Format("{0:f" + casasDecimais + "}", negocio.Preco).Replace('.', ',')); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_QUANTIDADE, negocio.Quantidade.ToString()); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_PRECO_ABERTURA, String.Format("{0:f" + casasDecimais + "}", negocio.PrecoAbertura).Replace('.', ',')); // Preco de ajuste...revisar tratamento de BMF //if ( negocio.PrecoAjuste != Decimal.Zero ) // mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_PRECO_FECHAMENTO, String.Format("{0:f2}", negocio.PrecoAjuste).Replace('.', ',')); //else mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_PRECO_FECHAMENTO, String.Format("{0:f" + casasDecimais + "}", negocio.PrecoFechamento).Replace('.', ',')); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MAXIMA_DIA, String.Format("{0:f" + casasDecimais + "}", negocio.PrecoMaximo).Replace('.', ',')); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MINIMA_DIA, String.Format("{0:f" + casasDecimais + "}", negocio.PrecoMinimo).Replace('.', ',')); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MEDIO, String.Format("{0:f" + casasDecimais + "}", negocio.PrecoMedio).Replace('.', ',')); //Decimal volume = Decimal.Zero; //if ( negocio.VolumeTotal > Decimal.Zero && negocio.PrecoMedio > Decimal.Zero ) // volume = negocio.VolumeTotal / negocio.PrecoMedio; mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_VOLUME_ACUMULADO, String.Format("{0:f" + casasDecimais + "}", negocio.VolumeTotal).Replace('.', ',')); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_QUANTIDADE_ACUMULADA_PAPEIS, negocio.QtdeNegociadaDia.ToString()); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_NUMERO_NEGOCIOS, negocio.QtdeNegocios.ToString()); if (negocio.Variacao < Decimal.Zero) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_INDICADOR_VARIACAO, "-"); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_INDICADOR_VARIACAO, " "); } mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_VARIACAO, String.Format("{0:f2}", Math.Abs(negocio.Variacao)).Replace('.', ',')); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_ESTADO_PAPEL, negocio.EstadoInstrumento.ToString()); if (negocio.MelhorPrecoCompra == ConstantesMDS.PRECO_LIVRO_OFERTAS_MAX_VALUE) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MELHOR_OFERTA_COMPRA, "0,00"); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MELHOR_OFERTA_COMPRA, String.Format("{0:f" + casasDecimais + "}", negocio.MelhorPrecoCompra).Replace('.', ',')); } if (negocio.MelhorPrecoVenda == ConstantesMDS.PRECO_LIVRO_OFERTAS_MIN_VALUE) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MELHOR_OFERTA_VENDA, "0,00"); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MELHOR_OFERTA_VENDA, String.Format("{0:f" + casasDecimais + "}", negocio.MelhorPrecoVenda).Replace('.', ',')); } mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MELHOR_QUANTIDADE_COMPRA, negocio.MelhorQuantidadeCompra.ToString()); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_MELHOR_QUANTIDADE_VENDA, negocio.MelhorQuantidadeVenda.ToString()); // Informacoes do leilao mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_PRECO_TEORICO_ABERTURA, String.Format("{0:f" + casasDecimais + "}", negocio.PrecoTeoricoAbertura).Replace('.', ',')); if (negocio.VariacaoTeorica < Decimal.Zero) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_INDICADOR_VARIACAO_TEORICA, "-"); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_INDICADOR_VARIACAO_TEORICA, " "); } mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_VARIACAO_TEORICA, String.Format("{0:f2}", Math.Abs(negocio.VariacaoTeorica)).Replace('.', ',')); if (negocio.HorarioTeorico == DateTime.MinValue) { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_HORARIO_TEORICO, "00000000000000"); //negocio.HorarioTeorico.ToString("yyyyMMddHHmmss")); } else { mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_HORARIO_TEORICO, negocio.HorarioTeorico.ToString("yyyyMMddHHmmss")); } mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_ESTADO_GRUPO, negocio.EstadoGrupo); mensagem.Add(ConstantesMDS.HTTP_NEGOCIO_ESTADO_PAPEL2, negocio.EstadoPapel2); return(mensagem); }