/// <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)); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
//void IOrderDealRptCallback.ProcessStockIndexFuturesDealRpt(FutureDealBackEntity model) //{ // throw new NotImplementedException(); //} IAsyncResult IOrderDealRptCallback.BeginProcessStockIndexFuturesDealRpt(FutureDealBackEntity model, AsyncCallback callback, object asyncState) { throw new NotImplementedException(); }