using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using MediatR; using Microsoft.Extensions.Logging; using X1.Domain.Entities; using X1.Domain.Repositories.Identity; using X1.Domain.Common; using System.Collections.Generic; namespace X1.Application.Features.Permissions.Queries; /// /// 获取所有权限查询处理器 /// public sealed class GetAllPermissionsQueryHandler : IRequestHandler> { private readonly IPermissionRepository _permissionRepository; private readonly ILogger _logger; /// /// 初始化处理器 /// public GetAllPermissionsQueryHandler( IPermissionRepository permissionRepository, ILogger logger) { _permissionRepository = permissionRepository; _logger = logger; } /// /// 处理获取所有权限查询 /// public async Task> Handle( GetAllPermissionsQuery request, CancellationToken cancellationToken) { try { _logger.LogInformation("开始获取权限列表,页码: {PageNumber}, 页大小: {PageSize}", request.PageNumber, request.PageSize); var permissions = await _permissionRepository.GetAllAsync(); if (!permissions.Any()) { _logger.LogWarning("未找到任何权限"); return OperationResult.CreateSuccess( new GetAllPermissionsResponse( new List(), 0, request.PageNumber, request.PageSize )); } // 应用筛选条件 var filteredPermissions = permissions.AsQueryable(); // 关键词搜索 if (!string.IsNullOrWhiteSpace(request.Keyword)) { filteredPermissions = filteredPermissions.Where(p => p.Name.Contains(request.Keyword) || p.Code.Contains(request.Keyword) || (p.Description != null && p.Description.Contains(request.Keyword)) ); } // 启用状态筛选 if (request.IsEnabled.HasValue) { filteredPermissions = filteredPermissions.Where(p => p.IsEnabled == request.IsEnabled.Value); } // 系统权限筛选 if (request.IsSystem.HasValue) { filteredPermissions = filteredPermissions.Where(p => p.IsSystem == request.IsSystem.Value); } // 获取总数 var totalCount = filteredPermissions.Count(); // 分页 var pagedPermissions = filteredPermissions .Skip((request.PageNumber - 1) * request.PageSize) .Take(request.PageSize) .ToList(); // 转换为DTO var permissionDtos = pagedPermissions.Select(p => new PermissionListItemDto( p.Id, p.Name, p.Code, p.Description, p.IsEnabled, p.IsSystem )).ToList(); var response = new GetAllPermissionsResponse( permissionDtos, totalCount, request.PageNumber, request.PageSize ); _logger.LogInformation("权限列表获取成功,共 {TotalCount} 条记录,当前页 {PageNumber}/{TotalPages}", totalCount, request.PageNumber, response.TotalPages); return OperationResult.CreateSuccess(response); } catch (Exception ex) { _logger.LogError(ex, "获取权限列表时发生错误"); return OperationResult.CreateFailure( new List { "获取权限列表失败" }); } } }