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