/// <summary>
        /// 股指期货下单
        /// </summary>
        /// <param name="model">委托</param>
        /// <returns></returns>
        public ResultDataEntity DoFutureOrder(FutureDataOrderEntity model)
        {
            var    result = new ResultDataEntity();
            string message;

            LogHelper.WriteDebug("撮合中心管理器股指期货下单方法:");
            if (model == null || string.IsNullOrEmpty((model.StockCode)))
            {
                message        = "CH-0010:委托单不能为空或者期货代码不能为空;";
                result.Message = message;
                LogHelper.WriteDebug(message);
                return(result);
            }
            //撮合中心撮合机不能为空
            if (matchDevices != null)
            {
                if (matchDevices.ContainsKey(model.StockCode.Trim()))
                {
                    return(matchDevices[model.StockCode.Trim()].DoFutureOrder(model));
                }
                message = "CH-0011:管理中心撮合单元没有分配或撮合中心没有分配此品种类型撮合;";
                LogHelper.WriteDebug(message);
            }
            else
            {
                message = "CH-0012:撮合中心撮合机不存在;";
                LogHelper.WriteDebug(message);
            }
            result.Message = message;
            return(result);
        }
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public static int Add(FutureDataOrderEntity model)
        {
            var strSql = new StringBuilder();

            strSql.Append("insert into FutureDataOrder(");
            strSql.Append("OrderNo,BranchID,ReachTime,StockCode,OrderPrice,");
            strSql.Append("OrderVolume,OrderType,SholderCode,MarketPrice,OrderMark,Direction");
            strSql.Append(")");
            strSql.Append(" values (");
            strSql.Append("'" + model.OrderNo + "',");
            strSql.Append("'" + model.ChannelNo + "',");
            strSql.Append("'" + model.ReachTime + "',");
            strSql.Append("'" + model.StockCode + "',");
            strSql.Append("" + model.OrderPrice + ",");
            strSql.Append("" + model.OrderVolume + ",");
            strSql.Append("" + model.TransactionDirection + ",");
            strSql.Append("'" + model.SholderCode + "',");
            strSql.Append("" + model.IsMarketPrice + ",");
            strSql.Append("" + model.OrderMark + ",");
            strSql.Append("" + (int)model.Direction + "");
            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="orderNo"></param>
        /// <returns></returns>
        public static FutureDataOrderEntity GetFutureEntityByOrderNo(string orderNo)
        {
            if (string.IsNullOrEmpty(orderNo))
            {
                return(null);
            }
            var stockDataOrderEntities = new FutureDataOrderEntity();
            var strSql = new StringBuilder();

            strSql.Append("select   [OrderNo],[BranchID],[ReachTime],[StockCode],[OrderPrice],[OrderVolume],[OrderType],");
            strSql.Append("[SholderCode],[MarketPrice],[OrderMark],[Direction],[MatchState],[MarketVolumeNo],");
            strSql.Append("[MarkVolume] from FutureDataOrder  where  ");
            strSql.Append("   OrderNo ='" + orderNo + "'");
            try
            {
                Database  db        = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());
                using (IDataReader dataReader = db.ExecuteReader(dbCommand))
                {
                    if (dataReader == null)
                    {
                        return(null);
                    }
                    while (dataReader.Read())
                    {
                        stockDataOrderEntities = ReaderBind(dataReader);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteError("CH-111:数据库连接开启受阻", ex);
            }
            return(stockDataOrderEntities);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 删除撮合委托实体
        /// </summary>
        /// <param name="dataX">委托</param>
        public bool Remove(T dataX)
        {
            if (entrustOrderList == null)
            {
                return(false);
            }
            rwLock.EnterWriteLock();
            try
            {
                string sholderCode = "";
                if (typeof(T) == typeof(FutureDataOrderEntity))
                {
                    #region  股指期货添加
                    FutureDataOrderEntity qhitem = dataX as FutureDataOrderEntity;
                    sholderCode = qhitem.SholderCode.Trim();
                    #endregion
                }
                else if (typeof(T) == typeof(StockDataOrderEntity))
                {
                    #region  现货添加
                    StockDataOrderEntity xhitem = dataX as StockDataOrderEntity;
                    sholderCode = xhitem.SholderCode.Trim();
                    #endregion
                }
                else if (typeof(T) == typeof(HKEntrustOrderInfo))
                {
                    #region  港股添加
                    HKEntrustOrderInfo hkitem = dataX as HKEntrustOrderInfo;
                    sholderCode = hkitem.SholderCode.Trim();
                    #endregion
                }
                else if (typeof(T) == typeof(CommoditiesDataOrderEntity))
                {
                    #region  商品期货添加 add by 董鹏 2010-01-22
                    CommoditiesDataOrderEntity qhitem = dataX as CommoditiesDataOrderEntity;
                    sholderCode = qhitem.SholderCode.Trim();
                    #endregion
                }

                if (entrustOrderList.ContainsKey(sholderCode))
                {
                    bool remove = entrustOrderList[sholderCode].Remove(dataX);
                    if (entrustOrderList[sholderCode].Count <= 0)
                    {
                        entrustOrderList.Remove(sholderCode);
                    }
                    return(remove);
                }

                return(false);
            }
            finally
            {
                rwLock.ExitWriteLock();
            }
        }
        /// <summary>
        /// 股指期货下单
        /// </summary>
        /// <param name="dataOrder">股指期货下单实体</param>
        /// <returns></returns>
        public ResultDataEntity DoFutureOrder(FutureOrderEntity dataOrder)
        {
            if (dataOrder == null)
            {
                return(null);
            }
            if (string.IsNullOrEmpty(dataOrder.SholderCode))
            {
                return(null);
            }
            FutureDataOrderEntity data = new FutureDataOrderEntity();

            data.ChannelNo            = dataOrder.ChannelNo;
            data.IsMarketPrice        = (int)dataOrder.IsMarketPrice;
            data.StockCode            = dataOrder.StockCode;
            data.OrderPrice           = dataOrder.OrderPrice;
            data.ReachTime            = System.DateTime.Now;
            data.OrderVolume          = dataOrder.OrderVolume;
            data.TransactionDirection = (int)dataOrder.TransactionDirection;
            data.SholderCode          = dataOrder.SholderCode;
            data.Direction            = dataOrder.Direction;
            return(MatchCenterManager.Instance.DoFutureOrder(data));
        }
Exemplo n.º 6
0
        /// <summary>
        /// 删除撮合实体
        /// </summary>
        /// <param name="orderNo">委托编号</param>
        /// <param name="sholderCode">股东代码</param>
        /// <param name="cancount"></param>
        /// <returns></returns>
        public bool Remove(string orderNo, string sholderCode, ref decimal cancount)
        {
            if (entrustOrderList == null)
            {
                return(false);
            }

            rwLock.EnterWriteLock();
            try
            {
                if (!entrustOrderList.ContainsKey(sholderCode))
                {
                    return(false);
                }
                List <T> list = entrustOrderList[sholderCode];
                if (typeof(T) == typeof(FutureDataOrderEntity))
                {
                    #region  股指期货删除
                    foreach (T entity in list)
                    {
                        FutureDataOrderEntity item = entity as FutureDataOrderEntity;
                        if (item.OrderNo == orderNo)
                        {
                            cancount = item.OrderVolume;
                            return(list.Remove(entity));
                        }
                    }
                    #endregion
                }
                else if (typeof(T) == typeof(StockDataOrderEntity))
                {
                    #region  现货删除
                    foreach (T entity in list)
                    {
                        StockDataOrderEntity item = entity as StockDataOrderEntity;
                        if (item.OrderNo == orderNo)
                        {
                            cancount = item.OrderVolume;
                            return(list.Remove(entity));
                        }
                    }
                    #endregion
                }
                else if (typeof(T) == typeof(HKEntrustOrderInfo))
                {
                    #region  港股股删除
                    foreach (T entity in list)
                    {
                        HKEntrustOrderInfo item = entity as HKEntrustOrderInfo;
                        if (item.OrderNo == orderNo)
                        {
                            cancount = item.OrderVolume;
                            return(list.Remove(entity));
                        }
                    }
                    #endregion
                }
                else if (typeof(T) == typeof(CommoditiesDataOrderEntity))
                {
                    #region  商品期货删除  add by 董鹏 2010-01-22
                    foreach (T entity in list)
                    {
                        CommoditiesDataOrderEntity item = entity as CommoditiesDataOrderEntity;
                        if (item.OrderNo == orderNo)
                        {
                            cancount = item.OrderVolume;
                            return(list.Remove(entity));
                        }
                    }
                    #endregion
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteError("撮合撤单删除撮合实体异常", ex);
            }
            finally
            {
                rwLock.ExitWriteLock();
            }

            return(false);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 添加委托到数据存储区
        /// </summary>
        /// <param name="dataX">委托单</param>
        public void Add(T dataX)
        {
            if (entrustOrderList == null)
            {
                return;
            }
            rwLock.EnterWriteLock();
            try
            {
                string sholderCode = "";
                if (typeof(T) == typeof(FutureDataOrderEntity))
                {
                    #region  股指期货添加
                    FutureDataOrderEntity qhitem = dataX as FutureDataOrderEntity;
                    sholderCode = qhitem.SholderCode.Trim();
                    #endregion
                }
                else if (typeof(T) == typeof(StockDataOrderEntity))
                {
                    #region  现货添加
                    StockDataOrderEntity xhitem = dataX as StockDataOrderEntity;
                    sholderCode = xhitem.SholderCode.Trim();
                    #endregion
                }
                else if (typeof(T) == typeof(HKEntrustOrderInfo))
                {
                    #region  港股添加
                    HKEntrustOrderInfo hkitem = dataX as HKEntrustOrderInfo;
                    sholderCode = hkitem.SholderCode.Trim();
                    #endregion
                }
                else if (typeof(T) == typeof(CommoditiesDataOrderEntity))
                {
                    #region  商品期货添加 add by 董鹏 2010-01-22
                    CommoditiesDataOrderEntity qhitem = dataX as CommoditiesDataOrderEntity;
                    sholderCode = qhitem.SholderCode.Trim();
                    #endregion
                }

                #region 添加保存队列处理
                if (entrustOrderList.ContainsKey(sholderCode.Trim()))
                {
                    List <T> queryList = entrustOrderList[sholderCode.Trim()];
                    if (queryList != null)
                    {
                        queryList.Add(dataX);
                        if (transactionDirection == Types.TransactionDirection.Buying)
                        {
                            queryList.Sort(sortList.CompareSortBuy);
                        }
                        else if (transactionDirection == Types.TransactionDirection.Selling)
                        {
                            queryList.Sort(sortList.CompareSortSell);
                        }
                    }
                    else
                    {
                        queryList = new List <T>();
                        queryList.Add(dataX);
                    }
                }
                else
                {
                    List <T> futureList = new List <T>();
                    futureList.Add(dataX);
                    entrustOrderList.Add(sholderCode.Trim(), futureList);
                }
                #endregion
            }
            catch (Exception ex)
            {
                LogHelper.WriteError("添加委托数据存储区时异常", ex);
            }
            finally
            {
                rwLock.ExitWriteLock();
            }
        }
        /// <summary>
        /// 绑定数据
        /// </summary>
        /// <param name="dataReader"></param>
        /// <returns></returns>
        public static FutureDataOrderEntity ReaderBind(IDataReader dataReader)
        {
            if (dataReader == null)
            {
                return(null);
            }
            var    model = new FutureDataOrderEntity();
            object ojb;

            if (dataReader["OrderNo"] != null)
            {
                model.OrderNo = dataReader["OrderNo"].ToString();
            }
            if (dataReader["BranchID"] != null)
            {
                model.ChannelNo = dataReader["BranchID"].ToString();
            }
            ojb = dataReader["ReachTime"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.ReachTime = (DateTime)ojb;
            }
            if (dataReader["StockCode"] != null)
            {
                model.StockCode = dataReader["StockCode"].ToString();
            }
            ojb = dataReader["OrderPrice"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.OrderPrice = (decimal)ojb;
            }
            ojb = dataReader["OrderVolume"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.OrderVolume = (decimal)ojb;
            }
            ojb = dataReader["OrderType"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.TransactionDirection = (int)ojb;
            }
            if (dataReader["SholderCode"] != null)
            {
                model.SholderCode = dataReader["SholderCode"].ToString();
            }

            ojb = dataReader["MarketPrice"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.IsMarketPrice = (int)ojb;
            }
            ojb = dataReader["OrderMark"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.OrderMark = (int)ojb;
            }
            ojb = dataReader["Direction"];

            if (ojb != null && ojb != DBNull.Value)
            {
                model.Direction = (CHDirection)ojb;
            }

            ojb = dataReader["MatchState"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.MatchState = (Types.MatchCenterState)ojb;
            }
            if (dataReader["MarketVolumeNo"] != null)
            {
                model.MarketVolumeNo = dataReader["MarketVolumeNo"].ToString();
            }
            ojb = dataReader["MarkVolume"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.MarkLeft = (decimal)ojb;
            }
            return(model);
        }
        /// <summary>
        /// 期货买比较排序器,比较排序规则:高价在先,同等价时间先到在前。
        /// </summary>
        /// <param name="dataX">期货委托单</param>
        /// <param name="dataY">期货委托单</param>
        /// <returns></returns>
        public int CompareSortBuy(T dataX, T dataY)
        {
            // FutureDataOrderEntity

            if (typeof(T) == typeof(FutureDataOrderEntity))
            {
                #region 股指期货比较排序
                FutureDataOrderEntity itemX = dataX as FutureDataOrderEntity;
                FutureDataOrderEntity itemY = dataY as FutureDataOrderEntity;
                if (itemX.OrderPrice > itemY.OrderPrice)
                {
                    return(1);
                }
                else if (itemX.OrderPrice == itemY.OrderPrice)
                {
                    if (itemX.ReachTime >= itemY.ReachTime)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }
                else
                {
                    return(-1);
                }
                #endregion
            }
            else if (typeof(T) == typeof(StockDataOrderEntity))
            {
                #region 现货比较排序
                StockDataOrderEntity itemX = dataX as StockDataOrderEntity;
                StockDataOrderEntity itemY = dataY as StockDataOrderEntity;
                if (itemX.OrderPrice > itemY.OrderPrice)
                {
                    return(1);
                }
                else if (itemX.OrderPrice == itemY.OrderPrice)
                {
                    if (itemX.ReachTime >= itemY.ReachTime)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }
                else
                {
                    return(-1);
                }
                #endregion
            }
            else if (typeof(T) == typeof(HKEntrustOrderInfo))
            {
                #region 港股比较排序
                HKEntrustOrderInfo itemX = dataX as HKEntrustOrderInfo;
                HKEntrustOrderInfo itemY = dataY as HKEntrustOrderInfo;
                if (itemX.OrderPrice > itemY.OrderPrice)
                {
                    return(1);
                }
                else if (itemX.OrderPrice == itemY.OrderPrice)
                {
                    if (itemX.ReceiveTime >= itemY.ReceiveTime)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }
                else
                {
                    return(-1);
                }
                #endregion
            }
            else if (typeof(T) == typeof(CommoditiesDataOrderEntity))
            {
                #region 商品期货比较排序
                CommoditiesDataOrderEntity itemX = dataX as CommoditiesDataOrderEntity;
                CommoditiesDataOrderEntity itemY = dataY as CommoditiesDataOrderEntity;
                if (itemX.OrderPrice > itemY.OrderPrice)
                {
                    return(1);
                }
                else if (itemX.OrderPrice == itemY.OrderPrice)
                {
                    if (itemX.ReachTime >= itemY.ReachTime)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }
                else
                {
                    return(-1);
                }
                #endregion
            }
            else
            {
                return(-1);
            }
        }