sunpengfei
2025-08-08 32288af3e5f12bc48d8360114c872fde5d9ff4a8
FlexJobApi.UserServer.Application/Roles/Queries/GetRoleUserInfosQueryHandler.cs
File was renamed from FlexJobApi.User.Application/Roles/Queries/GetRoleUserInfosQueryHandler.cs
@@ -1,6 +1,7 @@
using FlexJobApi.Core;
using Furion.DatabaseAccessor;
using Furion.FriendlyException;
using Mapster;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System;
@@ -9,20 +10,20 @@
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.User.Application
namespace FlexJobApi.UserServer.Application
{
    /// <summary>
    /// 查询角色用户列表
    /// </summary>
    public class GetRoleUserInfosQueryHandler(
            IRepository<Role> repRole,
            IRepository<UserInfo> repUserInfo,
            IRepository<UserInfoRole> repUserInfoRole
            IRepository<User> repUser,
            IRepository<UserRole> repUserRole
        ) : IRequestHandler<GetRoleUserInfosQuery, List<GetRoleUserInfosQueryResultItem>>
    {
        private readonly IRepository<Role> repRole = repRole;
        private readonly IRepository<UserInfo> repUserInfo = repUserInfo;
        private readonly IRepository<UserInfoRole> repUserInfoRole = repUserInfoRole;
        private readonly IRepository<User> repUser = repUser;
        private readonly IRepository<UserRole> repUserRole = repUserRole;
        /// <inheritdoc/>
        public async Task<List<GetRoleUserInfosQueryResultItem>> Handle(GetRoleUserInfosQuery request, CancellationToken cancellationToken)
@@ -35,23 +36,17 @@
                })
                .FirstOrDefaultAsync(cancellationToken);
            if (role == null) throw Oops.Oh(EnumErrorCodeType.s404, "该角色");
            var userInfoIds = await repUserInfoRole.AsQueryable().AsNoTracking()
            var userIds = await repUserRole.AsQueryable().AsNoTracking()
                .Where(it => it.RoleId == request.RoleId)
                .Select(it => it.UserInfoId)
                .Select(it => it.UserId)
                .ToListAsync(cancellationToken);
            var userInfos = await repUserInfo.AsQueryable().AsNoTracking()
                .Include(it => it.UserAuth)
            var userInfos = await repUser.AsQueryable().AsNoTracking()
                .Where(it => it.Type == role.UserType)
                .Select(it => new GetRoleUserInfosQueryResultItem
                {
                    Id = it.Id,
                    Name = it.UserAuth.Name,
                    UserName = it.UserAuth.UserName,
                })
                .ProjectToType<GetRoleUserInfosQueryResultItem>()
                .ToListAsync(cancellationToken);
            foreach (var userInfo in userInfos)
            {
                userInfo.IsChecked = userInfoIds.Contains(userInfo.Id);
                userInfo.IsChecked = userIds.Contains(userInfo.Id);
            }
            return userInfos;
        }