Пример #1
0
        public async Task <PaginationOutput <UserDto> > GetListAsync(QueryUserInput input)
        {
            var query = from a in _context.Users
                        select new UserDto()
            {
                Id                   = a.Id,
                UserName             = a.UserName,
                Name                 = a.Name,
                Surname              = a.Surname,
                Email                = a.Email,
                EmailConfirmed       = a.EmailConfirmed,
                PhoneNumber          = a.PhoneNumber,
                PhoneNumberConfirmed = a.PhoneNumberConfirmed,
                Photo                = a.Photo,
                Active               = a.Confirmed,
                CreationTime         = a.CreationTime,
                Protected            = a.Protected
            };

            if (!string.IsNullOrEmpty(input.Keyword))
            {
                query = query.Where(w => w.Name.Contains(input.Keyword) || w.Surname.Contains(input.Keyword) || w.UserName.Contains(input.Keyword));
            }

            var totalCount = await query.CountAsync(CancellationToken);

            var totalSize = (int)Math.Ceiling(totalCount / (decimal)input.PageSize);
            var users     = await query.OrderByDescending(o => o.CreationTime)
                            .Skip((input.PageIndex - 1) * input.PageSize)
                            .Take(input.PageSize)
                            .ToListAsync(CancellationToken);

            return(new PaginationOutput <UserDto>(totalSize, users));
        }
Пример #2
0
        public async Task <IPagedResult <GetUserOutput> > Query(QueryUserInput query)
        {
            var userList = await _userRepository.GetAllAsync(p => p.UserName.Contains(query.UserName) && p.ChineseName.Contains(query.ChineseName) &&
                                                             p.Email.Contains(query.Email) && p.Phone.Contains(query.Phone));

            return(userList.MapTo <IEnumerable <GetUserOutput> >().PageBy(query));
        }
Пример #3
0
 public async Task <IPagedResult <GetUserNormOutput> > Search(QueryUserInput query)
 {
     if (!query.Sorting.IsNullOrEmpty() && !AuthConstant.UserSortingFileds.Any(p => p == query.Sorting))
     {
         throw new BusinessException("指定的排序字段无效");
     }
     return(await _userDomainService.Search(query));
 }
Пример #4
0
        public async Task <string> GetUserName(QueryUserInput input)
        {
            var id = await GetService <IServiceProxyProvider>().Invoke <string>(new Dictionary <string, object>()
            {
                { "id", Guid.NewGuid().ToString() },
            }, "v1/api/debug/demo/getuserid");

            return(input.UserId + Guid.NewGuid() + id);
        }
Пример #5
0
        public async Task <IPagedResult <GetUserNormOutput> > Query(QueryUserInput query)
        {
            Expression <Func <UserInfo, bool> > expression = p => p.UserName.Contains(query.SearchKey) ||
                                                             p.ChineseName.Contains(query.SearchKey) ||
                                                             p.Email.Contains(query.SearchKey) ||
                                                             p.Phone.Contains(query.SearchKey);



            if (query.Status.HasValue)
            {
                expression = expression.And(p => p.Status == query.Status.Value);
            }
            var queryResult = await _userRepository.GetAllAsync(expression);

            if (query.OrgId.HasValue && query.OrgId != 0)
            {
                var subOrgIds = await GetService <IOrganizationAppService>().GetSubOrgIds(query.OrgId.Value);

                queryResult = queryResult.Where(p => subOrgIds.Any(q => q == p.OrgId));
            }

            var queryResultOutput = queryResult.MapTo <IEnumerable <GetUserNormOutput> >().GetPagedResult(queryResult.Count());

            foreach (var userOutput in queryResultOutput.Items)
            {
                if (userOutput.OrgId.HasValue)
                {
                    userOutput.DeptName = (await GetService <IDepartmentAppService>().GetByOrgId(userOutput.OrgId.Value)).Name;
                }
                if (userOutput.PositionId.HasValue)
                {
                    userOutput.PositionName = (await GetService <IPositionAppService>().Get(userOutput.PositionId.Value)).Name;
                }
                userOutput.Roles = (await _userDomainService.GetUserRoles(userOutput.Id)).MapTo <IEnumerable <GetDisplayRoleOutput> >();
                if (userOutput.LastModifierUserId.HasValue)
                {
                    var modifyUserInfo = (await _userRepository.SingleOrDefaultAsync(p => p.Id == userOutput.LastModifierUserId.Value));
                    userOutput.LastModificationUserName = modifyUserInfo.ChineseName;
                }
            }

            return(queryResultOutput);
        }
Пример #6
0
        public async Task <IPagedResult <GetUserNormOutput> > Query(QueryUserInput query)
        {
            IPagedResult <GetUserNormOutput> queryResultOutput = null;

            if (!query.OrgId.HasValue || query.OrgId == 0)
            {
                var queryPageResult = await _userRepository.GetPageAsync(p => p.UserName.Contains(query.SearchKey) ||
                                                                         p.ChineseName.Contains(query.SearchKey) ||
                                                                         p.Email.Contains(query.SearchKey) ||
                                                                         p.Phone.Contains(query.SearchKey), query.PageIndex, query.PageCount);

                queryResultOutput = queryPageResult.Item1.WhereIf(query.Status.HasValue, p => p.Status == query.Status.Value).MapTo <IEnumerable <GetUserNormOutput> >().GetPagedResult(queryPageResult.Item2);
            }
            else
            {
                var subOrgIds = await GetService <IOrganizationAppService>().GetSubOrgIds(query.OrgId.Value);

                // :todo 优化
                var queryResult = await _userRepository.GetAllAsync(p => p.UserName.Contains(query.SearchKey) ||
                                                                    p.ChineseName.Contains(query.SearchKey) ||
                                                                    p.Email.Contains(query.SearchKey) ||
                                                                    p.Phone.Contains(query.SearchKey));

                queryResult       = queryResult.Where(p => subOrgIds.Any(q => q == p.OrgId)).WhereIf(query.Status.HasValue, p => p.Status == query.Status.Value);
                queryResultOutput = queryResult.MapTo <IEnumerable <GetUserNormOutput> >().PageBy(query);
            }
            foreach (var userOutput in queryResultOutput.Items)
            {
                if (userOutput.OrgId.HasValue)
                {
                    userOutput.DeptName = (await GetService <IDepartmentAppService>().GetByOrgId(userOutput.OrgId.Value)).Name;
                }
                if (userOutput.PositionId.HasValue)
                {
                    userOutput.PositionName = (await GetService <IPositionAppService>().Get(userOutput.PositionId.Value)).Name;
                }
                userOutput.Roles = (await _userDomainService.GetUserRoles(userOutput.Id)).MapTo <IEnumerable <GetDisplayRoleOutput> >();
            }

            return(queryResultOutput);
        }
Пример #7
0
        public async Task <IPagedResult <GetUserNormOutput> > Search(QueryUserInput query)
        {
            var querySql =
                @"SELECT u.*,u.CreateBy as CreatorUserId, u.CreateTime as CreationTime, u.UpdateBy as LastModifierUserId, u.UpdateTime as LastModificationTime FROM  UserInfo as u 
                WHERE 1=1 ";

            var sqlParams = new Dictionary <string, object>();

            if (query.OrgId.HasValue && query.OrgId.Value != 0)
            {
                var subOrgIds = await GetService <IOrganizationAppService>().GetSubOrgIds(query.OrgId.Value);

                querySql += " AND u.OrgId in @DataPermissionOrgIds";
                sqlParams.Add("DataPermissionOrgIds", subOrgIds);
            }

            if (query.UserGroupId.HasValue && query.UserGroupId.Value > 0)
            {
                var userGroup = await _userGroupRepository.SingleOrDefaultAsync(p => p.Id == query.UserGroupId);

                if (userGroup == null)
                {
                    throw new BusinessException($"不存在IUserGroupId为{query.UserGroupId}的用户组");
                }

                if (!userGroup.IsAllOrg)
                {
                    var userGroupOrgIds =
                        (await _userGroupOrganizationDapperRepository.GetAllAsync(p =>
                                                                                  p.UserGroupId == query.UserGroupId))
                        .Select(p => p.OrgId);

                    if (sqlParams.ContainsKey("DataPermissionOrgIds"))
                    {
                        sqlParams["DataPermissionOrgIds"] = userGroupOrgIds;
                    }
                    else
                    {
                        querySql += " AND u.OrgId in @DataPermissionOrgIds";
                        sqlParams.Add("DataPermissionOrgIds", userGroupOrgIds);
                    }
                }
            }

            if (query.Status.HasValue)
            {
                querySql += " AND u.Status=@Status";
                sqlParams.Add("Status", query.Status.Value);
            }

            if (query.PositionId.HasValue && query.PositionId.Value != 0)
            {
                querySql += " AND u.PositionId=@PositionId";
                sqlParams.Add("PositionId", query.PositionId.Value);
            }

            if (!query.SearchKey.IsNullOrEmpty())
            {
                querySql +=
                    " AND (u.UserName like @UserName or u.ChineseName like @ChineseName or u.Phone like @Phone or u.Email like @Email)";
                sqlParams.Add("UserName", $"%{query.SearchKey}%");
                sqlParams.Add("ChineseName", $"%{query.SearchKey}%");
                sqlParams.Add("Phone", $"%{query.SearchKey}%");
                sqlParams.Add("Email", $"%{query.SearchKey}%");
            }

            if (query.UserIds != null && query.UserIds.Ids != null && query.UserIds.Ids.Any())
            {
                var includeKey = query.UserIds.Include ? " in " : "not in ";
                querySql += $" AND u.Id {includeKey} @UserId";
                sqlParams.Add("UserId", query.UserIds.Ids);
            }

            await using var conn = Connection;
            var sortTypes = new Dictionary <string, SortType>();

            if (!query.Sorting.IsNullOrEmpty())
            {
                sortTypes.Add($"u.{query.Sorting}", query.SortType);
            }
            else
            {
                sortTypes.Add($"u.Id", SortType.Desc);
            }

            var queryResult = await conn.QueryDataPermissionPageAsync <UserInfo>(querySql, sqlParams, query.PageIndex,
                                                                                 query.PageCount, sortTypes : sortTypes, "u.OrgId", deleteField : "u.IsDeleted");

            var queryResultOutput = queryResult.Item1.MapTo <IEnumerable <GetUserNormOutput> >()
                                    .GetPagedResult((int)queryResult.Item2);

            foreach (var userOutput in queryResultOutput.Items)
            {
                if (userOutput.OrgId.HasValue)
                {
                    var department = await GetService <IDepartmentAppService>().GetByOrgId(userOutput.OrgId.Value);

                    userOutput.DeptId   = department.Id;
                    userOutput.DeptName = department.Name;
                }

                if (userOutput.PositionId.HasValue)
                {
                    userOutput.PositionName =
                        (await GetService <IPositionAppService>().Get(userOutput.PositionId.Value)).Name;
                }
                userOutput.Roles      = (await GetUserRoles(userOutput.Id)).MapTo <IEnumerable <GetDisplayRoleOutput> >();
                userOutput.UserGroups =
                    (await GetUserGroups(userOutput.Id)).MapTo <IEnumerable <GetDisplayUserGroupOutput> >();
                await userOutput.SetAuditInfo();
            }

            return(queryResultOutput);
        }
Пример #8
0
        public async Task <IActionResult> List(QueryUserInput input)
        {
            var output = await _userQuerier.GetListAsync(input);

            return(View(new PaginationModel <UserDto>(output, input)));
        }