public void InserirOrdemUpdate(OrderDbUpdateInfo update) { try { loggerCliente.InfoFormat(_sb_prc_fix_inserir_ordem_update.ToString(), update.OrderID, update.Account, update.Instrumento, update.ClOrdID, update.OrdStatusID, update.Price, update.Price, update.Quantidade, update.Quantidade_Exec, update.Quantidade_Aparente, update.Quantidade_Minima, DateTime.MinValue == update.Dt_Validade ? "NULL" : "'" + update.Dt_Validade.ToString("yyyy-MM-dd HH:mm:sss.fff") + "'", update.TimeInForce); } catch (Exception ex) { logger.Error("Problemas na escrita do arquivo InserirOrdemUpdate: " + ex.Message, ex); } }
public bool InserirOrdermUpdate(OrderDbUpdateInfo updt) { try { AbrirConexao(_strConnectionStringDefault); _sqlCommand = new SqlCommand("prc_fix_inserir_ordem_update", _sqlConn); _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure; _sqlCommand.Parameters.Add(new SqlParameter("@OrderID", updt.OrderID)); _sqlCommand.Parameters.Add(new SqlParameter("@account", updt.Account)); _sqlCommand.Parameters.Add(new SqlParameter("@instrumento", updt.Instrumento)); _sqlCommand.Parameters.Add(new SqlParameter("@CLOrdID", updt.ClOrdID)); _sqlCommand.Parameters.Add(new SqlParameter("@OrdStatusID", updt.OrdStatusID)); _sqlCommand.Parameters.Add(new SqlParameter("@price", updt.Price)); _sqlCommand.Parameters.Add(new SqlParameter("@quantidade", updt.Quantidade)); _sqlCommand.Parameters.Add(new SqlParameter("@quantidade_exec", updt.Quantidade_Exec)); _sqlCommand.Parameters.Add(new SqlParameter("@quantidade_aparente", updt.Quantidade_Aparente)); _sqlCommand.Parameters.Add(new SqlParameter("@quantidade_minima", updt.Quantidade_Minima)); _sqlCommand.Parameters.Add(new SqlParameter("@TimeInForce", updt.TimeInForce)); if (DateTime.MinValue == updt.Dt_Validade) { _sqlCommand.Parameters.Add(new SqlParameter("@dt_validade", DBNull.Value)); } else { _sqlCommand.Parameters.Add(new SqlParameter("@dt_validade", updt.Dt_Validade)); } int rows = _sqlCommand.ExecuteNonQuery(); FecharConexao(); return(true); } catch (Exception ex) { _dbArq.InserirOrdemUpdate(updt); FecharConexao(); logger.Error("InserirOrdermUpdate(): " + ex.Message, ex); return(false); } }
public OrderDbUpdateInfo BuscarOrdemUpdate(string clordid) { try { OrderDbUpdateInfo ret = new OrderDbUpdateInfo(); SqlDataAdapter lAdapter; AbrirConexao(_strConnectionStringDefault); DataSet lDataSet = new DataSet(); _sqlCommand = new SqlCommand("prc_fix_buscar_ordem_original", _sqlConn); _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure; _sqlCommand.Parameters.Add(new SqlParameter("@ClOrdIdOriginal", clordid)); lAdapter = new SqlDataAdapter(_sqlCommand); lAdapter.Fill(lDataSet); foreach (DataRow lRow in lDataSet.Tables[0].Rows) { ret.Account = lRow["Account"].DBToInt32(); ret.Instrumento = lRow["Instrumento"].DBToString(); ret.OrderID = lRow["OrderID"].DBToInt32(); ret.ClOrdID = lRow["ClOrdID"].DBToString(); ret.OrdStatusID = lRow["OrdStatusID"].DBToInt32(); ret.Price = lRow["Price"].DBToDecimal(); ret.Quantidade = lRow["Quantidade"].DBToInt32(); ret.Quantidade_Exec = lRow["Quantidade_Exec"].DBToInt32(); ret.Quantidade_Aparente = lRow["Quantidade_Aparente"].DBToInt32(); ret.Quantidade_Minima = lRow["Quantidade_Minima"].DBToInt32(); ret.Dt_Validade = lRow["DT_Validade"].DBToDateTime(); ret.Dt_Atualizacao = lRow["DT_Atualizacao"].DBToDateTime(); } FecharConexao(); return(ret); } catch (Exception ex) { FecharConexao(); logger.Error("BuscarOrdemUpdate(): " + ex.Message, ex); return(null); } }
private bool _er_Update(ExecutionReport er, FixOrderStatus ordS, string desc, string bolsa) { try { int account; if (bolsa.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase)) { string acc = er.Account.getValue(); acc = (acc.Remove(acc.Length - 1)); account = Convert.ToInt32(acc); } else { account = Convert.ToInt32(er.Account.getValue()); } // Buscar Ordem Original, de algum jeito!!! // 1a. tentativa: Tentar via ExchangeNumber // 2a. tentativa: Tentar via ClOrdID e OrigClOrdID // 3a. tentativa: Tentar via ClOrdID no tb_fix_order_update e buscar a ordem pelo OrderID // 4a. tentativa: ahhh foda-se, nao achou mesmo OrderDbInfo orderOrig = null; // 1a. tentativa if (er.IsSetOrderID() && !er.OrderID.getValue().Equals("NONE")) { orderOrig = _db.BuscarOrdemPorExchangeNumber(er.OrderID.getValue()); } // 2a. Tentativa if (null == orderOrig || orderOrig.OrderID == 0) { orderOrig = _db.BuscarOrdem(er.ClOrdID.getValue(), account, er.Symbol.getValue()); if (orderOrig.OrderID == 0) { // Se ordem nao encontrada, entao procurar pelo OrigClOrdID if (er.IsSetOrigClOrdID()) { orderOrig = _db.BuscarOrdem(er.OrigClOrdID.getValue(), account, er.Symbol.getValue()); if (orderOrig.OrderID == 0) { orderOrig = _db.BuscarOrdem(er.OrigClOrdID.getValue(), account, er.Symbol.getValue(), true); //if (orderOrig.OrderID == 0) //{ // logger.Info("01 ER - Nao achou a ordem em questao!!!: " + er.OrigClOrdID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc); // return false; //} } else { orderOrig = _db.BuscarOrdem(er.OrigClOrdID.getValue(), account, er.Symbol.getValue()); } } else { orderOrig = _db.BuscarOrdem(er.ClOrdID.getValue(), account, er.Symbol.getValue(), true); //if (orderOrig.OrderID == 0) //{ // logger.Info("02 ER - Nao achou a ordem em questao!!!: " + er.ClOrdID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc); // return false; //} } } } // 3a. Tentativa if (null == orderOrig || orderOrig.OrderID == 0) { // Buscar a partir de tb_fix_order_update OrderDbUpdateInfo orderUpdate = _db.BuscarOrdemUpdate(er.ClOrdID.getValue()); // Buscar ordem original a partir do order ID if (orderUpdate.OrderID != 0) { orderOrig = _db.BuscarOrdemPorOrderID(orderUpdate.OrderID); } else { logger.Info("01 ER - Nao achou a ordem em questao!!!: " + er.ClOrdID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc); return(false); } } if (null == orderOrig || orderOrig.OrderID == 0) { logger.Info("02 ER - Nao achou a ordem em questao!!!: " + er.ClOrdID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc); return(false); } //} //else //{ // orderOrig = _db.BuscarOrdemPorExchangeNumber(er.OrderID.getValue()); // if (orderOrig.OrderID == 0) // { // logger.Info("ER - Nao achou a ordem em questao via exchange number (OrderID ER)!!!: " + er.OrderID.getValue() + " Status: " + ordS.ToString() + " Desc: " + desc); // return false; // } // } // Adicionar OrdemDetalhe OrderDbDetalheInfo detail = new OrderDbDetalheInfo(); detail.OrderID = orderOrig.OrderID; detail.TransactID = er.ExecID.getValue(); detail.OrderQty = Convert.ToInt32(er.OrderQty.getValue()); detail.Price = er.IsSetField(Tags.Price) ? er.Price.getValue() : Decimal.Zero; detail.OrderStatusID = (int)ordS; detail.TransactTime = er.TransactTime.getValue(); if (er.IsSetField(Tags.Text)) { detail.Description = desc + " - " + er.Text.getValue(); } else { detail.Description = desc; } detail.TradeQty = er.IsSetField(Tags.LastQty) ? Convert.ToInt32(er.LastQty.getValue()) : 0; detail.CumQty = er.IsSetField(Tags.CumQty) ? Convert.ToInt32(er.CumQty.getValue()) : 0; detail.FixMsgSeqNum = Convert.ToInt32(er.Header.GetField(Tags.MsgSeqNum)); if (!_db.InserirOrdemDetalhe(detail, orderOrig.ClOrdID)) { logger.Info("Erro ao inserir o registro na tabela tb_fix_order_update"); return(false); } // Atualizar Ordem orderOrig.ExchangeNumberID = er.OrderID.getValue(); orderOrig.OrdStatus = (int)ordS; orderOrig.TransactTime = er.TransactTime.getValue(); // orderOrig.ClOrdID = er.ClOrdID.getValue(); // if (er.IsSetOrigClOrdID()) // orderOrig.OrigClOrdID = er.OrigClOrdID.getValue(); if (er.IsSetField(Tags.LeavesQty)) { orderOrig.OrderQtyRemaining = Convert.ToInt32(er.LeavesQty.getValue()); } if (er.IsSetField(Tags.CumQty)) { orderOrig.CumQty = Convert.ToInt32(er.CumQty.getValue()); } orderOrig.Memo = er.IsSetField(Tags.Memo) ? er.GetField(Tags.Memo): string.Empty; if (!_db.AtualizarOrdem(orderOrig)) { logger.Info("Problemas na atualizacao da ordem. ClOrdID: " + orderOrig.ClOrdID); return(false); } DropCopyCallbackManager.Instance.EnqueueCallback(orderOrig); return(true); } catch (Exception ex) { logger.Error("_er_Update: Erro na atualizacao dos status da ordem: " + ex.Message, ex); return(false); } }
public void ProcessOrderCancelReject(QuickFix.Message msg, string bolsa) { try { OrderCancelReject ocr = (OrderCancelReject)msg; // Buscar a ordem original a partir do OrigClOrdID string clordid = ocr.ClOrdID.getValue(); int account; if (bolsa.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase)) { string acc = ocr.IsSetAccount()? ocr.Account.getValue(): string.Empty; if (!string.IsNullOrEmpty(acc)) { acc = (acc.Remove(acc.Length - 1)); account = 0; } else { account = 0; } } else { account = ocr.IsSetAccount()? Convert.ToInt32(ocr.Account.getValue()): 0; } OrderDbInfo orderOrig = null; if (account != 0) { orderOrig = _db.BuscarOrdem(clordid, account, ocr.Symbol.getValue()); } else { orderOrig = _db.BuscarOrdemPorClOrdEOrigClOrd(clordid, ocr.OrigClOrdID.getValue(), ocr.Symbol.getValue()); } if (orderOrig.ClOrdID.Equals(string.Empty)) { logger.Info("Problema ao consultar informacoes da ordem original"); return; } // Preencher informacoes de tb_fix_order_detail (rejection) OrderDbDetalheInfo detail = new OrderDbDetalheInfo(); detail.OrderID = orderOrig.OrderID; //detail.OrderQty = orderOrig.OrderQty; //detail.OrderQtyRemaining = orderOrig.OrderQtyRemaining; //detail.Price = orderOrig.Price; detail.OrderStatusID = (int)FixOrderStatus.REJEITADA; detail.TransactTime = ocr.IsSetField(Tags.TransactTime)? ocr.TransactTime.getValue(): DateTime.MinValue; detail.Description = ocr.IsSetField(Tags.Text) ? ocr.Text.getValue() : string.Empty; detail.CxlRejResponseTo = ocr.IsSetField(Tags.CxlRejResponseTo) ? ocr.CxlRejResponseTo.getValue().ToString() : string.Empty; detail.CxlRejReason = ocr.IsSetField(Tags.CxlRejReason)? ocr.CxlRejReason.getValue(): 0; detail.FixMsgSeqNum = Convert.ToInt32(ocr.Header.GetField(Tags.MsgSeqNum)); if (!_db.InserirOrdemDetalhe(detail, clordid)) { logger.Info("Problemas na inserção da ordem detalhe"); return; } // Buscar as informacoes da tabela update, utilizando o OrigClOrdID da ordem original OrderDbUpdateInfo orderUpdate = _db.BuscarOrdemUpdate(orderOrig.OrigClOrdID); // Atribuir as informacoes do update no order original orderOrig.ClOrdID = orderUpdate.ClOrdID; orderOrig.OrdStatus = orderUpdate.OrdStatusID; orderOrig.Price = orderUpdate.Price; orderOrig.OrderQty = orderUpdate.Quantidade; orderOrig.OrderQtyApar = orderUpdate.Quantidade_Aparente; orderOrig.OrderQtyMin = orderUpdate.Quantidade_Minima; //orderOrig.OrderQtyRemaining = orderUpdate.Quantidade_Exec; orderOrig.ExpireDate = orderUpdate.Dt_Validade; orderOrig.OrigClOrdID = string.Empty; orderOrig.MsgFix = ocr.ToString().Replace('\x01', '|'); // Atualizar as informacoes do update na tabela da ordem original if (!_db.AtualizarOrdem(orderOrig)) { logger.Info("Problemas na atualizacao da ordem (mensagem ordercancelreject). ClOrdID: " + orderOrig.ClOrdID); return; } DropCopyCallbackManager.Instance.EnqueueCallback(orderOrig); } catch (Exception ex) { logger.Error("Problemas no processamento da mensagem OrderCancelReject: " + ex.Message, ex); } }
public void ProcessOrderCancelReplaceRequest(QuickFix.Message msg, string bolsa) { try { OrderCancelReplaceRequest ocrr = (OrderCancelReplaceRequest)msg; string origclordid = ocrr.OrigClOrdID.getValue(); int account; if (bolsa.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase)) { string acc = ocrr.Account.getValue(); acc = (acc.Remove(acc.Length - 1)); account = Convert.ToInt32(acc); } else { account = Convert.ToInt32(ocrr.Account.getValue()); } // Buscar ordem original OrderDbInfo orderOrig = _db.BuscarOrdem(origclordid, account, ocrr.Symbol.getValue()); // Adicionar as informacoes da ordem original na tabela de upodate if (orderOrig.OrderID == 0) { logger.Info("OCRR - Nao achou a ordem em questao!!!: " + origclordid); return; } // Adicionar informacoes originais na tabela update OrderDbUpdateInfo updt = new OrderDbUpdateInfo(); updt.Account = orderOrig.Account; updt.Instrumento = orderOrig.Symbol; updt.OrderID = orderOrig.OrderID; updt.ClOrdID = orderOrig.ClOrdID; updt.OrdStatusID = orderOrig.OrdStatus; updt.Price = orderOrig.Price; updt.Quantidade = orderOrig.OrderQty; updt.Quantidade_Exec = orderOrig.CumQty; updt.Quantidade_Aparente = Convert.ToInt32(orderOrig.OrderQtyApar); updt.Quantidade_Minima = Convert.ToInt32(orderOrig.OrderQtyMin); updt.Dt_Validade = orderOrig.ExpireDate; updt.Dt_Atualizacao = orderOrig.TransactTime; updt.TimeInForce = orderOrig.TimeInForce; if (!_db.InserirOrdermUpdate(updt)) { logger.Error("Erro ao inserir o registro na tabela tb_fix_order_update"); return; } // Adicionar as novas informacoes pertinentes na tabela detail OrderDbDetalheInfo detail = new OrderDbDetalheInfo(); detail.OrderID = orderOrig.OrderID; detail.TransactID = ""; detail.OrderQty = Convert.ToInt32(ocrr.OrderQty.getValue()); detail.Price = ocrr.IsSetField(Tags.Price)? ocrr.Price.getValue(): Decimal.Zero; detail.OrderStatusID = (int)FixOrderStatus.SUBSTITUICAO_SOLICITADA; detail.TransactTime = ocrr.TransactTime.getValue(); detail.Description = DescMsg.OCRR_PENDING_MODIFICATION; detail.FixMsgSeqNum = Convert.ToInt32(ocrr.Header.GetField(Tags.MsgSeqNum)); if (!_db.InserirOrdemDetalhe(detail, orderOrig.ClOrdID)) { logger.Error("Erro ao inserir o registro na tabela tb_fix_order_update - msg de modificacao"); return; } // Atualizar a informacao original na tabela tb_fix_order // Atualiza os campos gravados na tabela tb_fix_order_update // Ordem original já se encontra em orderOrig orderOrig.OrigClOrdID = ocrr.OrigClOrdID.getValue(); orderOrig.ClOrdID = ocrr.ClOrdID.getValue(); orderOrig.OrdStatus = (int)FixOrderStatus.SUBSTITUICAO_SOLICITADA; orderOrig.TransactTime = ocrr.TransactTime.getValue(); if (ocrr.IsSetField(Tags.ExpireDate)) { orderOrig.ExpireDate = DateTime.ParseExact(ocrr.ExpireDate.getValue() + "235959", "yyyyMMddHHmmss", CultureInfo.InvariantCulture); } else { orderOrig.ExpireDate = DateTime.MinValue; } orderOrig.TimeInForce = ocrr.IsSetField(Tags.TimeInForce) ? ocrr.TimeInForce.getValue().ToString() : "0"; orderOrig.OrderQty = Convert.ToInt32(ocrr.OrderQty.getValue()); orderOrig.OrderQtyMin = ocrr.IsSetField(Tags.MinQty) ? ocrr.MinQty.getValue() : 0; orderOrig.OrderQtyApar = ocrr.IsSetField(Tags.MaxFloor) ? ocrr.MaxFloor.getValue() : 0; orderOrig.Price = ocrr.IsSetField(Tags.Price)? ocrr.Price.getValue(): Decimal.Zero; orderOrig.Memo = ocrr.IsSetField(Tags.Memo) ? ocrr.GetField(Tags.Memo): string.Empty; orderOrig.FixMsgSeqNum = Convert.ToInt32(ocrr.Header.GetField(Tags.MsgSeqNum)); orderOrig.MsgFix = ocrr.ToString().Replace('\x01', '|'); orderOrig.HandlInst = ocrr.IsSetField(Tags.HandlInst) ? ocrr.HandlInst.getValue().ToString() : string.Empty; if (!_db.AtualizarOrdem(orderOrig)) { logger.Info("Problemas na atualizacao da ordem (mensagem de modificacao). ClOrdID: " + orderOrig.ClOrdID); return; } DropCopyCallbackManager.Instance.EnqueueCallback(orderOrig); } catch (Exception ex) { logger.Error("Problemas no processamento da mensagem OrderCancelReplaceRequest: " + ex.Message, ex); } }