/// <summary>
        /// 获取系统设置
        /// </summary>
        /// <param name="db">数据库连接对象</param>
        /// <returns>返回系统设置</returns>
        public NormalResult<SettingExport> GetSetting(IModelToDbContextOfAuthor db)
        {
            SettingOfBase settingOfBase = new SettingOfBase(db);
            SettingOfAuthor settingOfAuthor = new SettingOfAuthor(db);
            SettingOfLottery settingOfLottery = new SettingOfLottery(db);

            var s = new SettingExport(settingOfBase, settingOfAuthor, settingOfLottery);
            return new NormalResult<SettingExport>(s);
        }
        /// <summary>
        /// 获取自己的用户信息
        /// </summary>
        /// <param name="db">数据库连接对象</param>
        /// <returns>返回自己的用户信息</returns>
        public NormalResult<AuthorExport> GetSelf(IModelToDbContextOfAuthor db)
        {
            SettingOfAuthor settingOfAuthor = new SettingOfAuthor(db);
            UserGroup group = db.UserGroups.FirstOrDefault(g => g.LowerOfConsumption <= this.Self.Consumption && g.CapsOfConsumption > this.Self.Consumption);
            SystemQuota systemQuota = db.SystemQuotas.FirstOrDefault(s => s.Rebate == this.Self.PlayInfo.Rebate_Normal);
            if (systemQuota == null)
            {
                systemQuota = new SystemQuota(this.Self.PlayInfo.Rebate_Normal, new List<SystemQuotaDetail>());
                for (double i = settingOfAuthor.LowerRebateOfHigh; i <= settingOfAuthor.CapsRebateOfHigh; i += 0.1)
                {
                    SystemQuotaDetail sqd = new SystemQuotaDetail(i, 0);
                    systemQuota.Details.Add(sqd);
                }
            }

            AuthorExport authorExport = new AuthorExport(this.Self, group, systemQuota.Details);
            return new NormalResult<AuthorExport>(authorExport);
        }
        /// <summary>
        /// 获取用户信息列表
        /// </summary>
        /// <param name="db">数据库连接对象</param>
        /// <returns>返回用户信息列表</returns>
        public PageResult<BasicAuthorExport> GetUsers(IModelToDbContextOfAuthor db)
        {
            if (this.PageIndex < 1) { this.PageIndex = 1; }
            SettingOfBase settingOfBase = new SettingOfBase(db);
            SettingOfAuthor settingOfAuthor = new SettingOfAuthor(db);
            int startRow = settingOfBase.PageSizeForClient * (this.PageIndex - 1);

            Expression<Func<Author, bool>> predicate1 = x => x.Id > 0;
            Expression<Func<Author, bool>> predicate2 = x => x.Id > 0;
            Expression<Func<Author, bool>> predicate3 = x => x.Relatives.Any(r => r.NodeId == this.Self.Id);

            if (this.KeywordForUsername != null)
            {
                this.KeywordForUsername = VerifyHelper.EliminateSpaces(this.KeywordForUsername);
                string[] keywords = this.KeywordForUsername.Split(new char[] { ' ' });
                predicate1 = x => keywords.All(kw => x.Username.Contains(kw));
            }
            if (this.OnlyImmediate == true)
            {
                predicate2 = x => x.Layer == this.Self.Layer + 1;
            }

            int countOfAllMessages = db.Authors
                .Where(predicate1)
                .Where(predicate2)
                .Where(predicate3)
                .Count();
            var tList = db.Authors
                .Where(predicate1)
                .Where(predicate2)
                .Where(predicate3)
                .OrderByDescending(x => x.Layer)
                .Skip(startRow)
                .Take(settingOfBase.PageSizeForClient)
                .ToList()
                .ConvertAll(x =>
                {
                    UserGroup group = db.UserGroups.FirstOrDefault(g => g.LowerOfConsumption <= x.Consumption && g.CapsOfConsumption > x.Consumption);
                    return new BasicAuthorExport(x, group);
                });

            return new PageResult<BasicAuthorExport>(this.PageIndex, countOfAllMessages, settingOfBase.PageSizeForClient, tList);
        }
        /// <summary>
        /// 设置
        /// </summary>
        /// <param name="settingOfBase">基本设置</param>
        /// <param name="settingOfAuthor">用户设置</param>
        /// <param name="settingOfLottery">彩票设置</param>
        public SettingExport(SettingOfBase settingOfBase, SettingOfAuthor settingOfAuthor, SettingOfLottery settingOfLottery)
        {
            this.PageSizeForClient = settingOfBase.PageSizeForClient;
            this.PageSizeForAdmin = settingOfBase.PageSizeForAdmin;
            this.HeartbeatInterval = settingOfBase.HeartbeatInterval;
            this.WorkingHour_Begin = settingOfBase.WorkingHour_Begin;
            this.WorkingHour_End = settingOfBase.WorkingHour_End;
            this.VirtualQueuing = settingOfBase.VirtualQueuing;
            this.CollectionRunning = settingOfBase.CollectionRunning;

            this.LowerRebate = settingOfAuthor.LowerRebate;
            this.CapsRebate = settingOfAuthor.CapsRebate;
            this.LowerRebateOfHigh = settingOfAuthor.LowerRebateOfHigh;
            this.CapsRebateOfHigh = settingOfAuthor.CapsRebateOfHigh;
            this.RechargeRecordTimeout = settingOfAuthor.RechargeRecordTimeout;
            this.SpreadRecordTimeout = settingOfAuthor.SpreadRecordTimeout;
            this.ForgotPasswordRecordTimeout = settingOfAuthor.ForgotPasswordRecordTimeout;
            this.DaysOfDividend = settingOfAuthor.DaysOfDividend;
            this.TimesOfWithdrawal = settingOfAuthor.TimesOfWithdrawal;
            this.MinimumWithdrawalAmount = settingOfAuthor.MinimumWithdrawalAmount;
            this.MaximumWithdrawalAmount = settingOfAuthor.MaximumWithdrawalAmount;
            this.Commission_A = settingOfAuthor.Commission_A;
            this.Commission_B = settingOfAuthor.Commission_B;
            this.LowerConsumptionForCommission = settingOfAuthor.LowerConsumptionForCommission;
            this.Dividend_A = settingOfAuthor.Dividend_A;
            this.Dividend_B = settingOfAuthor.Dividend_B;
            this.LowerConsumptionForDividend = settingOfAuthor.LowerConsumptionForDividend;
            this.ClearUser_DaysOfInactive = settingOfAuthor.ClearUser_DaysOfInactive;
            this.ClearUser_DaysOfUnSetIn = settingOfAuthor.ClearUser_DaysOfUnSetIn;
            this.ClearUser_LowerOfMoney = settingOfAuthor.ClearUser_LowerOfMoney;
            this.ClearUser_DaysOfUnMoneyChange = settingOfAuthor.ClearUser_DaysOfUnMoneyChange;

            this.UnitPrice = settingOfLottery.UnitPrice;
            this.PayoutBase = settingOfLottery.PayoutBase;
            this.LineForProhibitBetting = settingOfLottery.LineForProhibitBetting;
            this.MaximumPayout = settingOfLottery.MaximumPayout;
            this.ConversionRates = settingOfLottery.ConversionRates;
            this.MaximumBetsNumber = settingOfLottery.MaximumBetsNumber;
            this.ClosureSingleTime = settingOfLottery.ClosureSingleTime;
        }
 /// <summary>
 /// 实例化一个新的用户相关的系统设置
 /// </summary>
 /// <param name="model">用户相关的系统设置的数据模型</param>
 public SettingOfAuthorExport(SettingOfAuthor model)
 {
     this.LowerRebate = model.LowerRebate;
     this.CapsRebate = model.CapsRebate;
     this.LowerRebateOfHigh = model.LowerRebateOfHigh;
     this.CapsRebateOfHigh = model.CapsRebateOfHigh;
     this.RechargeRecordTimeout = model.RechargeRecordTimeout;
     this.SpreadRecordTimeout = model.SpreadRecordTimeout;
     this.ForgotPasswordRecordTimeout = model.ForgotPasswordRecordTimeout;
     this.DaysOfDividend = model.DaysOfDividend;
     this.TimesOfWithdrawal = model.TimesOfWithdrawal;
     this.MinimumWithdrawalAmount = model.MinimumWithdrawalAmount;
     this.MaximumWithdrawalAmount = model.MaximumWithdrawalAmount;
     this.Commission_A = model.Commission_A;
     this.Commission_B = model.Commission_B;
     this.LowerConsumptionForCommission = model.LowerConsumptionForCommission;
     this.Dividend_A = model.Dividend_A;
     this.Dividend_B = model.Dividend_B;
     this.LowerConsumptionForDividend = model.LowerConsumptionForDividend;
     this.ClearUser_DaysOfInactive = model.ClearUser_DaysOfInactive;
     this.ClearUser_DaysOfUnSetIn = model.ClearUser_DaysOfUnSetIn;
     this.ClearUser_LowerOfMoney = model.ClearUser_LowerOfMoney;
     this.ClearUser_DaysOfUnMoneyChange = model.ClearUser_DaysOfUnMoneyChange;
 }
 /// <summary>
 /// 获取用户模块的系统设置
 /// </summary>
 /// <param name="db">数据库连接对象</param>
 /// <returns>返回用户模块的系统设置</returns>
 public NormalResult<SettingOfAuthorExport> GetSettingOfAuthor(IModelToDbContextOfBase db)
 {
     SettingOfAuthor settingOfAuthor = new SettingOfAuthor(db);
     SettingOfAuthorExport info = new SettingOfAuthorExport(settingOfAuthor);
     return new NormalResult<SettingOfAuthorExport>(info);
 }
        /// <summary>
        /// 设置并保存
        /// </summary>
        /// <param name="db">数据库连接对象</param>
        public void SetAndSave(IModelToDbContextOfAuthor db)
        {
            SettingOfAuthor settingOfAuthor = new SettingOfAuthor(db);
            settingOfAuthor.LowerRebate = this.LowerRebate;
            settingOfAuthor.CapsRebate = this.CapsRebate;
            settingOfAuthor.LowerRebateOfHigh = this.LowerRebateOfHigh;
            settingOfAuthor.CapsRebateOfHigh = this.CapsRebateOfHigh;
            settingOfAuthor.RechargeRecordTimeout = this.RechargeRecordTimeout;
            settingOfAuthor.SpreadRecordTimeout = this.SpreadRecordTimeout;
            settingOfAuthor.ForgotPasswordRecordTimeout = this.ForgotPasswordRecordTimeout;
            settingOfAuthor.DaysOfDividend = this.DaysOfDividend;
            settingOfAuthor.TimesOfWithdrawal = this.TimesOfWithdrawal;
            settingOfAuthor.MinimumWithdrawalAmount = this.MinimumWithdrawalAmount;
            settingOfAuthor.MaximumWithdrawalAmount = this.MaximumWithdrawalAmount;
            settingOfAuthor.Commission_A = this.Commission_A;
            settingOfAuthor.Commission_B = this.Commission_B;
            settingOfAuthor.LowerConsumptionForCommission = this.LowerConsumptionForCommission;
            settingOfAuthor.Dividend_A = this.Dividend_A;
            settingOfAuthor.Dividend_B = this.Dividend_B;
            settingOfAuthor.LowerConsumptionForDividend = this.LowerConsumptionForDividend;

            settingOfAuthor.ClearUser_DaysOfInactive = this.ClearUser_DaysOfInactive;
            settingOfAuthor.ClearUser_DaysOfUnSetIn = this.ClearUser_DaysOfUnSetIn;
            settingOfAuthor.ClearUser_LowerOfMoney = this.ClearUser_LowerOfMoney;
            settingOfAuthor.ClearUser_DaysOfUnMoneyChange = this.ClearUser_DaysOfUnMoneyChange;

            settingOfAuthor.Save(db);
        }
        /// <summary>
        /// 获取用户信息列表
        /// </summary>
        /// <param name="db">数据库连接对象</param>
        /// <returns>返回用户信息列表</returns>
        public PageResult<AuthorExport> GetUsers(IModelToDbContextOfAuthor db)
        {
            if (this.PageIndex < 1) { this.PageIndex = 1; }
            SettingOfBase settingOfBase = new SettingOfBase(db);
            SettingOfAuthor settingOfAuthor = new SettingOfAuthor(db);
            int startRow = settingOfBase.PageSizeForAdmin * (this.PageIndex - 1);

            Expression<Func<Author, bool>> predicate1 = x => x.Id > 0;
            Expression<Func<Author, bool>> predicate2 = x => x.Id > 0;
            Expression<Func<Author, bool>> predicate3 = x => x.Id > 0;

            if (this.KeywordForUsername != null)
            {
                this.KeywordForUsername = VerifyHelper.EliminateSpaces(this.KeywordForUsername);
                string[] keywords = this.KeywordForUsername.Split(new char[] { ' ' });
                predicate1 = x => keywords.All(kw => x.Username.Contains(kw));
            }
            if (this.GroupId != null)
            {
                int groupId = (int)this.GroupId;
                UserGroup group = db.UserGroups.Find(groupId);
                predicate2 = x => x.Consumption >= group.LowerOfConsumption
                    && x.Consumption < group.CapsOfConsumption;
            }
            if (this.BelongingUserId != null)
            {
                int belongingUserId = (int)this.BelongingUserId;
                predicate3 = x => x.Relatives.Any(r => r.NodeId == belongingUserId);
            }

            int countOfAllMessages = db.Authors
                .Where(predicate1)
                .Where(predicate2)
                .Where(predicate3)
                .Count();
            var tList = db.Authors
                .Where(predicate1)
                .Where(predicate2)
                .Where(predicate3)
                .OrderBy(x => x.Username)
                .Skip(startRow)
                .Take(settingOfBase.PageSizeForAdmin)
                .ToList()
                .ConvertAll(x =>
                {
                    UserGroup group = db.UserGroups.FirstOrDefault(g => g.LowerOfConsumption <= x.Consumption && g.CapsOfConsumption > x.Consumption);
                    SystemQuota systemQuota = db.SystemQuotas.FirstOrDefault(s => s.Rebate == x.PlayInfo.Rebate_Normal);
                    var t = db.SystemQuotas.ToList();
                    if (systemQuota == null)
                    {
                        systemQuota = new SystemQuota(x.PlayInfo.Rebate_Normal, new List<SystemQuotaDetail>());
                        for (double i = settingOfAuthor.LowerRebateOfHigh; i <= settingOfAuthor.CapsRebateOfHigh; i += 0.1)
                        {
                            SystemQuotaDetail sqd = new SystemQuotaDetail(i, 0);
                            systemQuota.Details.Add(sqd);
                        }
                    }
                    Author parent = db.Authors.FirstOrDefault(p => x.Relatives.Any(r => r.NodeId == p.Id) && p.Layer == x.Layer - 1);
                    return new AuthorExport(x, parent, group, systemQuota.Details);
                });

            return new PageResult<AuthorExport>(this.PageIndex, countOfAllMessages, settingOfBase.PageSizeForAdmin, tList);
        }