/// <summary>
        /// 获取管理员组信息的分页列表
        /// </summary>
        /// <param name="db">数据库连接对象</param>
        /// <returns>返回管理员组信息的分页列表</returns>
        public PageResult<AdministratorGroupExport> GetAdministratorGroups(IModelToDbContextOfAdministrator db)
        {
            if (this.PageIndex < 1) { this.PageIndex = 1; }
            SettingOfBase settingOfBase = new SettingOfBase(db);
            int startRow = settingOfBase.PageSizeForAdmin * (this.PageIndex - 1);


            Expression<Func<AdministratorGroup, bool>> predicate1 = x => x.Id > 0;

            if (this.KeywordForGroupName != null)
            {
                this.KeywordForGroupName = VerifyHelper.EliminateSpaces(this.KeywordForGroupName);
                string[] keywords = this.KeywordForGroupName.Split(new char[] { ' ' });
                predicate1 = x => keywords.All(kw => x.Name.Contains(kw));
            }

            int countOfAllMessages = db.AdministratorGroups
                .Where(predicate1)
                .Count();
            var tList = db.AdministratorGroups
                .Where(predicate1)
                .OrderBy(x => x.Name)
                .Skip(startRow)
                .Take(settingOfBase.PageSizeForAdmin)
                .ToList()
                .ConvertAll(x => new AdministratorGroupExport(x));

            return new PageResult<AdministratorGroupExport>(this.PageIndex, countOfAllMessages, settingOfBase.PageSizeForAdmin, tList);
        }
        /// <summary>
        /// 保持心跳
        /// </summary>
        /// <param name="db">数据库存储指针</param>
        public void KeepHeartbeat(IModelToDbContextOfAdministrator db)
        {
            SettingOfBase setting = new SettingOfBase(db);
            int s = setting.HeartbeatInterval * 3;

            this.Timeout = DateTime.Now.AddSeconds(s);
        }
 /// <summary>
 /// 保持心跳
 /// </summary>
 /// <param name="db">数据库连接对象</param>
 /// <param name="token">身份标识</param>
 public static void KeepHeartbeat(IModelToDbContextOfAdministrator db, string token)
 {
     AdministratorLoginInfo info = infos.FirstOrDefault(x => x.Token == token);
     if (info == null)
     {
         throw new Exception("指定的身份标识所标示的管理员不存在");
     }
     info.KeepHeartbeat(db);
 }
        /// <summary>
        /// 实例化一个新的管理员的登陆信息
        /// </summary>
        /// <param name="db">数据库存储指针</param>
        /// <param name="administratorId">管理员信息的存储指针</param>
        public AdministratorLoginInfo(IModelToDbContextOfAdministrator db, int administratorId)
        {
            SettingOfBase setting = new SettingOfBase(db);
            int s = setting.HeartbeatInterval * 3;

            this.Token = Guid.NewGuid().ToString("N");
            this.AdministratorId = administratorId;
            this.LoginTime = DateTime.Now;
            this.Timeout = this.LoginTime.AddSeconds(s);
        }
        /// <summary>
        /// 获取管理员登陆记录的分页列表
        /// </summary>
        /// <param name="db">数据库连接对象</param>
        /// <returns>返回管理员登陆记录的分页列表</returns>
        public PageResult<AdministratorLandingRecordExport> GetAdministratorLandingRecords(IModelToDbContextOfAdministrator db)
        {
            if (this.PageIndex < 1) { this.PageIndex = 1; }
            SettingOfBase settingOfBase = new SettingOfBase(db);
            int startRow = settingOfBase.PageSizeForAdmin * (this.PageIndex - 1);


            Expression<Func<AdministratorLandingRecord, bool>> predicate1 = x => x.Id > 0;
            Expression<Func<AdministratorLandingRecord, bool>> predicate2 = x => x.Id > 0;
            Expression<Func<AdministratorLandingRecord, bool>> predicate3 = x => x.Id > 0;
            Expression<Func<AdministratorLandingRecord, bool>> predicate4 = 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.Owner.Username.Contains(kw));
            }
            if (this.UserId != null)
            {
                int userId = (int)this.UserId;
                predicate2 = x => x.Owner.Id == userId;
            }
            if (this.BeginTime != null)
            {
                DateTime beginTime = (DateTime)this.BeginTime;
                predicate3 = x => x.CreatedTime >= beginTime;
            }
            if (this.EndTime != null)
            {
                DateTime endTime = (DateTime)this.EndTime;
                predicate4 = x => x.CreatedTime < endTime;
            }

            int countOfAllMessages = db.AdministratorLandingRecords
                .Where(predicate1)
                .Where(predicate2)
                .Where(predicate3)
                .Where(predicate4)
                .Count();
            var tList = db.AdministratorLandingRecords
                .Where(predicate1)
                .Where(predicate2)
                .Where(predicate3)
                .Where(predicate4)
                .OrderByDescending(x => x.CreatedTime)
                .Skip(startRow)
                .Take(settingOfBase.PageSizeForAdmin)
                .ToList()
                .ConvertAll(x => new AdministratorLandingRecordExport(x));

            return new PageResult<AdministratorLandingRecordExport>(this.PageIndex, countOfAllMessages, settingOfBase.PageSizeForAdmin, tList);
        }
 /// <summary>
 /// 声明管理员登入
 /// </summary>
 /// <param name="db">数据库连接对象</param>
 /// <param name="userId">管理员信息的存储指针</param>
 /// <returns>返回身份标识</returns>
 public static string AddInfo(IModelToDbContextOfAdministrator db, int userId)
 {
     lock (infos)
     {
         RemoveInfo(userId);
         AdministratorLoginInfo info = new AdministratorLoginInfo(db, userId);
         CallEvent(Logining, info);
         infos.Add(info);
         CallEvent(Logined, info);
         return info.Token;
     }
 }
        /// <summary>
        /// 设置并保存
        /// </summary>
        /// <param name="db">数据库连接对象</param>
        public void SetAndSave(IModelToDbContextOfAdministrator db)
        {
            SettingOfBase setting = new SettingOfBase(db);

            setting.PageSizeForClient = this.PageSizeForClient;
            setting.PageSizeForAdmin = this.PageSizeForAdmin;
            setting.HeartbeatInterval = this.HeartbeatInterval;
            setting.WorkingHour_Begin = this.WorkingHour_Begin;
            setting.WorkingHour_End = this.WorkingHour_End;
            setting.VirtualQueuing = this.VirtualQueuing;
            setting.CollectionRunning = this.CollectionRunning;

            setting.Save(db);
        }
 /// <summary>
 /// 获取基础的管理员用户组信息
 /// </summary>
 /// <param name="db">数据库连接对象</param>
 /// <returns><返回基础的管理员用户组信息/returns>
 public NormalResult<List<BasicAdministratorGroupExport>> GetBasicAdministratorGroups(IModelToDbContextOfAdministrator db)
 {
     List<BasicAdministratorGroupExport> result = db.AdministratorGroups.ToList().ConvertAll(x => new BasicAdministratorGroupExport(x));
     return new NormalResult<List<BasicAdministratorGroupExport>>(result);
 }
 /// <summary>
 /// 获取管理员信息
 /// </summary>
 /// <param name="db">数据库连接对象</param>
 /// <param name="token">身份标识</param>
 /// <returns>返回管理员信息</returns>
 public static Administrator GetAdministratorInfo(IModelToDbContextOfAdministrator db, string token)
 {
     AdministratorLoginInfo info = infos.FirstOrDefault(x => x.Token == token);
     if (info == null)
     {
         throw new Exception("指定的身份标识所标示的管理员不存在");
     }
     return info.GetUser(db);
 }
 /// <summary>
 /// 获取管理员信息
 /// </summary>
 /// <param name="db">数据库存储指针</param>
 /// <returns>返回管理员信息</returns>
 public Administrator GetUser(IModelToDbContextOfAdministrator db)
 {
     return db.Administrators.Find(this.AdministratorId);
 }