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