/// <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; } }
/// <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); } }
/// <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 }
/// <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); }