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;
}
}
}