From 75463592b40199fbafb6930060ef679a05b5b714 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 07 八月 2025 16:26:14 +0800
Subject: [PATCH] feat:任务开发

---
 FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs |   10 
 FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs                |  107 ++++++
 FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs                                  |    5 
 FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs                        |   24 +
 FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs        |    4 
 FlexJobApi.Core/Entities/Tasks/TaskInfo.cs                                       |   17 
 FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs                   |   78 ++++
 FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs       |   19 
 FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs                     |   37 ++
 FlexJobApi.Application/FlexJobApi.Application.xml                                |   54 +++
 FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs                    |  126 +++++++
 FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs                |   34 ++
 FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs                                    |   23 +
 FlexJobApi.Core/FlexJobApi.Core.xml                                              |  346 ++++++++++++++++++++
 FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs                  |   76 ++++
 FlexJobApi.Core/Enums/Common/EnumResourceController.cs                           |    6 
 FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs                                       |    2 
 FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs     |   19 
 FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs                             |   23 +
 FlexJobApi.Core/FlexJobApi.Core.csproj                                           |    4 
 20 files changed, 1,001 insertions(+), 13 deletions(-)

diff --git a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
index ac2f0cf..6e121f5 100644
--- a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
+++ b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
@@ -83,6 +83,12 @@
             return request.SetIsDisabled<DictionaryData>(cancellationToken: cancellationToken);
         }
 
+        /// <summary>
+        /// 鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
         public async Task<int> Handle(SyncHumanResourcesAreaDictionaryDataCommand request, CancellationToken cancellationToken)
         {
             var repHumanResourcesBaseArea = Db.GetRepository<BaseArea, HumanResourcesDbContextLocator>();
@@ -96,12 +102,19 @@
                 CategoryId = categoryId
             });
             var parentAreas = areas.Where(it => it.ParentId == 0).ToList();
-            LoopAdd(categoryId, entities, areas, parentAreas);
+            LoopSyncHumanResourcesAreaDictionaryData(categoryId, entities, areas, parentAreas);
             await rep.Context.BulkInsertAsync(entities);
             return entities.Count;
         }
 
-        public void LoopAdd(Guid categoryId, List<DictionaryData> entities, List<BaseArea> all, List<BaseArea> areas)
+        /// <summary>
+        /// 閫掑綊鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁
+        /// </summary>
+        /// <param name="categoryId"></param>
+        /// <param name="entities"></param>
+        /// <param name="all"></param>
+        /// <param name="areas"></param>
+        private void LoopSyncHumanResourcesAreaDictionaryData(Guid categoryId, List<DictionaryData> entities, List<BaseArea> all, List<BaseArea> areas)
         {
             if (areas.IsNotNull())
             {
@@ -140,7 +153,7 @@
                     entities.Add(entity);
 
                     var children = all.Where(it => it.ParentId == area.AreaCode).ToList();
-                    LoopAdd(categoryId, entities, all, children);
+                    LoopSyncHumanResourcesAreaDictionaryData(categoryId, entities, all, children);
                 }
             }
         }
diff --git a/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs b/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
index 6655481..ce569c1 100644
--- a/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
+++ b/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
@@ -80,9 +80,22 @@
                 {
                     q = q
                         .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime)
-                        .Where(it =>
-                            it.ParentId == request.ParentId
-                            && !it.IsDisabled);
+                        .Where(it => !it.IsDisabled);
+                    if (!request.All)
+                    {
+                        q = q.Where(it => it.ParentId == request.ParentId);
+                    }
+                    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);
diff --git a/FlexJobApi.Application/FlexJobApi.Application.xml b/FlexJobApi.Application/FlexJobApi.Application.xml
index 89b8cb5..e8cce9e 100644
--- a/FlexJobApi.Application/FlexJobApi.Application.xml
+++ b/FlexJobApi.Application/FlexJobApi.Application.xml
@@ -56,6 +56,23 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="M:FlexJobApi.Application.DictionaryDataCommandHandler.Handle(FlexJobApi.Core.SyncHumanResourcesAreaDictionaryDataCommand,System.Threading.CancellationToken)">
+            <summary>
+            鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.Application.DictionaryDataCommandHandler.LoopSyncHumanResourcesAreaDictionaryData(System.Guid,System.Collections.Generic.List{FlexJobApi.Core.DictionaryData},System.Collections.Generic.List{FlexJobApi.Core.BaseArea},System.Collections.Generic.List{FlexJobApi.Core.BaseArea})">
+            <summary>
+            閫掑綊鍚屾浜哄姏璧勬簮鍦板尯瀛楀吀鏁版嵁
+            </summary>
+            <param name="categoryId"></param>
+            <param name="entities"></param>
+            <param name="all"></param>
+            <param name="areas"></param>
+        </member>
         <member name="T:FlexJobApi.Application.DictionaryCategoriesQueryHandler">
             <summary>
             鏁版嵁瀛楀吀绫诲埆鏌ヨ澶勭悊鍣�
@@ -108,5 +125,42 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="T:FlexJobApi.Application.TaskInfoCommandHandler">
+            <summary>
+            浠诲姟鍛戒护澶勭悊鍣�
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.Application.TaskInfoCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo})">
+            <summary>
+            浠诲姟鍛戒护澶勭悊鍣�
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.Application.TaskInfoCommandHandler.Handle(FlexJobApi.Core.SaveTaskInfoCommand,System.Threading.CancellationToken)">
+            <summary>
+            淇濆瓨浠诲姟
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+            <exception cref="T:System.NotImplementedException"></exception>
+        </member>
+        <member name="T:FlexJobApi.Application.TaskInfoQueryHandler">
+            <summary>
+            浠诲姟鏌ヨ澶勭悊鍣�
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.Application.TaskInfoQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo})">
+            <summary>
+            浠诲姟鏌ヨ澶勭悊鍣�
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.Application.TaskInfoQueryHandler.Handle(FlexJobApi.Core.GetTaskInfoQuery,System.Threading.CancellationToken)">
+            <summary>
+            鏌ヨ浠诲姟璇︽儏
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
     </members>
 </doc>
diff --git a/FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs b/FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs
new file mode 100644
index 0000000..3b9c630
--- /dev/null
+++ b/FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs
@@ -0,0 +1,76 @@
+锘縰sing FlexJobApi.Core;
+using Furion.DatabaseAccessor;
+using Furion.DistributedIDGenerator;
+using Mapster;
+using MediatR;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Application
+{
+    /// <summary>
+    /// 浠诲姟鍛戒护澶勭悊鍣�
+    /// </summary>
+    public class TaskInfoCommandHandler(
+            IRepository<TaskInfo> rep
+        )
+        : IRequestHandler<SaveTaskInfoCommand, Guid>
+    {
+        private readonly IRepository<TaskInfo> rep = rep;
+
+        /// <summary>
+        /// 淇濆瓨浠诲姟
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        [UnitOfWork]
+        public async Task<Guid> Handle(SaveTaskInfoCommand request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            return await request.SaveData<TaskInfo, SaveTaskInfoCommand>(
+                 q => TaskInfoQueryable.GetQueryable(
+                    rep,
+                    q => q
+                         .Include(it => it.Benefits)
+                         .Include(it => it.CredentialLimits),
+                    logier),
+                 null,
+                 (entity) =>
+                 {
+                     if (request.Id == null)
+                     {
+                         entity.EnterpriseId = logier.EnterpriseId.Value;
+                         BuildCode(entity).Wait();
+                     }
+                     entity.Benefits = request.Benefits
+                         .Select(it => new TaskInfoBenefit
+                         {
+                             BenefitCode = it
+                         })
+                         .ToList();
+                     entity.CredentialLimits = request.CredentialLimits
+                         .Select(it => new TaskInfoCredentialLimit
+                         {
+                             TypeCode = it
+                         })
+                         .ToList();
+                     request.Adapt(entity);
+                 },
+                 cancellationToken);
+        }
+
+        private async Task BuildCode(TaskInfo entity)
+        {
+            entity.Code = $"{DateTime.Now:yyyyMMddHHmm}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
+            var exist = await rep.AsQueryable().AsNoTracking()
+               .AnyAsync(it => it.EnterpriseId == entity.EnterpriseId && it.Code == entity.Code);
+            if (exist) await BuildCode(entity);
+        }
+    }
+}
diff --git a/FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs
new file mode 100644
index 0000000..adc9d1b
--- /dev/null
+++ b/FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs
@@ -0,0 +1,37 @@
+锘縰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;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Application
+{
+    /// <summary>
+    /// 浠诲姟鏌ヨ澶勭悊鍣�
+    /// </summary>
+    public class TaskInfoQueryHandler(
+            IRepository<TaskInfo> rep
+        )
+        : IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult>
+    {
+        private readonly IRepository<TaskInfo> rep = rep;
+
+        /// <summary>
+        /// 鏌ヨ浠诲姟璇︽儏
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public Task<GetTaskInfoQueryResult> Handle(GetTaskInfoQuery request, CancellationToken cancellationToken)
+        {
+            return TaskInfoQueryable.GetQueryable(rep, q => q.Where(it => it.Id == request.Id))
+                .ProjectToType<GetTaskInfoQueryResult>()
+                .FirstOrDefaultAsync(cancellationToken);
+        }
+    }
+}
diff --git a/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs b/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs
index bcff36b..e92201f 100644
--- a/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs
+++ b/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs
@@ -32,13 +32,18 @@
         public Enterprise Enterprise { get; set; }
 
         /// <summary>
+        /// 浠诲姟鍗曞彿
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
         /// 浠诲姟鍚嶇О
         /// </summary>
         [Required]
         public string Name { get; set; }
 
         /// <summary>
-        /// 璁¤垂鏂瑰紡
+        /// 缁撶畻鍛ㄦ湡
         /// </summary>
         public EnumBillingMethod BillingMethod { get; set; }
 
@@ -112,6 +117,16 @@
         /// </summary>
         public DateTime EndTime { get; set; }
 
+        /// <summary>
+        /// 浠诲姟鐘舵��
+        /// </summary>
+        public EnumTaskStatus Status { get; set; }
+
+        /// <summary>
+        /// 鍙戝竷鐘舵��
+        /// </summary>
+        public EnumTaskReleaseStatus ReleaseStatus { get; set; }
+
         public void Configure(EntityTypeBuilder<TaskInfo> entityBuilder, DbContext dbContext, Type dbContextLocator)
         {
             entityBuilder
diff --git a/FlexJobApi.Core/Enums/Common/EnumResourceController.cs b/FlexJobApi.Core/Enums/Common/EnumResourceController.cs
index 10d548a..22e6696 100644
--- a/FlexJobApi.Core/Enums/Common/EnumResourceController.cs
+++ b/FlexJobApi.Core/Enums/Common/EnumResourceController.cs
@@ -17,6 +17,12 @@
         [ResourceController(Service = EnumResourceService.Main)]
         Dictionary,
         /// <summary>
+        /// 浠诲姟
+        /// </summary>
+        [ResourceController(Service = EnumResourceService.Main)]
+        Task,
+
+        /// <summary>
         /// 鐢ㄦ埛璁よ瘉
         /// </summary>
         [ResourceController(Service = EnumResourceService.User)]
diff --git a/FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs b/FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs
new file mode 100644
index 0000000..8aad11c
--- /dev/null
+++ b/FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 浠诲姟鍙戝竷鐘舵��
+    /// </summary>
+    public enum EnumTaskReleaseStatus
+    {
+        /// <summary>
+        /// 鍙戝竷涓�
+        /// </summary>
+        InProcess = 20,
+        /// <summary>
+        /// 宸插仠姝�
+        /// </summary>
+        Stopped = 100
+    }
+}
diff --git a/FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs b/FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs
new file mode 100644
index 0000000..87aa978
--- /dev/null
+++ b/FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 浠诲姟瀹夋帓鐘舵��
+    /// </summary>
+    public enum EnumTaskStatus
+    {
+        /// <summary>
+        /// 寰呭畨鎺�
+        /// </summary>
+        Wait = 10,
+        /// <summary>
+        /// 宸插畨鎺�
+        /// </summary>
+        Complete = 20
+    }
+}
diff --git a/FlexJobApi.Core/FlexJobApi.Core.csproj b/FlexJobApi.Core/FlexJobApi.Core.csproj
index 8977b6e..8dee6b3 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.csproj
+++ b/FlexJobApi.Core/FlexJobApi.Core.csproj
@@ -34,8 +34,4 @@
 	  </None>
 	</ItemGroup>
 
-	<ItemGroup>
-	  <Folder Include="Models\Main\TaskInfos\" />
-	</ItemGroup>
-
 </Project>
diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index e6920f5..666c230 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -544,6 +544,11 @@
             浼佷笟
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.Code">
+            <summary>
+            浠诲姟鍗曞彿
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.TaskInfo.Name">
             <summary>
             浠诲姟鍚嶇О
@@ -551,7 +556,7 @@
         </member>
         <member name="P:FlexJobApi.Core.TaskInfo.BillingMethod">
             <summary>
-            璁¤垂鏂瑰紡
+            缁撶畻鍛ㄦ湡
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.TaskInfo.ServiceFee">
@@ -622,6 +627,16 @@
         <member name="P:FlexJobApi.Core.TaskInfo.EndTime">
             <summary>
             浠诲姟缁撴潫鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.Status">
+            <summary>
+            浠诲姟鐘舵��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.ReleaseStatus">
+            <summary>
+            鍙戝竷鐘舵��
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.TaskInfoBenefit">
@@ -1784,6 +1799,11 @@
             鏁版嵁瀛楀吀
             </summary>
         </member>
+        <member name="F:FlexJobApi.Core.EnumResourceController.Task">
+            <summary>
+            浠诲姟
+            </summary>
+        </member>
         <member name="F:FlexJobApi.Core.EnumResourceController.Auth">
             <summary>
             鐢ㄦ埛璁よ瘉
@@ -1922,6 +1942,36 @@
         <member name="F:FlexJobApi.Core.EnumSettlementCycle.Day">
             <summary>
             鏃ョ粨
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.EnumTaskReleaseStatus">
+            <summary>
+            浠诲姟鍙戝竷鐘舵��
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumTaskReleaseStatus.InProcess">
+            <summary>
+            鍙戝竷涓�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumTaskReleaseStatus.Stopped">
+            <summary>
+            宸插仠姝�
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.EnumTaskStatus">
+            <summary>
+            浠诲姟瀹夋帓鐘舵��
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumTaskStatus.Wait">
+            <summary>
+            寰呭畨鎺�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumTaskStatus.Complete">
+            <summary>
+            宸插畨鎺�
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.EnumTaskUserHireStatus">
@@ -2245,6 +2295,21 @@
             缂栧彿
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.Models.Common.DictionaryDataQueryModel">
+            <summary>
+            鏁版嵁瀛楀吀鏌ヨ妯″瀷
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.Common.DictionaryDataQueryModel.Code">
+            <summary>
+            缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.Models.Common.DictionaryDataQueryModel.Name">
+            <summary>
+            鍚嶇О
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.DeleteDictionaryCategoryCommand">
             <summary>
             鍒犻櫎鏁版嵁瀛楀吀绫诲埆
@@ -2445,6 +2510,16 @@
             涓婄骇Id
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQuery.Keywords">
+            <summary>
+            鍏抽敭瀛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQuery.All">
+            <summary>
+            鏌ヨ鎵�鏈�
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption.Id">
             <summary>
             Id
@@ -2503,6 +2578,11 @@
         <member name="P:FlexJobApi.Core.GetDictionaryDatasQuery.CategoryCode">
             <summary>
             绫诲埆缂栧彿锛圛d/缂栧彿浜岄�変竴锛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetDictionaryDatasQuery.ParentId">
+            <summary>
+            涓婄骇Id
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.GetDictionaryDatasQuery.Keywords">
@@ -2599,6 +2679,265 @@
             <summary>
             鍚嶇О
             </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.SaveTaskInfoCommand">
+            <summary>
+            淇濆瓨浠诲姟
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.Name">
+            <summary>
+            浠诲姟鍚嶇О
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.BillingMethod">
+            <summary>
+            缁撶畻鍛ㄦ湡
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.ServiceFee">
+            <summary>
+            鏈嶅姟璐�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.SettlementCycle">
+            <summary>
+            缁撶畻鏂瑰紡
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.Benefits">
+            <summary>
+            绂忓埄缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.AgeMinLimit">
+            <summary>
+            骞撮緞鑼冨洿鏈�灏�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.AgeMaxLimit">
+            <summary>
+            骞撮緞鑼冨洿澶�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.GenderLimit">
+            <summary>
+            鎬у埆瑕佹眰
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.CredentialLimits">
+            <summary>
+            璧勬牸璇佷功绫诲瀷缂栧彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.ProvinceCode">
+            <summary>
+            浠诲姟鍦扮偣鎵�灞炵渷浠界紪鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.CityCode">
+            <summary>
+            浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.Address">
+            <summary>
+            浠诲姟鍦扮偣璇︾粏鍦板潃
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.BeginTime">
+            <summary>
+            浠诲姟寮�濮嬫椂闂�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.EndTime">
+            <summary>
+            浠诲姟缁撴潫鏃堕棿
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetTaskInfoQuery">
+            <summary>
+            鏌ヨ浠诲姟璇︽儏
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQuery.Id">
+            <summary>
+            Id
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetTaskInfoQueryResult">
+            <summary>
+            鏌ヨ浠诲姟璇︽儏-缁撴灉
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Id">
+            <summary>
+            Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Name">
+            <summary>
+            浠诲姟鍚嶇О
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.BillingMethod">
+            <summary>
+            缁撶畻鍛ㄦ湡
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ServiceFee">
+            <summary>
+            鏈嶅姟璐�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.SettlementCycle">
+            <summary>
+            缁撶畻鏂瑰紡
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Benefits">
+            <summary>
+            绂忓埄
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.AgeMinLimit">
+            <summary>
+            骞撮緞鑼冨洿鏈�灏�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.AgeMaxLimit">
+            <summary>
+            骞撮緞鑼冨洿澶�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.GenderLimit">
+            <summary>
+            鎬у埆瑕佹眰
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.CredentialLimits">
+            <summary>
+            璧勬牸璇佷功绫诲瀷
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ProvinceCode">
+            <summary>
+            浠诲姟鍦扮偣鎵�灞炵渷浠界紪鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ProvinceName">
+            <summary>
+            浠诲姟鍦扮偣鎵�灞炵渷浠�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.CityCode">
+            <summary>
+            浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.CityName">
+            <summary>
+            浠诲姟鍦扮偣鎵�灞炲煄甯�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Address">
+            <summary>
+            浠诲姟鍦扮偣璇︾粏鍦板潃
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.BeginTime">
+            <summary>
+            浠诲姟寮�濮嬫椂闂�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.EndTime">
+            <summary>
+            浠诲姟缁撴潫鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.CreatedTime">
+            <summary>
+            鍒涘缓鏃堕棿
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetTaskInfosQuery">
+            <summary>
+            鏌ヨ浠诲姟鍒嗛〉鍒楄〃
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQuery.Keywords">
+            <summary>
+            鍏抽敭瀛楋紙浠诲姟鍚嶇О锛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQuery.Time">
+            <summary>
+            鍙戝竷鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQuery.Status">
+            <summary>
+            浠诲姟鐘舵��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQuery.ReleaseStatus">
+            <summary>
+            鍙戝竷鐘舵��
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetTaskInfosQueryResultItem">
+            <summary>
+            鏌ヨ浠诲姟鍒嗛〉鍒楄〃-缁撴灉-椤�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.Name">
+            <summary>
+            浠诲姟鍚嶇О
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.Code">
+            <summary>
+            浠诲姟鍗曞彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.BillingMethod">
+            <summary>
+            缁撶畻鍛ㄦ湡
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.ServiceFee">
+            <summary>
+            鏈嶅姟璐�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.SettlementCycle">
+            <summary>
+            缁撶畻鏂瑰紡
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.GenderLimit">
+            <summary>
+            鎬у埆瑕佹眰
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.UserCount">
+            <summary>
+            鎶ュ悕浜烘暟
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.TaskInfoQueryable">
+            <summary>
+            浠诲姟鏌ヨ
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.Core.TaskInfoQueryable.GetQueryable(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},System.Func{System.Linq.IQueryable{FlexJobApi.Core.TaskInfo},System.Linq.IQueryable{FlexJobApi.Core.TaskInfo}},FlexJobApi.Core.CurrentLogier)">
+            <summary>
+            鑾峰彇浠诲姟鏌ヨ
+            </summary>
+            <param name="rep"></param>
+            <param name="query"></param>
+            <param name="logier"></param>
+            <returns></returns>
         </member>
         <member name="T:FlexJobApi.Core.PasswordLoginCommand">
             <summary>
@@ -4966,6 +5305,11 @@
             瀹㈡埛绔被鍨�
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.CurrentLogier.EnterpriseId">
+            <summary>
+            浼佷笟Id
+            </summary>
+        </member>
         <member name="M:FlexJobApi.Core.JwtHandler.PipelineAsync(Microsoft.AspNetCore.Authorization.AuthorizationHandlerContext,Microsoft.AspNetCore.Http.DefaultHttpContext)">
             <summary>
             楠岃瘉绠¢亾锛屼篃灏辨槸楠岃瘉鏍稿績浠g爜
diff --git a/FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs b/FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs
new file mode 100644
index 0000000..4b216f6
--- /dev/null
+++ b/FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core.Models.Common
+{
+    /// <summary>
+    /// 鏁版嵁瀛楀吀鏌ヨ妯″瀷
+    /// </summary>
+    public class DictionaryDataQueryModel
+    {
+        /// <summary>
+        /// 缂栧彿
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs b/FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs
index 202b6da..c970cb4 100644
--- a/FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs
+++ b/FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs
@@ -27,6 +27,16 @@
         /// 涓婄骇Id
         /// </summary>
         public Guid? ParentId { get; set; }
+
+        /// <summary>
+        /// 鍏抽敭瀛�
+        /// </summary>
+        public string Keywords { get; set; }
+
+        /// <summary>
+        /// 鏌ヨ鎵�鏈�
+        /// </summary>
+        public bool All { get; set; }
     }
 
     public class GetDictionaryDataSelectQueryResultOption
diff --git a/FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs b/FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs
new file mode 100644
index 0000000..4f6c983
--- /dev/null
+++ b/FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs
@@ -0,0 +1,107 @@
+锘縰sing Mapster;
+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.Task])]
+    public class SaveTaskInfoCommand : SaveDataCommand
+    {
+        public SaveTaskInfoCommand()
+        {
+            Benefits = [];
+            CredentialLimits = [];
+        }
+
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        [Required]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍛ㄦ湡
+        /// </summary>
+        [Required]
+        public EnumBillingMethod BillingMethod { get; set; }
+
+        /// <summary>
+        /// 鏈嶅姟璐�
+        /// </summary>
+        [Required]
+        public decimal ServiceFee { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鏂瑰紡
+        /// </summary>
+        [Required]
+        public EnumSettlementCycle SettlementCycle { get; set; }
+
+        /// <summary>
+        /// 绂忓埄缂栧彿
+        /// </summary>
+        [AdaptIgnore]
+        public List<string> Benefits { get; set; }
+
+        /// <summary>
+        /// 骞撮緞鑼冨洿鏈�灏�
+        /// </summary>
+        [Required]
+        public int AgeMinLimit { get; set; }
+
+        /// <summary>
+        /// 骞撮緞鑼冨洿澶�
+        /// </summary>
+        [Required]
+        public int AgeMaxLimit { get; set; }
+
+        /// <summary>
+        /// 鎬у埆瑕佹眰
+        /// </summary>
+        [Required]
+        public EnumUserGender GenderLimit { get; set; }
+
+        /// <summary>
+        /// 璧勬牸璇佷功绫诲瀷缂栧彿
+        /// </summary>
+        [AdaptIgnore]
+        public List<string> CredentialLimits { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鎵�灞炵渷浠界紪鍙�
+        /// </summary>
+        [Required]
+        public string ProvinceCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙�
+        /// </summary>
+        [Required]
+        public string CityCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣璇︾粏鍦板潃
+        /// </summary>
+        [Required]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 浠诲姟寮�濮嬫椂闂�
+        /// </summary>
+        [Required]
+        public DateTime BeginTime { get; set; }
+
+        /// <summary>
+        /// 浠诲姟缁撴潫鏃堕棿
+        /// </summary>
+        [Required]
+        public DateTime EndTime { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs b/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs
new file mode 100644
index 0000000..1481353
--- /dev/null
+++ b/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs
@@ -0,0 +1,126 @@
+锘縰sing FlexJobApi.Core.Models.Common;
+using Mapster;
+using MediatR;
+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.Task])]
+    public class GetTaskInfoQuery : IRequest<GetTaskInfoQueryResult>
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        public Guid Id { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ浠诲姟璇︽儏-缁撴灉
+    /// </summary>
+    public class GetTaskInfoQueryResult
+    {
+        public GetTaskInfoQueryResult()
+        {
+            Benefits = [];
+            CredentialLimits = [];
+        }
+
+        /// <summary>
+        /// Id
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍛ㄦ湡
+        /// </summary>
+        public EnumBillingMethod BillingMethod { get; set; }
+
+        /// <summary>
+        /// 鏈嶅姟璐�
+        /// </summary>
+        public decimal ServiceFee { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鏂瑰紡
+        /// </summary>
+        public EnumSettlementCycle SettlementCycle { get; set; }
+
+        /// <summary>
+        /// 绂忓埄
+        /// </summary>
+        public List<DictionaryDataQueryModel> Benefits { get; set; }
+
+        /// <summary>
+        /// 骞撮緞鑼冨洿鏈�灏�
+        /// </summary>
+        public int AgeMinLimit { get; set; }
+
+        /// <summary>
+        /// 骞撮緞鑼冨洿澶�
+        /// </summary>
+        public int AgeMaxLimit { get; set; }
+
+        /// <summary>
+        /// 鎬у埆瑕佹眰
+        /// </summary>
+        public EnumUserGender GenderLimit { get; set; }
+
+        /// <summary>
+        /// 璧勬牸璇佷功绫诲瀷
+        /// </summary>
+        public List<DictionaryDataQueryModel> CredentialLimits { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鎵�灞炵渷浠界紪鍙�
+        /// </summary>
+        public string ProvinceCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鎵�灞炵渷浠�
+        /// </summary>
+        public string ProvinceName { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鎵�灞炲煄甯傜紪鍙�
+        /// </summary>
+        public string CityCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣鎵�灞炲煄甯�
+        /// </summary>
+        public string CityName { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍦扮偣璇︾粏鍦板潃
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 浠诲姟寮�濮嬫椂闂�
+        /// </summary>
+        public DateTime BeginTime { get; set; }
+
+        /// <summary>
+        /// 浠诲姟缁撴潫鏃堕棿
+        /// </summary>
+        public DateTime EndTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTimeOffset CreatedTime { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs b/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs
new file mode 100644
index 0000000..1a490d5
--- /dev/null
+++ b/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs
@@ -0,0 +1,78 @@
+锘縰sing 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.Task])]
+    public class GetTaskInfosQuery : PagedListQuery<PagedListQueryResult<GetTaskInfosQueryResultItem>, GetTaskInfosQueryResultItem>
+    {
+        /// <summary>
+        /// 鍏抽敭瀛楋紙浠诲姟鍚嶇О锛�
+        /// </summary>
+        public string Keywords { get; set; }
+
+        /// <summary>
+        /// 鍙戝竷鏃堕棿
+        /// </summary>
+        public DateTime? Time { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鐘舵��
+        /// </summary>
+        public EnumTaskStatus? Status { get; set; }
+
+        /// <summary>
+        /// 鍙戝竷鐘舵��
+        /// </summary>
+        public EnumTaskReleaseStatus? ReleaseStatus { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ浠诲姟鍒嗛〉鍒楄〃-缁撴灉-椤�
+    /// </summary>
+    public class GetTaskInfosQueryResultItem
+    {
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        [Required]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍗曞彿
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍛ㄦ湡
+        /// </summary>
+        public EnumBillingMethod BillingMethod { get; set; }
+
+        /// <summary>
+        /// 鏈嶅姟璐�
+        /// </summary>
+        public decimal ServiceFee { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鏂瑰紡
+        /// </summary>
+        public EnumSettlementCycle SettlementCycle { get; set; }
+
+        /// <summary>
+        /// 鎬у埆瑕佹眰
+        /// </summary>
+        public EnumUserGender GenderLimit { get; set; }
+
+        /// <summary>
+        /// 鎶ュ悕浜烘暟
+        /// </summary>
+        public int UserCount { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs b/FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs
new file mode 100644
index 0000000..0275097
--- /dev/null
+++ b/FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs
@@ -0,0 +1,34 @@
+锘縰sing Furion.DatabaseAccessor;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 浠诲姟鏌ヨ
+    /// </summary>
+    public static class TaskInfoQueryable
+    {
+        /// <summary>
+        /// 鑾峰彇浠诲姟鏌ヨ
+        /// </summary>
+        /// <param name="rep"></param>
+        /// <param name="query"></param>
+        /// <param name="logier"></param>
+        /// <returns></returns>
+        public static IQueryable<TaskInfo> GetQueryable(this IRepository<TaskInfo> rep, Func<IQueryable<TaskInfo>, IQueryable<TaskInfo>> query, CurrentLogier logier = null)
+        {
+            logier = logier ?? JwtUtils.GetCurrentLogier();
+            IQueryable<TaskInfo> q = rep.AsQueryable().AsNoTracking()
+                .OrderBy(it => it.BeginTime);
+            if (query != null) q = query(q);
+            return q
+                .Where(it => it.EnterpriseId == logier.EnterpriseId);
+        }
+    }
+}
diff --git a/FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs b/FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs
index 019533f..8320023 100644
--- a/FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs
+++ b/FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs
@@ -57,5 +57,10 @@
         /// 瀹㈡埛绔被鍨�
         /// </summary>
         public EnumClientType ClientType { get; set; }
+
+        /// <summary>
+        /// 浼佷笟Id
+        /// </summary>
+        public Guid? EnterpriseId { get; set; }
     }
 }
diff --git a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs b/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
index 5f1f8ad..9a2f200 100644
--- a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
+++ b/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
@@ -37,6 +37,7 @@
                 { "Level",logier.Level },
                 { "Type",logier.Type },
                 { "ClientType",logier.ClientType },
+                { "EnterpriseId",logier.EnterpriseId },
             });
             // 鑾峰彇鍒锋柊 token
             logier.RefreshToken = JWTEncryption.GenerateRefreshToken(logier.AccessToken, 60 * 24);
@@ -64,6 +65,7 @@
                 logier.PhoneNumber = App.User.FindFirstValue("PhoneNumber");
                 logier.Type = App.User.FindFirstValue("Type").ToEnum<EnumUserType>("璇峰~鍐欑敤鎴风被鍨�").Value;
                 logier.ClientType = App.User.FindFirstValue("ClientType").ToEnum<EnumClientType>("璇峰~鍐欏鎴风绫诲瀷").Value;
+                logier.EnterpriseId = App.User.FindFirstValue("EnterpriseId").ToGuid();
                 return logier;
             }
             return null;
diff --git a/FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs b/FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs
index 4e26bd1..66a3942 100644
--- a/FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs
+++ b/FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs
@@ -35,6 +35,7 @@
                     it.Id,
                     it.Avatar,
                     it.Level,
+                    it.EnterpriseId,
                     it.UserAuth.Name,
                     it.UserAuth.UserName,
                     it.UserAuth.PhoneNumber,
@@ -54,7 +55,8 @@
                 PhoneNumber = userInfo.PhoneNumber,
                 Level = userInfo.Level,
                 Type = request.Type,
-                ClientType = request.ClientType
+                ClientType = request.ClientType,
+                EnterpriseId = userInfo.EnterpriseId,
             };
             JwtUtils.GenerateToken(logier);
 

--
Gitblit v1.9.1