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)); }
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); }