/// <summary>
        /// 根据条件从数据库中获取相应的基础表数据
        /// </summary>
        /// <param name="where">条件</param>
        /// <returns></returns>
        public QH_CapitalAccountTableInfo GetBaseFromDBByWhere(string where)
        {
            try
            {
                QH_CapitalAccountTableDal dal = new QH_CapitalAccountTableDal();
                string sqlWhere = "";

                if (where.Split('@').Length > 1)
                {
                    sqlWhere = string.Format("UserAccountDistributeLogo='{0}'  and  TradeCurrencyType='{1}' ", where.Split('@')[0], where.Split('@')[1]);
                }
                else
                {
                    sqlWhere = string.Format("UserAccountDistributeLogo='{0}' ", where.Split('@')[0]);
                }
                var data = dal.GetListArray(sqlWhere);
                if (data != null && data.Count > 0)
                {
                    return(data[0]);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteError("根据条件从数据库中获取相应的期货资金基础表数据异常:" + where + ex.Message, ex);
                return(null);
            }
        }
        /// <summary>
        /// 初始化期货资金账户
        /// </summary>
        /// <param name="account">账户实体对象</param>
        /// <param name="outMessage">返回信息</param>
        /// <param name="db">数据库对象</param>
        /// <param name="tm">事务对象</param>
        public void InitializationQHCapitalAccount(AccountEntity account, out string outMessage, Database db, DbTransaction tm)
        {
            outMessage = string.Empty;
            if (account == null)
            {
                outMessage = "期货资金账户对象为空!";
                return;
            }
            //var _QhCapitalAccount = new SqlQhCapitalAccountTableProvider(TransactionFactory.RC_ConnectionString, true, "");
            QH_CapitalAccountTableDal  dal   = new QH_CapitalAccountTableDal();
            QH_CapitalAccountTableInfo model = new QH_CapitalAccountTableInfo();

            model.AvailableCapital          = 0;
            model.BalanceOfTheDay           = 0;
            model.CapitalBalance            = 0;
            model.FreezeCapitalTotal        = 0;
            model.TodayOutInCapital         = 0;
            model.UserAccountDistributeLogo = account.Account;
            model.TradeCurrencyType         = (int)GTA.VTS.Common.CommonObject.Types.CurrencyType.RMB;
            dal.Add(model, db, tm);
            model.TradeCurrencyType = (int)GTA.VTS.Common.CommonObject.Types.CurrencyType.HK;
            dal.Add(model, db, tm);
            model.TradeCurrencyType = (int)GTA.VTS.Common.CommonObject.Types.CurrencyType.US;
            dal.Add(model, db, tm);
        }
        /// <summary>
        /// 获取指定Id的资金表
        /// </summary>
        /// <param name="k"></param>
        /// <returns></returns>
        public QH_CapitalAccountTableInfo GetBaseTable(int k)
        {
            QH_CapitalAccountTableDal dal = new QH_CapitalAccountTableDal();
            var data = dal.GetModel(k);

            return(data);
        }
        /// <summary>
        /// 获取所有资金内存表
        /// </summary>
        /// <returns></returns>
        public List <QH_CapitalAccountTableInfo> GetAllBaseTable()
        {
            QH_CapitalAccountTableDal         dal  = new QH_CapitalAccountTableDal();
            List <QH_CapitalAccountTableInfo> list = dal.GetAllListArray();

            return(list);
        }
        /// <summary>
        /// 批量更新
        /// </summary>
        /// <param name="baseList"></param>
        public void Commit(List <QH_CapitalAccountTableInfo> baseList)
        {
            try
            {
                bool isSuccess = false;
                QH_CapitalAccountTableDal dal = new QH_CapitalAccountTableDal();

                Database database = DatabaseFactory.CreateDatabase();

                using (DbConnection connection = database.CreateConnection())
                {
                    connection.Open();
                    DbTransaction transaction = connection.BeginTransaction();
                    try
                    {
                        foreach (var data in baseList)
                        {
                            dal.Update(data, database, transaction);
                        }

                        transaction.Commit();
                        isSuccess = true;
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        LogHelper.WriteError(ex.Message, ex);
                    }
                }

                //提交后清除增量表数据
                if (isSuccess)
                {
                    QH_CapitalAccountTable_DeltaDal deltaDal = new QH_CapitalAccountTable_DeltaDal();
                    deltaDal.Truncate();
                }

                /*DataManager.ExecuteInTransaction((database, transaction) =>
                 *                                   {
                 *                                       foreach (var data in baseList)
                 *                                       {
                 *                                           dal.Update(data, database, transaction);
                 *                                       }
                 *
                 *                                       //提交后清除增量表数据
                 *                                       CleanDeltaTable(database, transaction);
                 *                                   });*/
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex.Message, ex);
            }
        }
        /// <summary>
        /// 同步数据库
        /// </summary>
        public void SyncChangeToBase()
        {
            QH_CapitalAccountTable_DeltaDal deltaInfoDal = new QH_CapitalAccountTable_DeltaDal();
            var deltaList = deltaInfoDal.GetAllSum();

            if (deltaList == null)
            {
                return;
            }

            if (deltaList.Count == 0)
            {
                return;
            }

            try
            {
                bool isSuccess = false;
                QH_CapitalAccountTableDal dal = new QH_CapitalAccountTableDal();

                Database database = DatabaseFactory.CreateDatabase();
                LogHelper.WriteDebug("期货内存资金表数据库故障恢复开始==" + deltaList.Count);
                using (DbConnection connection = database.CreateConnection())
                {
                    connection.Open();
                    DbTransaction transaction = connection.BeginTransaction();
                    try
                    {
                        foreach (var deltaInfo in deltaList)
                        {
                            var data = new QH_CapitalAccountTableInfo();
                            data.AvailableCapital           = deltaInfo.AvailableCapitalDelta;
                            data.CapitalAccountLogoId       = deltaInfo.CapitalAccountLogoId;
                            data.CloseFloatProfitLossTotal  = deltaInfo.CloseFloatProfitLossTotalDelta;
                            data.CloseMarketProfitLossTotal = deltaInfo.CloseMarketProfitLossTotalDelta;
                            data.FreezeCapitalTotal         = deltaInfo.FreezeCapitalTotalDelta;
                            data.MarginTotal       = deltaInfo.MarginTotalDelta;
                            data.TodayOutInCapital = deltaInfo.TodayOutInCapitalDelta;

                            dal.AddUpdate(data, database, transaction);
                        }

                        transaction.Commit();
                        isSuccess = true;
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        LogHelper.WriteError(ex.Message, ex);
                    }
                }
                LogHelper.WriteDebug("期货内存资金表数据库故障恢复完成==");
                //同步后清除增量表数据
                if (isSuccess)
                {
                    QH_CapitalAccountTable_DeltaDal deltaDal = new QH_CapitalAccountTable_DeltaDal();
                    deltaDal.Truncate();
                }

                /*DataManager.ExecuteInTransaction((database, transaction) =>
                 *                                   {
                 *                                       foreach (var deltaInfo in deltaList)
                 *                                       {
                 *                                           var data = new QH_CapitalAccountTableInfo();
                 *                                           data.AvailableCapital = deltaInfo.AvailableCapitalDelta;
                 *                                           data.CloseFloatProfitLossTotal =
                 *                                               deltaInfo.CloseFloatProfitLossTotalDelta;
                 *                                           data.CloseMarketProfitLossTotal =
                 *                                               deltaInfo.CloseMarketProfitLossTotalDelta;
                 *                                           data.FreezeCapitalTotal = deltaInfo.FreezeCapitalTotalDelta;
                 *                                           data.MarginTotal = deltaInfo.MarginTotalDelta;
                 *                                           data.TodayOutInCapital = deltaInfo.TodayOutInCapitalDelta;
                 *
                 *                                           dal.AddUpdate(data, database, transaction);
                 *                                       }
                 *
                 *                                       //同步后清除增量表数据
                 *                                       CleanDeltaTable(database, transaction);
                 *                                       deltaList = null;
                 *                                   });*/
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex.Message, ex);
            }
        }
        /// <summary>
        /// 检查资金表,可用资金小于0的走资金强行平仓流程
        /// </summary>
        private void CheckCapitalTable(object state)
        {
            //LogHelper.WriteDebug("FutureDayChecker.CheckFundTable开始检查资金表");
            QH_CapitalAccountTableDal dal = new QH_CapitalAccountTableDal();

            //TList<QhCapitalAccountTable> list =
            //  DataRepository.QhCapitalAccountTableProvider.GetByUserAccountDistributeLogo(
            //      capitalAccount.UserAccountDistributeLogo);
            string where = string.Format("UserAccountDistributeLogo = '{0}' ", capitalAccount.UserAccountDistributeLogo);
            List <QH_CapitalAccountTableInfo> list = dal.GetListArray(where);

            if (Utils.IsNullOrEmpty(list))
            {
                return;
            }

            foreach (QH_CapitalAccountTableInfo accountTable in list)
            {
                //if (accountTable.AvailableCapital<0.00m)
                //    continue;

                List <QH_HoldAccountTableInfo> listCloseContract;
                OrderAccepter orderAccepter = OrderAccepterService.Service;

                if (accountTable.AvailableCapital < 0)
                {
                    if (accountTable.TradeCurrencyType < 0.00m)
                    {
                        continue;
                    }

                    List <QH_HoldAccountTableInfo> list2 = GetHoldAccountTableList(holdAccount.UserAccountDistributeLogo, accountTable.TradeCurrencyType);
                    if (Utils.IsNullOrEmpty(list2))
                    {
                        continue;
                    }

                    listCloseContract = FindWillCLosedContract(list2);

                    foreach (var holdTable in listCloseContract)
                    {
                        //如果不是交易日,不进行强行平仓 add by 董鹏 2010-05-05
                        if (!CommonParaProxy.GetInstance().IsTradeDate(holdTable.Contract))
                        {
                            continue;
                        }

                        //CloseStockIndexContract(orderAccepter, holdTable, 0, false);
                        #region  账户类型进行商品期货、股指期货平仓 add by 董鹏 2010-02-03
                        if (holdAccount.AccountTypeLogo == (int)Types.AccountType.CommodityFuturesHoldCode)
                        {
                            //此处原来只有HistoryHoldAmount,造成未清算成功的持仓平不掉,因此加上TodayHoldAmount;
                            //而TodayFreezeAmount清算是否成功都没有影响 -- update by 董鹏 2010-03-29
                            //平历史
                            CloseCommoditiesContract(orderAccepter, holdTable, 0, (float)holdTable.HistoryHoldAmount, Types.QHForcedCloseType.CapitalCheck, ReckoningCounter.Entity.Contants.Types.FutureOpenCloseType.ClosePosition);
                            //平今
                            CloseCommoditiesContract(orderAccepter, holdTable, 0, (float)holdTable.TodayHoldAmount, Types.QHForcedCloseType.CapitalCheck, ReckoningCounter.Entity.Contants.Types.FutureOpenCloseType.CloseTodayPosition);
                        }
                        if (holdAccount.AccountTypeLogo == (int)Types.AccountType.StockFuturesHoldCode)
                        {
                            CloseStockIndexContract(orderAccepter, holdTable, (float)holdTable.HoldAveragePrice, false);
                        }
                        #endregion
                    }
                }
            }

            //LogHelper.WriteDebug("FutureDayChecker.CheckFundTable结束检查资金表");
        }