From 5a5a0ed1fa93a83537eb36e69fac5a14994dc103 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 05 八月 2025 17:00:30 +0800 Subject: [PATCH] pref:搜索 --- FlexJobApi.User.Application/Roles/Queries/GetRolesQueryHandler.cs | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 56 insertions(+), 2 deletions(-) diff --git a/FlexJobApi.User.Application/Roles/Queries/GetRolesQueryHandler.cs b/FlexJobApi.User.Application/Roles/Queries/GetRolesQueryHandler.cs index 8863b66..895ddf3 100644 --- a/FlexJobApi.User.Application/Roles/Queries/GetRolesQueryHandler.cs +++ b/FlexJobApi.User.Application/Roles/Queries/GetRolesQueryHandler.cs @@ -1,4 +1,9 @@ -锘縰sing System; +锘縰sing FlexJobApi.Core; +using Furion.DatabaseAccessor; +using Mapster; +using MediatR; +using Microsoft.EntityFrameworkCore; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,7 +11,56 @@ namespace FlexJobApi.User.Application { - public class GetRolesQueryHandler + /// <summary> + /// 鏌ヨ瑙掕壊鍒嗛〉鍒楄〃 + /// </summary> + /// <param name="repRole"></param> + public class GetRolesQueryHandler( + IRepository<Role> repRole, + IRepository<UserInfoRole> repUserInfoRole + ) : IRequestHandler<GetRolesQuery, PagedListQueryResult<GetRolesQueryResultItem>> { + private readonly IRepository<Role> repRole = repRole; + private readonly IRepository<UserInfoRole> repUserInfoRole = repUserInfoRole; + + /// <inheritdoc/> + public async Task<PagedListQueryResult<GetRolesQueryResultItem>> Handle(GetRolesQuery request, CancellationToken cancellationToken) + { + var q = repRole.AsQueryable().AsNoTracking(); + if (request.UserType.HasValue) + { + q = q.Where(it => it.UserType == request.UserType); + } + if (request.ClientType.HasValue) + { + q = q.Where(it => it.ClientType == request.ClientType); + } + if (request.Keywords.IsNotNull()) + { + q = q.Where(it => it.Name.Contains(request.Keywords) || it.Remark.Contains(request.Keywords)); + } + var result = await q + .ProjectToType<GetRolesQueryResultItem>() + .ToPagedListAsync(request.PageModel, cancellationToken); + + if (result.Data.Any()) + { + var ids = result.Data.DistinctSelect(it => it.Id); + var userInfoRoles = await repUserInfoRole.AsQueryable().AsNoTracking() + .Where(it => ids.Contains(it.RoleId)) + .Select(it => new + { + it.UserInfoId, + it.RoleId + }) + .ToListAsync(); + foreach (var item in result.Data) + { + item.UserCount = userInfoRoles.Count(it => it.RoleId == item.Id); + } + } + + return result; + } } } -- Gitblit v1.9.1