/// <summary> /// 商品期货下单 /// Create by: 董鹏 /// Create Date: 2010-01-22 /// </summary> /// <param name="model"></param> /// <returns></returns> public ResultDataEntity DoCommoditiesOrder(CommoditiesDataOrderEntity 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()].DoCommoditiesOrder(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(CommoditiesDataOrderEntity model) { var strSql = new StringBuilder(); strSql.Append("insert into CommoditiesDataOrder("); strSql.Append("OrderNo,ChannelID,ReachTime,StockCode,OrderPrice,"); strSql.Append("OrderVolume,TransactionDirection,SholderCode,MarketPrice,OrderMark,Direction"); strSql.Append(")"); strSql.Append(" values ("); strSql.Append("'" + model.OrderNo + "',"); strSql.Append("'" + model.ChannelID + "',"); 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 CommoditiesDataOrderEntity GetFutureEntityByOrderNo(string orderNo) { if (string.IsNullOrEmpty(orderNo)) { return(null); } var stockDataOrderEntities = new CommoditiesDataOrderEntity(); var strSql = new StringBuilder(); strSql.Append("select [OrderNo],[ChannelID],[ReachTime],[StockCode],[OrderPrice],[OrderVolume],[TransactionDirection],"); strSql.Append("[SholderCode],[MarketPrice],[OrderMark],[Direction],[MatchState],[MarketVolumeNo],"); strSql.Append("[MarkVolume] from CommoditiesDataOrder 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); }
/// <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 DoCommoditiesOrder(CommoditiesOrderEntity dataOrder) { if (dataOrder == null) { return(null); } if (string.IsNullOrEmpty(dataOrder.SholderCode)) { return(null); } CommoditiesDataOrderEntity data = new CommoditiesDataOrderEntity(); data.ChannelID = 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.DoCommoditiesOrder(data)); }
/// <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); }
/// <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="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); } }
/// <summary> /// 绑定数据 /// </summary> /// <param name="dataReader"></param> /// <returns></returns> public static CommoditiesDataOrderEntity ReaderBind(IDataReader dataReader) { if (dataReader == null) { return(null); } var model = new CommoditiesDataOrderEntity(); object ojb; if (dataReader["OrderNo"] != null) { model.OrderNo = dataReader["OrderNo"].ToString(); } if (dataReader["ChannelID"] != null) { model.ChannelID = dataReader["ChannelID"].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["TransactionDirection"]; 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); }