public OrderDbInfo BuscarOrdemPorClOrdEOrigClOrd(string clordid, string origclord, string symbol) { try { OrderDbInfo ret = new OrderDbInfo(); SqlDataAdapter lAdapter; AbrirConexao(_strConnectionStringDefault); DataSet lDataSet = new DataSet(); _sqlCommand = new SqlCommand("prc_fix_buscar_ordem_clordid_origcld", _sqlConn); _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure; _sqlCommand.Parameters.Add(new SqlParameter("@ClOrdId", clordid)); _sqlCommand.Parameters.Add(new SqlParameter("@OrigClOrdId", origclord)); _sqlCommand.Parameters.Add(new SqlParameter("@Symbol", symbol)); lAdapter = new SqlDataAdapter(_sqlCommand); lAdapter.Fill(lDataSet); foreach (DataRow lRow in lDataSet.Tables[0].Rows) { ret.OrderID = lRow["OrderID"].DBToInt32(); ret.OrigClOrdID = lRow["OrigClOrdID"].DBToString(); ret.ExchangeNumberID = lRow["ExchangeNumberID"].DBToString(); ret.ClOrdID = lRow["ClOrdID"].DBToString(); ret.Account = lRow["Account"].DBToInt32(); ret.Symbol = lRow["Symbol"].DBToString(); ret.SecurityExchangeID = lRow["SecurityExchangeID"].DBToString(); ret.StopStartID = lRow["StopStartID"].DBToInt32(); ret.OrdTypeID = lRow["OrdTypeID"].DBToString(); ret.OrdStatus = lRow["OrdStatusID"].DBToInt32(); ret.RegisterTime = lRow["RegisterTime"].DBToDateTime(); ret.TransactTime = lRow["TransactTime"].DBToDateTime(); ret.ExpireDate = lRow["ExpireDate"].DBToDateTime(); ret.TimeInForce = lRow["TimeInForce"].DBToString(); ret.ChannelID = lRow["ChannelID"].DBToInt32(); ret.ExecBroker = lRow["ExecBroker"].DBToString(); ret.Side = lRow["Side"].DBToInt32(); ret.OrderQty = lRow["OrderQty"].DBToInt32(); ret.OrderQtyRemaining = lRow["OrderQtyRemaining"].DBToInt32(); ret.OrderQtyMin = lRow["MinQty"].DBToDecimal(); ret.OrderQtyApar = lRow["MaxFloor"].DBToDecimal(); ret.Price = lRow["Price"].DBToDecimal(); ret.CumQty = lRow["CumQty"].DBToInt32(); ret.FixMsgSeqNum = lRow["FixMsgSeqNum"].DBToInt32(); ret.SystemID = lRow["SystemID"].DBToString(); ret.Memo = lRow["Memo"].DBToString(); ret.FixMsgSeqNum = lRow["FixMsgSeqNum"].DBToInt32(); ret.SessionID = lRow["SessionID"].DBToString(); ret.SessionIDOriginal = lRow["SessionIDOrigin"].DBToString(); ret.IdFix = lRow["IDSession"].DBToInt32(); } FecharConexao(); return(ret); } catch (Exception ex) { FecharConexao(); logger.Error("BuscarOrdem(): " + ex.Message, ex); return(null); } }
public bool AtualizarOrdem(OrderDbInfo order) { try { AbrirConexao(_strConnectionStringDefault); _sqlCommand = new SqlCommand("prc_fix_atualizar_ordem", _sqlConn); _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure; _sqlCommand.Parameters.Add(new SqlParameter("@OrderID", order.OrderID)); _sqlCommand.Parameters.Add(new SqlParameter("@ClOrdID", order.ClOrdID)); _sqlCommand.Parameters.Add(new SqlParameter("@OrigClOrdID", order.OrigClOrdID)); _sqlCommand.Parameters.Add(new SqlParameter("@ExchangeNumberID", order.ExchangeNumberID)); _sqlCommand.Parameters.Add(new SqlParameter("@OrdStatusID", order.OrdStatus)); _sqlCommand.Parameters.Add(new SqlParameter("@TransactTime", order.TransactTime)); if (DateTime.MinValue != order.ExpireDate) { _sqlCommand.Parameters.Add(new SqlParameter("@ExpireDate", order.ExpireDate)); } else { _sqlCommand.Parameters.Add(new SqlParameter("@ExpireDate", DBNull.Value)); } _sqlCommand.Parameters.Add(new SqlParameter("@TimeInForce", order.TimeInForce)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQty", order.OrderQty)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQtyMin", order.OrderQtyMin)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQtyApar", order.OrderQtyApar)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQtyRemaining", order.OrderQtyRemaining)); _sqlCommand.Parameters.Add(new SqlParameter("@CumQty", order.CumQty)); _sqlCommand.Parameters.Add(new SqlParameter("@Price", order.Price)); _sqlCommand.Parameters.Add(new SqlParameter("@FixMsgSeqNum", order.FixMsgSeqNum)); _sqlCommand.Parameters.Add(new SqlParameter("@Memo", order.Memo)); if (string.IsNullOrEmpty(order.HandlInst)) { _sqlCommand.Parameters.Add(new SqlParameter("@HandlInst", DBNull.Value)); } else { _sqlCommand.Parameters.Add(new SqlParameter("@HandlInst", order.HandlInst)); } if (string.IsNullOrEmpty(order.MsgFix)) { _sqlCommand.Parameters.Add(new SqlParameter("@MsgFix", DBNull.Value)); } else { _sqlCommand.Parameters.Add(new SqlParameter("@MsgFix", order.MsgFix)); } int rows = _sqlCommand.ExecuteNonQuery(); FecharConexao(); return(true); } catch (Exception ex) { _dbArq.AtualizarOrdem(order); FecharConexao(); logger.Error("AtualizarOrdem(): " + ex.Message, ex); return(false); } }
/// <summary> /// /// </summary> /// <param name="info"></param> public void EnqueueCallback(OrderDbInfo info) { try { lock (qDBOrdemInfoConvert) { this.qDBOrdemInfoConvert.Enqueue(info); } } catch (Exception ex) { logger.Error("EnqueueCallback: " + ex.Message, ex); } }
public void AtualizarOrdem(OrderDbInfo order) { try { loggerCliente.InfoFormat(_sb_prc_fix_atualizar_ordem.ToString(), order.OrderID, order.ClOrdID, order.OrigClOrdID, order.ExchangeNumberID, order.OrdStatus, DateTime.MinValue == order.TransactTime ? "NULL" : "'" + order.TransactTime.ToString("yyyy-MM-dd HH:mm:sss.fff") + "'", DateTime.MinValue == order.ExpireDate ? "NULL" : "'" + order.ExpireDate.ToString("yyyy-MM-dd HH:mm:sss.fff") + "'", order.TimeInForce, order.OrderQty, order.OrderQtyMin, order.OrderQtyApar, order.OrderQtyRemaining, order.CumQty, order.Price, order.FixMsgSeqNum, order.Memo); } catch (Exception ex) { logger.Error("Problemas na escrita do arquivo AtualizarOrdem: " + ex.Message, ex); } }
public void InserirOrdem(OrderDbInfo order) { try { loggerCliente.InfoFormat(_sb_prc_fix_inserir_ordem.ToString(), order.OrderID, order.ClOrdID, order.StopStartID, order.OrigClOrdID, order.ExchangeNumberID, order.Account, order.Symbol, order.SecurityExchangeID, order.OrdTypeID, order.OrdStatus, DateTime.MinValue == order.TransactTime ? "NULL" : "'" + order.TransactTime.ToString("yyyy-MM-dd HH:mm:sss.fff") + "'", DateTime.MinValue == order.ExpireDate ? "NULL" : "'" + order.ExpireDate.ToString("yyyy-MM-dd HH:mm:sss.fff") + "'", order.TimeInForce, order.ChannelID, order.ExecBroker, order.Side, order.OrderQty, order.OrderQtyMin, order.OrderQtyApar, order.OrderQtyRemaining, order.Price, order.CumQty, order.Description, order.FixMsgSeqNum, order.SystemID, order.Memo, order.SessionID); } catch (Exception ex) { logger.Error("Problemas na escrita do arquivo InserirOrdem: " + ex.Message, ex); } }
/// <summary> /// /// </summary> public void dbOrdemInfoConverter() { while (_bKeepRunning) { try { if (qDBOrdemInfoConvert.Count > 0) { OrderDbInfo dbInfo = null; lock (qDBOrdemInfoConvert) { dbInfo = qDBOrdemInfoConvert.Dequeue(); } if (dbInfo != null) { OrdemInfo converted = Conversions.OrderDBInfo2OrdemInfo(dbInfo); lock (qOrdemInfo) { qOrdemInfo.Enqueue(converted); } } } else { Thread.Sleep(100); } } catch (Exception ex) { logger.Error("dbOrdemInfoConverter:" + ex.Message, ex); Thread.Sleep(100); } } }
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 ProcessNewOrderSingle(QuickFix.Message msg, string bolsa, int operador) { try { NewOrderSingle nos = (NewOrderSingle)msg; // OBS1: Campos nao atribuidos, nao vem na mensagem; // OBS2: Esta seguindo a ordem dos campos da tabela OrderDbInfo order = new OrderDbInfo(); order.ClOrdID = nos.ClOrdID.getValue(); if (bolsa.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase)) { string acc = nos.Account.getValue(); order.Account = Convert.ToInt32(acc.Remove(acc.Length - 1)); } else { order.Account = Convert.ToInt32(nos.Account.getValue()); } order.Symbol = nos.Symbol.getValue(); order.SecurityExchangeID = nos.IsSetField(Tags.SecurityID)? nos.SecurityID.getValue(): string.Empty; //Para BMF order.OrdTypeID = Conversions.Parse2FixOrderType(nos.OrdType.getValue()); order.OrdStatus = (int)FixOrderStatus.NOVA_ORDEM_SOLICITADA; // (nova ordem) order.TransactTime = nos.TransactTime.getValue(); if (nos.IsSetField(Tags.ExpireDate)) { order.ExpireDate = DateTime.ParseExact(nos.ExpireDate.getValue() + "235959", "yyyyMMddHHmmss", CultureInfo.InvariantCulture); } else { order.ExpireDate = DateTime.MinValue; } order.TimeInForce = nos.IsSetField(Tags.TimeInForce) ? nos.TimeInForce.getValue().ToString() : "0"; order.ChannelID = operador; int len = nos.NoPartyIDs.getValue(); for (int i = 0; i < len; i++) { Group grp = nos.GetGroup(i + 1, Tags.NoPartyIDs); if (null != grp) { string enteringTrader = grp.GetField(Tags.PartyRole); if (enteringTrader.Equals(PartyRole.ENTERING_TRADER.ToString())) { order.ExecBroker = grp.GetField(Tags.PartyID); break; } } } order.Side = Convert.ToInt32(nos.Side.getValue().ToString()); order.OrderQty = Convert.ToInt32(nos.OrderQty.getValue()); order.OrderQtyRemaining = order.OrderQty; // (new order, entao nada foi executado) order.OrderQtyMin = nos.IsSetField(Tags.MinQty) ? nos.MinQty.getValue() : Decimal.Zero; order.OrderQtyApar = nos.IsSetField(Tags.MaxFloor) ? nos.MaxFloor.getValue() : Decimal.Zero; order.Price = nos.IsSetField(Tags.Price) ? nos.Price.getValue() : Decimal.Zero; order.SystemID = "FixServer"; order.Memo = nos.IsSetField(Tags.Memo) ? nos.GetField(Tags.Memo): string.Empty; order.FixMsgSeqNum = Convert.ToInt32(nos.Header.GetField(Tags.MsgSeqNum)); order.SessionID = nos.GetSessionID(msg).ToString(); order.SessionIDOriginal = nos.GetString(CustomTags.ORIG_SESSION); order.IdFix = nos.GetInt(CustomTags.FIXID); order.MsgFix = nos.ToString().Replace('\x01', '|'); // Para order_detail order.Description = DescMsg.NOS_OPEN; order.HandlInst = nos.IsSetField(Tags.HandlInst) ? nos.GetField(Tags.HandlInst) : string.Empty; if (!_db.InserirOrdem(order)) { logger.Info("Problemas na insercao da ordem. ClOrdId: " + order.ClOrdID); } DropCopyCallbackManager.Instance.EnqueueCallback(order); } catch (Exception ex) { logger.Error("Problemas no processamento da mensagem NewOrderSingle: " + 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); } }
// 1: return by chave // 2: return by chaveExchNumber public int GetOrder(string chave, out TOOrderSession to, string chaveExchNumber = "", int keyType = 1, string exchange = "") { try { //TOOrderSession ord = null; lock (_dicMsgsCl) { if (_dicMsgsCl.TryGetValue(chave, out to)) { return(FindType.CLORDID); } else { //if (string.IsNullOrEmpty(chaveExchNumber)) // return FindType.CLORDID; { //KeyValuePair<string, TOOrderSession> item = new KeyValuePair<string, TOOrderSession>(); List <TOOrderSession> lst = _dicMsgsCl.Select(x => x.Value).Where(x => x.ExchangeNumberID == chaveExchNumber).ToList(); TOOrderSession item = null; if (KeyType.CLORDID == keyType) { item = lst.OrderByDescending(x => x.ExchangeSeqNum).FirstOrDefault(); } else { item = lst.OrderByDescending(x => x.ExchangeSeqNum).LastOrDefault(); } to = item; if (null != to) { return(FindType.EXCHANGE_NUMBER); } // Nao achou a ordem. Tentará busca a partir do banco de dados. //TODO[FF]: Fazer a busca e remontar o TO com as informacoes existentes else { string[] arr = chave.Split('-'); string clord; string strAcc = string.Empty; int account; string symbol; if (arr.Length != 3) { return(FindType.UNDEFINED); } clord = arr[0]; if (exchange.Equals(ExchangePrefixes.BOVESPA, StringComparison.InvariantCultureIgnoreCase)) { strAcc = arr[1].Substring(0, arr[1].Length - 1); } else { strAcc = arr[1]; } account = Convert.ToInt32(strAcc); symbol = arr[2]; DbFix db = new DbFix(); OrderDbInfo retOrd = db.BuscarOrdem(clord, account, symbol); if (0 == retOrd.OrderID) { to = null; return(FindType.UNDEFINED); } else { TOOrderSession toAux = this.OrderDbInfo2OrderSession(retOrd, chave); to = toAux; return(FindType.DB); } } } } } to = null; return(FindType.UNDEFINED); } catch (Exception ex) { logger.Error("Erro ao buscar o TOOrderSession: " + ex.Message, ex); to = null; return(FindType.UNDEFINED); } }
private TOOrderSession OrderDbInfo2OrderSession(OrderDbInfo ord, string chave) { try { TOOrderSession ret = new TOOrderSession(); string ss = ord.SessionIDOriginal; string [] aux = ss.Split(new string[] { ":", "/", "->" }, StringSplitOptions.RemoveEmptyEntries); string beginstr; string sender; string sendersub = string.Empty; string target; string targetsub = string.Empty; // Se tiver '/', existe sender sub e targetsub bool isSub = false; if (ss.IndexOf("/") > 0) { beginstr = aux[0]; sender = aux[1]; sendersub = aux[2]; target = aux[3]; targetsub = aux[4]; isSub = true; } else { beginstr = aux[0]; sender = aux[1]; target = aux[2]; } if (isSub) { ret.Sessao = new QuickFix.SessionID(beginstr, sender, sendersub, target, targetsub); } else { ret.Sessao = new QuickFix.SessionID(beginstr, sender, target); } ret.TipoExpiracao = ord.TimeInForce; ret.DataExpiracao = ord.ExpireDate == DateTime.MinValue? "" : ord.ExpireDate.ToString("yyyyMMdd"); ret.DataEnvio = ord.RegisterTime.ToString("yyyyMMdd-HH:mm:ss.fff"); ret.MsgSeqNum = ord.FixMsgSeqNum; ret.OrigClOrdID = ord.OrigClOrdID; ret.ClOrdID = ord.ClOrdID; ret.Account = ord.Account; ret.ExchangeNumberID = ord.ExchangeNumberID; ret.ExchangeSeqNum = 1; ret.ChaveDicionario = chave; // Remontar a mensagem fix string msg = ord.MsgFix.Replace('|', '\x01'); ret.MensagemQF = new QuickFix.Message(msg, this.Dict, true); // Remontar party id a partir da mensagem fix int lenPID = ret.MensagemQF.IsSetField(Tags.NoPartyIDs) ? ret.MensagemQF.GetInt(Tags.NoPartyIDs) : 0; for (int x = 1; x <= lenPID; x += 1) { Group noPartyIds = new Group(ret.MensagemQF.GetGroup(x, Tags.NoPartyIDs)); ret.PartyIDs.Add(noPartyIds); } return(ret); } catch (Exception ex) { logger.Error("OrderDbInfo2OrderSession(): " + ex.Message, ex); return(null); } }
public bool InserirOrdem(OrderDbInfo order) { try { AbrirConexao(_strConnectionStringDefault); _sqlCommand = new SqlCommand("prc_fix_inserir_ordem", _sqlConn); _sqlCommand.CommandType = System.Data.CommandType.StoredProcedure; _sqlCommand.Parameters.Add(new SqlParameter("@OrderID", order.OrderID)); _sqlCommand.Parameters.Add(new SqlParameter("@ClOrdID", order.ClOrdID)); _sqlCommand.Parameters.Add(new SqlParameter("@StopStartID", order.StopStartID)); _sqlCommand.Parameters.Add(new SqlParameter("@OrigClOrdID", order.OrigClOrdID)); _sqlCommand.Parameters.Add(new SqlParameter("@ExchangeNumberID", order.ExchangeNumberID)); _sqlCommand.Parameters.Add(new SqlParameter("@Account", order.Account)); _sqlCommand.Parameters.Add(new SqlParameter("@Symbol", order.Symbol)); _sqlCommand.Parameters.Add(new SqlParameter("@SecurityExchangeID", order.SecurityExchangeID)); _sqlCommand.Parameters.Add(new SqlParameter("@OrdTypeID", order.OrdTypeID)); _sqlCommand.Parameters.Add(new SqlParameter("@OrdStatusID", order.OrdStatus)); _sqlCommand.Parameters.Add(new SqlParameter("@TransactTime", order.TransactTime)); if (DateTime.MinValue != order.ExpireDate) { _sqlCommand.Parameters.Add(new SqlParameter("@ExpireDate", order.ExpireDate)); } else { _sqlCommand.Parameters.Add(new SqlParameter("@ExpireDate", DBNull.Value)); } _sqlCommand.Parameters.Add(new SqlParameter("@TimeInForce", order.TimeInForce)); _sqlCommand.Parameters.Add(new SqlParameter("@ChannelID", order.ChannelID)); _sqlCommand.Parameters.Add(new SqlParameter("@ExecBroker", order.ExecBroker)); _sqlCommand.Parameters.Add(new SqlParameter("@Side", order.Side)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQty", order.OrderQty)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQtyMin", order.OrderQtyMin)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQtyApar", order.OrderQtyApar)); _sqlCommand.Parameters.Add(new SqlParameter("@OrderQtyRemaining", order.OrderQtyRemaining)); _sqlCommand.Parameters.Add(new SqlParameter("@Price", order.Price)); _sqlCommand.Parameters.Add(new SqlParameter("@CumQty", order.CumQty)); _sqlCommand.Parameters.Add(new SqlParameter("@description", order.Description)); _sqlCommand.Parameters.Add(new SqlParameter("@FixMsgSeqNum", order.FixMsgSeqNum)); _sqlCommand.Parameters.Add(new SqlParameter("@systemID", order.SystemID)); _sqlCommand.Parameters.Add(new SqlParameter("@Memo", order.Memo)); _sqlCommand.Parameters.Add(new SqlParameter("@SessionID", order.SessionID)); _sqlCommand.Parameters.Add(new SqlParameter("@OriginalSessionID", order.SessionIDOriginal)); _sqlCommand.Parameters.Add(new SqlParameter("@IdFix", order.IdFix)); _sqlCommand.Parameters.Add(new SqlParameter("@MsgFix", order.MsgFix)); if (!string.IsNullOrEmpty(order.HandlInst)) { _sqlCommand.Parameters.Add(new SqlParameter("@HandlInst", order.HandlInst)); } int rows = _sqlCommand.ExecuteNonQuery(); FecharConexao(); return(true); } catch (Exception ex) { _dbArq.InserirOrdem(order); FecharConexao(); logger.Error("InserirOrdem(): " + ex.Message, ex); return(false); } }