Beispiel #1
0
        /// <summary>
        /// 更新分红记录
        /// </summary>
        /// <param name="tm">TransactionManager</param>
        /// <param name="cash">分红信息</param>
        /// <param name="tables">登记列表</param>
        private static bool UpdateCashCut(ReckoningTransaction tm, IList <XH_MelonCutRegisterTableInfo> tables)
        {
            bool issuss = true;
            List <XH_CapitalAccountTableInfo> capitalList = new List <XH_CapitalAccountTableInfo>();
            List <UA_CapitalFlowTableInfo>    flowList    = new List <UA_CapitalFlowTableInfo>();

            XH_CapitalAccountTableDal dal = new XH_CapitalAccountTableDal();

            try
            {
                foreach (XH_MelonCutRegisterTableInfo registerTable in tables)
                {
                    //分红的现金额
                    decimal num = registerTable.RegisterAmount;

                    UA_UserAccountAllocationTableInfo capitalAccount = Utils.GetCapitalAccountByHoldAccount(registerTable.UserAccountDistributeLogo, registerTable.Code);

                    XH_CapitalAccountTableInfo accountTable = dal.GetXHCapitalAccount(capitalAccount.UserAccountDistributeLogo, registerTable.TradeCurrencyType);

                    if (accountTable == null)
                    {
                        continue;
                    }


                    accountTable.TodayOutInCapital += num;


                    accountTable.AvailableCapital += num;

                    capitalList.Add(accountTable);


                    //更新资金流水表
                    UA_CapitalFlowTableInfo flowTable = GetFlowTable(registerTable, capitalAccount.UserAccountDistributeLogo, num);
                    flowList.Add(flowTable);


                    string format = "MelonCutService.UpdateCashCut进行现金分红[商品代码={0},持仓帐号={1},分红金额={2}]";
                    string desc   = string.Format(format, registerTable.Code, registerTable.UserAccountDistributeLogo, num);
                    LogHelper.WriteDebug(desc);
                }

                XH_CapitalAccountTableDal xh_AccountTableDal = new XH_CapitalAccountTableDal();

                if (capitalList.Count > 0)
                {
                    foreach (var accountTableInfo in capitalList)
                    {
                        xh_AccountTableDal.Update(accountTableInfo, tm.Database, tm.Transaction);
                    }
                }
                if (flowList.Count > 0)
                {
                    UA_CapitalFlowTableDal flowTableDal = new UA_CapitalFlowTableDal();
                    foreach (var historyTradeTableInfo in flowList)
                    {
                        flowTableDal.Add(historyTradeTableInfo, tm.Database, tm.Transaction);
                    }
                }
                if (tables.Count > 0)
                {
                    XH_MelonCutRegisterTableDal melonCutRegisterTableDal = new XH_MelonCutRegisterTableDal();
                    foreach (var registerTableInfo in tables)
                    {
                        melonCutRegisterTableDal.Delete(registerTableInfo, tm.Database, tm.Transaction);
                    }
                }
            }
            catch (Exception ex)
            {
                issuss = false;
                LogHelper.WriteError("分红出现问题 ", ex);
            }
            return(issuss);
        }
        /// <summary>
        /// 追加资金
        /// </summary>
        /// <param name="addCapital"></param>
        /// <param name="outMessage"></param>
        /// <returns></returns>
        public bool AddCapital(AddCapitalEntity addCapital, out string outMessage)
        {
            outMessage = string.Empty;
            //TransactionManager tm = TransactionFactory.GetTransactionManager();
            //tm.BeginTransaction();
            try
            {
                if (addCapital == null)
                {
                    return(false);
                }
                UA_UserAccountAllocationTableDal userAccountDal = new UA_UserAccountAllocationTableDal();
                // new SqlUaUserAccountAllocationTableProvider(TransactionFactory.RC_ConnectionString, true, "");
                string findCodition = string.Format(" UserID='{0}' AND AccountTypeLogo='{1}'", addCapital.TraderID, 1);
                List <UA_UserAccountAllocationTableInfo> list = userAccountDal.GetListArray(findCodition);
                if (list == null || list.Count < 1)
                {
                    outMessage = "该交易员的银行帐号不存在!";
                    return(false);
                }
                if (list[0].UserAccountDistributeLogo != addCapital.BankCapitalAccount)
                {
                    outMessage = "银行帐号不正确!";
                    return(false);
                }

                UA_BankAccountTableDal _BankAccount = new UA_BankAccountTableDal();
                //new SqlUaBankAccountTableProvider(TransactionFactory.RC_ConnectionString, true, "");
                UA_CapitalFlowTableDal _UaCapitalFlow = new UA_CapitalFlowTableDal();
                //new SqlUaCapitalFlowTableProvider(TransactionFactory.RC_ConnectionString, true, "");
                Database db = DatabaseFactory.CreateDatabase();
                using (DbConnection conn = db.CreateConnection())
                {
                    conn.Open();
                    DbTransaction trm = conn.BeginTransaction();

                    try
                    {
                        if (addCapital.AddRMBAmount > 0 && addCapital.AddRMBAmount != decimal.MaxValue)
                        {
                            #region 增加人民币
                            var _record = _BankAccount.GetModel((int)Types.CurrencyType.RMB, addCapital.BankCapitalAccount);
                            if (_record == null)
                            {
                                outMessage = "币种为人民币的银行帐号不存在!";
                                return(false);
                            }
                            #region old code
                            ////_record.CapitalRemainAmount = _record.CapitalRemainAmount + addCapital.AddRMBAmount;
                            ////_record.AvailableCapital += addCapital.AddRMBAmount;
                            ////_record.TodayOutInCapital += addCapital.AddRMBAmount;
                            ////if (!_BankAccount.Update(tm, _record))
                            ////{
                            ////    outMessage = "更新人民币银行帐号失败!";
                            ////    return false;
                            ////}
                            //string sql =
                            //    string.Format(
                            //        "Update UA_BankAccountTable set CapitalRemainAmount=CapitalRemainAmount+{0},AvailableCapital=AvailableCapital+{0},TodayOutInCapital=TodayOutInCapital+{0} where TradeCurrencyTypeLogo={1} AND UserAccountDistributeLogo='{2}'",
                            //        addCapital.AddRMBAmount, (int)Types.CurrencyType.RMB, addCapital.BankCapitalAccount);
                            //DataRepository.Provider.ExecuteNonQuery(tm, CommandType.Text, sql);
                            #endregion
                            _BankAccount.AddCapital(addCapital.AddRMBAmount, addCapital.BankCapitalAccount, Types.CurrencyType.RMB, db, trm);

                            var _UaCapitalFlowTable = new UA_CapitalFlowTableInfo();
                            _UaCapitalFlowTable.TradeCurrencyType  = (int)Types.CurrencyType.RMB;
                            _UaCapitalFlowTable.FromCapitalAccount = string.Empty;
                            _UaCapitalFlowTable.ToCapitalAccount   = addCapital.BankCapitalAccount;
                            _UaCapitalFlowTable.TransferAmount     = addCapital.AddRMBAmount;
                            _UaCapitalFlowTable.TransferTime       = System.DateTime.Now;
                            _UaCapitalFlowTable.TransferTypeLogo   =
                                (int)ReckoningCounter.Entity.Contants.Types.TransferType.AddCapital;
                            _UaCapitalFlow.Add(_UaCapitalFlowTable, db, trm);
                            //if (!_UaCapitalFlow.Insert(tm, _UaCapitalFlowTable))
                            //{
                            //outMessage = "记录资金流水失败";
                            //return false;
                            //}
                            #endregion
                        }
                        if (addCapital.AddHKAmount > 0 && addCapital.AddHKAmount != decimal.MaxValue)
                        {
                            #region 增加港币
                            var _record = _BankAccount.GetModel((int)Types.CurrencyType.HK, addCapital.BankCapitalAccount);
                            //var _record =  _BankAccount.GetByTradeCurrencyTypeLogoUserAccountDistributeLogo((int)Types.CurrencyType.HK,
                            //                                                                     addCapital.BankCapitalAccount);
                            if (_record == null)
                            {
                                outMessage = "币种为港元的银行帐号不存在!";
                                return(false);
                            }
                            #region old code
                            ////_record.CapitalRemainAmount += addCapital.AddHKAmount;
                            ////_record.AvailableCapital += addCapital.AddHKAmount;
                            ////_record.TodayOutInCapital += addCapital.AddHKAmount;
                            ////if (!_BankAccount.Update(tm, _record))
                            ////{
                            ////    outMessage = "更新港元银行帐号失败!";
                            ////    return false;
                            ////}
                            //string sql =
                            //   string.Format(
                            //       "Update UA_BankAccountTable set CapitalRemainAmount=CapitalRemainAmount+{0},AvailableCapital=AvailableCapital+{0},TodayOutInCapital=TodayOutInCapital+{0} where TradeCurrencyTypeLogo={1} AND UserAccountDistributeLogo='{2}'",
                            //       addCapital.AddHKAmount, (int)Types.CurrencyType.HK, addCapital.BankCapitalAccount);
                            //DataRepository.Provider.ExecuteNonQuery(tm, CommandType.Text, sql);
                            #endregion
                            _BankAccount.AddCapital(addCapital.AddHKAmount, addCapital.BankCapitalAccount, Types.CurrencyType.HK, db, trm);

                            var _UaCapitalFlowTable = new UA_CapitalFlowTableInfo();
                            _UaCapitalFlowTable.TradeCurrencyType  = (int)Types.CurrencyType.HK;
                            _UaCapitalFlowTable.FromCapitalAccount = string.Empty;
                            _UaCapitalFlowTable.ToCapitalAccount   = addCapital.BankCapitalAccount;
                            _UaCapitalFlowTable.TransferAmount     = addCapital.AddHKAmount;
                            _UaCapitalFlowTable.TransferTime       = System.DateTime.Now;
                            _UaCapitalFlowTable.TransferTypeLogo   =
                                (int)ReckoningCounter.Entity.Contants.Types.TransferType.AddCapital;
                            _UaCapitalFlow.Add(_UaCapitalFlowTable, db, trm);
                            //if (!_UaCapitalFlow.Insert(tm, _UaCapitalFlowTable))
                            //{
                            //    outMessage = "记录资金流水失败";
                            //    return false;
                            //}
                            #endregion
                        }
                        if (addCapital.AddUSAmount > 0 && addCapital.AddUSAmount != decimal.MaxValue)
                        {
                            #region 增加美元
                            //var _record =
                            //    _BankAccount.GetByTradeCurrencyTypeLogoUserAccountDistributeLogo((int)Types.CurrencyType.US,
                            //                                                                     addCapital.BankCapitalAccount);
                            var _record = _BankAccount.GetModel((int)Types.CurrencyType.US, addCapital.BankCapitalAccount);

                            if (_record == null)
                            {
                                outMessage = "币种为美元的银行帐号不存在!";
                                return(false);
                            }
                            //_record.CapitalRemainAmount += addCapital.AddUSAmount;
                            //_record.AvailableCapital += addCapital.AddUSAmount;
                            //_record.TodayOutInCapital += addCapital.AddUSAmount;
                            //if (!_BankAccount.Update(tm, _record))
                            //{
                            //    outMessage = "更新美元银行帐号失败!";
                            //    return false;
                            //}

                            //string sql =
                            //  string.Format(
                            //      "Update UA_BankAccountTable set CapitalRemainAmount=CapitalRemainAmount+{0},AvailableCapital=AvailableCapital+{0},TodayOutInCapital=TodayOutInCapital+{0} where TradeCurrencyTypeLogo={1} AND UserAccountDistributeLogo='{2}'",
                            //      addCapital.AddUSAmount, (int)Types.CurrencyType.US, addCapital.BankCapitalAccount);
                            //DataRepository.Provider.ExecuteNonQuery(tm, CommandType.Text, sql);
                            _BankAccount.AddCapital(addCapital.AddUSAmount, addCapital.BankCapitalAccount, Types.CurrencyType.US, db, trm);

                            var _UaCapitalFlowTable = new UA_CapitalFlowTableInfo();
                            _UaCapitalFlowTable.TradeCurrencyType  = (int)Types.CurrencyType.US;
                            _UaCapitalFlowTable.FromCapitalAccount = string.Empty;
                            _UaCapitalFlowTable.ToCapitalAccount   = addCapital.BankCapitalAccount;
                            _UaCapitalFlowTable.TransferAmount     = addCapital.AddUSAmount;
                            _UaCapitalFlowTable.TransferTime       = System.DateTime.Now;
                            _UaCapitalFlowTable.TransferTypeLogo   =
                                (int)ReckoningCounter.Entity.Contants.Types.TransferType.AddCapital;
                            _UaCapitalFlow.Add(_UaCapitalFlowTable, db, trm);

                            //if (!_UaCapitalFlow.Insert(tm, _UaCapitalFlowTable))
                            //{
                            //    outMessage = "记录资金流水失败";
                            //    return false;
                            //}
                            #endregion
                        }
                        trm.Commit();
                    }
                    catch (Exception ex)
                    {
                        trm.Rollback();
                        outMessage = ex.Message.ToString();
                        LogHelper.WriteError(outMessage, ex);
                        return(false);
                    }
                    finally
                    {
                        trm.Dispose();
                    }
                }
                outMessage = "追加资金成功!";
                return(true);
            }
            catch (Exception ex)
            {
                outMessage = ex.Message.ToString();
                LogHelper.WriteError(outMessage, ex);
                return(false);
            }
        }