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.UserServer.Application { /// /// 获取运营端用户分页列表 /// public class GetOperationUserInfosQueryHandler( IRepository repUser, IRepository repUserRole ) : IRequestHandler> { private readonly IRepository repUser = repUser; private readonly IRepository repUserRole = repUserRole; /// 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 && it.Level != 999); if (request.Keywords.IsNotNull()) { q = q.Where(it => it.Name.Contains(request.Keywords) || it.UserName.Contains(request.Keywords) || it.PhoneNumber.Contains(request.Keywords) || it.Remark.Contains(request.Keywords)); } return q; }, null, cancellationToken); if (result.Data.Any()) { var ids = result.Data.DistinctSelect(it => it.Id); var userRoles = await repUserRole.AsQueryable().AsNoTracking() .Include(it => it.Role) .Where(it => ids.Contains(it.UserId)) .Select(it => new GetOperationUserInfosQueryResultItemRole { UserId = it.UserId, Id = it.RoleId, Name = it.Role.Name }) .ToListAsync(cancellationToken); foreach (var item in result.Data) { item.Roles = userRoles.Where(it => it.UserId == item.Id).ToList(); } } return result; } } }