From 11e0c46d96a9de0c77cbc7509d34f470823bbc65 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期三, 03 九月 2025 13:48:35 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs     |   96 +++++--
 FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs |   79 +++++
 FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs   |   26 -
 FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs  |   45 +++
 FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.cs                              |   23 +
 FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.cs                            |   23 +
 FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs                            |   35 ++
 FlexJobApi.Core/FlexJobApi.Core.xml                                                             |  198 ++++++++++++++++
 FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs                                                |   42 +++
 FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml                         |   15 +
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs                             |   39 +++
 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs                  |   59 ++++
 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs         |    5 
 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs |   27 ++
 14 files changed, 654 insertions(+), 58 deletions(-)

diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs
index d8bc453..8b23979 100644
--- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Xml.Serialization;
 
 namespace FlexJobApi.Core
 {
@@ -25,6 +26,11 @@
         /// 閫氶亾
         /// </summary>
         public EnumEnterpriseWalletAccess Access { get; set; }
+
+        /// <summary>
+        /// 浣欓
+        /// </summary>
+        public decimal Balance { get; set; }
 
         /// <summary>
         /// 鍗忚浜у搧鐮侊紝鍟嗘埛鍜屾敮浠樺疂绛剧害鏃剁‘瀹氾紝涓嶅悓涓氬姟鍦烘櫙瀵瑰簲涓嶅悓鐨勭绾︿骇鍝佺爜銆�
@@ -97,5 +103,38 @@
         /// 鎺堜俊妯″紡锛岀洰鍓嶅彧鍦ㄨ姳鑺濅唬鎵o紙鍗宠姳鑺漡o锛夊崗璁椂鎵嶄細杩斿洖
         /// </summary>
         public string CreditAuthMode { get; set; }
+
+        /// <summary>
+        /// 璧勯噾璁拌处鏈琁d
+        /// </summary>
+        public string AccountBookId { get; set; }
+        /// <summary>
+        /// 璁拌处鐨勫鍗℃埛鍚�
+        /// </summary>
+        public string BankAccName { get; set; }
+        /// <summary>
+        /// 璁拌处鐨勫鍗″紑鎴疯
+        /// </summary>
+        public string CardBank { get; set; }
+        /// <summary>
+        /// 璁拌处鐨勫鍗℃敮琛�
+        /// </summary>
+        public string CardBranch { get; set; }
+        /// <summary>
+        /// 璁拌处鐨勫鍗¤仈琛屽彿
+        /// </summary>
+        public string CardDeposit { get; set; }
+        /// <summary>
+        /// 璁拌处鐨勫鍗″紑鎴峰湴鍧�
+        /// </summary>
+        public string CardLocation { get; set; }
+        /// <summary>
+        /// 璁拌处鐨勫鍗″崱鍙�
+        /// </summary>
+        public string CardNo { get; set; }
+        /// <summary>
+        /// 璁拌处鐨勫鍗$姸鎬�, A锛氭甯哥姸鎬�; 鍏朵粬锛氬紓甯�
+        /// </summary>
+        public EnumEnterpriseWalletAccountBookStatus? AccountBookStatus { get; set; }
     }
 }
diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs
new file mode 100644
index 0000000..43071e2
--- /dev/null
+++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs
@@ -0,0 +1,59 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 浼佷笟閽卞寘浜ゆ槗璁板綍
+    /// </summary>
+    public class EnterpriseWalletTransaction : CommonEntity
+    {
+        /// <summary>
+        /// 浼佷笟閽卞寘Id
+        /// </summary>
+        public Guid WalletId { get; set; }
+
+        /// <summary>
+        /// 閽卞寘
+        /// </summary>
+        public EnterpriseWallet Wallet { get; set; }
+
+        /// <summary>
+        /// 绫诲瀷
+        /// </summary>
+        public EnumEnterpriseWalletTransactionType Type { get; set; }
+
+        /// <summary>
+        /// 璁㈠崟鍙�
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 閲戦
+        /// </summary>
+        public decimal Amount { get; set; }
+
+        /// <summary>
+        /// 浣欓
+        /// </summary>
+        public decimal Balance { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 璁㈠崟Id
+        /// </summary>
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public EnumEnterpriseWalletTransactionStatus Status { get; set; }
+    }
+}
diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.cs
new file mode 100644
index 0000000..8a35418
--- /dev/null
+++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletAccountBookStatus.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 EnumEnterpriseWalletAccountBookStatus
+    {
+        /// <summary>
+        /// 姝e父
+        /// </summary>
+        Normal = 100,
+        /// <summary>
+        /// 寮傚父
+        /// </summary>
+        Exception = 999
+    }
+}
diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs
new file mode 100644
index 0000000..ac081ce
--- /dev/null
+++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FlexJobApi.Core
+{
+    /// <summary>
+    /// 浼佷笟閽卞寘浜ゆ槗鐘舵��
+    /// </summary>
+    public enum EnumEnterpriseWalletTransactionStatus
+    {
+        /// <summary>
+        /// 寰呮敮浠�
+        /// </summary>
+        WaitPay = 10,
+        /// <summary>
+        /// 澶勭悊涓�
+        /// </summary>
+        Dealing = 20,
+        /// <summary>
+        /// 鎴愬姛
+        /// </summary>
+        Success = 30,
+        /// <summary>
+        /// 閫�绁�
+        /// </summary>
+        Refund = 40,
+        /// <summary>
+        /// 澶辫触
+        /// </summary>
+        Fail = 50,
+    }
+}
diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.cs b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.cs
new file mode 100644
index 0000000..540d96b
--- /dev/null
+++ b/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionType.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 EnumEnterpriseWalletTransactionType
+    {
+        /// <summary>
+        /// 鍏呭��
+        /// </summary>
+        Recharge = 10,
+        /// <summary>
+        /// 杞处
+        /// </summary>
+        Transfer = 20
+    }
+}
diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml
index 3859be9..90b78ee 100644
--- a/FlexJobApi.Core/FlexJobApi.Core.xml
+++ b/FlexJobApi.Core/FlexJobApi.Core.xml
@@ -2055,6 +2055,11 @@
             閫氶亾
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.Balance">
+            <summary>
+            浣欓
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.EnterpriseWallet.PersonalProductCode">
             <summary>
             鍗忚浜у搧鐮侊紝鍟嗘埛鍜屾敮浠樺疂绛剧害鏃剁‘瀹氾紝涓嶅悓涓氬姟鍦烘櫙瀵瑰簲涓嶅悓鐨勭绾︿骇鍝佺爜銆�
@@ -2133,6 +2138,96 @@
         <member name="P:FlexJobApi.Core.EnterpriseWallet.CreditAuthMode">
             <summary>
             鎺堜俊妯″紡锛岀洰鍓嶅彧鍦ㄨ姳鑺濅唬鎵o紙鍗宠姳鑺漡o锛夊崗璁椂鎵嶄細杩斿洖
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.AccountBookId">
+            <summary>
+            璧勯噾璁拌处鏈琁d
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.BankAccName">
+            <summary>
+            璁拌处鐨勫鍗℃埛鍚�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.CardBank">
+            <summary>
+            璁拌处鐨勫鍗″紑鎴疯
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.CardBranch">
+            <summary>
+            璁拌处鐨勫鍗℃敮琛�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.CardDeposit">
+            <summary>
+            璁拌处鐨勫鍗¤仈琛屽彿
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.CardLocation">
+            <summary>
+            璁拌处鐨勫鍗″紑鎴峰湴鍧�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.CardNo">
+            <summary>
+            璁拌处鐨勫鍗″崱鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWallet.AccountBookStatus">
+            <summary>
+            璁拌处鐨勫鍗$姸鎬�, A锛氭甯哥姸鎬�; 鍏朵粬锛氬紓甯�
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.EnterpriseWalletTransaction">
+            <summary>
+            浼佷笟閽卞寘浜ゆ槗璁板綍
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.WalletId">
+            <summary>
+            浼佷笟閽卞寘Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Wallet">
+            <summary>
+            閽卞寘
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Type">
+            <summary>
+            绫诲瀷
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Code">
+            <summary>
+            璁㈠崟鍙�
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Amount">
+            <summary>
+            閲戦
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Balance">
+            <summary>
+            浣欓
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Remark">
+            <summary>
+            澶囨敞
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.OrderId">
+            <summary>
+            璁㈠崟Id
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Status">
+            <summary>
+            鐘舵��
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.Menu">
@@ -3722,6 +3817,21 @@
             鏀粯瀹�
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.EnumEnterpriseWalletAccountBookStatus">
+            <summary>
+            浼佷笟閽卞寘璁拌处鏈姸鎬�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletAccountBookStatus.Normal">
+            <summary>
+            姝e父
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletAccountBookStatus.Exception">
+            <summary>
+            寮傚父
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.EnumEnterpriseWalletSignStatus">
             <summary>
             浼佷笟閽卞寘绛剧害鐘舵��
@@ -3740,6 +3850,51 @@
         <member name="F:FlexJobApi.Core.EnumEnterpriseWalletSignStatus.Stop">
             <summary>
             缁堟
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus">
+            <summary>
+            浼佷笟閽卞寘浜ゆ槗鐘舵��
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.WaitPay">
+            <summary>
+            寰呮敮浠�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Dealing">
+            <summary>
+            澶勭悊涓�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Success">
+            <summary>
+            鎴愬姛
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Refund">
+            <summary>
+            閫�绁�
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Fail">
+            <summary>
+            澶辫触
+            </summary>
+        </member>
+        <member name="T:FlexJobApi.Core.EnumEnterpriseWalletTransactionType">
+            <summary>
+            浼佷笟閽卞寘浜ゆ槗绫诲瀷
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionType.Recharge">
+            <summary>
+            鍏呭��
+            </summary>
+        </member>
+        <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionType.Transfer">
+            <summary>
+            杞处
             </summary>
         </member>
         <member name="T:FlexJobApi.Core.EnumMenuType">
@@ -9081,6 +9236,11 @@
             鏌ヨ涓汉鐢ㄦ埛绛剧害璇︽儏-缁撴灉
             </summary>
         </member>
+        <member name="P:FlexJobApi.Core.GetPersonalUserElectronSignQueryResult.Id">
+            <summary>
+            鐏靛伐Id
+            </summary>
+        </member>
         <member name="P:FlexJobApi.Core.GetPersonalUserElectronSignQueryResult.ContractCode">
             <summary>
             鍚堝悓缂栧彿
@@ -9737,6 +9897,21 @@
             绛剧害鍦板潃
             </summary>
         </member>
+        <member name="T:FlexJobApi.Core.RechargeEnterpriseWalletCommand">
+            <summary>
+            浼佷笟閽卞寘鍏呭��
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.RechargeEnterpriseWalletCommand.Access">
+            <summary>
+            閫氶亾
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.RechargeEnterpriseWalletCommand.Amount">
+            <summary>
+            閲戦
+            </summary>
+        </member>
         <member name="T:FlexJobApi.Core.GetAlipayFundExpandindirectOrderQuery">
             <summary>
             鏌ヨ鏀粯瀹濊祫閲戜簩绾у晢鎴稫YB浠h繘浠跺崟璇︽儏
@@ -9850,6 +10025,11 @@
         <member name="T:FlexJobApi.Core.GetEnterpriseWalletQuery">
             <summary>
             鏌ヨ浼佷笟閽卞寘璇︽儏
+            </summary>
+        </member>
+        <member name="P:FlexJobApi.Core.GetEnterpriseWalletQuery.EnterpriseId">
+            <summary>
+            浼佷笟Id
             </summary>
         </member>
         <member name="P:FlexJobApi.Core.GetEnterpriseWalletQuery.Access">
@@ -12537,6 +12717,24 @@
             </summary>
             <param name="model"></param>
         </member>
+        <member name="M:FlexJobApi.Core.AlipayUtils.FundAccountbookCreate(Aop.Api.Domain.AlipayFundAccountbookCreateModel)">
+            <summary>
+            璧勯噾璁拌处鏈紑閫�
+            </summary>
+            <param name="model"></param>
+        </member>
+        <member name="M:FlexJobApi.Core.AlipayUtils.FundAccountbookQuery(Aop.Api.Domain.AlipayFundAccountbookQueryModel)">
+            <summary>
+            璧勯噾璁拌处鏈殑淇℃伅鏌ヨ
+            </summary>
+            <param name="model"></param>
+        </member>
+        <member name="M:FlexJobApi.Core.AlipayUtils.FundTransPagePay(Aop.Api.Domain.AlipayFundTransPagePayModel)">
+            <summary>
+            璧勯噾杞处椤甸潰鏀粯鎺ュ彛
+            </summary>
+            <param name="model"></param>
+        </member>
         <member name="M:FlexJobApi.Core.AlipayUtils.FundTransUniTransfer(Aop.Api.Domain.AlipayFundTransUniTransferModel)">
             <summary>
             鍗曠瑪杞处鎺ュ彛
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs
new file mode 100644
index 0000000..9969fd7
--- /dev/null
+++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/RechargeEnterpriseWalletCommand.cs
@@ -0,0 +1,27 @@
+锘縰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.UserServerEnterpriseWallet])]
+    public class RechargeEnterpriseWalletCommand : IRequest<Guid>
+    {
+        /// <summary>
+        /// 閫氶亾
+        /// </summary>
+        public EnumEnterpriseWalletAccess Access { get; set; }
+
+        /// <summary>
+        /// 閲戦
+        /// </summary>
+        public decimal Amount { get; set; }
+
+    }
+}
diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs
index 106e51b..b8bbe9e 100644
--- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs
+++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletQuery.cs
@@ -16,6 +16,11 @@
     public class GetEnterpriseWalletQuery : IRequest<GetEnterpriseWalletQueryResult>
     {
         /// <summary>
+        /// 浼佷笟Id
+        /// </summary>
+        public Guid? EnterpriseId { get; set; }
+
+        /// <summary>
         /// 閫氶亾
         /// </summary>
         public EnumEnterpriseWalletAccess Access { get; set; }
diff --git a/FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs b/FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs
index d88fc76..ff37a7a 100644
--- a/FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs
+++ b/FlexJobApi.Core/Utils/AlipayUtils/AlipayUtils.cs
@@ -102,6 +102,48 @@
         }
 
         /// <summary>
+        /// 璧勯噾璁拌处鏈紑閫�
+        /// </summary>
+        /// <param name="model"></param>
+        public AlipayFundAccountbookCreateResponse FundAccountbookCreate(AlipayFundAccountbookCreateModel model)
+        {
+            logger.LogInformation($"姝e湪鎵ц璧勯噾璁拌处鏈紑閫氭帴鍙o細{model.ToJson()}"); 
+            AlipayFundAccountbookCreateRequest request = new AlipayFundAccountbookCreateRequest();
+            request.SetBizModel(model);
+            AlipayFundAccountbookCreateResponse response = alipayClient.CertificateExecute(request);
+            logger.LogInformation($"缁撴灉锛歿response.ToJson()}");
+            return response;
+        }
+
+        /// <summary>
+        /// 璧勯噾璁拌处鏈殑淇℃伅鏌ヨ
+        /// </summary>
+        /// <param name="model"></param>
+        public AlipayFundAccountbookQueryResponse FundAccountbookQuery(AlipayFundAccountbookQueryModel model)
+        {
+            logger.LogInformation($"姝e湪鎵ц璧勯噾璁拌处鏈殑淇℃伅鏌ヨ鎺ュ彛锛歿model.ToJson()}"); 
+            AlipayFundAccountbookQueryRequest request = new AlipayFundAccountbookQueryRequest();
+            request.SetBizModel(model);
+            AlipayFundAccountbookQueryResponse response = alipayClient.CertificateExecute(request);
+            logger.LogInformation($"缁撴灉锛歿response.ToJson()}");
+            return response;
+        }
+
+        /// <summary>
+        /// 璧勯噾杞处椤甸潰鏀粯鎺ュ彛
+        /// </summary>
+        /// <param name="model"></param>
+        public AlipayFundTransPagePayResponse FundTransPagePay(AlipayFundTransPagePayModel model)
+        {
+            logger.LogInformation($"姝e湪鎵ц璧勯噾杞处椤甸潰鏀粯鎺ュ彛锛歿model.ToJson()}"); 
+            AlipayFundTransPagePayRequest request = new AlipayFundTransPagePayRequest();
+            request.SetBizModel(model);
+            AlipayFundTransPagePayResponse response = alipayClient.CertificateExecute(request);
+            logger.LogInformation($"缁撴灉锛歿response.ToJson()}");
+            return response;
+        }
+
+        /// <summary>
         /// 鍗曠瑪杞处鎺ュ彛
         /// </summary>
         /// <param name="model"></param>
diff --git a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
index 136ea3f..a75ed94 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseEmployees/Queries/EnterpriseEmployeeQueryHandler.cs
@@ -1,7 +1,10 @@
 锘縰sing FlexJobApi.Core;
 using Furion.DatabaseAccessor;
+using Furion.DistributedIDGenerator;
+using Furion.FriendlyException;
 using Mapster;
 using MediatR;
+using Microsoft.AspNetCore.Components.Forms;
 using Microsoft.EntityFrameworkCore;
 using System;
 using System.Collections.Generic;
@@ -15,7 +18,10 @@
     /// 鐏靛伐鏌ヨ澶勭悊鍣�
     /// </summary>
     public class EnterpriseEmployeeQueryHandler(
-            IRepository<EnterpriseEmployee> rep
+            IRepository<EnterpriseEmployee> rep,
+            IRepository<ContractTemplate> repContractTemplate,
+            IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract,
+            IMediator mediator
         ) :
         IRequestHandler<GetEnterpriseEmployeesQuery, GetEnterpriseEmployeesQueryResult>,
         IRequestHandler<GetEnterpriseEmployeeQuery, GetEnterpriseEmployeeQueryResult>,
@@ -23,6 +29,9 @@
         IRequestHandler<GetPersonalUserElectronSignQuery, GetPersonalUserElectronSignQueryResult>
     {
         private readonly IRepository<EnterpriseEmployee> rep = rep;
+        private readonly IRepository<ContractTemplate> repContractTemplate = repContractTemplate;
+        private readonly IRepository<EnterpriseEmployeeContract> repEnterpriseEmployeeContract = repEnterpriseEmployeeContract;
+        private readonly IMediator mediator = mediator;
 
         /// <summary>
         /// 鏌ヨ鐏靛伐鍒嗛〉鍒楄〃鏁版嵁
@@ -210,20 +219,70 @@
         public async Task<GetPersonalUserElectronSignQueryResult> Handle(GetPersonalUserElectronSignQuery request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
-            var q = rep.AsQueryable().AsNoTracking()
-                .Where(it => it.UserId == logier.Id);
             if (request.Id.HasValue)
             {
-                q = q.Where(it => it.Id == request.Id);
+                var model = await rep.AsQueryable().AsNoTracking()
+                    .Where(it => it.UserId == logier.Id && it.Id == request.Id)
+                    .GetDetail<EnterpriseEmployee, GetPersonalUserElectronSignQueryResult>();
+                return model;
             }
-
-            if (request.Code.IsNotNull())
+            else if (request.Code.IsNotNull())
             {
-                q = q.Where(it => it.ContractTemplate.Code == request.Code);
-            }
+                var contractTemplate = await repContractTemplate.AsQueryable().AsNoTracking()
+                    .Where(it => it.Code == request.Code)
+                    .FirstOrDefaultAsync();
+                if (contractTemplate == null) throw Oops.Oh(EnumErrorCodeType.s404, "鍚堝悓");
 
-            var model = await q.GetDetail<EnterpriseEmployee, GetPersonalUserElectronSignQueryResult>();
-            return model;
+                await mediator.Send(new CheckContractTemplateCommand
+                {
+                    Id = contractTemplate.Id
+                }, cancellationToken);
+
+                var entity = await rep.AsQueryable()
+                    .Include(it => it.Enterprise)
+                    .Where(it =>
+                        it.UserId == logier.Id
+                        && it.ContractTemplateId == contractTemplate.Id)
+                    .FirstOrDefaultAsync();
+                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐");
+                if (entity.UserSignContractStatus == null)
+                {
+                    entity.ContractTemplateId = contractTemplate.Id;
+                    entity.UserSignContractStatus = EnumTaskUserSignContractStatus.Wait;
+                    entity.UserSignContractTime = null;
+                    entity.EnterpriseSignContractStatus = null;
+                    entity.EnterpriseSignContractTime = null;
+                    entity.ContractCode = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
+                    entity.ContractUrl = null;
+                    var contract = new EnterpriseEmployeeContract
+                    {
+                        EnterpriseEmployeeId = entity.Id,
+                        ContractTemplateId = entity.ContractTemplateId,
+                        ContractCode = entity.ContractCode,
+                        UserSignContractStatus = entity.UserSignContractStatus,
+                    };
+                    await repEnterpriseEmployeeContract.InsertAsync(contract);
+                    await rep.UpdateAsync(entity);
+                }
+                return new GetPersonalUserElectronSignQueryResult
+                {
+                    Id = entity.Id,
+                    ContractCode = entity.ContractCode,
+                    ContractTemplateAccess = contractTemplate.Access,
+                    UserSignContractStatus = entity.UserSignContractStatus,
+                    Name = entity.Name,
+                    Identity = entity.Identity,
+                    ContactPhoneNumber = entity.ContactPhoneNumber,
+                    UserSignContractTime = entity.UserSignContractTime,
+                    EnterpriseEnterpriseName = entity.Enterprise.EnterpriseName,
+                    EnterpriseSignContractTime = entity.EnterpriseSignContractTime,
+                    ContractUrl = entity.ContractUrl,
+                };
+            }
+            else
+            {
+                throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐欑伒宸d鎴栧悎鍚屾ā鏉跨紪鍙�");
+            }
         }
     }
 }
diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs
index e34811a..8901516 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs
@@ -24,6 +24,7 @@
         ) :
         IRequestHandler<OpenEnterpriseWalletCommand, OpenEnterpriseWalletCommandResult>,
         IRequestHandler<CloseEnterpriseWalletCommand, Guid>,
+        IRequestHandler<RechargeEnterpriseWalletCommand, Guid>,
         IRequestHandler<AlipayTransferCommand, Guid>
     {
         private readonly IRepository<EnterpriseWallet> rep = rep;
@@ -109,6 +110,50 @@
             return entity.Id;
         }
 
+        /// <summary>
+        /// 浼佷笟閽卞寘鍏呭��
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<Guid> Handle(RechargeEnterpriseWalletCommand request, CancellationToken cancellationToken)
+        {
+            var logier = JwtUtils.GetCurrentLogier();
+            var entity = await rep.AsQueryable()
+                .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Access == request.Access)
+                .FirstOrDefaultAsync();
+            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘");
+            if (entity.SignStatus != EnumEnterpriseWalletSignStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "鏈绾�");
+            if (entity.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "鏈紑閫氳璐︽湰");
+            var order = new EnterpriseWalletTransaction();
+            order.Code = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
+            order.WalletId = entity.Id;
+            order.Amount = request.Amount;
+            var response = alipayUtils.FundTransPagePay(new AlipayFundTransPagePayModel
+            {
+                OutBizNo = order.Code,
+                TransAmount = order.Amount.ToString(),
+                ProductCode = "FUND_ACCOUNT_BOOK",
+                BizScene = "SATF_DEPOSIT",
+                Remark = "璁拌处鏈厖鍊�",
+                OrderTitle = "璁拌处鏈厖鍊�",
+                TimeExpire = DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss"),
+                PayeeInfo = new Participant
+                {
+                    IdentityType = "ACCOUNT_BOOK_ID",
+                    Identity = entity.AccountBookId,
+                    ExtInfo = new
+                    {
+                        agreement_no = entity.AgreementNo,
+                    }.ToJson(),
+                },
+            });
+            if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
+            order.OrderId = response.OrderId;
+            return order.Id;
+        }
+
         public async Task<Guid> Handle(AlipayTransferCommand request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs
index 5fb092c..f826fed 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/GetAlipayNotifyCommandHandler.cs
@@ -19,12 +19,14 @@
     /// 鏀粯瀹濋�氱煡鍥炰紶
     /// </summary>
     public class GetAlipayNotifyCommandHandler(
-            IRepository<EnterpriseWallet> rep
+            IRepository<EnterpriseWallet> rep,
+            IMediator mediator
         ) :
         IRequestHandler<GetAlipayNotifyCommand, bool>,
         IRequestHandler<AlipayUserAgreementPageSignNotifyCommand, bool>
     {
         private readonly IRepository<EnterpriseWallet> rep = rep;
+        private readonly IMediator mediator = mediator;
 
         /// <summary>
         /// 鏀粯瀹濋�氱煡鍥炰紶
@@ -49,23 +51,11 @@
                 .Where(it => it.Code == request.external_agreement_no)
                 .FirstOrDefaultAsync();
             if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘");
-            entity.AgreementNo = request.agreement_no;
-            entity.SignTime = request.sign_time.ToDateTime();
-            entity.ValidTime = request.valid_time.ToDateTime();
-            entity.InvalidTime = request.invalid_time.ToDateTime();
-            entity.SignStatus = request.status == "TEMP"
-                ? EnumEnterpriseWalletSignStatus.Apply
-                : request.status == "NORMAL"
-                ? EnumEnterpriseWalletSignStatus.Normal
-                : request.status == "STOP"
-                ? EnumEnterpriseWalletSignStatus.Stop
-                : throw Oops.Oh(EnumErrorCodeType.s510, "鐘舵�佸紓甯�");
-            entity.AlipayLogonId = request.alipay_logon_id;
-            entity.PrincipalId = request.alipay_user_id;
-            entity.PrincipalOpenId = request.alipay_open_id;
-            entity.ZmOpenId = request.zm_open_id;
-            entity.CreditAuthMode = request.credit_auth_mode;
-            await rep.UpdateAsync(entity);
+            await mediator.Send(new GetEnterpriseWalletQuery
+            {
+                EnterpriseId = entity.EnterpriseId,
+                Access = EnumEnterpriseWalletAccess.Alipay
+            });
             return true;
         }
     }
diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs
index 140759f..5289323 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs
@@ -17,11 +17,13 @@
     /// </summary>
     public class EnterpriseWalletQueryHandler(
             IRepository<EnterpriseWallet> rep,
+            IRepository<Enterprise> repEnterprise,
             AlipayUtils alipayUtils
         ) :
         IRequestHandler<GetEnterpriseWalletQuery, GetEnterpriseWalletQueryResult>
     {
         private readonly IRepository<EnterpriseWallet> rep = rep;
+        private readonly IRepository<Enterprise> repEnterprise = repEnterprise;
         private readonly AlipayUtils alipayUtils = alipayUtils;
 
         /// <summary>
@@ -30,42 +32,82 @@
         /// <param name="request"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
+        [UnitOfWork(false)]
         public async Task<GetEnterpriseWalletQueryResult> Handle(GetEnterpriseWalletQuery request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
+            if (request.EnterpriseId == null || logier.Type == EnumUserType.Enterprise)
+            {
+                request.EnterpriseId = logier.EnterpriseId;
+            }
+            var enterprise = repEnterprise.AsQueryable().AsNoTracking()
+                .Where(it => it.Id == request.EnterpriseId)
+                .FirstOrDefault();
+            if (enterprise == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟");
             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.Apply)
+            if (entity.Access == EnumEnterpriseWalletAccess.Alipay)
             {
-                var response = alipayUtils.UserAgreementQuery(new Aop.Api.Domain.AlipayUserAgreementQueryModel
+                if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Apply)
                 {
-                    PersonalProductCode = entity.PersonalProductCode,
-                    SignScene = entity.SignScene,
-                    ExternalAgreementNo = entity.Code,
-                    ThirdPartyType = entity.ThirdPartyType,
-                });
-                if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
-                entity.AgreementNo = response.AgreementNo;
-                entity.SignTime = response.SignTime.ToDateTime();
-                entity.ValidTime = response.ValidTime.ToDateTime();
-                entity.InvalidTime = response.InvalidTime.ToDateTime();
-                entity.SignStatus = response.Status == "TEMP"
-                    ? EnumEnterpriseWalletSignStatus.Apply
-                    : response.Status == "NORMAL"
-                    ? EnumEnterpriseWalletSignStatus.Normal
-                    : response.Status == "STOP"
-                    ? EnumEnterpriseWalletSignStatus.Stop
-                    : throw Oops.Oh(EnumErrorCodeType.s510, "鐘舵�佸紓甯�");
-                entity.PricipalType = response.PricipalType;
-                entity.AlipayLogonId = response.AlipayLogonId;
-                entity.PrincipalId = response.PrincipalId;
-                entity.PrincipalOpenId = response.PrincipalOpenId;
-                entity.ZmOpenId = response.ZmOpenId;
-                entity.CreditAuthMode = response.CreditAuthMode;
-                await rep.UpdateAsync(entity);
+                    var response = alipayUtils.UserAgreementQuery(new Aop.Api.Domain.AlipayUserAgreementQueryModel
+                    {
+                        PersonalProductCode = entity.PersonalProductCode,
+                        SignScene = entity.SignScene,
+                        ExternalAgreementNo = entity.Code,
+                        ThirdPartyType = entity.ThirdPartyType,
+                    });
+                    if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
+                    entity.AgreementNo = response.AgreementNo;
+                    entity.SignTime = response.SignTime.ToDateTime();
+                    entity.ValidTime = response.ValidTime.ToDateTime();
+                    entity.InvalidTime = response.InvalidTime.ToDateTime();
+                    entity.SignStatus = response.Status == "TEMP"
+                        ? EnumEnterpriseWalletSignStatus.Apply
+                        : response.Status == "NORMAL"
+                        ? EnumEnterpriseWalletSignStatus.Normal
+                        : response.Status == "STOP"
+                        ? EnumEnterpriseWalletSignStatus.Stop
+                        : throw Oops.Oh(EnumErrorCodeType.s510, "鐘舵�佸紓甯�");
+                    entity.PricipalType = response.PricipalType;
+                    entity.AlipayLogonId = response.AlipayLogonId;
+                    entity.PrincipalId = response.PrincipalId;
+                    entity.PrincipalOpenId = response.PrincipalOpenId;
+                    entity.ZmOpenId = response.ZmOpenId;
+                    entity.CreditAuthMode = response.CreditAuthMode;
+                    await rep.UpdateNowAsync(entity);
+                }
+
+                if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Normal && entity.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal)
+                {
+                    var accountBookResponse = alipayUtils.FundAccountbookCreate(new Aop.Api.Domain.AlipayFundAccountbookCreateModel
+                    {
+                        MerchantUserId = entity.Code,
+                        MerchantUserType = "BUSINESS_ORGANIZATION",
+                        SceneCode = "SATF_FUND_BOOK",
+                        ExtInfo = new
+                        {
+                            agreement_no = entity.AgreementNo,
+                            cert_no = enterprise.SocietyCreditCode
+                        }.ToJson()
+                    });
+                    if (accountBookResponse.IsError) throw Oops.Oh(EnumErrorCodeType.s510, accountBookResponse.SubMsg ?? accountBookResponse.Msg);
+                    entity.AccountBookId = accountBookResponse.AccountBookId;
+                    entity.BankAccName = accountBookResponse.ExtCardInfo.BankAccName;
+                    entity.CardBank = accountBookResponse.ExtCardInfo.CardBank;
+                    entity.CardBranch = accountBookResponse.ExtCardInfo.CardBranch;
+                    entity.CardDeposit = accountBookResponse.ExtCardInfo.CardDeposit;
+                    entity.CardLocation = accountBookResponse.ExtCardInfo.CardLocation;
+                    entity.CardNo = accountBookResponse.ExtCardInfo.CardNo;
+                    entity.AccountBookStatus = accountBookResponse.ExtCardInfo.Status == "A"
+                        ? EnumEnterpriseWalletAccountBookStatus.Normal
+                        : EnumEnterpriseWalletAccountBookStatus.Exception;
+                    await rep.UpdateNowAsync(entity);
+                }
             }
+
             var model = entity.Adapt<GetEnterpriseWalletQueryResult>();
             return model;
         }
diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
index 605d312..ba599e8 100644
--- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
+++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -432,7 +432,7 @@
             鐏靛伐鏌ヨ澶勭悊鍣�
             </summary>
         </member>
-        <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeeQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee})">
+        <member name="M:FlexJobApi.UserServer.Application.EnterpriseEmployeeQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployee},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.ContractTemplate},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseEmployeeContract},MediatR.IMediator)">
             <summary>
             鐏靛伐鏌ヨ澶勭悊鍣�
             </summary>
@@ -633,12 +633,21 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletCommandHandler.Handle(FlexJobApi.Core.RechargeEnterpriseWalletCommand,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.UserServer.Application.GetAlipayNotifyCommandHandler">
             <summary>
             鏀粯瀹濋�氱煡鍥炰紶
             </summary>
         </member>
-        <member name="M:FlexJobApi.UserServer.Application.GetAlipayNotifyCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet})">
+        <member name="M:FlexJobApi.UserServer.Application.GetAlipayNotifyCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},MediatR.IMediator)">
             <summary>
             鏀粯瀹濋�氱煡鍥炰紶
             </summary>
@@ -682,7 +691,7 @@
             浼佷笟閽卞寘鏌ヨ澶勭悊鍣�
             </summary>
         </member>
-        <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},FlexJobApi.Core.AlipayUtils)">
+        <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Enterprise},FlexJobApi.Core.AlipayUtils)">
             <summary>
             浼佷笟閽卞寘鏌ヨ澶勭悊鍣�
             </summary>

--
Gitblit v1.9.1