/// <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);
            }
        }
Ejemplo n.º 6
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
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 10
0
        /// <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);
        }
Ejemplo n.º 12
0
        /// <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);
        }
Ejemplo n.º 13
0
        //void IOrderDealRptCallback.ProcessHKStockDealRpt(HKDealBackEntity model)
        //{
        //    throw new NotImplementedException();
        //}

        IAsyncResult IOrderDealRptCallback.BeginProcessHKStockDealRpt(HKDealBackEntity model, AsyncCallback callback, object asyncState)
        {
            throw new NotImplementedException();
        }