public void InserirOrdemDetalhe(OrderDbDetalheInfo detail, string clordid) { try { loggerCliente.InfoFormat(_sb_prc_fix_inserir_ordem_detalhe.ToString(), detail.TransactID, clordid, detail.OrderQty, detail.OrderQtyRemaining, detail.CumQty, detail.TradeQty, detail.Price, detail.OrderStatusID, detail.Description, DateTime.MinValue == detail.TransactTime ? "NULL" : "'" + detail.TransactTime.ToString("yyyy-MM-dd HH:mm:sss.fff") + "'", detail.CxlRejResponseTo, detail.CxlRejReason, detail.FixMsgSeqNum); } catch (Exception ex) { logger.Error("Problemas na escrita do arquivo InserirOrdemDetalhe: " + ex.Message, ex); } }
public bool InserirOrdemDetalhe(OrderDbDetalheInfo orderDt, string clOrdID) { try { AbrirConexao(_strConnectionStringDefault); _sqlCommand = new SqlCommand("prc_fix_inserir_ordem_detalhe", _sqlConn); _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure; _sqlCommand.Parameters.Add(new SqlParameter("@TransactID", orderDt.TransactID)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderID", orderDt.OrderID)); _sqlCommand.Parameters.Add(new SqlParameter("@ClOrdID", clOrdID)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQty", orderDt.OrderQty)); _sqlCommand.Parameters.Add(new SqlParameter("@OrdQtyRemaining", orderDt.OrderQtyRemaining)); _sqlCommand.Parameters.Add(new SqlParameter("@CumQty", orderDt.CumQty)); _sqlCommand.Parameters.Add(new SqlParameter("@TradeQty", orderDt.TradeQty)); _sqlCommand.Parameters.Add(new SqlParameter("@Price", orderDt.Price)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderStatusID", orderDt.OrderStatusID)); _sqlCommand.Parameters.Add(new SqlParameter("@Description", orderDt.Description)); if (orderDt.TransactTime == DateTime.MinValue) { _sqlCommand.Parameters.Add(new SqlParameter("@EventTime", DateTime.Now)); } else { _sqlCommand.Parameters.Add(new SqlParameter("@EventTime", orderDt.TransactTime)); } _sqlCommand.Parameters.Add(new SqlParameter("@CxlRejResponseTo", orderDt.CxlRejResponseTo)); _sqlCommand.Parameters.Add(new SqlParameter("@CxlRejReason", orderDt.CxlRejReason)); _sqlCommand.Parameters.Add(new SqlParameter("@FixMsgSeqNum", orderDt.FixMsgSeqNum)); int rows = _sqlCommand.ExecuteNonQuery(); FecharConexao(); return(true); } catch (Exception ex) { _dbArq.InserirOrdemDetalhe(orderDt, clOrdID); FecharConexao(); logger.Error("InserirOrdemDetalhe(): " + ex.Message, ex); return(false); } }
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); } }