示例#1
0
        public async Task <IActionResult> GetLoginStatus(bool asAdministrator = false)
        {
            IEnumerable <Login> logins;

            if (User.FindFirst("role")?.Value == "Administrator" && asAdministrator)
            {
                logins = await _repo.GetLogins();
            }
            else
            {
                var userId = User.FindFirst("sub").Value;
                logins = await _repo.GetLogins(userId);
            }

            DateTime date            = DateTime.Now;
            var      firstDayOfMonth = new DateTime(date.Year, date.Month, 1);
            var      lastDayOfMonth  = firstDayOfMonth.AddMonths(1);
            var      accts           = await _repo.GetAcctNAsync(logins.Select(c => c.LoginName).ToString(','), firstDayOfMonth, lastDayOfMonth);

            var acctsss = await _repo.GetSSAcctNAsync(logins.Select(c => c.LoginName).ToString(','), firstDayOfMonth, lastDayOfMonth);

            var onlines = await GetOnlineUserNamesAsync();

            var model = logins.Select(c => new LoginStatus
            {
                AllowDialIn      = c.AllowDialIn,
                Enabled          = c.Enabled,
                LoginName        = c.LoginName,
                UserId           = c.UserId,
                MonthlyTraffic   = c.MonthlyTraffic,
                SSMonthlyTraffic = acctsss.FirstOrDefault(d => d.Item1 == c.LoginName).Item2,
                IsOnline         = onlines.Contains(c.LoginName),
                Port             = c.Port,
                BasicAcct        = new BasicAcct()
                {
                    TotalIn  = accts.FirstOrDefault(d => d.UserName == c.LoginName)?.TotalInput ?? 0,
                    TotalOut = accts.FirstOrDefault(d => d.UserName == c.LoginName)?.TotalOutput ?? 0,
                }
            }).ToArray();

            return(Ok(model));
        }