예제 #1
0
        public JsonResult GetSystemUsers()
        {
            var pageIndex = string.IsNullOrEmpty(Request["page"]) ? 1 : int.Parse(Request["page"]);
            var pageSize  = string.IsNullOrEmpty(Request["limit"]) ? 10 : int.Parse(Request["limit"]);

            UserSearchAdditionDto model = new UserSearchAdditionDto()
            {
                PageIndex = pageIndex,
                PageSize  = pageSize,
                LoginIp   = string.IsNullOrWhiteSpace(Request["LoginIp"]) ? null : Request["LoginIp"],
                Mobile    = string.IsNullOrWhiteSpace(Request["Mobile"]) ? null : Request["Mobile"],
                RoleId    = string.IsNullOrWhiteSpace(Request["RoleId"]) ? null : Request["RoleId"],
                RealName  = string.IsNullOrWhiteSpace(Request["RealName"]) ? null : Request["RealName"]
            };
            bool enabled = false;

            if (!bool.TryParse(Request["IsEnable"], out enabled))
            {
                model.IsEnable = null;
            }
            else
            {
                model.IsEnable = enabled;
            }
            DateTime loginTime = DateTime.Now;

            if (!DateTime.TryParse(Request["LoginTime"], out loginTime))
            {
                model.LoginTime = null;
            }
            else
            {
                model.LoginTime = loginTime;
            }
            var             infos = UserManager.GetAdminUsers(model);
            LayuiGridResult ret   = new LayuiGridResult();

            ret.code  = 0;
            ret.count = infos.TotalCount;
            if (infos.Data != null && infos.Data.Count > 0)
            {
                int id = (model.PageIndex - 1) * model.PageSize + 1;
                ret.data = infos.Data.Select(p =>
                {
                    return(new
                    {
                        UserId = p.UserId,
                        RoleId = p.RoleId,
                        RoleName = p.RoleName,
                        RowId = id++,
                        LoginName = p.LoginName,
                        Mobile = p.Mobile,
                        RealName = p.RealName,
                        LoginIp = p.LoginIp,
                        IsEnable = p.IsEnable,
                        IpDisplayName = p.IpDisplayName,
                        LoginTime = p.LoginTime?.ToString("yyyy-MM-dd")
                    });
                });
            }

            return(Json(ret, JsonRequestBehavior.AllowGet));
        }
예제 #2
0
        public PaginationResult <UserSearchListDto> GetAdminUsers(UserSearchAdditionDto addition)
        {
            PaginationResult <UserSearchListDto> result = new PaginationResult <UserSearchListDto>();

            using (ApplicationDbContext ctx = new ApplicationDbContext())
            {
                var roleQuery = from r in ctx.Roles
                                join ur in ctx.UserRoles on r.Id equals ur.RoleId
                                where (string.IsNullOrEmpty(addition.RoleId) || r.Id == addition.RoleId)
                                select new
                {
                    r.Name,
                    r.Id,
                    UserId = ur == null ? "" : ur.UserId
                };

                var query = from u in ctx.Users
                            join r in roleQuery on u.Id equals r.UserId
                            where (addition.IsEnable.HasValue == false || u.IsEnable == addition.IsEnable)
                            select new UserRoleDto
                {
                    Id           = u.Id,
                    Name         = u.Name,
                    PhoneNumber  = u.PhoneNumber,
                    UserName     = u.UserName,
                    IsEnable     = u.IsEnable,
                    CreationDate = u.CreationDate,
                    RoleName     = r == null ? string.Empty : r.Name,
                    RoleId       = r == null ? string.Empty : r.Id
                };

                var loginQuery = ctx.LoginHistory.Where(p => query.Select(uid => uid.Id)
                                                        .Contains(p.UserId))
                                 .GroupBy(p => p.UserId)
                                 .Select(p => p.Max(m => m.Id));

                var searchQuery = from u in query
                                  join uls in ctx.LoginHistory.Where(p => loginQuery.Contains(p.Id)) on u.Id equals uls.UserId
                                  into loginHistory
                                  from ul in loginHistory.DefaultIfEmpty()
                                  where (string.IsNullOrEmpty(addition.LoginIp) || (ul != null && ul.Ip == addition.LoginIp)) &&
                                  (string.IsNullOrEmpty(addition.Mobile) || u.PhoneNumber == addition.Mobile) &&
                                  (string.IsNullOrEmpty(addition.RealName) || u.Name.Contains(addition.RealName))
                                  select new UserSearchListDto
                {
                    UserId        = u.Id,
                    DisplayName   = u.UserName,
                    IpDisplayName = ul == null ? "" : ul.IpArea,
                    LoginIp       = ul == null ? "" : ul.Ip,
                    IsEnable      = u.IsEnable,
                    LoginTime     = ul == null ? DateTime.Now : ul.LoginTime,
                    Mobile        = u.PhoneNumber,
                    RealName      = u.Name,
                    RoleName      = u.RoleName,
                    LoginName     = u.UserName,
                    CreationDate  = u.CreationDate
                };

                result.TotalCount = searchQuery.Count();
                result.Data       = searchQuery.OrderByDescending(p => p.CreationDate).Skip((addition.PageIndex - 1) * addition.PageSize)
                                    .Take(addition.PageSize).ToList();
            };
            return(result);
        }