From 1d2953530fc3019ffc2bbe71f4de2ab7820fe528 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期一, 11 八月 2025 17:26:31 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs                             |    2 
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs                                 |    2 
 FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs             |  134 +++++++++++
 FlexJobApi.Core/Enums/Users/EnumUserRealMethod.cs                                        |    2 
 FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalLoginInfoQuery.cs             |    3 
 FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs               |    6 
 FlexJobApi.Core/Entities/UserServer/Users/User.cs                                        |    9 
 FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml              |   15 +
 FlexJobApi.CommonServer.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs  |   52 ++++
 FlexJobApi.Core/Utils/DbUtils/SelectQuery.cs                                             |    2 
 FlexJobApi.Core/FlexJobApi.Core.xml                                                      |  264 ++++++++++++++++++++-
 FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs |   25 ++
 FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetAreaSelectQuery.cs           |  115 +++++++++
 FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml                  |    8 
 FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs          |   61 +++++
 15 files changed, 663 insertions(+), 37 deletions(-)

diff --git a/FlexJobApi.CommonServer.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs b/FlexJobApi.CommonServer.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
index 1d96d5b..5443518 100644
--- a/FlexJobApi.CommonServer.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
+++ b/FlexJobApi.CommonServer.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
@@ -18,7 +18,8 @@
     public class DictionaryDatasQueryHandler(
             IRepository<DictionaryData> rep
         ) : IRequestHandler<GetDictionaryDatasQuery, PagedListQueryResult<GetDictionaryDatasQueryResultItem>>,
-            IRequestHandler<GetDictionaryDataSelectQuery, List<SelectOption<string, GetDictionaryDataSelectQueryResultOption>>>
+            IRequestHandler<GetDictionaryDataSelectQuery, List<SelectOption<string, GetDictionaryDataSelectQueryResultOption>>>,
+            IRequestHandler<GetAreaSelectQuery, List<GetAreaSelectQueryResultOption>>
     {
         private readonly IRepository<DictionaryData> rep = rep;
 
@@ -71,15 +72,15 @@
         /// <param name="request"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
-        public Task<List<SelectOption<string, GetDictionaryDataSelectQueryResultOption>>> Handle(GetDictionaryDataSelectQuery request, CancellationToken cancellationToken)
+        public async Task<List<SelectOption<string, GetDictionaryDataSelectQueryResultOption>>> Handle(GetDictionaryDataSelectQuery request, CancellationToken cancellationToken)
         {
-            return request.GetSelect<DictionaryData, string, GetDictionaryDataSelectQueryResultOption>(
+            var models = await request.GetSelect<DictionaryData, string, GetDictionaryDataSelectQueryResultOption>(
                 it => it.Code,
                 it => it.Content,
                 q =>
                 {
                     q = q
-                        .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime)
+                        .OrderBy(it => it.Sort)
                         .Where(it => !it.IsDisabled);
                     if (request.All != true)
                     {
@@ -115,6 +116,49 @@
                     return q;
                 },
                 cancellationToken);
+            if (request.WithChildren)
+            {
+                var parents = models.Where(it => it.Data.ParentId == null).ToList();
+                LoopChildrens(parents, models);
+                return parents;
+            }
+            return models;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鍦板尯閫夋嫨鍣�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<List<GetAreaSelectQueryResultOption>> Handle(GetAreaSelectQuery request, CancellationToken cancellationToken)
+        {
+            var models = await Handle(new GetDictionaryDataSelectQuery
+            {
+                CategoryCode = "70",
+                All = true,
+                MaxDeep = request.MaxDeep,
+                WithChildren = true
+            }, cancellationToken);
+            var result = models.Adapt<List<GetAreaSelectQueryResultOption>>();
+            return result;
+        }
+
+        /// <summary>
+        /// 閫掑綊璧嬪�间笅绾�
+        /// </summary>
+        /// <param name="models"></param>
+        /// <param name="all"></param>
+        private void LoopChildrens(List<SelectOption<string, GetDictionaryDataSelectQueryResultOption>> models, List<SelectOption<string, GetDictionaryDataSelectQueryResultOption>> all)
+        {
+            foreach (var item in models)
+            {
+                item.Data.Children = all.Where(it => it.Data.ParentId == item.Data.Id).ToList();
+                if (item.Data.Children.IsNotNull())
+                {
+                    LoopChildrens(item.Data.Children, all);
+                }
+            }
         }
     }
 }
diff --git a/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml b/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
index 1db7ce4..b0f27ae 100644
--- a/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
+++ b/FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
@@ -126,6 +126,21 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="M:FlexJobApi.CommonServer.Application.DictionaryDatasQueryHandler.Handle(FlexJobApi.Core.GetAreaSelectQuery,System.Threading.CancellationToken)">
+            <summary>
+            鏌ヨ鍦板尯閫夋嫨鍣�
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.CommonServer.Application.DictionaryDatasQueryHandler.LoopChildrens(System.Collections.Generic.List{FlexJobApi.Core.SelectOption{System.String,FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption}},System.Collections.Generic.List{FlexJobApi.Core.SelectOption{System.String,FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption}})">
+            <summary>
+            閫掑綊璧嬪�间笅绾�
+            </summary>
+            <param name="models"></param>
+            <param name="all"></param>
+        </member>
         <member name="T:FlexJobApi.CommonServer.Application.ScheduleJobDetailCommandHandler">
             <summary>
             浠诲姟璋冨害-浣滀笟
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
index 47a7b5c..ea47cf7 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
@@ -163,7 +163,7 @@
         /// <summary>
         /// 鐢ㄦ埛
         /// </summary>
-        public List<TaskInfoUser> Users { get; set; }
+        public List<TaskInfoUser> TaskInfoUsers { get; set; }
 
         public void Configure(EntityTypeBuilder<TaskInfo> entityBuilder, DbContext dbContext, Type dbContextLocator)
         {
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
index b09201f..089aebb 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
@@ -7,7 +7,7 @@
 namespace FlexJobApi.Core
 {
     /// <summary>
-    /// 浠诲姟鐢ㄦ埛淇℃伅
+    /// 浠诲姟闆囦剑淇℃伅
     /// </summary>
     public class TaskInfoUser : CommonEntity
     {
diff --git a/FlexJobApi.Core/Entities/UserServer/Users/User.cs b/FlexJobApi.Core/Entities/UserServer/Users/User.cs
index ab55926..5521fc0 100644
--- a/FlexJobApi.Core/Entities/UserServer/Users/User.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Users/User.cs
@@ -1,5 +1,4 @@
-锘縰sing FlexJobApi.Core.Enums.Users;
-using Furion.DatabaseAccessor;
+锘縰sing Furion.DatabaseAccessor;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore.Metadata.Builders;
 using System;
@@ -24,6 +23,7 @@
             UserExpectJobs = [];
             UserCredentials = [];
             Photos = [];
+            TaskInfoUsers = [];
         }
 
         /// <summary>
@@ -244,6 +244,11 @@
         /// </summary>
         public List<UserPhoto> Photos { get; set; }
 
+        /// <summary>
+        /// 浠诲姟闆囦剑淇℃伅
+        /// </summary>
+        public List<TaskInfoUser> TaskInfoUsers { get; set; }
+
         public void Configure(EntityTypeBuilder<User> entityBuilder, DbContext dbContext, Type dbContextLocator)
         {
             entityBuilder
diff --git a/FlexJobApi.Core/Enums/Users/EnumUserRealMethod.cs b/FlexJobApi.Core/Enums/Users/EnumUserRealMethod.cs
index 0119e34..ffaefb4 100644
--- a/FlexJobApi.Core/Enums/Users/EnumUserRealMethod.cs
+++ b/FlexJobApi.Core/Enums/Users/EnumUserRealMethod.cs
@@ -4,7 +4,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace FlexJobApi.Core.Enums.Users
+namespace FlexJobApi.Core
 {
     /// <summary>
     /// 鐢ㄦ埛瀹炲悕鏂瑰紡
diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index 068bd63..7ecbd15 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -854,7 +854,7 @@
             鎺ㄨ崘鐘舵��
             </summary>
         </member>
-        <member name="P:FlexJobApi.Core.TaskInfo.Users">
+        <member name="P:FlexJobApi.Core.TaskInfo.TaskInfoUsers">
             <summary>
             鐢ㄦ埛
             </summary>
@@ -906,7 +906,7 @@
         </member>
         <member name="T:FlexJobApi.Core.TaskInfoUser">
             <summary>
-            浠诲姟鐢ㄦ埛淇℃伅
+            浠诲姟闆囦剑淇℃伅
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.TaskInfoUser.TaskInfoId">
@@ -1896,6 +1896,11 @@
             鐢熸椿鐓�
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.User.TaskInfoUsers">
+            <summary>
+            浠诲姟闆囦剑淇℃伅
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.UserAuth">
             <summary>
             鐢ㄦ埛璁よ瘉
@@ -2059,26 +2064,6 @@
         <member name="F:FlexJobApi.Core.Enums.Common.EnumFileStoreAccess.AliyunOSS">
             <summary>
             闃块噷浜慜SS
-            </summary>
-        </member>
-        <member name="T:FlexJobApi.Core.Enums.Users.EnumUserRealMethod">
-            <summary>
-            鐢ㄦ埛瀹炲悕鏂瑰紡
-            </summary>
-        </member>
-        <member name="F:FlexJobApi.Core.Enums.Users.EnumUserRealMethod.Identity3">
-            <summary>
-            涓汉鎵嬫満鍙蜂笁瑕佺礌
-            </summary>
-        </member>
-        <member name="F:FlexJobApi.Core.Enums.Users.EnumUserRealMethod.Identity4">
-            <summary>
-            閾惰鍗″瑕佺礌
-            </summary>
-        </member>
-        <member name="F:FlexJobApi.Core.Enums.Users.EnumUserRealMethod.Face">
-            <summary>
-            鍒疯劯璁よ瘉
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.EnumFileType">
@@ -2816,6 +2801,26 @@
             濂�
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.EnumUserRealMethod">
+            <summary>
+            鐢ㄦ埛瀹炲悕鏂瑰紡
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumUserRealMethod.Identity3">
+            <summary>
+            涓汉鎵嬫満鍙蜂笁瑕佺礌
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumUserRealMethod.Identity4">
+            <summary>
+            閾惰鍗″瑕佺礌
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumUserRealMethod.Face">
+            <summary>
+            鍒疯劯璁よ瘉
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.EnumUserStatus">
             <summary>
             鐢ㄦ埛淇℃伅鐘舵��
@@ -3002,6 +3007,91 @@
             鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.GetAreaSelectQuery">
+            <summary>
+            鏌ヨ鏁版嵁瀛楀吀閫夋嫨鍣�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQuery.MaxDeep">
+            <summary>
+            鏈�澶ф繁搴�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.Value">
+            <summary>
+            Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.Label">
+            <summary>
+            鍦板尯鍚嶇О
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.Data">
+            <summary>
+            鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.Children">
+            <summary>
+            瀛愮骇
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.Id">
+            <summary>
+            Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.ParentCode">
+            <summary>
+            涓婄骇缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.Leyer">
+            <summary>
+            灞傜骇
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.Sort">
+            <summary>
+            鎺掑簭
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOption.QuickQuery">
+            <summary>
+            蹇�熸煡璇�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOptionData.Children">
+            <summary>
+            瀛愮骇
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOptionData.AreaCode">
+            <summary>
+            缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOptionData.ParentCode">
+            <summary>
+            涓婄骇缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOptionData.Leyer">
+            <summary>
+            灞傜骇
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOptionData.Sort">
+            <summary>
+            鎺掑簭
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetAreaSelectQueryResultOptionData.QuickQuery">
+            <summary>
+            蹇�熸煡璇�
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.GetDictionaryCategoriesQuery">
             <summary>
             鑾峰彇鏁版嵁瀛楀吀绫诲埆鍒嗛〉鍒楄〃鏁版嵁
@@ -3112,6 +3202,11 @@
             鏈�澶ф繁搴�
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQuery.WithChildren">
+            <summary>
+            鎼哄甫涓嬬骇
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption.Id">
             <summary>
             Id
@@ -3127,9 +3222,24 @@
             涓婄骇缂栧彿
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption.Children">
+            <summary>
+            瀛愮骇
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption.Path">
             <summary>
             瀛楀吀璺緞
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption.Deep">
+            <summary>
+            娣卞害
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption.Sort">
+            <summary>
+            鎺掑簭
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption.Code">
@@ -6134,6 +6244,116 @@
             鐓х墖
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.GetUserResumesQuery">
+            <summary>
+            鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQuery.UserExpectJobs">
+            <summary>
+            鏈熸湜宀椾綅缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQuery.Gender">
+            <summary>
+            鎬у埆
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQuery.PersonalIdentityCode">
+            <summary>
+            韬唤缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQuery.AgeMin">
+            <summary>
+            骞撮緞鑼冨洿鏈�灏�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQuery.AgeMax">
+            <summary>
+            骞撮緞鑼冨洿澶�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQuery.UserCredentials">
+            <summary>
+            璧勬牸璇佷功缂栧彿
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetUserResumesQueryResult">
+            <summary>
+            鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁-缁撴灉
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetUserResumesQueryResultItem">
+            <summary>
+            鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁-缁撴灉-椤�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.Id">
+            <summary>
+            鐢ㄦ埛Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.Avatar">
+            <summary>
+            澶村儚
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.Name">
+            <summary>
+            濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.Gender">
+            <summary>
+            鎬у埆
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.IsReal">
+            <summary>
+            鏄惁瀹炲悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.Age">
+            <summary>
+            骞撮緞
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.PersonalIdentityCode">
+            <summary>
+            韬唤缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.PersonalIdentityContent">
+            <summary>
+            韬唤
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.EducationalBackgroundCode">
+            <summary>
+            瀛﹀巻缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.EducationalBackgroundContent">
+            <summary>
+            瀛﹀巻
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.TaskCount">
+            <summary>
+            涓婂矖娆℃暟
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.WorkSeniority">
+            <summary>
+            宸ヤ綔璧勫巻
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetUserResumesQueryResultItem.WorkExperience">
+            <summary>
+            宸ヤ綔缁忛獙
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.GetUserResumeWorkExperienceQuery">
             <summary>
             鏌ヨ鐢ㄦ埛绠�鍘�-宸ヤ綔缁忛獙
diff --git a/FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetAreaSelectQuery.cs b/FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetAreaSelectQuery.cs
new file mode 100644
index 0000000..51328c0
--- /dev/null
+++ b/FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetAreaSelectQuery.cs
@@ -0,0 +1,115 @@
+锘縰sing Mapster;
+using MediatR;
+using Newtonsoft.Json;
+using Swashbuckle.AspNetCore.Annotations;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鏌ヨ鍦板尯閫夋嫨鍣�
+    /// </summary>
+    [Resource([EnumResourceController.Dictionary], AllowAnonymous = true)]
+    public class GetAreaSelectQuery : IRequest<List<GetAreaSelectQueryResultOption>>
+    {
+        /// <summary>
+        /// 鏈�澶ф繁搴�
+        /// </summary>
+        public int? MaxDeep { get; set; }
+    }
+
+    public class GetAreaSelectQueryResultOption
+    {
+        public GetAreaSelectQueryResultOption()
+        {
+
+        }
+
+        /// <summary>
+        /// Id
+        /// </summary>
+        [JsonProperty("areaCode")]
+        public string Value { get; set; }
+
+        /// <summary>
+        /// 鍦板尯鍚嶇О
+        /// </summary>
+        [JsonProperty("areaName")]
+        public string Label { get; set; }
+
+        /// <summary>
+        /// 鏁版嵁
+        /// </summary>
+        [JsonIgnore, SwaggerIgnore]
+        public GetDictionaryDataSelectQueryResultOption Data { get; set; }
+
+        /// <summary>
+        /// 瀛愮骇
+        /// </summary>
+        public List<GetAreaSelectQueryResultOption> Children => Data.Children.Adapt<List<GetAreaSelectQueryResultOption>>();
+
+        /// <summary>
+        /// Id
+        /// </summary>
+        public Guid Id => Data.Id;
+
+        /// <summary>
+        /// 涓婄骇缂栧彿
+        /// </summary>
+        public string ParentCode => Data.ParentCode;
+
+        /// <summary>
+        /// 灞傜骇
+        /// </summary>
+        public int Leyer => Data.Deep;
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort => Data.Sort;
+
+        /// <summary>
+        /// 蹇�熸煡璇�
+        /// </summary>
+        public string QuickQuery => Data.Field2;
+
+    }
+
+    public class GetAreaSelectQueryResultOptionData
+    {
+        /// <summary>
+        /// 瀛愮骇
+        /// </summary>
+        public List<GetAreaSelectQueryResultOption> Children { get; set; }
+
+        /// <summary>
+        /// 缂栧彿
+        /// </summary>
+        public string AreaCode { get; set; }
+
+        /// <summary>
+        /// 涓婄骇缂栧彿
+        /// </summary>
+        public string ParentCode { get; set; }
+
+        /// <summary>
+        /// 灞傜骇
+        /// </summary>
+        public int Leyer { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort { get; set; }
+
+        /// <summary>
+        /// 蹇�熸煡璇�
+        /// </summary>
+        public string QuickQuery { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs b/FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs
index 2a9c6ae..acaacc2 100644
--- a/FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs
+++ b/FlexJobApi.Core/Models/CommonServer/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs
@@ -42,10 +42,20 @@
         /// 鏈�澶ф繁搴�
         /// </summary>
         public int? MaxDeep { get; set; }
+
+        /// <summary>
+        /// 鎼哄甫涓嬬骇
+        /// </summary>
+        public bool WithChildren { get; set; }
     }
 
     public class GetDictionaryDataSelectQueryResultOption
     {
+        public GetDictionaryDataSelectQueryResultOption()
+        {
+            Children = [];
+        }
+
         /// <summary>
         /// Id
         /// </summary>
@@ -62,11 +72,26 @@
         public string ParentCode { get; set; }
 
         /// <summary>
+        /// 瀛愮骇
+        /// </summary>
+        public List<SelectOption<string, GetDictionaryDataSelectQueryResultOption>> Children { get; set; }
+
+        /// <summary>
         /// 瀛楀吀璺緞
         /// </summary>
         public string Path { get; set; }
 
         /// <summary>
+        /// 娣卞害
+        /// </summary>
+        public int Deep { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort { get; set; }
+
+        /// <summary>
         /// 缂栧彿
         /// </summary>
         [MaxLength(128)]
diff --git a/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs b/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs
new file mode 100644
index 0000000..e87dd4d
--- /dev/null
+++ b/FlexJobApi.Core/Models/UserServer/UserResumes/Queries/GetUserResumesQuery.cs
@@ -0,0 +1,134 @@
+锘縰sing Mapster;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁
+    /// </summary>
+    [Resource([EnumResourceController.UserResume])]
+    public class GetUserResumesQuery : PagedListQuery<GetUserResumesQueryResult, GetUserResumesQueryResultItem>
+    {
+        public GetUserResumesQuery()
+        {
+            UserExpectJobs = [];
+            UserCredentials = [];
+        }
+
+        /// <summary>
+        /// 鏈熸湜宀椾綅缂栧彿
+        /// </summary>
+        public List<string> UserExpectJobs { get; set; }
+
+        /// <summary>
+        /// 鎬у埆
+        /// </summary>
+        public EnumUserGender? Gender { get; set; }
+
+        /// <summary>
+        /// 韬唤缂栧彿
+        /// </summary>
+        public string PersonalIdentityCode { get; set; }
+
+        /// <summary>
+        /// 骞撮緞鑼冨洿鏈�灏�
+        /// </summary>
+        public int? AgeMin { get; set; }
+
+        /// <summary>
+        /// 骞撮緞鑼冨洿澶�
+        /// </summary>
+        public int? AgeMax { get; set; }
+
+        /// <summary>
+        /// 璧勬牸璇佷功缂栧彿
+        /// </summary>
+        public List<string> UserCredentials { get; set; }
+
+    }
+
+    /// <summary>
+    /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁-缁撴灉
+    /// </summary>
+    public class GetUserResumesQueryResult : PagedListQueryResult<GetUserResumesQueryResultItem>
+    {
+
+    }
+
+    /// <summary>
+    /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁-缁撴灉-椤�
+    /// </summary>
+    public class GetUserResumesQueryResultItem
+    {
+        /// <summary>
+        /// 鐢ㄦ埛Id
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 澶村儚
+        /// </summary>
+        public string Avatar { get; set; }
+
+        /// <summary>
+        /// 濮撳悕
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鎬у埆
+        /// </summary>
+        public EnumUserGender? Gender { get; set; }
+
+        /// <summary>
+        /// 鏄惁瀹炲悕
+        /// </summary>
+        public bool IsReal { get; set; }
+
+        /// <summary>
+        /// 骞撮緞
+        /// </summary>
+        public int? Age { get; set; }
+
+        /// <summary>
+        /// 韬唤缂栧彿
+        /// </summary>
+        public string PersonalIdentityCode { get; set; }
+
+        /// <summary>
+        /// 韬唤
+        /// </summary>
+        public string PersonalIdentityContent { get; set; }
+
+        /// <summary>
+        /// 瀛﹀巻缂栧彿
+        /// </summary>
+        public string EducationalBackgroundCode { get; set; }
+
+        /// <summary>
+        /// 瀛﹀巻
+        /// </summary>
+        public string EducationalBackgroundContent { get; set; }
+
+        /// <summary>
+        /// 涓婂矖娆℃暟
+        /// </summary>
+        [AdaptIgnore]
+        public int TaskCount { get; set; }
+
+        /// <summary>
+        /// 宸ヤ綔璧勫巻
+        /// </summary>
+        public string WorkSeniority { get; set; }
+
+        /// <summary>
+        /// 宸ヤ綔缁忛獙
+        /// </summary>
+        public string WorkExperience { get; set; }
+
+    }
+}
diff --git a/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalLoginInfoQuery.cs b/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalLoginInfoQuery.cs
index 9f95811..14c34bd 100644
--- a/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalLoginInfoQuery.cs
+++ b/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalLoginInfoQuery.cs
@@ -1,5 +1,4 @@
-锘縰sing FlexJobApi.Core.Enums.Users;
-using MediatR;
+锘縰sing MediatR;
 using System;
 using System.Collections.Generic;
 using System.Linq;
diff --git a/FlexJobApi.Core/Utils/DbUtils/SelectQuery.cs b/FlexJobApi.Core/Utils/DbUtils/SelectQuery.cs
index a920ef3..579de2d 100644
--- a/FlexJobApi.Core/Utils/DbUtils/SelectQuery.cs
+++ b/FlexJobApi.Core/Utils/DbUtils/SelectQuery.cs
@@ -35,6 +35,6 @@
         /// <summary>
         /// 鏁版嵁
         /// </summary>
-        public object Data { get; set; }
+        public TData Data { get; set; }
     }
 }
diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
index e3468a9..016884a 100644
--- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
+++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
@@ -84,7 +84,7 @@
             }
             if (request.HireStatus.IsNotNull() && logier.Type == EnumUserType.Personal)
             {
-                q = q.Where(it => it.Users.Any(u => u.UserId == logier.Id && request.HireStatus.Contains(u.HireStatus)));
+                q = q.Where(it => it.TaskInfoUsers.Any(u => u.UserId == logier.Id && request.HireStatus.Contains(u.HireStatus)));
             }
 
             var count = new GetTaskInfosQueryResultObjectData
@@ -139,7 +139,7 @@
                         AddressDetail = t.AddressDetail,
                         Latitude = t.Latitude,
                         Longitude = t.Longitude,
-                        UserCount = t.Users.Count(),
+                        UserCount = t.TaskInfoUsers.Count(tu => tu.SignContractStatus == EnumTaskUserSignContractStatus.Pass),
                         Status = t.Status,
                         BeginTime = t.BeginTime,
                         EndTime = t.EndTime,
@@ -149,7 +149,7 @@
                         RecommendStatus = t.RecommendStatus,
                         SettlementStatus = t.SettlementStatus,
                         HireStatus = logier != null
-                            ? t.Users.Where(it => it.UserId == logier.Id).Select(u => u.HireStatus).FirstOrDefault()
+                            ? t.TaskInfoUsers.Where(it => it.UserId == logier.Id).Select(u => u.HireStatus).FirstOrDefault()
                             : null
                     };
             var result = await request.PageModel.GetPagedListAsync<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem>(s, cancellationToken);
diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
index f9a714a..93ce8b7 100644
--- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
+++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -539,6 +539,14 @@
             鐢ㄦ埛绠�鍘嗘煡璇㈠鐞嗗櫒
             </summary>
         </member>
+        <member name="M:FlexJobApi.UserServer.Application.UserResumeQueryHandler.Handle(FlexJobApi.Core.GetUserResumesQuery,System.Threading.CancellationToken)">
+            <summary>
+            鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
         <member name="M:FlexJobApi.UserServer.Application.UserResumeQueryHandler.Handle(FlexJobApi.Core.GetUserResumeQuery,System.Threading.CancellationToken)">
             <summary>
             鏌ヨ鐢ㄦ埛绠�鍘�
diff --git a/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs b/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs
index 20c861c..961938c 100644
--- a/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs
+++ b/FlexJobApi.UserServer.Application/UserResumes/Queries/UserResumeQueryHandler.cs
@@ -18,6 +18,7 @@
     public class UserResumeQueryHandler(
             IRepository<User> rep
         ) :
+        IRequestHandler<GetUserResumesQuery, GetUserResumesQueryResult>,
         IRequestHandler<GetUserResumeQuery, GetUserResumeQueryResult>,
         IRequestHandler<GetUserResumePersonalQuery, GetUserResumePersonalQueryResult>,
         IRequestHandler<GetUserResumeJobSeekingQuery, GetUserResumeJobSeekingQueryResult>,
@@ -29,6 +30,66 @@
         private readonly IRepository<User> rep = rep;
 
         /// <summary>
+        /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<GetUserResumesQueryResult> Handle(GetUserResumesQuery request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var q = rep.AsQueryable().AsNoTracking();
+            if (request.UserExpectJobs.IsNotNull())
+            {
+                q = q.Where(it =>
+                    it.UserExpectJobs.Any(j =>
+                        request.UserExpectJobs.Contains(j.ExpectJobCode)
+                        || j.ExpectJob.ParentId.HasValue
+                        && (request.UserExpectJobs.Contains(j.ExpectJob.Parent.Code))));
+            }
+            if (request.Gender.HasValue)
+            {
+                q = q.Where(it => it.Gender == request.Gender);
+            }
+            if (request.PersonalIdentityCode.IsNotNull())
+            {
+                q = q.Where(it => it.PersonalIdentityCode == request.PersonalIdentityCode);
+            }
+            if (request.AgeMin.HasValue)
+            {
+                q = q.Where(it => it.Age >= request.AgeMin);
+            }
+            if (request.AgeMax.HasValue)
+            {
+                q = q.Where(it => it.Age <= request.AgeMax);
+            }
+            if (request.UserCredentials.IsNotNull())
+            {
+                q = q.Where(it =>
+                    it.UserCredentials.Any(c =>
+                        request.UserCredentials.Contains(c.TypeCode)));
+            }
+            var s = q.Select(it => new GetUserResumesQueryResultItem
+            {
+                Id = it.Id,
+                Avatar = it.Avatar,
+                Name = it.Name,
+                Gender = it.Gender,
+                IsReal = it.IsReal,
+                Age = it.Age,
+                PersonalIdentityCode = it.PersonalIdentityCode,
+                PersonalIdentityContent = it.PersonalIdentity.Content,
+                EducationalBackgroundCode = it.EducationalBackgroundCode,
+                EducationalBackgroundContent = it.EducationalBackground.Content,
+                TaskCount = it.TaskInfoUsers.Count(tu => tu.SignContractStatus == EnumTaskUserSignContractStatus.Pass),
+                WorkSeniority = it.WorkSeniority,
+                WorkExperience = it.WorkExperience
+            });
+            var result = await request.PageModel.GetPagedListAsync<GetUserResumesQueryResult, GetUserResumesQueryResultItem>(s, cancellationToken);
+            return result;
+        }
+
+        /// <summary>
         /// 鏌ヨ鐢ㄦ埛绠�鍘�
         /// </summary>
         /// <param name="request"></param>

--
Gitblit v1.9.1