Example #1
0
        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);
            }
        }