/// <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结束检查资金表"); }