From aa9198ffa4bf42d96628d4d781e9ef055d65b06e Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 04 九月 2025 15:54:11 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs                                        |   45 +
 FlexJobApi.Web.Entry/Startup.cs                                                                     |    4 
 FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetSettlementTaskQuery.cs                        |   82 ++
 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs                                            |   45 +
 FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml                       |   50 +
 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/CloseEnterpriseWalletCommand.cs        |    4 
 FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementStatus.cs                                             |    4 
 FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs                          |   62 +
 FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs                                           |   21 
 FlexJobApi.Core/FlexJobApi.Core.xml                                                                 |  563 +++++++++++++++++
 FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetSettlementTasksQuery.cs                       |  108 +++
 FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/SureTaskSettlementOrderCommand.cs               |   76 ++
 FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs                      |  143 ++++
 FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs   |    4 
 FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs                       |  142 ++++
 FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs |    2 
 FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementOrderStatus.cs                                        |   23 
 FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs                                                 |  164 +++++
 FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs      |   25 
 FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/SureTaskSettlementCommand.cs                    |   21 
 /dev/null                                                                                           |   31 -
 FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs               |  164 +++++
 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs         |    4 
 FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/RevokeTaskSettlementOrderCommand.cs             |   21 
 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs     |    4 
 25 files changed, 1,730 insertions(+), 82 deletions(-)

diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
index 3828d9c..7bde54c 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs
@@ -167,16 +167,61 @@
         public DateTime? LastCheckReceiveTime { get; set; }
 
         /// <summary>
+        /// 缁撶畻鍗曠姸鎬�
+        /// </summary>
+        public EnumTaskSettlementOrderStatus? SettlementOrderStatus { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曞悕绉�
+        /// </summary>
+        public string SettlementOrderName { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曞湴鍧�
+        /// </summary>
+        public string SettlementOrderUrl { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曚笂浼犳椂闂�
+        /// </summary>
+        public DateTime? SettlementOrderTime { get; set; }
+
+        /// <summary>
         /// 缁撶畻鐘舵��
         /// </summary>
         public EnumTaskSettlementStatus? SettlementStatus { get; set; }
 
         /// <summary>
+        /// 缁撶畻閲戦
+        /// </summary>
+        public decimal? SettlementAmount { get; set; }
+
+        /// <summary>
+        /// 瀹炲彂閲戦
+        /// </summary>
+        public decimal? ActualSettlementAmount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻浜烘暟
+        /// </summary>
+        public int SettlementUserCount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻寮�濮嬫椂闂�
+        /// </summary>
+        public DateTime? SettlementStartTime { get; set; }
+
+        /// <summary>
         /// 缁撶畻鏃堕棿
         /// </summary>
         public DateTime? SettlementTime { get; set; }
 
         /// <summary>
+        /// 缁撶畻澶囨敞
+        /// </summary>
+        public string SettlementRemark { get; set; }
+
+        /// <summary>
         /// 鎺ㄨ崘鐘舵��
         /// </summary>
         public EnumTaskRecommendStatus RecommendStatus { get; set; }
diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
index e277a49..c2b64d0 100644
--- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
+++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs
@@ -80,6 +80,51 @@
         public DateTime? LastCheckReceiveTime { get; set; }
 
         /// <summary>
+        /// 鎵�灞為摱琛�
+        /// </summary>
+        public string Bank { get; set; }
+
+        /// <summary>
+        /// 寮�鎴锋敮琛屽悕绉�
+        /// </summary>
+        public string BankBranch { get; set; }
+
+        /// <summary>
+        /// 鏀舵浜哄鍚�
+        /// </summary>
+        public string ReceiveName { get; set; }
+
+        /// <summary>
+        /// 鏀舵璐︽埛
+        /// </summary>
+        public string ReceiveAccount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻閲戦
+        /// </summary>
+        public decimal? SettlementAmount { get; set; }
+
+        /// <summary>
+        /// 瀹炲彂閲戦
+        /// </summary>
+        public decimal? ActualSettlementAmount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鐘舵��
+        /// </summary>
+        public EnumTaskSettlementStatus? SettlementStatus { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鏃堕棿
+        /// </summary>
+        public DateTime? SettlementTime { get; set; }
+
+        /// <summary>
+        /// 缁撶畻澶囨敞
+        /// </summary>
+        public string SettlementRemark { get; set; }
+
+        /// <summary>
         /// 鎻愪氦
         /// </summary>
         public List<TaskInfoUserSubmit> Submits { get; set; }
diff --git a/FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs b/FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs
index f5a9300..346dd77 100644
--- a/FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Users/UserBankCard.cs
@@ -26,21 +26,32 @@
         /// 閾惰鍗″彿
         /// </summary>
         [MaxLength(32)]
-        [Required]
         public string Code { get; set; }
 
         /// <summary>
-        /// 寮�鎴疯
+        /// 鎵�灞為摱琛�
         /// </summary>
-        [MaxLength(128)]
-        [Required]
         public string Bank { get; set; }
+
+        /// <summary>
+        /// 鎵�灞炴敮琛�
+        /// </summary>
+        public string BankBranch { get; set; }
+
+        /// <summary>
+        /// 濮撳悕
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 韬唤璇�
+        /// </summary>
+        public string Identity { get; set; }
 
         /// <summary>
         /// 閾惰棰勭暀鎵嬫満鍙�
         /// </summary>
         [MaxLength(11)]
-        [Required]
         public string PhoneNumber { get; set; }
     }
 }
diff --git a/FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementOrderStatus.cs b/FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementOrderStatus.cs
new file mode 100644
index 0000000..e25a7a7
--- /dev/null
+++ b/FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementOrderStatus.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 EnumTaskSettlementOrderStatus
+    {
+        /// <summary>
+        /// 寰呬笂浼�
+        /// </summary>
+        Wait = 10,
+        /// <summary>
+        /// 宸蹭笂浼�
+        /// </summary>
+        Completed = 20
+    }
+}
diff --git a/FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementStatus.cs b/FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementStatus.cs
index 0745d45..0c3e3fc 100644
--- a/FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementStatus.cs
+++ b/FlexJobApi.Core/Enums/Tasks/EnumTaskSettlementStatus.cs
@@ -16,6 +16,10 @@
         /// </summary>
         Wait = 10,
         /// <summary>
+        /// 缁撶畻涓�
+        /// </summary>
+        InProcess = 20,
+        /// <summary>
         /// 宸茬粨绠�
         /// </summary>
         Completed = 30,
diff --git a/FlexJobApi.Core/Enums/Tasks/EnumTaskUserSettlementStatus.cs b/FlexJobApi.Core/Enums/Tasks/EnumTaskUserSettlementStatus.cs
deleted file mode 100644
index 2c5910b..0000000
--- a/FlexJobApi.Core/Enums/Tasks/EnumTaskUserSettlementStatus.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace FlexJobApi.Core
-{
-    /// <summary>
-    /// 浠诲姟鐢ㄦ埛缁撶畻鐘舵��
-    /// </summary>
-    public enum EnumTaskUserSettlementStatus
-    {
-        /// <summary>
-        /// 寰呯粨绠�
-        /// </summary>
-        Wait = 10,
-        /// <summary>
-        /// 缁撶畻涓�
-        /// </summary>
-        InProcess = 20,
-        /// <summary>
-        /// 宸茬粨绠�
-        /// </summary>
-        Completed = 30,
-        /// <summary>
-        /// 缁撶畻澶辫触
-        /// </summary>
-        Fail = 40
-    }
-}
diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index 43259c5..e374924 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -884,14 +884,59 @@
             鏈�杩戦獙鏀舵椂闂�
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.SettlementOrderStatus">
+            <summary>
+            缁撶畻鍗曠姸鎬�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.SettlementOrderName">
+            <summary>
+            缁撶畻鍗曞悕绉�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.SettlementOrderUrl">
+            <summary>
+            缁撶畻鍗曞湴鍧�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.SettlementOrderTime">
+            <summary>
+            缁撶畻鍗曚笂浼犳椂闂�
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.TaskInfo.SettlementStatus">
             <summary>
             缁撶畻鐘舵��
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.SettlementAmount">
+            <summary>
+            缁撶畻閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.ActualSettlementAmount">
+            <summary>
+            瀹炲彂閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.SettlementUserCount">
+            <summary>
+            缁撶畻浜烘暟
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.SettlementStartTime">
+            <summary>
+            缁撶畻寮�濮嬫椂闂�
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.TaskInfo.SettlementTime">
             <summary>
             缁撶畻鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfo.SettlementRemark">
+            <summary>
+            缁撶畻澶囨敞
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.TaskInfo.RecommendStatus">
@@ -1022,6 +1067,51 @@
         <member name="P:FlexJobApi.Core.TaskInfoUser.LastCheckReceiveTime">
             <summary>
             鏈�杩戦獙鏀舵椂闂�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.Bank">
+            <summary>
+            鎵�灞為摱琛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.BankBranch">
+            <summary>
+            寮�鎴锋敮琛屽悕绉�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.ReceiveName">
+            <summary>
+            鏀舵浜哄鍚�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.ReceiveAccount">
+            <summary>
+            鏀舵璐︽埛
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.SettlementAmount">
+            <summary>
+            缁撶畻閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.ActualSettlementAmount">
+            <summary>
+            瀹炲彂閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.SettlementStatus">
+            <summary>
+            缁撶畻鐘舵��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.SettlementTime">
+            <summary>
+            缁撶畻鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.TaskInfoUser.SettlementRemark">
+            <summary>
+            缁撶畻澶囨敞
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.TaskInfoUser.Submits">
@@ -3079,7 +3169,22 @@
         </member>
         <member name="P:FlexJobApi.Core.UserBankCard.Bank">
             <summary>
-            寮�鎴疯
+            鎵�灞為摱琛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.UserBankCard.BankBranch">
+            <summary>
+            鎵�灞炴敮琛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.UserBankCard.Name">
+            <summary>
+            濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.UserBankCard.Identity">
+            <summary>
+            韬唤璇�
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.UserBankCard.PhoneNumber">
@@ -3702,6 +3807,21 @@
             宸插仠姝�
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.EnumTaskSettlementOrderStatus">
+            <summary>
+            浠诲姟缁撶畻鍗曠姸鎬�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumTaskSettlementOrderStatus.Wait">
+            <summary>
+            寰呬笂浼�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumTaskSettlementOrderStatus.Completed">
+            <summary>
+            宸蹭笂浼�
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.EnumTaskSettlementStatus">
             <summary>
             浠诲姟缁撶畻鐘舵��
@@ -3710,6 +3830,11 @@
         <member name="F:FlexJobApi.Core.EnumTaskSettlementStatus.Wait">
             <summary>
             寰呯粨绠�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumTaskSettlementStatus.InProcess">
+            <summary>
+            缁撶畻涓�
             </summary>
         </member>
         <member name="F:FlexJobApi.Core.EnumTaskSettlementStatus.Completed">
@@ -3765,31 +3890,6 @@
         <member name="F:FlexJobApi.Core.EnumTaskUserHireStatus.Refuse">
             <summary>
             宸茶阿缁�
-            </summary>
-        </member>
-        <member name="T:FlexJobApi.Core.EnumTaskUserSettlementStatus">
-            <summary>
-            浠诲姟鐢ㄦ埛缁撶畻鐘舵��
-            </summary>
-        </member>
-        <member name="F:FlexJobApi.Core.EnumTaskUserSettlementStatus.Wait">
-            <summary>
-            寰呯粨绠�
-            </summary>
-        </member>
-        <member name="F:FlexJobApi.Core.EnumTaskUserSettlementStatus.InProcess">
-            <summary>
-            缁撶畻涓�
-            </summary>
-        </member>
-        <member name="F:FlexJobApi.Core.EnumTaskUserSettlementStatus.Completed">
-            <summary>
-            宸茬粨绠�
-            </summary>
-        </member>
-        <member name="F:FlexJobApi.Core.EnumTaskUserSettlementStatus.Fail">
-            <summary>
-            缁撶畻澶辫触
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.EnumTaskUserSignContractStatus">
@@ -4476,6 +4576,16 @@
         <member name="M:FlexJobApi.Core.CalcUserAgeByIdCardJob.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User})">
             <summary>
             瀹氭椂鏍规嵁韬唤璇佽绠楃敤鎴峰勾榫�
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.CompleteTaskSettlementT1Job">
+            <summary>
+            瀹屾垚浠诲姟缁撶畻T+1
+            </summary>
+        </member>
+        <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWalletTransaction},FlexJobApi.Core.AlipayUtils)">
+            <summary>
+            瀹屾垚浠诲姟缁撶畻T+1
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.DeleteDictionaryCategoryCommand">
@@ -6666,6 +6776,16 @@
             鍒犻櫎浠诲姟
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.RevokeTaskSettlementOrderCommand">
+            <summary>
+            鎾ゅ洖缁撶畻
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.RevokeTaskSettlementOrderCommand.TaskInfoId">
+            <summary>
+            浠诲姟Id
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.SaveTaskInfoCommand">
             <summary>
             淇濆瓨浠诲姟
@@ -6784,6 +6904,76 @@
         <member name="P:FlexJobApi.Core.SetTaskInfoReleaseStatusCommand.ReleaseStatus">
             <summary>
             鍙戝竷鐘舵��
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.SureTaskSettlementCommand">
+            <summary>
+            纭缁撶畻
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementCommand.TaskInfoId">
+            <summary>
+            浠诲姟Id
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.SureTaskSettlementOrderCommand">
+            <summary>
+            纭缁撶畻鍗�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommand.TaskInfoId">
+            <summary>
+            浠诲姟Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommand.SettlementOrderUrl">
+            <summary>
+            缁撶畻鍗曞湴鍧�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommand.TaskInfoUsers">
+            <summary>
+            缁撶畻鍚嶅崟
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.SureTaskSettlementOrderCommandUser">
+            <summary>
+            纭缁撶畻鍗�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommandUser.Id">
+            <summary>
+            浠诲姟鐢ㄦ埛Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommandUser.Name">
+            <summary>
+            濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommandUser.Bank">
+            <summary>
+            鎵�灞為摱琛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommandUser.BankBranch">
+            <summary>
+            寮�鎴锋敮琛屽悕绉�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommandUser.ReceiveAccount">
+            <summary>
+            鏀舵璐︽埛
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommandUser.SettlementAmount">
+            <summary>
+            缁撶畻閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.SureTaskSettlementOrderCommandUser.ActualSettlementAmount">
+            <summary>
+            瀹炲彂閲戦
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.GetOpenTaskInfosQuery">
@@ -7074,6 +7264,166 @@
         <member name="F:FlexJobApi.Core.GetPersonalHireTaskInfosQueryStatus.Completed">
             <summary>
             宸插畬鎴�
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTaskQuery">
+            <summary>
+            鏌ヨ缁撶畻鍗曡鎯�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQuery.Id">
+            <summary>
+            Id
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTaskQueryResult">
+            <summary>
+            鏌ヨ缁撶畻鍗曡鎯�-缁撴灉
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.Id">
+            <summary>
+            Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.Name">
+            <summary>
+            浠诲姟鍚嶇О
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.Code">
+            <summary>
+            浠诲姟鍗曞彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.SettlementOrderStatus">
+            <summary>
+            缁撶畻鍗曠姸鎬�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.SettlementOrderName">
+            <summary>
+            缁撶畻鍗曞悕绉�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.SettlementOrderTime">
+            <summary>
+            涓婁紶鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.ActualSettlementAmount">
+            <summary>
+            瀹炲彂閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.SettlementAmount">
+            <summary>
+            缁撶畻閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.SettlementStatus">
+            <summary>
+            缁撶畻鐘舵��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.SettlementTime">
+            <summary>
+            缁撶畻鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskQueryResult.SettlementRemark">
+            <summary>
+            澶囨敞
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTasksQuery">
+            <summary>
+            鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQuery.Keywords">
+            <summary>
+            鍏抽敭瀛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQuery.SettlementOrderStatus">
+            <summary>
+            缁撶畻鍗曠姸鎬�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQuery.SettlementStatus">
+            <summary>
+            缁撶畻鐘舵��
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTasksQueryResult">
+            <summary>
+            鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTasksQueryResultItem">
+            <summary>
+            鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.Id">
+            <summary>
+            浠诲姟Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.Name">
+            <summary>
+            浠诲姟鍚嶇О
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.Code">
+            <summary>
+            浠诲姟鍗曞彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.SettlementOrderStatus">
+            <summary>
+            缁撶畻鍗曠姸鎬�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.SettlementOrderName">
+            <summary>
+            缁撶畻鍗曞悕绉�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.SettlementOrderTime">
+            <summary>
+            涓婁紶鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.ActualSettlementAmount">
+            <summary>
+            瀹炲彂閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.SettlementAmount">
+            <summary>
+            缁撶畻閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.SettlementStatus">
+            <summary>
+            缁撶畻鐘舵��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.SettlementTime">
+            <summary>
+            缁撶畻鏃堕棿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.SettlementRemark">
+            <summary>
+            澶囨敞
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTasksQueryResultItem.SettlementUserCount">
+            <summary>
+            缁撶畻浜烘暟
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.GetTaskEnterpriseQuery">
@@ -7839,6 +8189,152 @@
         <member name="P:FlexJobApi.Core.GetArrangeTaskUsersQueryResultItem.ArrangeStatus">
             <summary>
             瀹夋帓鐘舵��
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTaskUsersQuery">
+            <summary>
+            鏌ヨ缁撶畻鍚嶅崟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQuery.TaskInfoId">
+            <summary>
+            浠诲姟Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQuery.Keywords">
+            <summary>
+            鍏抽敭瀛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQuery.SettlementOrderUrl">
+            <summary>
+            缁撶畻鍗曞湴鍧�
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTaskUsersQueryResult">
+            <summary>
+            鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResult.Errors">
+            <summary>
+            閿欒淇℃伅
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTaskUsersQueryResultError">
+            <summary>
+            鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultError.ErrorMessage">
+            <summary>
+            閿欒淇℃伅
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow">
+            <summary>
+            鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow.Name">
+            <summary>
+            濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow.Identity">
+            <summary>
+            韬唤璇佸彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow.SettlementAmount">
+            <summary>
+            缁撶畻閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow.ActualSettlementAmount">
+            <summary>
+            瀹炲彂閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow.ReceiveAccount">
+            <summary>
+            鏀舵璐︽埛
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow.Bank">
+            <summary>
+            鎵�灞為摱琛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow.BankBranch">
+            <summary>
+            寮�鎴锋敮琛屽悕绉�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultExcelRow.TaskName">
+            <summary>
+            浠诲姟鍚嶇О
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem">
+            <summary>
+            鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.Id">
+            <summary>
+            浠诲姟鐢ㄦ埛Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.Name">
+            <summary>
+            濮撳悕
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.Identity">
+            <summary>
+            韬唤璇佸彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.ContactPhoneNumber">
+            <summary>
+            鎵嬫満鍙�
+            </summary>
+            <remarks>鑱旂郴鐢佃瘽</remarks>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.CheckReceiveStatus">
+            <summary>
+            楠屾敹鐘舵��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.Bank">
+            <summary>
+            鎵�灞為摱琛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.BankBranch">
+            <summary>
+            寮�鎴锋敮琛屽悕绉�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.ReceiveAccount">
+            <summary>
+            鏀舵璐︽埛
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.SettlementAmount">
+            <summary>
+            缁撶畻閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.ActualSettlementAmount">
+            <summary>
+            瀹炲彂閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetSettlementTaskUsersQueryResultItem.SettlementTime">
+            <summary>
+            缁撶畻鏃堕棿
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.GetTaskUserHireStatusQuery">
@@ -10022,6 +10518,11 @@
             鍏抽棴浼佷笟閽卞寘
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.CloseEnterpriseWalletCommand.EnterpriseId">
+            <summary>
+            浼佷笟Id
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.CloseEnterpriseWalletCommand.Access">
             <summary>
             閫氶亾
@@ -10122,6 +10623,11 @@
             寮�閫氫紒涓氶挶鍖�
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.OpenEnterpriseWalletCommand.EnterpriseId">
+            <summary>
+            浼佷笟Id
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.OpenEnterpriseWalletCommand.Access">
             <summary>
             閫氶亾
@@ -10142,6 +10648,11 @@
             浼佷笟閽卞寘鍏呭��
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.RechargeEnterpriseWalletCommand.EnterpriseId">
+            <summary>
+            浼佷笟Id
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.RechargeEnterpriseWalletCommand.Access">
             <summary>
             閫氶亾
diff --git a/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs b/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs
new file mode 100644
index 0000000..52742c1
--- /dev/null
+++ b/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs
@@ -0,0 +1,164 @@
+锘縰sing Aop.Api.Domain;
+using Furion;
+using Furion.DatabaseAccessor;
+using Furion.DistributedIDGenerator;
+using Furion.FriendlyException;
+using Furion.Schedule;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using static Microsoft.AspNetCore.Razor.Language.TagHelperMetadata;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 瀹屾垚浠诲姟缁撶畻T+1
+    /// </summary>
+    public class CompleteTaskSettlementT1Job(
+            IRepository<TaskInfo> rep,
+            IRepository<TaskInfoUser> repTaskInfoUser,
+            IRepository<EnterpriseWallet> repEnterpriseWallet,
+            IRepository<EnterpriseWalletTransaction> repEnterpriseWalletTransaction,
+            AlipayUtils alipayUtils
+        ) : IJob
+    {
+        private readonly IRepository<TaskInfo> rep = rep;
+        private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser;
+        private readonly IRepository<EnterpriseWallet> repEnterpriseWallet = repEnterpriseWallet;
+        private readonly AlipayUtils alipayUtils = alipayUtils;
+
+        [UnitOfWork(false)]
+        public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
+        {
+            var now = DateTime.Now;
+            var env = App.GetConfig<string>("Environment");
+            var q = rep.AsQueryable()
+                .Where(it => it.SettlementStatus == EnumTaskSettlementStatus.InProcess);
+            var minTime = env == "Local"
+                ? now.AddMinutes(-1)
+                : env == "Test"
+                ? now.AddMinutes(-5)
+                : now.AddDays(-1);
+            q = q.Where(it => it.SettlementStartTime.HasValue && it.SettlementStartTime < minTime);
+            var tasks = await q.ToListAsync();
+            var enterpriseIds = tasks.DistinctSelect(it => it.EnterpriseId);
+            var taskIds = tasks.DistinctSelect(it => it.Id);
+            var taskUsers = await repTaskInfoUser
+                .Where(it => taskIds.Contains(it.TaskInfoId) && it.SettlementStatus == EnumTaskSettlementStatus.InProcess)
+                .ToListAsync();
+            var wallets = await repEnterpriseWallet.AsQueryable()
+                .Where(it => enterpriseIds.Contains(it.EnterpriseId) && it.Access == EnumEnterpriseWalletAccess.Alipay)
+                .ToListAsync();
+            foreach (var wallet in wallets)
+            {
+                var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel
+                {
+                    AccountBookId = wallet.AccountBookId,
+                    SceneCode = "SATF_FUND_BOOK",
+                    MerchantUserId = wallet.Code,
+                });
+                if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
+                wallet.Balance = response.AvailableAmount.ToDecimal() ?? 0;
+                await repEnterpriseWallet.UpdateNowAsync(wallet);
+            }
+            if (tasks.IsNotNull())
+            {
+                foreach (var task in tasks)
+                {
+                    var wallet = wallets.FirstOrDefault(it => it.EnterpriseId == task.EnterpriseId);
+                    task.SettlementStatus = EnumTaskSettlementStatus.Completed;
+                    task.SettlementTime = DateTime.Now;
+                    await rep.UpdateNowAsync(task);
+
+                    var users = taskUsers.Where(it => it.TaskInfoId == task.Id).ToList();
+                    foreach (var user in users)
+                    {
+                        user.SettlementStatus = EnumTaskSettlementStatus.Completed;
+                        user.SettlementTime = DateTime.Now;
+                        await repTaskInfoUser.UpdateNowAsync(user);
+
+                        var order = new EnterpriseWalletTransaction();
+                        order.Type = EnumEnterpriseWalletTransactionType.Recharge;
+                        order.WalletId = wallet.Id;
+                        order.Amount = user.ActualSettlementAmount ?? 0;
+                        order.Remark = user.SettlementRemark;
+                        order.ProductCode = "SINGLE_TRANSFER_NO_PWD";
+                        order.BizScene = "ENTRUST_TRANSFER";
+                        order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitSubmit;
+                        order.Balance = wallet.Balance;
+                        await SetCode(order);
+                        await repEnterpriseWalletTransaction.InsertNowAsync(order);
+
+                        var response = alipayUtils.FundTransUniTransfer(new AlipayFundTransUniTransferModel
+                        {
+                            OutBizNo = order.Code,
+                            TransAmount = order.Amount.ToString(),
+                            ProductCode = order.ProductCode,
+                            BizScene = order.BizScene,
+                            PayeeInfo = new Participant
+                            {
+                                IdentityType = "ALIPAY_LOGON_ID",
+                                Identity = user.ReceiveAccount,
+                                Name = user.ReceiveName,
+                            },
+                            PayerInfo = new Participant
+                            {
+                                IdentityType = "ACCOUNT_BOOK_ID",
+                                Identity = wallet.AccountBookId,
+                                ExtInfo = new
+                                {
+                                    agreement_no = wallet.AgreementNo,
+                                }.ToJson(),
+                            },
+                            OrderTitle = order.Remark,
+                            Remark = order.Remark,
+                            BusinessParams = new
+                            {
+                                withdraw_timeliness = "T0"
+                            }.ToJson()
+                        }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify");
+                        if (response.IsError)
+                        {
+                            order.ErrorCode = response.Code;
+                            order.FailReason = response.SubMsg ?? response.Msg;
+                        }
+                        else
+                        {
+                            order.OrderId = response.OrderId;
+                            order.PayFundOrderId = response.PayFundOrderId;
+                            order.SettleSerialNo = response.SettleSerialNo;
+                            order.TransDate = response.TransDate.ToDateTime();
+                            order.Link = response.Link;
+                            order.Status = response.Status;
+                            order.SubStatus = response.SubStatus;
+                            order.TransactionStatus = response.Status == "SUCCESS"
+                                ? EnumEnterpriseWalletTransactionStatus.Success
+                                : response.Status == "DEALING"
+                                ? EnumEnterpriseWalletTransactionStatus.Dealing
+                                : response.Status == "REFUND"
+                                ? EnumEnterpriseWalletTransactionStatus.Refund
+                                : EnumEnterpriseWalletTransactionStatus.Fail;
+                            await repEnterpriseWalletTransaction.UpdateNowAsync(order);
+                        }
+                    }
+                }
+            }
+        }
+
+        private async Task SetCode(EnterpriseWalletTransaction entity)
+        {
+            entity.Code = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
+            var exist = await repEnterpriseWalletTransaction.AsQueryable().AsNoTracking()
+                .AnyAsync(it => it.Code == entity.Code);
+            if (exist)
+            {
+                await SetCode(entity);
+            }
+        }
+
+    }
+}
diff --git a/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs
new file mode 100644
index 0000000..ccdd30a
--- /dev/null
+++ b/FlexJobApi.Core/Models/FlexJobServer/TaskUsers/Queries/GetSettlementTaskUsersQuery.cs
@@ -0,0 +1,164 @@
+锘縰sing 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.FlexJobServerTaskUser])]
+    public class GetSettlementTaskUsersQuery : PagedListQuery<GetSettlementTaskUsersQueryResult, GetSettlementTaskUsersQueryResultItem>
+    {
+        /// <summary>
+        /// 浠诲姟Id
+        /// </summary>
+        public Guid TaskInfoId { get; set; }
+
+        /// <summary>
+        /// 鍏抽敭瀛�
+        /// </summary>
+        public string Keywords { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曞湴鍧�
+        /// </summary>
+        public string SettlementOrderUrl { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+    /// </summary>
+    public class GetSettlementTaskUsersQueryResult : PagedListQueryResult<GetSettlementTaskUsersQueryResultItem>
+    {
+        /// <summary>
+        /// 閿欒淇℃伅
+        /// </summary>
+        public List<GetSettlementTaskUsersQueryResultError> Errors { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+    /// </summary>
+    public class GetSettlementTaskUsersQueryResultError : GetSettlementTaskUsersQueryResultExcelRow
+    {
+        /// <summary>
+        /// 閿欒淇℃伅
+        /// </summary>
+        public string ErrorMessage { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+    /// </summary>
+    public class GetSettlementTaskUsersQueryResultExcelRow
+    {
+        /// <summary>
+        /// 濮撳悕
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 韬唤璇佸彿
+        /// </summary>
+        public string Identity { get; set; }
+
+        /// <summary>
+        /// 缁撶畻閲戦
+        /// </summary>
+        public decimal? SettlementAmount { get; set; }
+
+        /// <summary>
+        /// 瀹炲彂閲戦
+        /// </summary>
+        public decimal? ActualSettlementAmount { get; set; }
+
+        /// <summary>
+        /// 鏀舵璐︽埛
+        /// </summary>
+        public string ReceiveAccount { get; set; }
+
+        /// <summary>
+        /// 鎵�灞為摱琛�
+        /// </summary>
+        public string Bank { get; set; }
+
+        /// <summary>
+        /// 寮�鎴锋敮琛屽悕绉�
+        /// </summary>
+        public string BankBranch { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        public string TaskName { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+    /// </summary>
+    public class GetSettlementTaskUsersQueryResultItem
+    {
+        /// <summary>
+        /// 浠诲姟鐢ㄦ埛Id
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 濮撳悕
+        /// </summary>
+        [MaxLength(32)]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 韬唤璇佸彿
+        /// </summary>
+        public string Identity { get; set; }
+
+        /// <summary>
+        /// 鎵嬫満鍙�
+        /// </summary>
+        /// <remarks>鑱旂郴鐢佃瘽</remarks>
+        [MaxLength(11)]
+        public string ContactPhoneNumber { get; set; }
+
+        /// <summary>
+        /// 楠屾敹鐘舵��
+        /// </summary>
+        public EnumTaskCheckReceiveStatus? CheckReceiveStatus { get; set; }
+
+        /// <summary>
+        /// 鎵�灞為摱琛�
+        /// </summary>
+        public string Bank { get; set; }
+
+        /// <summary>
+        /// 寮�鎴锋敮琛屽悕绉�
+        /// </summary>
+        public string BankBranch { get; set; }
+
+        /// <summary>
+        /// 鏀舵璐︽埛
+        /// </summary>
+        public string ReceiveAccount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻閲戦
+        /// </summary>
+        public decimal? SettlementAmount { get; set; }
+
+        /// <summary>
+        /// 瀹炲彂閲戦
+        /// </summary>
+        public decimal? ActualSettlementAmount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鏃堕棿
+        /// </summary>
+        public DateTime? SettlementTime { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/RevokeTaskSettlementOrderCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/RevokeTaskSettlementOrderCommand.cs
new file mode 100644
index 0000000..105b96e
--- /dev/null
+++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/RevokeTaskSettlementOrderCommand.cs
@@ -0,0 +1,21 @@
+锘縰sing MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鎾ゅ洖缁撶畻
+    /// </summary>
+    [Resource([EnumResourceController.FlexJobServerTask])]
+    public class RevokeTaskSettlementOrderCommand : IRequest<Guid>
+    {
+        /// <summary>
+        /// 浠诲姟Id
+        /// </summary>
+        public Guid TaskInfoId { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/SureTaskSettlementCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/SureTaskSettlementCommand.cs
new file mode 100644
index 0000000..3fe534e
--- /dev/null
+++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/SureTaskSettlementCommand.cs
@@ -0,0 +1,21 @@
+锘縰sing MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 纭缁撶畻
+    /// </summary>
+    [Resource([EnumResourceController.FlexJobServerTask])]
+    public class SureTaskSettlementCommand : IRequest<Guid>
+    {
+        /// <summary>
+        /// 浠诲姟Id
+        /// </summary>
+        public Guid TaskInfoId { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/SureTaskSettlementOrderCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/SureTaskSettlementOrderCommand.cs
new file mode 100644
index 0000000..bd1db69
--- /dev/null
+++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/SureTaskSettlementOrderCommand.cs
@@ -0,0 +1,76 @@
+锘縰sing 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.FlexJobServerTask])]
+    public class SureTaskSettlementOrderCommand : IRequest<Guid>
+    {
+        /// <summary>
+        /// 浠诲姟Id
+        /// </summary>
+        public Guid TaskInfoId { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曞湴鍧�
+        /// </summary>
+        public string SettlementOrderUrl { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍚嶅崟
+        /// </summary>
+        public List<SureTaskSettlementOrderCommandUser> TaskInfoUsers { get; set; }
+    }
+
+    /// <summary>
+    /// 纭缁撶畻鍗�
+    /// </summary>
+    public class SureTaskSettlementOrderCommandUser
+    {
+        /// <summary>
+        /// 浠诲姟鐢ㄦ埛Id
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 濮撳悕
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鎵�灞為摱琛�
+        /// </summary>
+        public string Bank { get; set; }
+
+        /// <summary>
+        /// 寮�鎴锋敮琛屽悕绉�
+        /// </summary>
+        public string BankBranch { get; set; }
+
+        /// <summary>
+        /// 鏀舵璐︽埛
+        /// </summary>
+        [Required]
+        public string ReceiveAccount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻閲戦
+        /// </summary>
+        [Required]
+        public decimal? SettlementAmount { get; set; }
+
+        /// <summary>
+        /// 瀹炲彂閲戦
+        /// </summary>
+        [Required]
+        public decimal? ActualSettlementAmount { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetSettlementTaskQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetSettlementTaskQuery.cs
new file mode 100644
index 0000000..bec0cb2
--- /dev/null
+++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetSettlementTaskQuery.cs
@@ -0,0 +1,82 @@
+锘縰sing MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 鏌ヨ缁撶畻鍗曡鎯�
+    /// </summary>
+    [Resource([EnumResourceController.FlexJobServerTask])]
+    public class GetSettlementTaskQuery : IRequest<GetSettlementTaskQueryResult>
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        public Guid Id { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ缁撶畻鍗曡鎯�-缁撴灉
+    /// </summary>
+    public class GetSettlementTaskQueryResult
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍗曞彿
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曠姸鎬�
+        /// </summary>
+        public EnumTaskSettlementOrderStatus? SettlementOrderStatus { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曞悕绉�
+        /// </summary>
+        public string SettlementOrderName { get; set; }
+
+        /// <summary>
+        /// 涓婁紶鏃堕棿
+        /// </summary>
+        public DateTime? SettlementOrderTime { get; set; }
+
+        /// <summary>
+        /// 瀹炲彂閲戦
+        /// </summary>
+        public decimal? ActualSettlementAmount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻閲戦
+        /// </summary>
+        public decimal? SettlementAmount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鐘舵��
+        /// </summary>
+        public EnumTaskSettlementStatus? SettlementStatus { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鏃堕棿
+        /// </summary>
+        public DateTime? SettlementTime { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string SettlementRemark { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetSettlementTasksQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetSettlementTasksQuery.cs
new file mode 100644
index 0000000..1abef94
--- /dev/null
+++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetSettlementTasksQuery.cs
@@ -0,0 +1,108 @@
+锘縰sing 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.FlexJobServerTask])]
+    public class GetSettlementTasksQuery : PagedListQuery<GetSettlementTasksQueryResult, GetSettlementTasksQueryResultItem>
+    {
+        /// <summary>
+        /// 鍏抽敭瀛�
+        /// </summary>
+        public string Keywords { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曠姸鎬�
+        /// </summary>
+        public EnumTaskSettlementOrderStatus? SettlementOrderStatus { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鐘舵��
+        /// </summary>
+        public EnumTaskSettlementStatus? SettlementStatus { get; set; }
+
+    }
+
+    /// <summary>
+    /// 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+    /// </summary>
+    public class GetSettlementTasksQueryResult : PagedListQueryResult<GetSettlementTasksQueryResultItem>
+    {
+
+    }
+
+
+    /// <summary>
+    /// 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+    /// </summary>
+    public class GetSettlementTasksQueryResultItem
+    {
+        /// <summary>
+        /// 浠诲姟Id
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍗曞彿
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曠姸鎬�
+        /// </summary>
+        public EnumTaskSettlementOrderStatus? SettlementOrderStatus { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鍗曞悕绉�
+        /// </summary>
+        public string SettlementOrderName { get; set; }
+
+        /// <summary>
+        /// 涓婁紶鏃堕棿
+        /// </summary>
+        public DateTime? SettlementOrderTime { get; set; }
+
+        /// <summary>
+        /// 瀹炲彂閲戦
+        /// </summary>
+        public decimal? ActualSettlementAmount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻閲戦
+        /// </summary>
+        public decimal? SettlementAmount { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鐘舵��
+        /// </summary>
+        public EnumTaskSettlementStatus? SettlementStatus { get; set; }
+
+        /// <summary>
+        /// 缁撶畻鏃堕棿
+        /// </summary>
+        public DateTime? SettlementTime { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string SettlementRemark { get; set; }
+
+        /// <summary>
+        /// 缁撶畻浜烘暟
+        /// </summary>
+        public int SettlementUserCount { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/CloseEnterpriseWalletCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/CloseEnterpriseWalletCommand.cs
index af114a2..1a076d7 100644
--- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/CloseEnterpriseWalletCommand.cs
+++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/CloseEnterpriseWalletCommand.cs
@@ -14,6 +14,10 @@
     public class CloseEnterpriseWalletCommand : IRequest<Guid>
     {
         /// <summary>
+        /// 浼佷笟Id
+        /// </summary>
+        public Guid? EnterpriseId { get; set; }
+        /// <summary>
         /// 閫氶亾
         /// </summary>
         public EnumEnterpriseWalletAccess Access { get; set; }
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs
index 63695cb..c0dda74 100644
--- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs
+++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/OpenEnterpriseWalletCommand.cs
@@ -14,6 +14,10 @@
     public class OpenEnterpriseWalletCommand : IRequest<OpenEnterpriseWalletCommandResult>
     {
         /// <summary>
+        /// 浼佷笟Id
+        /// </summary>
+        public Guid? EnterpriseId { get; set; }
+        /// <summary>
         /// 閫氶亾
         /// </summary>
         public EnumEnterpriseWalletAccess Access { get; set; }
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs
index bacade2..e6db612 100644
--- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs
+++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs
@@ -14,6 +14,10 @@
     public class RechargeEnterpriseWalletCommand : IRequest<RechargeEnterpriseWalletCommandResult>
     {
         /// <summary>
+        /// 浼佷笟Id
+        /// </summary>
+        public Guid? EnterpriseId { get; set; }
+        /// <summary>
         /// 閫氶亾
         /// </summary>
         public EnumEnterpriseWalletAccess Access { get; set; }
diff --git a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml
index c648ea6..8365c12 100644
--- a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml
+++ b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml
@@ -85,7 +85,7 @@
             浠诲姟鍛戒护澶勭悊鍣�
             </summary>
         </member>
-        <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo})">
+        <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},FlexJobApi.Core.AlipayUtils)">
             <summary>
             浠诲姟鍛戒护澶勭悊鍣�
             </summary>
@@ -118,6 +118,30 @@
         <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoCommandHandler.Handle(FlexJobApi.Core.DeleteTaskInfoCommand,System.Threading.CancellationToken)">
             <summary>
             鍒犻櫎浠诲姟
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoCommandHandler.Handle(FlexJobApi.Core.SureTaskSettlementOrderCommand,System.Threading.CancellationToken)">
+            <summary>
+            纭缁撶畻鍗�
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoCommandHandler.Handle(FlexJobApi.Core.RevokeTaskSettlementOrderCommand,System.Threading.CancellationToken)">
+            <summary>
+            鎾ゅ洖缁撶畻
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoCommandHandler.Handle(FlexJobApi.Core.SureTaskSettlementCommand,System.Threading.CancellationToken)">
+            <summary>
+            纭缁撶畻
             </summary>
             <param name="request"></param>
             <param name="cancellationToken"></param>
@@ -194,6 +218,22 @@
         <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoQueryHandler.Handle(FlexJobApi.Core.GetPersonalCancelTaskInfosQuery,System.Threading.CancellationToken)">
             <summary>
             鎴戠殑宸插彇娑堝垎椤靛垪琛�
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoQueryHandler.Handle(FlexJobApi.Core.GetSettlementTasksQuery,System.Threading.CancellationToken)">
+            <summary>
+            鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
+        <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoQueryHandler.Handle(FlexJobApi.Core.GetSettlementTaskQuery,System.Threading.CancellationToken)">
+            <summary>
+            鏌ヨ缁撶畻鍗曡鎯�
             </summary>
             <param name="request"></param>
             <param name="cancellationToken"></param>
@@ -293,5 +333,13 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="M:FlexJobApi.FlexJobServer.Application.TaskUserQueryHandler.Handle(FlexJobApi.Core.GetSettlementTaskUsersQuery,System.Threading.CancellationToken)">
+            <summary>
+            鏌ヨ缁撶畻鍚嶅崟鍒嗛〉鍒楄〃鏁版嵁
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
     </members>
 </doc>
diff --git a/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs
index a533d6f..97a3f74 100644
--- a/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs
+++ b/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs
@@ -148,13 +148,15 @@
             var taskUserCheckReceiveStatuses = await repTaskInfoUser.AsQueryable().AsNoTracking()
                 .Where(it =>
                     it.TaskInfoId == task.Id
-                    && it.Id != taskUser.Id)
+                    && it.Id != taskUser.Id
+                    && it.ArrangeStatus == EnumTaskUserArrangeStatus.Complete)
                 .Select(it => it.CheckReceiveStatus)
                 .ToListAsync();
             taskUserCheckReceiveStatuses.Add(EnumTaskCheckReceiveStatus.Completed);
             if (taskUserCheckReceiveStatuses.All(it => it == EnumTaskCheckReceiveStatus.Completed))
             {
                 task.CheckReceiveStatus = EnumTaskCheckReceiveStatus.Completed;
+                task.SettlementOrderStatus = EnumTaskSettlementOrderStatus.Wait;
             }
 
             await repTaskInfoUserSubmit.UpdateAsync(submit);
diff --git a/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs
index 3390865..e051adb 100644
--- a/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs
+++ b/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs
@@ -1,6 +1,9 @@
-锘縰sing FlexJobApi.Core;
+锘縰sing Aop.Api.Domain;
+using FlexJobApi.Core;
 using Furion.DatabaseAccessor;
+using Furion.DataValidation;
 using Furion.FriendlyException;
+using Mapster;
 using MediatR;
 using Microsoft.EntityFrameworkCore;
 using System;
@@ -18,7 +21,8 @@
         IRepository<TaskInfoUser> rep) :
         IRequestHandler<GetTaskUsersQuery, GetTaskUsersQueryResult>,
         IRequestHandler<GetArrangeTaskUsersQuery, GetArrangeTaskUsersQueryResult>,
-        IRequestHandler<GetTaskUserHireStatusQuery, GetTaskUserHireStatusQueryResult>
+        IRequestHandler<GetTaskUserHireStatusQuery, GetTaskUserHireStatusQueryResult>,
+        IRequestHandler<GetSettlementTaskUsersQuery, GetSettlementTaskUsersQueryResult>
     {
         private readonly IRepository<TaskInfoUser> rep = rep;
 
@@ -145,14 +149,137 @@
             {
                 q = q.Where(it => it.EnterpriseEmployee.UserId == request.UserId);
             }
-                var model = await q
-                    .Select(it => new GetTaskUserHireStatusQueryResult
-                    {
-                        HireStatus = it.HireStatus
-                    })
-                    .FirstOrDefaultAsync(cancellationToken);
+            var model = await q
+                .Select(it => new GetTaskUserHireStatusQueryResult
+                {
+                    HireStatus = it.HireStatus
+                })
+                .FirstOrDefaultAsync(cancellationToken);
             if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "鎶ュ悕淇℃伅");
             return model;
         }
+
+        /// <summary>
+        /// 鏌ヨ缁撶畻鍚嶅崟鍒嗛〉鍒楄〃鏁版嵁
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<GetSettlementTaskUsersQueryResult> Handle(GetSettlementTaskUsersQuery request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var q = rep.AsQueryable().AsNoTracking()
+                .Where(it => it.TaskInfoId == request.TaskInfoId);
+            var s = q
+                .Select(it => new GetSettlementTaskUsersQueryResultItem
+                {
+                    Id = it.Id,
+                    Name = it.EnterpriseEmployee.Name,
+                    Identity = it.EnterpriseEmployee.Identity,
+                    ContactPhoneNumber = it.EnterpriseEmployee.ContactPhoneNumber,
+                    CheckReceiveStatus = it.CheckReceiveStatus,
+                    Bank = it.Bank,
+                    BankBranch = it.BankBranch,
+                    ReceiveAccount = it.ReceiveAccount,
+                    SettlementAmount = it.SettlementAmount,
+                    ActualSettlementAmount = it.ActualSettlementAmount,
+                    SettlementTime = it.SettlementTime
+                });
+            var list = await request.PageModel.GetPagedListAsync<GetSettlementTaskUsersQueryResult, GetSettlementTaskUsersQueryResultItem>(s, cancellationToken);
+
+            var successList = new List<GetSettlementTaskUsersQueryResultExcelRow>();
+            if (request.SettlementOrderUrl.IsNotNull())
+            {
+                var models = await ExcelUtils.ImportExcelFromOSS<GetSettlementTaskUsersQueryResultExcelRow>(request.SettlementOrderUrl);
+                foreach (var model in models)
+                {
+                    var errors = new List<string>();
+                    if (model.Name.IsNull())
+                    {
+                        errors.Add("璇峰~鍐欏鍚�");
+                    }
+                    if (model.Identity.IsNull())
+                    {
+                        errors.Add("璇峰~鍐欒韩浠借瘉鍙�");
+                    }
+                    else if (!model.Identity.TryValidate(EnumValidationTypes.ValiIdentity).IsValid)
+                    {
+                        errors.Add("韬唤璇佸彿鏍煎紡涓嶆纭�");
+                    }
+                    else if (successList.Any(it => it.Identity == model.Identity))
+                    {
+                        errors.Add("韬唤璇佸彿閲嶅");
+                    }
+                    if (model.Bank.IsNull())
+                    {
+                        errors.Add("璇峰~鍐欐墍灞為摱琛�");
+                    }
+                    if (model.ReceiveAccount.IsNull())
+                    {
+                        errors.Add("璇峰~鍐欐敹娆捐处鍙�");
+                    }
+                    if (model.SettlementAmount == null)
+                    {
+                        errors.Add("璇峰~鍐欑粨绠楅噾棰�");
+                    }
+                    else if (model.SettlementAmount < 0)
+                    {
+                        errors.Add("缁撶畻閲戦涓嶅彲涓鸿礋鏁�");
+                    }
+                    if (model.ActualSettlementAmount == null)
+                    {
+                        errors.Add("璇峰~鍐欏疄鍙戦噾棰�");
+                    }
+                    else if (model.ActualSettlementAmount < 0)
+                    {
+                        errors.Add("瀹炲彂閲戦涓嶅彲涓鸿礋鏁�");
+                    }
+                    else if (model.ActualSettlementAmount > 0 && model.ActualSettlementAmount < 1)
+                    {
+                        errors.Add("瀹炲彂閲戦涓嶅彲灏忎簬1鍏�");
+                    }
+
+                    var item = list.Data.FirstOrDefault(it => it.Identity == model.Identity);
+                    if (item == null)
+                    {
+                        errors.Add("鐏靛伐涓嶅瓨鍦�");
+                    }
+                    else if (item.CheckReceiveStatus != EnumTaskCheckReceiveStatus.Completed)
+                    {
+                        errors.Add("鏈畬鎴愰獙鏀�");
+                    }
+                    else
+                    {
+                        item.SettlementAmount = model.SettlementAmount;
+                        item.ActualSettlementAmount = model.ActualSettlementAmount;
+                        item.ReceiveAccount = model.ReceiveAccount;
+                        item.Bank = model.Bank;
+                        item.BankBranch = model.BankBranch;
+                    }
+
+                    if (errors.IsNotNull())
+                    {
+                        var error = model.Adapt<GetSettlementTaskUsersQueryResultError>();
+                        error.ErrorMessage = errors.SplitJoin("锛�");
+                        list.Errors.Add(error);
+                    }
+                    else
+                    {
+                        successList.Add(model);
+                    }
+                }
+            }
+
+            var pagedList = await list.Data
+                .Where(it => successList.Any(s => s.Identity == it.Identity))
+                .AsQueryable()
+                .ToPagedListAsync(request.PageModel.Page, request.PageModel.Rows, cancellationToken);
+            list.PageModel = request.PageModel.Adapt<PagedListQueryResultPageModel>();
+            list.PageModel.TotalCount = pagedList.TotalCount;
+            list.PageModel.TotalPage = pagedList.TotalPages;
+            list.Data = pagedList.Items.ToList();
+
+            return list;
+        }
     }
 }
diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs
index 724213f..1fa4b10 100644
--- a/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs
+++ b/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs
@@ -1,4 +1,5 @@
-锘縰sing FlexJobApi.Core;
+锘縰sing Aop.Api.Domain;
+using FlexJobApi.Core;
 using Furion.DatabaseAccessor;
 using Furion.DistributedIDGenerator;
 using Furion.FriendlyException;
@@ -10,6 +11,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using TaskInfo = FlexJobApi.Core.TaskInfo;
 
 namespace FlexJobApi.FlexJobServer.Application
 {
@@ -17,14 +19,21 @@
     /// 浠诲姟鍛戒护澶勭悊鍣�
     /// </summary>
     public class TaskInfoCommandHandler(
-            IRepository<TaskInfo> rep
+            IRepository<TaskInfo> rep,
+            IRepository<EnterpriseWallet> repEnterpriseWallet,
+            AlipayUtils alipayUtils
         ) :
         IRequestHandler<SaveTaskInfoCommand, Guid>,
         IRequestHandler<SetTaskInfoReleaseStatusCommand, int>,
         IRequestHandler<SetTaskInfoRecommendStatusCommand, int>,
-        IRequestHandler<DeleteTaskInfoCommand, int>
+        IRequestHandler<DeleteTaskInfoCommand, int>,
+        IRequestHandler<SureTaskSettlementOrderCommand, Guid>,
+        IRequestHandler<RevokeTaskSettlementOrderCommand, Guid>,
+        IRequestHandler<SureTaskSettlementCommand, Guid>
     {
         private readonly IRepository<TaskInfo> rep = rep;
+        private readonly IRepository<EnterpriseWallet> repEnterpriseWallet = repEnterpriseWallet;
+        private readonly AlipayUtils alipayUtils = alipayUtils;
 
         /// <summary>
         /// 淇濆瓨浠诲姟
@@ -140,6 +149,133 @@
                 }, cancellationToken);
         }
 
+        /// <summary>
+        /// 纭缁撶畻鍗�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<Guid> Handle(SureTaskSettlementOrderCommand request, CancellationToken cancellationToken)
+        {
+            var entity = await TaskInfoRepository.GetQueryable(rep, false)
+                .Include(it => it.TaskInfoUsers)
+                .Where(it => it.Id == request.TaskInfoId)
+                .FirstOrDefaultAsync();
+            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浠诲姟");
+            if (entity.SettlementStatus == EnumTaskSettlementStatus.InProcess) throw Oops.Oh(EnumErrorCodeType.s510, "缁撶畻涓笉鍙慨鏀癸紝璇峰厛鎾ゅ洖");
+            if (entity.SettlementStatus == EnumTaskSettlementStatus.Completed) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬粨绠椾笉鍙慨鏀�");
+            entity.SettlementOrderStatus = EnumTaskSettlementOrderStatus.Completed;
+            entity.SettlementOrderUrl = request.SettlementOrderUrl;
+            entity.SettlementOrderName = entity.SettlementOrderUrl.Substring(entity.SettlementOrderUrl.LastIndexOf("/") + 1);
+            entity.SettlementStatus = EnumTaskSettlementStatus.Wait;
+            entity.SettlementUserCount = request.TaskInfoUsers.Count;
+            entity.SettlementAmount = request.TaskInfoUsers.Sum(it => it.SettlementAmount ?? 0);
+            entity.ActualSettlementAmount = request.TaskInfoUsers.Sum(it => it.ActualSettlementAmount ?? 0);
+            foreach (var model in request.TaskInfoUsers)
+            {
+                var user = entity.TaskInfoUsers.FirstOrDefault(it => it.Id == model.Id);
+                if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, $"鐏靛伐{model.Name}");
+                if (user.SettlementStatus == EnumTaskSettlementStatus.InProcess) throw Oops.Oh(EnumErrorCodeType.s510, $"{model.Name}缁撶畻涓笉鍙慨鏀癸紝璇峰厛鎾ゅ洖");
+                if (user.SettlementStatus == EnumTaskSettlementStatus.Completed) throw Oops.Oh(EnumErrorCodeType.s510, $"{model.Name}宸茬粨绠椾笉鍙慨鏀�");
+                if (user.CheckReceiveStatus != EnumTaskCheckReceiveStatus.Completed) throw Oops.Oh(EnumErrorCodeType.s510, $"{model.Name}鏈獙鏀�");
+                if (model.SettlementAmount < 0) throw Oops.Oh(EnumErrorCodeType.s510, $"{model.Name}缁撶畻閲戦涓嶅彲璐熸暟");
+                if (model.ActualSettlementAmount < 0) throw Oops.Oh(EnumErrorCodeType.s510, $"{model.Name}瀹炲彂閲戦涓嶅彲璐熸暟");
+                if (model.ActualSettlementAmount > 0 && model.ActualSettlementAmount < 1) throw Oops.Oh(EnumErrorCodeType.s510, $"{model.Name}瀹炲彂閲戦涓嶅彲灏忎簬1鍏�");
+                user.Bank = model.Bank;
+                user.BankBranch = model.BankBranch;
+                user.ReceiveAccount = model.ReceiveAccount;
+                user.SettlementAmount = model.SettlementAmount;
+                user.ActualSettlementAmount = model.ActualSettlementAmount;
+                user.SettlementStatus = EnumTaskSettlementStatus.Wait;
+            }
+            await rep.UpdateAsync(entity);
+            return entity.Id;
+        }
+
+        /// <summary>
+        /// 鎾ゅ洖缁撶畻
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<Guid> Handle(RevokeTaskSettlementOrderCommand request, CancellationToken cancellationToken)
+        {
+            var entity = await TaskInfoRepository.GetQueryable(rep, false)
+                .Include(it => it.TaskInfoUsers)
+                .Where(it => it.Id == request.TaskInfoId)
+                .FirstOrDefaultAsync();
+            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浠诲姟");
+            if (entity.SettlementStatus == EnumTaskSettlementStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "鏈紑濮嬬粨绠楋紝璇峰厛涓婁紶缁撶畻鍗曞苟纭");
+            if (entity.SettlementStatus == EnumTaskSettlementStatus.Completed) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬粨绠椾笉鍙挙鍥�");
+            entity.SettlementStatus = EnumTaskSettlementStatus.Wait;
+            foreach (var user in entity.TaskInfoUsers)
+            {
+                if (user.SettlementStatus == EnumTaskSettlementStatus.InProcess)
+                {
+                    user.SettlementStatus = EnumTaskSettlementStatus.Wait;
+                }
+            }
+            await rep.UpdateAsync(entity);
+            return entity.Id;
+        }
+
+        /// <summary>
+        /// 纭缁撶畻
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<Guid> Handle(SureTaskSettlementCommand request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var entity = await TaskInfoRepository.GetQueryable(rep, false, logier)
+                .Include(it => it.TaskInfoUsers)
+                .Where(it => it.Id == request.TaskInfoId)
+                .FirstOrDefaultAsync();
+            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浠诲姟");
+            if (entity.SettlementOrderStatus != EnumTaskSettlementOrderStatus.Completed) throw Oops.Oh(EnumErrorCodeType.s510, "璇峰厛涓婁紶缁撶畻鍗曞苟纭");
+            if (entity.SettlementStatus == EnumTaskSettlementStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "鏈紑濮嬬粨绠楋紝璇峰厛涓婁紶缁撶畻鍗曞苟纭");
+            if (entity.SettlementStatus == EnumTaskSettlementStatus.Completed) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬粨绠�");
+            entity.SettlementStatus = EnumTaskSettlementStatus.InProcess;
+            entity.SettlementStartTime = DateTime.Now;
+            foreach (var user in entity.TaskInfoUsers)
+            {
+                if (user.SettlementStatus == EnumTaskSettlementStatus.Wait)
+                {
+                    user.SettlementStatus = EnumTaskSettlementStatus.InProcess;
+                }
+            }
+            var wallet = await repEnterpriseWallet.AsQueryable()
+                .Where(it => it.EnterpriseId == entity.EnterpriseId && it.Access == EnumEnterpriseWalletAccess.Alipay)
+                .FirstOrDefaultAsync();
+            if (wallet == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘");
+            if (wallet.SignStatus != EnumEnterpriseWalletSignStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘鏈绾�");
+            if (wallet.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘璁拌处鏈湭寮�閫�");
+            var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel
+            {
+                AccountBookId = wallet.AccountBookId,
+                SceneCode = "SATF_FUND_BOOK",
+                MerchantUserId = wallet.Code,
+            });
+            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
+            wallet.Balance = response.AvailableAmount.ToDecimal() ?? 0;
+            await repEnterpriseWallet.UpdateAsync(wallet);
+
+            var amount = await TaskInfoRepository.GetQueryable(rep, false, logier)
+                .Where(it =>
+                    it.EnterpriseId == entity.EnterpriseId
+                    && it.Id != request.TaskInfoId
+                    && it.SettlementStatus == EnumTaskSettlementStatus.InProcess
+                    && it.ActualSettlementAmount.HasValue)
+                .SumAsync(it => it.ActualSettlementAmount!.Value);
+            amount += entity.ActualSettlementAmount!.Value;
+            if (wallet.Balance < amount)
+                throw Oops.Oh(EnumErrorCodeType.s510, "浼佷笟閽卞寘浣欓涓嶈冻");
+
+            await rep.UpdateAsync(entity);
+            return entity.Id;
+        }
+
         private async Task BuildCode(TaskInfo entity)
         {
             entity.Code = $"{DateTime.Now:yyyyMMddHHmm}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
index ec103d6..3a770be 100644
--- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
+++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
@@ -24,7 +24,9 @@
         IRequestHandler<GetTaskInfosQuery, GetTaskInfosQueryResult>,
         IRequestHandler<GetPersonalApplyTaskInfosQuery, GetPersonalApplyTaskInfosQueryResult>,
         IRequestHandler<GetPersonalHireTaskInfosQuery, GetPersonalHireTaskInfosQueryResult>,
-        IRequestHandler<GetPersonalCancelTaskInfosQuery, GetPersonalCancelTaskInfosQueryResult>
+        IRequestHandler<GetPersonalCancelTaskInfosQuery, GetPersonalCancelTaskInfosQueryResult>,
+        IRequestHandler<GetSettlementTasksQuery, GetSettlementTasksQueryResult>,
+        IRequestHandler<GetSettlementTaskQuery, GetSettlementTaskQueryResult>
 
     {
         private readonly IRepository<TaskInfo> rep = rep;
@@ -381,5 +383,63 @@
             return await request.PageModel.GetPagedListAsync<GetPersonalCancelTaskInfosQueryResult, GetPersonalCancelTaskInfosQueryResultItem>(s, cancellationToken);
         }
 
+        /// <summary>
+        /// 鏌ヨ缁撶畻浠诲姟鍒嗛〉鍒楄〃鏁版嵁
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<GetSettlementTasksQueryResult> Handle(GetSettlementTasksQuery request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var q = TaskInfoRepository.GetQueryable(rep, true, logier)
+                .Where(it => it.SettlementOrderStatus.HasValue && it.SettlementStatus.HasValue);
+            if (request.Keywords.IsNotNull())
+            {
+                q = q.Where(it =>
+                    it.Name.Contains(request.Keywords)
+                    || it.Code.Contains(request.Keywords));
+            }
+            if (request.SettlementOrderStatus.HasValue)
+            {
+                q = q.Where(it => it.SettlementOrderStatus == request.SettlementOrderStatus);
+            }
+            if (request.SettlementStatus.HasValue)
+            {
+                q = q.Where(it => it.SettlementStatus == request.SettlementStatus);
+            }
+            var s = q
+                .Select(it=>new GetSettlementTasksQueryResultItem
+                { 
+                    Id = it.Id,
+                    Name = it.Name,
+                    Code = it.Code,
+                    SettlementOrderStatus = it.SettlementOrderStatus,
+                    SettlementOrderName = it.SettlementOrderName,
+                    SettlementOrderTime = it.SettlementOrderTime,
+                    ActualSettlementAmount = it.ActualSettlementAmount,
+                    SettlementAmount = it.SettlementAmount,
+                    SettlementStatus = it.SettlementStatus,
+                    SettlementTime = it.SettlementTime,
+                    SettlementRemark = it.SettlementRemark,
+                    SettlementUserCount = it.SettlementUserCount
+                });
+            return await request.PageModel.GetPagedListAsync<GetSettlementTasksQueryResult, GetSettlementTasksQueryResultItem>(s, cancellationToken);
+        }
+
+        /// <summary>
+        /// 鏌ヨ缁撶畻鍗曡鎯�
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public Task<GetSettlementTaskQueryResult> Handle(GetSettlementTaskQuery request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var model = TaskInfoRepository.GetQueryable(rep, true, logier)
+                .Where(it => it.Id == request.Id)
+                .GetDetail<TaskInfo, GetSettlementTaskQueryResult>();
+            return model;
+        }
     }
 }
diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
index 5ae1bbd..26a0f07 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Commands/EnterpriseEmployeesCommandHandler.cs
@@ -163,7 +163,7 @@
                         }
                     }
                 }
-                if (errors.IsNotNull())
+                else
                 {
                     var error = model.Adapt<ImportEnterpriseEmployeesCommandResultError>();
                     error.ErrorMessage = errors.SplitJoin("锛�");
diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs
index 93fe50d..d40fbc0 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs
@@ -41,18 +41,23 @@
         public async Task<OpenEnterpriseWalletCommandResult> Handle(OpenEnterpriseWalletCommand request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
+            if (logier.Type == EnumUserType.Enterprise)
+            {
+                request.EnterpriseId = logier.EnterpriseId;
+            }
+            if (request.EnterpriseId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欎紒涓欼d");
             var enterprise = await repEnterprise.AsQueryable().AsNoTracking()
-                .Where(it => it.Id == logier.EnterpriseId)
+                .Where(it => it.Id == request.EnterpriseId)
                 .FirstOrDefaultAsync();
             if (enterprise == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟");
             if (!enterprise.IsReal) throw Oops.Oh(EnumErrorCodeType.s510, "璇峰厛瀹炲悕");
             var entity = await rep.AsQueryable()
-                .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Access == request.Access)
+                .Where(it => it.EnterpriseId == request.EnterpriseId && it.Access == request.Access)
                 .FirstOrDefaultAsync();
             if (entity == null)
             {
                 entity = new EnterpriseWallet();
-                entity.EnterpriseId = logier.EnterpriseId!.Value;
+                entity.EnterpriseId = request.EnterpriseId!.Value;
                 entity.Access = EnumEnterpriseWalletAccess.Alipay;
                 entity.PersonalProductCode = "FUND_SAFT_SIGN_WITHHOLDING_P";
                 entity.SignScene = "INDUSTRY|SATF_ACC";
@@ -95,8 +100,13 @@
         public async Task<Guid> Handle(CloseEnterpriseWalletCommand request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
+            if (logier.Type == EnumUserType.Enterprise)
+            {
+                request.EnterpriseId = logier.EnterpriseId;
+            }
+            if (request.EnterpriseId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欎紒涓欼d");
             var entity = await rep.AsQueryable()
-                .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Access == request.Access)
+                .Where(it => it.EnterpriseId == request.EnterpriseId && it.Access == request.Access)
                 .FirstOrDefaultAsync();
             if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘");
             if (entity.SignStatus != EnumEnterpriseWalletSignStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "鏈绾�");
@@ -122,8 +132,13 @@
         public async Task<RechargeEnterpriseWalletCommandResult> Handle(RechargeEnterpriseWalletCommand request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
+            if (logier.Type == EnumUserType.Enterprise)
+            {
+                request.EnterpriseId = logier.EnterpriseId;
+            }
+            if (request.EnterpriseId == null) throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欎紒涓欼d");
             var entity = await rep.AsQueryable()
-                .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Access == request.Access)
+                .Where(it => it.EnterpriseId == request.EnterpriseId && it.Access == request.Access)
                 .FirstOrDefaultAsync();
             if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘");
             if (entity.SignStatus != EnumEnterpriseWalletSignStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "鏈绾�");
diff --git a/FlexJobApi.Web.Entry/Startup.cs b/FlexJobApi.Web.Entry/Startup.cs
index 3c4cdfe..2b71e1b 100644
--- a/FlexJobApi.Web.Entry/Startup.cs
+++ b/FlexJobApi.Web.Entry/Startup.cs
@@ -1,5 +1,6 @@
 锘縰sing Consul;
 using FlexJobApi.Core;
+using FlexJobApi.Core.Jobs;
 using Furion;
 using Furion.EventBus;
 using Furion.Schedule;
@@ -60,6 +61,9 @@
                 //options.AddPersistence<DbJobPersistence>();
                 options.AddJob<CalcTaskSatusByDateJob>(Triggers.Hourly());
                 options.AddJob<CalcUserAgeByIdCardJob>(Triggers.Daily());
+                options.AddJob<RefreshEnterpriseWalletStatusJob>(Triggers.PeriodMinutes(5));
+                options.AddJob<RefreshEnterpriseWalletTransactionStatusJob>(Triggers.PeriodMinutes(2));
+                options.AddJob<CompleteTaskSettlementT1Job>(Triggers.PeriodMinutes(2));
             });
 
             services.AddSpecificationDocuments(options =>

--
Gitblit v1.9.1