Example #1
0
        /// <summary>
        /// 增加一条记录
        /// </summary>
        public static int Add(FutureDealBackEntity model)
        {
            StringBuilder strSql = null;

            strSql = new StringBuilder();
            strSql.Append("insert into FutureDealOrder(");
            strSql.Append("DealOrderNo,OrderNo,ChannelID,");
            strSql.Append("OrderPrice,DealAmount,DealTime");
            strSql.Append("");
            strSql.Append(")");
            strSql.Append(" values (");
            strSql.Append("'" + model.Id + "',");
            strSql.Append("'" + model.OrderNo + "',");
            strSql.Append("'" + model.ChannelNo + "',");
            strSql.Append("" + model.DealPrice + ",");
            strSql.Append("" + model.DealAmount + ",");
            strSql.Append("'" + model.DealTime + "'");
            strSql.Append(")");
            try
            {
                Database  db        = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());
                object    obj       = db.ExecuteNonQuery(dbCommand);
                return(1);
            }
            catch (Exception ex)
            {
                LogHelper.WriteError("CH-111:数据库连接受阻", ex);
                return(0);
            }
        }
        /// <summary>
        /// 保存股指期货成交回报
        /// </summary>
        /// <param name="entity">成交回报</param>
        public bool InsertGZQHDealBackEntity(FutureDealBackEntity entity)
        {
            if (HasAddId(entity.Id))
            {
                return(false);
            }

            BD_UnReckonedDealTableInfo table = new BD_UnReckonedDealTableInfo();

            table.id      = entity.Id;
            table.OrderNo = entity.OrderNo;
            table.Price   = entity.DealPrice;
            table.Amount  = (int)entity.DealAmount;
            table.Time    = entity.DealTime;

            table.EntityType = (int)DealBackEntityType.GZXH;

            string desc = GetGZQHDesc(entity);

            LogHelper.WriteDebug("$-------$CrashManager.InsertGZQHDealBackEntity" + desc);

            SaveEntity(table);

            //entity.Id = table.Id.ToString();
            AddID(entity.Id);
            return(true);
        }
        public string GetGZQHDesc(FutureDealBackEntity entity)
        {
            string format = "股指期货成交回报[OrderNo={0},DealPrice={1},DealAmount={2},DealTime={3}, ID={4}, CounterID={5}]";

            return(string.Format(format, entity.OrderNo, entity.DealPrice, entity.DealAmount, entity.DealTime, entity.Id,
                                 CountID));
        }
Example #4
0
        /// <summary>
        /// 保存成交回报
        /// </summary>
        /// <param name="model">成交回报实体</param>
        public void SaveDealBack(FutureDealBackEntity model)
        {
            #region 通道号或者成交实体不能为空
            //实体判断,成交回报实体不能为空。
            if (model == null || string.IsNullOrEmpty(model.ChannelNo))
            {
                return;
            }
            #endregion

            #region  步撮合中心委托回报实体
            lock (((ICollection)MatchCenterManager.Instance.DealFutureBackEntitys).SyncRoot)
            {
                if (MatchCenterManager.Instance.DealFutureBackEntitys.ContainsKey(model.ChannelNo))
                {
                    Queue <FutureDealBackEntity> queue = MatchCenterManager.Instance.DealFutureBackEntitys[model.ChannelNo];
                    queue.Enqueue(model);
                    //MatchCenter.Instance.DealFutureBackEntitys.Remove(model.ChannelNo);
                    //MatchCenter.Instance.DealFutureBackEntitys[model.ChannelNo] = queue;
                }
                else
                {
                    //队列实体
                    var queue = new Queue <FutureDealBackEntity>();
                    queue.Enqueue(model);
                    MatchCenterManager.Instance.DealFutureBackEntitys[model.ChannelNo] = queue;
                }
            }
            #endregion
        }
        /// <summary>
        /// 股指期货成交回报
        /// </summary>
        /// <param name="model">委托单</param>
        private void ProcessFutureStock(FutureDealBackEntity model)
        {
            //期货成交实体不能为空
            if (model == null)
            {
                return;
            }
            model.DealTime = DateTime.Now;
            OperationContext context = null;

            if (model.ChannelNo != null)    //上下文通道不能为空
            {
                if (MatchCenterManager.Instance.OperationContexts.ContainsKey(model.ChannelNo))
                {
                    context = MatchCenterManager.Instance.OperationContexts[model.ChannelNo];
                }
                else
                {
                    LogHelper.WriteError("股指期货成交回报,在缓存通道号列表中找不到指定的" + model.ChannelNo +
                                         "通道号,回报数据以缓存到回推队列中!", new Exception("股指期货成交回报获取回推通道!"));
                }
            }
            //撮合中心上下文不能为空
            if (context == null)
            {
                TradePushBackImpl.Instanse.SaveDealBack(model);
                return;
            }
            var channel = context.Channel;

            //撮合中心通道为空
            if (channel == null)
            {
                TradePushBackImpl.Instanse.SaveDealBack(model);
                return;
            }
            if (channel.State != CommunicationState.Opened)
            {
                TradePushBackImpl.Instanse.SaveDealBack(model);
                return;
            }
            try
            {
                var callback = context.GetCallbackChannel <IDoOrderCallback>();
                if (callback != null)
                {
                    callback.ProcessStockIndexFuturesDealRpt(model);
                    DeleteFuture(model.Id);
                }
            }
            //成交回报异常处理
            catch (Exception ex)
            {
                string ip = ";" + channel.RemoteAddress.ToString() + ";" + channel.LocalAddress.ToString();
                TradePushBackImpl.Instanse.SaveDealBack(model);
                LogHelper.WriteError(GenerateInfo.CH_E002 + ip, ex);
                return;
            }
        }
        public static string DescInfo(this FutureDealBackEntity entity)
        {
            string format = "FutureDealBackEntity[OrderNo={0},DealPrice={1},DealAmount={2},DealTime={3},ID={4}]";
            string desc   = string.Format(format, entity.OrderNo, entity.DealPrice, entity.DealAmount, entity.DealTime,
                                          entity.Id);

            return(desc);
        }
Example #7
0
        /// <summary>
        /// 商品期货成交实体转换为股指期货成交实体
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static FutureDealBackEntity SPQHDealEntryConversionGZQHDealEntry(CommoditiesDealBackEntity model)
        {
            FutureDealBackEntity dealEntry = new FutureDealBackEntity();

            dealEntry.DealAmount = model.DealAmount;
            dealEntry.DealPrice  = model.DealPrice;
            dealEntry.DealTime   = model.DealTime;
            dealEntry.Id         = model.Id;
            dealEntry.OrderNo    = model.OrderNo;

            return(dealEntry);
        }
        private void ProcessGZQHTable(BD_UnReckonedDealTableInfo table)
        {
            FutureDealBackEntity entity = new FutureDealBackEntity();

            entity.Id         = table.id;
            entity.OrderNo    = table.OrderNo;
            entity.DealPrice  = table.Price.Value;
            entity.DealAmount = table.Amount.Value;
            entity.DealTime   = table.Time.Value;

            LogHelper.WriteInfo("$-------$CrashManager.ProcessXHTable重新发送股指期货成交回报" + GetGZQHDesc(entity));

            ReckonCenter.Instace.AcceptGZQHDealOrder(entity);
        }
Example #9
0
        /// <summary>
        /// 股指期货成交回报接收
        /// </summary>
        /// <param name="model"></param>
        public void ProcessStockIndexFuturesDealRpt(FutureDealBackEntity model)
        {
            string desc = CrashManager.GetInstance().GetGZQHDesc(model);

            LogHelper.WriteDebug("<---股指期货成交回报接收DoCallbackProcess.ProcessStockIndexFuturesDealRpt" + desc);

            if (string.IsNullOrEmpty(model.Id))
            {
                model.Id = Guid.NewGuid().ToString();
            }

            if (CrashManager.GetInstance().InsertGZQHDealBackEntity(model))
            {
                //即时清算
                ReckonCenter.Instace.AcceptGZQHDealOrder(model);
            }
        }
Example #10
0
        /// <summary>
        /// 绑定数据
        /// </summary>
        /// <param name="reader">IDataReader</param>
        /// <returns></returns>
        public static FutureDealBackEntity ReaderBind(IDataReader reader)
        {
            if (reader == null)
            {
                return(null);
            }
            FutureDealBackEntity model = new FutureDealBackEntity();
            object obj;

            obj = reader["DealOrderNo"];
            if (obj != null && obj != DBNull.Value)
            {
                model.Id = obj.ToString();
            }
            obj = reader["OrderNo"];
            if (obj != null && obj != DBNull.Value)
            {
                model.OrderNo = obj.ToString();
            }
            obj = reader["ChannelID"];
            if (obj != null && obj != DBNull.Value)
            {
                model.ChannelNo = obj.ToString();
            }
            obj = reader["OrderPrice"];
            if (obj != null && obj != DBNull.Value)
            {
                model.DealPrice = (decimal)obj;
            }
            obj = reader["DealAmount"];
            if (obj != null && obj != DBNull.Value)
            {
                model.DealAmount = (decimal)obj;
            }
            obj = reader["DealTime"];
            if (obj != null && obj != DBNull.Value)
            {
                model.DealTime = (DateTime)obj;
            }
            return(model);
        }
Example #11
0
        /// <summary>
        /// 构建股指期货成交回报
        /// </summary>
        /// <param name="tet"></param>
        /// <param name="sdbe"></param>
        /// <param name="qhcr"></param>
        /// <param name="dMargin"></param>
        /// <param name="tm"></param>
        /// <param name="marketProfitLoss"></param>
        /// <param name="dealRptType">成交类型</param>
        /// <returns></returns>
        public static QH_TodayTradeTableInfo BuildGZQHDealRpt(QH_TodayEntrustTableInfo tet, FutureDealBackEntity sdbe,
                                                              QHCostResult qhcr, decimal dMargin, decimal marketProfitLoss,
                                                              ReckoningTransaction tm, Types.DealRptType dealRptType)
        {
            string result = string.Empty;
            //成交回报实体
            var qhDealrpt = new QH_TodayTradeTableInfo();

            //xhDealrpt.TradeNumber = this.BuildXHDealOrderNo();
            qhDealrpt.TradeNumber = sdbe.Id; //不再自己构建id,使用成交回报的id,一一对应
            //成交时间
            qhDealrpt.TradeTime = sdbe.DealTime;
            //成交价
            qhDealrpt.TradePrice = sdbe.DealPrice;
            //成交量
            qhDealrpt.TradeAmount = Convert.ToInt32(sdbe.DealAmount);
            //成交单位
            qhDealrpt.TradeUnitId = tet.TradeUnitId;
            //股东代码
            qhDealrpt.TradeAccount = tet.TradeAccount;
            //资金帐户
            qhDealrpt.CapitalAccount = tet.CapitalAccount;
            //成交回报类型
            // qhDealrpt.TradeTypeId = (int)Types.DealRptType.DRTDealed;
            qhDealrpt.TradeTypeId = (int)dealRptType;
            //现货名称
            qhDealrpt.ContractCode = tet.ContractCode;
            //现货代码
            //qhDealrpt = tet.ContractName;
            //交易手续费
            qhDealrpt.TradeProceduresFee = qhcr.Cosing;
            //保证金
            //qhDealrpt.Margin = 0; // dMargin;
            //update date 2009-12-03 不管开平仓都记录保证金
            //if (tet.OpenCloseTypeId == (int) Types.FutureOpenCloseType.OpenPosition)
            qhDealrpt.Margin = dMargin;
            //=============

            //委托价格
            qhDealrpt.EntrustPrice = tet.EntrustPrice;
            //委托单号
            qhDealrpt.EntrustNumber = tet.EntrustNumber;
            //投组标识
            qhDealrpt.PortfolioLogo = tet.PortfolioLogo;
            //货币类型
            qhDealrpt.CurrencyTypeId = tet.CurrencyTypeId;

            qhDealrpt.BuySellTypeId = tet.BuySellTypeId;

            qhDealrpt.OpenCloseTypeId = tet.OpenCloseTypeId;

            //add 李健华 增加每笔盯市盈亏
            qhDealrpt.MarketProfitLoss = marketProfitLoss;
            //==========

            QH_TodayTradeTableDal qhTodayTradeTableDal = new QH_TodayTradeTableDal();

            if (qhTodayTradeTableDal.Exists(qhDealrpt.TradeNumber))
            {
                string format = "BuildGZQHDealRpt数据库已经存在TradeNumber={0}";
                string desc   = string.Format(format, qhDealrpt.TradeNumber);
                LogHelper.WriteDebug(desc);

                return(null);
            }

            try
            {
                qhTodayTradeTableDal.Add(qhDealrpt, tm);
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex.Message, ex);
                qhDealrpt = null;
            }

            return(qhDealrpt);
        }
Example #12
0
        //void IOrderDealRptCallback.ProcessStockIndexFuturesDealRpt(FutureDealBackEntity model)
        //{
        //    throw new NotImplementedException();
        //}

        IAsyncResult IOrderDealRptCallback.BeginProcessStockIndexFuturesDealRpt(FutureDealBackEntity model, AsyncCallback callback, object asyncState)
        {
            throw new NotImplementedException();
        }