From bf5084b9bd44ba20ace6107536cba6955e94ceaf Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 08 八月 2025 16:15:09 +0800 Subject: [PATCH] pref:优化 --- FlexJobApi.Core/Utils/DbUtils/DbUtils.cs | 44 +++++++++++++++------ FlexJobApi.Core/Utils/DbUtils/PagedListQuery.cs | 9 ++++ FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs | 2 FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs | 33 ++++++++++++++++ FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 15 ++++++- 5 files changed, 84 insertions(+), 19 deletions(-) diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs index 49e6fb3..b20ca6f 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs @@ -47,7 +47,7 @@ /// <summary> /// 浼佷笟鍏ㄧО /// </summary> - [JsonProperty("EnterpriseName")] + [JsonProperty("enterpriseName")] public string EnterpriseEnterpriseName { get; set; } /// <summary> diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs index 21c03df..0c3cea9 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs @@ -11,7 +11,7 @@ /// 鏌ヨ浠诲姟鍒嗛〉鍒楄〃 /// </summary> [Resource([EnumResourceController.Task], AllowAnonymous = true)] - public class GetTaskInfosQuery : PagedListQuery<PagedListQueryResult<GetTaskInfosQueryResultItem>, GetTaskInfosQueryResultItem> + public class GetTaskInfosQuery : PagedListQuery<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem> { public GetTaskInfosQuery() { @@ -74,6 +74,37 @@ public EnumTaskRecommendStatus? RecommendStatus { get; set; } } + public class GetTaskInfosQueryResult : PagedListQueryResult<GetTaskInfosQueryResultItem> + { + /// <summary> + /// 缁熻 + /// </summary> + public GetTaskInfosQueryResultCount Count { get; set; } + } + + public class GetTaskInfosQueryResultCount + { + /// <summary> + /// 寰呭畨鎺掓暟閲� + /// </summary> + public int WaitAssignCount { get; set; } + + /// <summary> + /// 宸插畨鎺掓暟閲� + /// </summary> + public int CompletedAssignCount { get; set; } + + /// <summary> + /// 鍙戝竷涓暟閲� + /// </summary> + public int InProcessReleaseCount { get; set; } + + /// <summary> + /// 宸插仠姝㈡暟閲� + /// </summary> + public int StoppedReleaseCount { get; set; } + } + /// <summary> /// 鏌ヨ浠诲姟鍒嗛〉鍒楄〃-缁撴灉-椤� /// </summary> diff --git a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs index 55647c2..2e0f85f 100644 --- a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs +++ b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs @@ -160,6 +160,31 @@ result.Data = pagedList.Items.ToList(); return result; } + /// <summary> + /// 鏌ヨ鍒嗛〉鍒楄〃鏁版嵁 + /// </summary> + /// <typeparam name="TResult"></typeparam> + /// <typeparam name="TItem"></typeparam> + /// <param name="page"></param> + /// <param name="q"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public static async Task<TResult> GetPagedListAsync<TResult, TItem>( + this PagedListQueryPageModel page, + IQueryable<TItem> q, + CancellationToken cancellationToken = default) + where TItem : class, new() + where TResult : PagedListQueryResult<TItem>, new() + { + q = q.CustomOrderBy(page.OrderInput); + var pagedList = await q.ToPagedListAsync(page.Page, page.Rows, cancellationToken); + var result = new TResult(); + result.PageModel = page.Adapt<PagedListQueryResultPageModel>(); + result.PageModel.TotalCount = pagedList.TotalCount; + result.PageModel.TotalPage = pagedList.TotalPages; + result.Data = pagedList.Items.ToList(); + return result; + } /// <summary> /// 鏌ヨ鍒嗛〉鍒楄〃鏁版嵁 @@ -169,34 +194,27 @@ /// <param name="q"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public static async Task<PagedListQueryResult<TItem>> GetPagedListAsync<TItem>( + public static Task<PagedListQueryResult<TItem>> GetPagedListAsync<TItem>( this PagedListQueryPageModel page, IQueryable<TItem> q, CancellationToken cancellationToken = default) where TItem : class, new() { - q = q.CustomOrderBy(page.OrderInput); - var pagedList = await q.ToPagedListAsync(page.Page, page.Rows, cancellationToken); - var result = new PagedListQueryResult<TItem>(); - result.PageModel = page.Adapt<PagedListQueryResultPageModel>(); - result.PageModel.TotalCount = pagedList.TotalCount; - result.PageModel.TotalPage = pagedList.TotalPages; - result.Data = pagedList.Items.ToList(); - return result; + return GetPagedListAsync<PagedListQueryResult<TItem>, TItem>(page, q, cancellationToken); } public static IOrderedQueryable<T> CustomOrderBy<T>(this IQueryable<T> q, List<PagedListQueryPageModelOrderInput> orders) { ParameterExpression parameter = Expression.Parameter(typeof(T), "p"); PagedListQueryPageModelOrderInput orderInput = orders[0]; - IOrderedQueryable<T> orderedQueryable = (orderInput.Order == EnumPagedListOrder.Asc) - ? OrderBy(q, orderInput.Property, parameter) + IOrderedQueryable<T> orderedQueryable = (orderInput.Order == EnumPagedListOrder.Asc) + ? OrderBy(q, orderInput.Property, parameter) : OrderByDescending(q, orderInput.Property, parameter); for (int i = 1; i < orders.Count; i++) { PagedListQueryPageModelOrderInput orderInput2 = orders[i]; - orderedQueryable = (orderInput2.Order == EnumPagedListOrder.Asc) - ? ThenBy(orderedQueryable, orderInput2.Property, parameter) + orderedQueryable = (orderInput2.Order == EnumPagedListOrder.Asc) + ? ThenBy(orderedQueryable, orderInput2.Property, parameter) : ThenByDescending(orderedQueryable, orderInput2.Property, parameter); } diff --git a/FlexJobApi.Core/Utils/DbUtils/PagedListQuery.cs b/FlexJobApi.Core/Utils/DbUtils/PagedListQuery.cs index f2c1b66..afa018a 100644 --- a/FlexJobApi.Core/Utils/DbUtils/PagedListQuery.cs +++ b/FlexJobApi.Core/Utils/DbUtils/PagedListQuery.cs @@ -71,11 +71,18 @@ public EnumPagedListOrder Order { get; set; } } + public interface IPagedListQueryResult<TItem> + where TItem : class, new() + { + PagedListQueryResultPageModel PageModel { get; set; } + List<TItem> Data { get; set; } + } + /// <summary> /// 鏌ヨ鍒嗛〉鍒楄〃-缁撴灉 /// </summary> /// <typeparam name="TItem"></typeparam> - public class PagedListQueryResult<TItem> + public class PagedListQueryResult<TItem> : IPagedListQueryResult<TItem> where TItem : class, new() { public PagedListQueryResult() diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index b925ea7..de719a8 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -20,7 +20,7 @@ IRepository<DictionaryData> repDictionaryData ) : IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>, - IRequestHandler<GetTaskInfosQuery, PagedListQueryResult<GetTaskInfosQueryResultItem>> + IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult> { private readonly IRepository<TaskInfo> rep = rep; @@ -50,7 +50,7 @@ /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public Task<PagedListQueryResult<GetTaskInfosQueryResultItem>> Handle(GetTaskInfosQuery request, CancellationToken cancellationToken) + public async Task<GetTaskInfosQueryResult> Handle(GetTaskInfosQuery request, CancellationToken cancellationToken) { var q = TaskInfoRepository.GetQueryable(rep); if (request.Keywords.IsNotNull()) @@ -81,6 +81,15 @@ { q = q.Where(it => it.GenderLimit == request.GenderLimit); } + + var count = new GetTaskInfosQueryResultCount + { + WaitAssignCount = await q.CountAsync(it => it.Status == EnumTaskStatus.Wait), + CompletedAssignCount = await q.CountAsync(it => it.Status == EnumTaskStatus.Complete), + InProcessReleaseCount = await q.CountAsync(it => it.ReleaseStatus == EnumTaskReleaseStatus.InProcess), + StoppedReleaseCount = await q.CountAsync(it => it.ReleaseStatus == EnumTaskReleaseStatus.Stopped), + }; + if (request.Status.HasValue) { q = q.Where(it => it.Status == request.Status); @@ -131,7 +140,7 @@ RecommendStatus = t.RecommendStatus, SettlementStatus = t.SettlementStatus }; - return request.PageModel.GetPagedListAsync(s, cancellationToken); + var result = await request.PageModel.GetPagedListAsync<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem>(s, cancellationToken); } } } -- Gitblit v1.9.1