Example #1
0
        public async Task <PageModelDto <UserDto> > GetPaged(UserSearchDto searchDto)
        {
            Expression <Func <SysUser, bool> > whereCondition = x => true;

            if (searchDto.Account.IsNotNullOrWhiteSpace())
            {
                whereCondition = whereCondition.And(x => x.Account.Contains(searchDto.Account));
            }

            if (searchDto.Name.IsNotNullOrWhiteSpace())
            {
                whereCondition = whereCondition.And(x => x.Name.Contains(searchDto.Name));
            }

            var pagedModel = await _userRepository.PagedAsync(searchDto.PageIndex, searchDto.PageSize, whereCondition, x => x.ID, false);

            var result = _mapper.Map <PageModelDto <UserDto> >(pagedModel);

            result.XData = await _deptAppService.GetSimpleList();

            if (result.Count > 0)
            {
                var deptIds = result.Data.Where(d => d.DeptId != null).Select(d => d.DeptId).Distinct().ToList();
                //var depts = await _deptRepository.SelectAsync(d => new { d.ID, d.FullName }, x => deptIds.Contains(x.ID));
                var depts = (await _deptAppService.GetAllFromCache())
                            .Where(x => deptIds.Contains(x.ID))
                            .Select(d => new { d.ID, d.FullName });
                //var roles = await _roleRepository.SelectAsync(r => new { r.ID, r.Name }, x => true);
                var roles = (await _roleAppService.GetAllFromCache())
                            .Select(r => new { r.ID, r.Name });

                foreach (var user in result.Data)
                {
                    user.DeptName = depts.FirstOrDefault(x => x.ID == user.DeptId)?.FullName;
                    var roleIds = string.IsNullOrWhiteSpace(user.RoleId)
                        ? new List <long>()
                        : user.RoleId.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(x => long.Parse(x))
                    ;
                    user.RoleName = string.Join(',', roles.Where(x => roleIds.Contains(x.ID)).Select(x => x.Name));
                }
            }

            return(result);
        }