/// <summary>
        ///
        /// </summary>
        /// <param name="ro"></param>
        /// <returns></returns>
        private bool Rescue_SPQH_LastCheckFreezeMoney(BD_RescueTableInfo ro)
        {
            string entrustNumber    = ro.Value1;
            int    capitalAccountId = int.Parse(ro.Value2);

            return(Rescue_SPQH_LastCheckFreezeMoney(entrustNumber, capitalAccountId));
        }
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public int Add(BD_RescueTableInfo model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("insert into BD_RescueTable(");
            strSql.Append("type,Value1,Value2,Value3,Value4,Value5)");

            strSql.Append(" values (");
            strSql.Append("@type,@Value1,@Value2,@Value3,@Value4,@Value5)");
            strSql.Append(";select @@IDENTITY");
            Database  db        = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());

            db.AddInParameter(dbCommand, "type", DbType.Int32, model.Type);
            db.AddInParameter(dbCommand, "Value1", DbType.String, model.Value1);
            db.AddInParameter(dbCommand, "Value2", DbType.String, model.Value2);
            db.AddInParameter(dbCommand, "Value3", DbType.String, model.Value3);
            db.AddInParameter(dbCommand, "Value4", DbType.String, model.Value4);
            db.AddInParameter(dbCommand, "Value5", DbType.String, model.Value5);
            int    result;
            object obj = db.ExecuteScalar(dbCommand);

            if (!int.TryParse(obj.ToString(), out result))
            {
                return(0);
            }
            return(result);
        }
        private void CheckRescueObject(BD_RescueTableInfo ro)
        {
            if (ro == null)
            {
                return;
            }

            string nulval = "*";

            if (ro.Value1 == nulval)
            {
                ro.Value1 = "";
            }

            if (ro.Value2 == nulval)
            {
                ro.Value2 = "";
            }

            if (ro.Value3 == nulval)
            {
                ro.Value3 = "";
            }

            if (ro.Value4 == nulval)
            {
                ro.Value4 = "";
            }

            if (ro.Value5 == nulval)
            {
                ro.Value5 = "";
            }
        }
        private bool Rescue_HKBuy_InstantReckon_HoldingProcess(BD_RescueTableInfo ro)
        {
            int       holdingAccountId = int.Parse(ro.Value1);
            HKDealSum dealSum          = new HKDealSum();

            dealSum.AmountSum  = decimal.Parse(ro.Value2);
            dealSum.CapitalSum = decimal.Parse(ro.Value3);
            dealSum.CostSum    = decimal.Parse(ro.Value4);
            int holdingTradingRule = int.Parse(ro.Value5);

            return(Rescue_HKBuy_InstantReckon_HoldingProcess(holdingAccountId, dealSum, holdingTradingRule));
        }
        private void WriteResuceObject(BD_RescueTableInfo ro)
        {
            if (ro == null)
            {
                return;
            }

            ro.Id = NewNo;
            string txt = SetResuceObjectToTxt(ro);

            WriteResuceText(txt);
        }
        /// <summary>
        /// 记录必须执行的商品期货开仓清算-持仓操作
        /// </summary>
        /// <param name="holdingAccountId">持仓id</param>
        /// <param name="dealSum">成交汇总</param>
        /// <param name="holdingTradingRule">持仓交割制度</param>
        public void Record_SPQHOpen_InstantReckon_HoldingProcess(int holdingAccountId, SPQHDealSum dealSum, int holdingTradingRule)
        {
            RescueType         type = RescueType.SPQHOpenHoldingProcess;
            BD_RescueTableInfo ro   = new BD_RescueTableInfo();

            ro.Type   = (int)type;
            ro.Value1 = holdingAccountId.ToString();
            ro.Value2 = dealSum.AmountSum.ToString();
            ro.Value3 = dealSum.CapitalSum.ToString();
            ro.Value4 = dealSum.CapitalSumNoScale.ToString();
            ro.Value5 = dealSum.CostSum.ToString();
            ro.Value6 = holdingTradingRule.ToString();

            WriteResuceObject(ro);
        }
        /// <summary>
        /// 记录必须执行的删除期货当日委托
        /// </summary>
        /// <param name="entrustNumber">委托单号</param>
        public void Record_QH_DeleteTodayEntrust(string entrustNumber)
        {
            if (string.IsNullOrEmpty(entrustNumber))
            {
                return;
            }

            RescueType         type = RescueType.DeleteQHEntrust;
            BD_RescueTableInfo ro   = new BD_RescueTableInfo();

            ro.Type   = (int)type;
            ro.Value1 = entrustNumber;

            WriteResuceObject(ro);
        }
        private List <BD_RescueTableInfo> GetResuceObjects(IList <string> list)
        {
            if (Utils.IsNullOrEmpty(list))
            {
                return(null);
            }

            List <BD_RescueTableInfo> ooList = new List <BD_RescueTableInfo>();

            foreach (var txt in list)
            {
                BD_RescueTableInfo oo = GetResuceObjectFromTxt(txt);
                if (oo != null)
                {
                    ooList.Add(oo);
                }
            }

            return(ooList);
        }
        /// <summary>
        /// 记录必须执行的商品期货LastCheckFreezeMoney动作
        /// </summary>
        /// <param name="entrustNumber">委托单号</param>
        /// <param name="capitalAccountId">资金id</param>
        public void Record_SPQH_LastCheckFreezeMoney(string entrustNumber, int capitalAccountId)
        {
            if (string.IsNullOrEmpty(entrustNumber))
            {
                return;
            }

            if (capitalAccountId == -1)
            {
                return;
            }

            RescueType         type = RescueType.SPQHLastCheckFreezeMoney;
            BD_RescueTableInfo ro   = new BD_RescueTableInfo();

            ro.Type   = (int)type;
            ro.Value1 = entrustNumber;
            ro.Value2 = capitalAccountId.ToString();

            WriteResuceObject(ro);
        }
        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public BD_RescueTableInfo GetModel(int id)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("select id,type,Value1,Value2,Value3,Value4,Value5 from BD_RescueTable ");
            strSql.Append(" where id=@id ");
            Database  db        = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());

            db.AddInParameter(dbCommand, "id", DbType.Int32, id);
            BD_RescueTableInfo model = null;

            using (IDataReader dataReader = db.ExecuteReader(dbCommand))
            {
                if (dataReader.Read())
                {
                    model = ReaderBind(dataReader);
                }
            }
            return(model);
        }
        private BD_RescueTableInfo GetResuceObjectFromTxt(string txt)
        {
            if (string.IsNullOrEmpty(txt))
            {
                return(null);
            }

            BD_RescueTableInfo ro = new BD_RescueTableInfo();

            string[] strs = txt.Split('|');
            ro.Id     = int.Parse(strs[0]);
            ro.Type   = int.Parse(strs[1]);
            ro.Value1 = strs[2];
            ro.Value2 = strs[3];
            ro.Value3 = strs[4];
            ro.Value4 = strs[5];
            ro.Value5 = strs[6];

            CheckRescueObject(ro);

            return(ro);
        }
        /// <summary>
        /// 对象实体绑定数据
        /// </summary>
        public BD_RescueTableInfo ReaderBind(IDataReader dataReader)
        {
            BD_RescueTableInfo model = new BD_RescueTableInfo();
            object             ojb;

            ojb = dataReader["id"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.Id = (int)ojb;
            }
            ojb = dataReader["type"];
            if (ojb != null && ojb != DBNull.Value)
            {
                model.Type = (int)ojb;
            }
            model.Value1 = dataReader["Value1"].ToString();
            model.Value2 = dataReader["Value2"].ToString();
            model.Value3 = dataReader["Value3"].ToString();
            model.Value4 = dataReader["Value4"].ToString();
            model.Value5 = dataReader["Value5"].ToString();
            return(model);
        }
        private string SetResuceObjectToTxt(BD_RescueTableInfo ro)
        {
            if (ro == null)
            {
                return("");
            }

            string part   = "|";
            string nulval = "*";

            if (string.IsNullOrEmpty(ro.Value1))
            {
                ro.Value1 = nulval;
            }

            if (string.IsNullOrEmpty(ro.Value2))
            {
                ro.Value2 = nulval;
            }

            if (string.IsNullOrEmpty(ro.Value3))
            {
                ro.Value3 = nulval;
            }

            if (string.IsNullOrEmpty(ro.Value4))
            {
                ro.Value4 = nulval;
            }

            if (string.IsNullOrEmpty(ro.Value5))
            {
                ro.Value5 = nulval;
            }

            return(ro.Id + part + ro.Type + part + ro.Value1 + part + ro.Value2 + part + ro.Value3 + part + ro.Value4 +
                   part + ro.Value5);
        }
        /// <summary>
        /// 更新一条数据
        /// </summary>
        public void Update(BD_RescueTableInfo model)
        {
            StringBuilder strSql = new StringBuilder();

            strSql.Append("update BD_RescueTable set ");
            strSql.Append("type=@type,");
            strSql.Append("Value1=@Value1,");
            strSql.Append("Value2=@Value2,");
            strSql.Append("Value3=@Value3,");
            strSql.Append("Value4=@Value4,");
            strSql.Append("Value5=@Value5");
            strSql.Append(" where id=@id ");
            Database  db        = DatabaseFactory.CreateDatabase();
            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());

            db.AddInParameter(dbCommand, "id", DbType.Int32, model.Id);
            db.AddInParameter(dbCommand, "type", DbType.Int32, model.Type);
            db.AddInParameter(dbCommand, "Value1", DbType.String, model.Value1);
            db.AddInParameter(dbCommand, "Value2", DbType.String, model.Value2);
            db.AddInParameter(dbCommand, "Value3", DbType.String, model.Value3);
            db.AddInParameter(dbCommand, "Value4", DbType.String, model.Value4);
            db.AddInParameter(dbCommand, "Value5", DbType.String, model.Value5);
            db.ExecuteNonQuery(dbCommand);
        }
        private bool Rescue_QH_DeleteTodayEntrust(BD_RescueTableInfo ro)
        {
            string entrustNumber = ro.Value1;

            return(Rescue_QH_DeleteTodayEntrust(entrustNumber));
        }
        private void DoResuce(BD_RescueTableInfo ro)
        {
            if (ro == null)
            {
                return;
            }

            bool isSuccess = false;

            switch (ro.Type)
            {
            case (int)RescueType.DeleteXHEntrust:
                isSuccess = Rescue_XH_DeleteTodayEntrust(ro);
                break;

            case (int)RescueType.DeleteHKEntrust:
                isSuccess = Rescue_HK_DeleteTodayEntrust(ro);
                break;

            case (int)RescueType.DeleteQHEntrust:
                isSuccess = Rescue_QH_DeleteTodayEntrust(ro);
                break;

            case (int)RescueType.XHBuyHoldingProcess:
                isSuccess = Rescue_XHBuy_InstantReckon_HoldingProcess(ro);
                break;

            case (int)RescueType.HKBuyHoldingProcess:
                isSuccess = Rescue_HKBuy_InstantReckon_HoldingProcess(ro);
                break;

            case (int)RescueType.GZQHOpenHoldingProcess:
                isSuccess = Rescue_GZQHOpen_InstantReckon_HoldingProcess(ro);
                break;

            case (int)RescueType.SPQHOpenHoldingProcess:
                isSuccess = Rescue_SPQHOpen_InstantReckon_HoldingProcess(ro);
                break;

            case (int)RescueType.XHLastCheckFreezeMoney:
                isSuccess = Rescue_XH_LastCheckFreezeMoney(ro);
                break;

            case (int)RescueType.HKLastCheckFreezeMoney:
                isSuccess = Rescue_HK_LastCheckFreezeMoney(ro);
                break;

            case (int)RescueType.GZQHLastCheckFreezeMoney:
                isSuccess = Rescue_GZQH_LastCheckFreezeMoney(ro);
                break;

            case (int)RescueType.SPQHLastCheckFreezeMoney:
                isSuccess = Rescue_SPQH_LastCheckFreezeMoney(ro);
                break;
            }

            if (isSuccess)
            {
                WriteSuccessText(ro.Id.ToString());
            }
        }