From d644f492cea0856f1f3410d77d4545c6f615c651 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 07 八月 2025 17:01:56 +0800
Subject: [PATCH] pref:深度优化

---
 FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs |   70 ++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs b/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
index aedfaf2..cf854d1 100644
--- a/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
+++ b/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
@@ -1,5 +1,6 @@
 锘縰sing FlexJobApi.Core;
 using Furion.DatabaseAccessor;
+using Furion.FriendlyException;
 using Mapster;
 using MediatR;
 using Microsoft.EntityFrameworkCore;
@@ -16,7 +17,8 @@
     /// </summary>
     public class DictionaryDatasQueryHandler(
             IRepository<DictionaryData> rep
-        ) : IRequestHandler<GetDictionaryDatasQuery, PagedListQueryResult<GetDictionaryDatasQueryResultItem>>
+        ) : IRequestHandler<GetDictionaryDatasQuery, PagedListQueryResult<GetDictionaryDatasQueryResultItem>>,
+            IRequestHandler<GetDictionaryDataSelectQuery, List<SelectOption<Guid, GetDictionaryDataSelectQueryResultOption>>>
     {
         private readonly IRepository<DictionaryData> rep = rep;
 
@@ -28,13 +30,25 @@
         /// <returns></returns>
         public Task<PagedListQueryResult<GetDictionaryDatasQueryResultItem>> Handle(GetDictionaryDatasQuery request, CancellationToken cancellationToken)
         {
-            return request.PageModel.ToPagedListAsync<DictionaryData, GetDictionaryDatasQueryResultItem>(
+            return request.PageModel.GetPagedListAsync<DictionaryData, GetDictionaryDatasQueryResultItem>(
                 q =>
                 {
                     q = q.OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime);
                     if (request.CategoryId.HasValue)
                     {
                         q = q.Where(it => it.CategoryId == request.CategoryId);
+                    }
+                    else if (request.CategoryCode.IsNotNull())
+                    {
+                        q = q.Where(it => it.Category.Code == request.CategoryCode);
+                    }
+                    else
+                    {
+                        throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欑被鍒獻d鎴栫紪鍙�");
+                    }
+                    if (request.ParentId.HasValue)
+                    {
+                        q = q.Where(it => it.ParentId == request.ParentId);
                     }
                     if (request.Keywords.IsNotNull())
                     {
@@ -50,5 +64,57 @@
                     return q;
                 }, cancellationToken: cancellationToken);
         }
+
+        /// <summary>
+        /// 鏌ヨ鏁版嵁瀛楀吀閫夋嫨鍣�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public Task<List<SelectOption<Guid, GetDictionaryDataSelectQueryResultOption>>> Handle(GetDictionaryDataSelectQuery request, CancellationToken cancellationToken)
+        {
+            return request.GetSelect<DictionaryData, Guid, GetDictionaryDataSelectQueryResultOption>(
+                it => it.Id,
+                it => it.Content,
+                q =>
+                {
+                    q = q
+                        .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime)
+                        .Where(it => !it.IsDisabled);
+                    if (!request.All)
+                    {
+                        q = q.Where(it => it.ParentId == request.ParentId);
+                    }
+                    if (request.MaxDeep.HasValue)
+                    {
+                        q = q.Where(it => it.Deep <= request.MaxDeep);
+                    }
+                    if (request.Keywords.IsNotNull())
+                    {
+                        q = q.Where(it =>
+                            it.Code.Contains(request.Keywords)
+                            || it.Content.Contains(request.Keywords)
+                            || it.Field1.Contains(request.Keywords)
+                            || it.Field2.Contains(request.Keywords)
+                            || it.Field3.Contains(request.Keywords)
+                            || it.Field4.Contains(request.Keywords)
+                            || it.Field5.Contains(request.Keywords));
+                    }
+                    if (request.CategoryId.HasValue)
+                    {
+                        q = q.Where(it => it.CategoryId == request.CategoryId);
+                    }
+                    else if (request.CategoryCode.IsNotNull())
+                    {
+                        q = q.Where(it => it.Category.Code == request.CategoryCode);
+                    }
+                    else
+                    {
+                        throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欑被鍒獻d鎴栫紪鍙�");
+                    }
+                    return q;
+                },
+                cancellationToken);
+        }
     }
 }

--
Gitblit v1.9.1