/// <summary> /// 保存港股成交回报 /// </summary> /// <param name="entity">成交回报</param> public bool InsertHKDealBackEntity(HKDealBackEntity entity) { if (HasAddId(entity.ID)) { LogHelper.WriteInfo("CrashManager.InsertHKDealBackEntity从撮合收到重复的ID=" + 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.XH; string desc = GetHKDesc(entity); LogHelper.WriteDebug("$-------$CrashManager.InsertHKDealBackEntity" + desc); SaveEntity(table); //entity.Id = table.Id.ToString(); AddID(entity.ID); return(true); }
public string GetHKDesc(HKDealBackEntity 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> /// 根据主键更新一条数据 /// <param name="model">成交记录实体</param> /// </summary> public static void Update(HKDealBackEntity model) { StringBuilder strSql = new StringBuilder(); strSql.Append("update HKDealOrder set "); strSql.Append("OrderNo=@OrderNo,"); strSql.Append("ChannelID=@ChannelID,"); strSql.Append("DealPrice=@DealPrice,"); strSql.Append("DealAmount=@DealAmount,"); strSql.Append("DealTime=@DealTime,"); strSql.Append("DealType=@DealType,"); strSql.Append("DealMessage=@DealMessage"); strSql.Append(" where DealOrderNo=@DealOrderNo "); Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString()); db.AddInParameter(dbCommand, "DealOrderNo", DbType.AnsiString, model.ID); db.AddInParameter(dbCommand, "OrderNo", DbType.AnsiString, model.OrderNo); db.AddInParameter(dbCommand, "ChannelID", DbType.AnsiString, model.ChannelID); db.AddInParameter(dbCommand, "DealPrice", DbType.Decimal, model.DealPrice); db.AddInParameter(dbCommand, "DealAmount", DbType.Decimal, model.DealAmount); db.AddInParameter(dbCommand, "DealTime", DbType.DateTime, model.DealTime); db.AddInParameter(dbCommand, "DealType", DbType.Boolean, model.DealType); db.AddInParameter(dbCommand, "DealMessage", DbType.AnsiString, model.DealMessage); db.ExecuteNonQuery(dbCommand); }
/// <summary> /// 对象实体绑定数据 /// <param name="dataReader">IDataReader对象</param> /// </summary> public static HKDealBackEntity ReaderBind(IDataReader dataReader) { HKDealBackEntity model = new HKDealBackEntity(); object ojb; model.ID = dataReader["DealOrderNo"].ToString(); model.OrderNo = dataReader["OrderNo"].ToString(); model.ChannelID = dataReader["ChannelID"].ToString(); ojb = dataReader["DealPrice"]; if (ojb != null && ojb != DBNull.Value) { model.DealPrice = (decimal)ojb; } ojb = dataReader["DealAmount"]; if (ojb != null && ojb != DBNull.Value) { model.DealAmount = (decimal)ojb; } ojb = dataReader["DealTime"]; if (ojb != null && ojb != DBNull.Value) { model.DealTime = (DateTime)ojb; } ojb = dataReader["DealType"]; if (ojb != null && ojb != DBNull.Value) { model.DealType = (bool)ojb; } model.DealMessage = dataReader["DealMessage"].ToString(); return(model); }
/// <summary> /// 增加一条数据 /// <param name="model">成交记录实体</param> /// </summary> public static int Add(HKDealBackEntity model) { try { StringBuilder strSql = new StringBuilder(); strSql.Append("insert into HKDealOrder("); strSql.Append("DealOrderNo,OrderNo,ChannelID,DealPrice,DealAmount,DealTime,DealType,DealMessage)"); strSql.Append(" values ("); strSql.Append("@DealOrderNo,@OrderNo,@ChannelID,@DealPrice,@DealAmount,@DealTime,@DealType,@DealMessage)"); Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString()); db.AddInParameter(dbCommand, "DealOrderNo", DbType.AnsiString, model.ID); db.AddInParameter(dbCommand, "OrderNo", DbType.AnsiString, model.OrderNo); db.AddInParameter(dbCommand, "ChannelID", DbType.AnsiString, model.ChannelID); db.AddInParameter(dbCommand, "DealPrice", DbType.Decimal, model.DealPrice); db.AddInParameter(dbCommand, "DealAmount", DbType.Decimal, model.DealAmount); db.AddInParameter(dbCommand, "DealTime", DbType.DateTime, model.DealTime); db.AddInParameter(dbCommand, "DealType", DbType.Boolean, model.DealType); db.AddInParameter(dbCommand, "DealMessage", DbType.AnsiString, model.DealMessage); db.ExecuteNonQuery(dbCommand); return(1); } catch (Exception ex) { LogHelper.WriteError("CH-111:数据库连接受阻", ex); return(0); } }
/// <summary> /// 保存港股成交回报 /// </summary> /// <param name="model"></param> public void SaveDealBack(HKDealBackEntity model) { #region 通道号或者成交实体不能为空 //实体判断,成交回报实体不能为空。 if (model == null || string.IsNullOrEmpty(model.ChannelID)) { return; } #endregion #region 步撮合中心委托回报实体 lock (((ICollection)MatchCenterManager.Instance.DealBackHKEntitys).SyncRoot) { if (MatchCenterManager.Instance.DealBackHKEntitys.ContainsKey(model.ChannelID)) { Queue <HKDealBackEntity> queue = MatchCenterManager.Instance.DealBackHKEntitys[model.ChannelID]; queue.Enqueue(model); //MatchCenter.Instance.DealFutureBackEntitys.Remove(model.ChannelNo); //MatchCenter.Instance.DealFutureBackEntitys[model.ChannelNo] = queue; } else { //队列实体 var queue = new Queue <HKDealBackEntity>(); queue.Enqueue(model); MatchCenterManager.Instance.DealBackHKEntitys[model.ChannelID] = queue; } } #endregion }
public static string DescInfo(this HKDealBackEntity entity) { string format = "HKDealBackEntity[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> private void ProcessHKStock(HKDealBackEntity model) { //撮合中心委托不能为空 if (model == null) { return; } model.DealTime = DateTime.Now; OperationContext context = null; if (model.ChannelID != null) { if (MatchCenterManager.Instance.OperationContexts.ContainsKey(model.ChannelID)) { context = MatchCenterManager.Instance.OperationContexts[model.ChannelID]; } } 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 DoBackHKDealDeletate(callback.ProcessHKStockDealRpt); md.BeginInvoke(model, null, null); } DeleteHKBackStock(model.ID);//数据库删除 } catch (Exception ex) { TradePushBackImpl.Instanse.SaveDealBack(model); LogHelper.WriteError(GenerateInfo.CH_E002, ex); return; } }
private void ProcessHKTable(BD_UnReckonedDealTableInfo table) { HKDealBackEntity entity = new HKDealBackEntity(); 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.ProcessHKTable重新发送现货成交回报" + GetHKDesc(entity)); ReckonCenter.Instace.AcceptHKDealOrder(entity); }
/// <summary> /// 港股成交回报接收 /// </summary> /// <param name="model"></param> public void ProcessHKStockDealRpt(HKDealBackEntity model) { string desc = CrashManager.GetInstance().GetHKDesc(model); LogHelper.WriteDebug("<---港股成交回报接收DoCallbackProcess.ProcessHKStockDealRpt" + desc); if (string.IsNullOrEmpty(model.ID)) { model.ID = Guid.NewGuid().ToString(); } if (CrashManager.GetInstance().InsertHKDealBackEntity(model)) { //即时清算 ReckonCenter.Instace.AcceptHKDealOrder(model); } }
/// <summary> /// 根据主键得到一个实体(记录) /// <param name="dealOrderNo">成交编号(主键)</param> /// </summary> public static HKDealBackEntity GetModel(string dealOrderNo) { StringBuilder strSql = new StringBuilder(); strSql.Append("select DealOrderNo,OrderNo,ChannelID,DealPrice,DealAmount,DealTime,DealType,DealMessage from HKDealOrder "); strSql.Append(" where DealOrderNo=@DealOrderNo "); Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString()); db.AddInParameter(dbCommand, "DealOrderNo", DbType.AnsiString, dealOrderNo); HKDealBackEntity model = null; using (IDataReader dataReader = db.ExecuteReader(dbCommand)) { if (dataReader.Read()) { model = ReaderBind(dataReader); } } return(model); }
/// <summary> /// 构建港股成交回报 /// </summary> /// <param name="tet"></param> /// <param name="sdbe"></param> /// <param name="xhcr"></param> /// <param name="dealCapital"></param> /// <param name="tm"></param> /// <returns></returns> public static HK_TodayTradeInfo BuildHKDealRpt(HK_TodayEntrustInfo tet, HKDealBackEntity sdbe, HKCostResult xhcr, decimal dealCapital, ReckoningTransaction tm) { string result = string.Empty; //成交回报实体 var hkDealRpt = new HK_TodayTradeInfo(); //xhDealrpt.TradeNumber = this.BuildXHDealOrderNo(); hkDealRpt.TradeNumber = sdbe.ID; //不再自己构建id,使用成交回报的id,一一对应 //成交时间 hkDealRpt.TradeTime = sdbe.DealTime; //成交价 hkDealRpt.TradePrice = sdbe.DealPrice; //成交单位 hkDealRpt.TradeUnitId = tet.TradeUnitID; //成交量 hkDealRpt.TradeAmount = Convert.ToInt32(sdbe.DealAmount); //股东代码 hkDealRpt.HoldAccount = tet.HoldAccount; //资金帐户 hkDealRpt.CapitalAccount = tet.CapitalAccount; //成交回报类型 hkDealRpt.TradeTypeId = (int)Types.DealRptType.DRTDealed; //现货名称 hkDealRpt.Code = tet.Code; //印花税 hkDealRpt.StampTax = xhcr.StampDuty; //佣金 hkDealRpt.Commission = xhcr.Commision; //过户费 hkDealRpt.TransferAccountFee = xhcr.TransferToll; //交易系统使用费 hkDealRpt.TradingSystemUseFee = xhcr.TradeSystemFees; //交易手续费用(只有港股才有) hkDealRpt.TradeProceduresFee = xhcr.PoundageSingleValue; //监管费 hkDealRpt.MonitoringFee = xhcr.MonitoringFee; //结算费 hkDealRpt.ClearingFee = xhcr.ClearingFees; //委托价格 hkDealRpt.EntrustPrice = tet.EntrustPrice; //成交金额 hkDealRpt.TradeCapitalAmount = dealCapital; // xhDealrpt.TradePrice*xhDealrpt.TradeAmount;//TODO:是否正确?没有算比例 //投组标识 hkDealRpt.PortfolioLogo = tet.PortfolioLogo; //货币类型 hkDealRpt.CurrencyTypeId = tet.CurrencyTypeID; //买卖方向 hkDealRpt.BuySellTypeId = tet.BuySellTypeID; hkDealRpt.EntrustNumber = tet.EntrustNumber; HK_TodayTradeDal hkTodayTradeDal = new HK_TodayTradeDal(); if (hkTodayTradeDal.Exists(hkDealRpt.TradeNumber)) { string format = "BuildHKDealRpt数据库已经存在TradeNumber={0}"; string desc = string.Format(format, hkDealRpt.TradeNumber); LogHelper.WriteDebug(desc); //xhDealrpt = xhTodayTradeTableDal.GetModel(xhDealrpt.TradeNumber); return(null); } try { hkTodayTradeDal.Add(hkDealRpt, tm); } catch (Exception ex) { LogHelper.WriteError(ex.Message, ex); hkDealRpt = null; } return(hkDealRpt); }
//void IOrderDealRptCallback.ProcessHKStockDealRpt(HKDealBackEntity model) //{ // throw new NotImplementedException(); //} IAsyncResult IOrderDealRptCallback.BeginProcessHKStockDealRpt(HKDealBackEntity model, AsyncCallback callback, object asyncState) { throw new NotImplementedException(); }