/// <summary>
        /// 现货成交回报
        /// </summary>
        /// <param name="model">委托单</param>
        private void ProcessStock(StockDealEntity model)
        {
            //撮合中心委托不能为空
            if (model == null)
            {
                return;
            }
            model.DealTime = DateTime.Now;
            var backEntity = new StockDealBackEntity();

            backEntity.Id         = model.Id;         //对象标志
            backEntity.DealAmount = model.DealAmount; //成交数量
            backEntity.DealPrice  = model.DealPrice;  //成交价格
            backEntity.DealTime   = model.DealTime;   //成交时间
            backEntity.OrderNo    = model.OrderNo;    //委托单号码
            OperationContext context = null;

            if (model.ChannelNo != null)
            {
                if (MatchCenterManager.Instance.OperationContexts.ContainsKey(model.ChannelNo))
                {
                    context = MatchCenterManager.Instance.OperationContexts[model.ChannelNo];
                }
            }
            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)
                {
                    var md = new DoBackStockDealDeletate(callback.ProcessStockDealRpt);
                    md.BeginInvoke(backEntity, null, null);
                }
                DeleteBackStock(model.Id);//数据库删除
            }
            catch (Exception ex)
            {
                TradePushBackImpl.Instanse.SaveDealBack(model);
                LogHelper.WriteError(GenerateInfo.CH_E002, ex);
                return;
            }
        }
예제 #2
0
        /// <summary>
        /// 增加一条记录
        /// </summary>
        public static int Add(StockDealEntity model)
        {
            StringBuilder strSql = null;

            strSql = new StringBuilder();
            strSql.Append("insert into DealOrder(");
            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());
                //int result;
                object obj = db.ExecuteNonQuery(dbCommand);
                return(1);
                //SqlHelper.ExecuteSql(strSql.ToString());
            }
            catch (Exception ex)
            {
                LogHelper.WriteError("CH-111:数据库连接受阻", ex);
                return(0);
            }
        }
예제 #3
0
        /// <summary>
        /// 保存成交回报
        /// 把要回推的现货成交记录保存到回推缓冲区中等待回推
        /// </summary>
        /// <param name="model">成交回报实体</param>
        public void SaveDealBack(StockDealEntity model)
        {
            #region 成交回报实体或者通道号不能为空
            //成交回报实体判断,成交回报实体不能为空。
            if (model == null || string.IsNullOrEmpty(model.ChannelNo))
            {
                return;
            }
            #endregion

            #region  步撮合中心回报
            lock (((ICollection)MatchCenterManager.Instance.DealBackEntitys).SyncRoot)
            {
                //撮合中心成交回报实体通道号判断
                if (MatchCenterManager.Instance.DealBackEntitys.ContainsKey(model.ChannelNo))
                {
                    Queue <StockDealEntity> queue = MatchCenterManager.Instance.DealBackEntitys[model.ChannelNo];
                    queue.Enqueue(model);
                    //这是一个类引用类型已经对以上改变了,不改再删除又添加进去,这样会再打乱之前的排序
                    //和增加系统开销
                    #region old code
                    //MatchCenter.Instance.DealBackEntitys.Remove(model.ChannelNo);
                    //MatchCenter.Instance.DealBackEntitys[model.ChannelNo] = queue;
                    #endregion
                }
                else
                {
                    var queue = new Queue <StockDealEntity>();
                    queue.Enqueue(model);
                    MatchCenterManager.Instance.DealBackEntitys[model.ChannelNo] = queue;
                }
            }
            #endregion
        }
예제 #4
0
        /// <summary>
        /// 绑定数据
        /// </summary>
        /// <param name="reader">IDataReader</param>
        /// <returns></returns>
        public static StockDealEntity ReaderBind(IDataReader reader)
        {
            if (reader == null)
            {
                return(null);
            }
            StockDealEntity model = new StockDealEntity();
            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);
        }