using FlexJobApi.Core; using Furion.DatabaseAccessor; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.User.Application { /// /// 获取运营端用户分页列表 /// public class GetOperationUserInfosQueryHandler( IRepository repUser, IRepository repUserInfoRole ) : IRequestHandler> { private readonly IRepository repUser = repUser; private readonly IRepository repUserInfoRole = repUserInfoRole; /// public async Task> Handle(GetOperationUserInfosQuery request, CancellationToken cancellationToken) { var result = await request.PageModel.GetPagedListAsync( q => { q = q.OrderByDescending(it => it.Level).ThenByDescending(it => it.CreatedTime) .Where(it => it.Type == EnumUserType.Operation); if (request.Keywords.IsNotNull()) { q = q.Where(it => it.UserAuth.Name.Contains(request.Keywords) || it.UserAuth.UserName.Contains(request.Keywords) || it.UserAuth.PhoneNumber.Contains(request.Keywords) || it.Remark.Contains(request.Keywords)); } return q; }, it => new GetOperationUserInfosQueryResultItem { Id = it.Id, Name = it.UserAuth.Name, UserName = it.UserAuth.UserName, PhoneNumber = it.UserAuth.PhoneNumber, Remark = it.Remark }, cancellationToken); if (result.Data.Any()) { var ids = result.Data.DistinctSelect(it => it.Id); var userRoles = await repUserInfoRole.AsQueryable().AsNoTracking() .Include(it => it.Role) .Where(it => ids.Contains(it.UserInfoId)) .Select(it => new GetOperationUserInfosQueryResultItemRole { UserInfoId = it.UserInfoId, Id = it.RoleId, Name = it.Role.Name }) .ToListAsync(cancellationToken); foreach (var item in result.Data) { item.Roles = userRoles.Where(it => it.UserInfoId == item.Id).ToList(); } } return result; } } }