From 7b47c91bcf89d667a5c99cfafe0d899280f7fbe3 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期三, 19 十一月 2025 11:22:27 +0800
Subject: [PATCH] feat:平安转账开发

---
 ApiTools.Core/Services/ChannelPingAnPayWalletService.cs                           |   13 +++
 ApiTools.Core/Models/ChannelWallets/Commands/SaveChannelPingAnPayWalletCommand.cs |   22 -----
 ApiTools.Application/ApiTools.Application.xml                                     |   18 ++++
 ApiTools.Web.Entry/PingAnPayCert/config.properties                                |    8 ++
 ApiTools.Core/Models/ChannelWallets/Queries/GetChannelPingAnPayWalletQuery.cs     |   53 +++++++++++++
 ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs       |   16 ++-
 ApiTools.Core/ApiTools.Core.xml                                                   |   57 +++++++++-----
 ApiTools.Web.Entry/ApiTools.Web.Entry.csproj                                      |    7 +
 ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs          |   21 ++++
 9 files changed, 165 insertions(+), 50 deletions(-)

diff --git a/ApiTools.Application/ApiTools.Application.xml b/ApiTools.Application/ApiTools.Application.xml
index ebd1a2b..6b48838 100644
--- a/ApiTools.Application/ApiTools.Application.xml
+++ b/ApiTools.Application/ApiTools.Application.xml
@@ -149,6 +149,14 @@
             <param name="cancellationToken"></param>
             <returns></returns>
         </member>
+        <member name="M:ApiTools.Application.ChannelWalletCommandHandler.Handle(ApiTools.Core.SaveChannelPingAnPayWalletCommand,System.Threading.CancellationToken)">
+            <summary>
+            淇濆瓨娓犻亾骞冲畨閾惰閽卞寘
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
         <member name="M:ApiTools.Application.ChannelWalletCommandHandler.Handle(ApiTools.Core.SubmitChannelWalletTransferCommand,System.Threading.CancellationToken)">
             <summary>
             鎻愪氦娓犻亾閽卞寘杞处
@@ -162,11 +170,19 @@
             鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
             </summary>
         </member>
-        <member name="M:ApiTools.Application.ChannelWalletQueryHandler.#ctor(ApiTools.Core.ChannelWalletTransactionRepository)">
+        <member name="M:ApiTools.Application.ChannelWalletQueryHandler.#ctor(ApiTools.Core.ChannelWalletRepository,ApiTools.Core.ChannelWalletTransactionRepository)">
             <summary>
             鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
             </summary>
         </member>
+        <member name="M:ApiTools.Application.ChannelWalletQueryHandler.Handle(ApiTools.Core.GetChannelPingAnPayWalletQuery,System.Threading.CancellationToken)">
+            <summary>
+            鏌ヨ娓犻亾骞冲畨閾惰閽卞寘
+            </summary>
+            <param name="request"></param>
+            <param name="cancellationToken"></param>
+            <returns></returns>
+        </member>
         <member name="M:ApiTools.Application.ChannelWalletQueryHandler.Handle(ApiTools.Core.GetChannelWalletTransactionQuery,System.Threading.CancellationToken)">
             <summary>
             鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
diff --git a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
index 3feb977..0fd2503 100644
--- a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
+++ b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
@@ -29,6 +29,12 @@
         private readonly ChannelWalletTransactionRepository channelWalletTransactionRepository = channelWalletTransactionRepository;
         private readonly ChannelWalletService channelWalletService = channelWalletService;
 
+        /// <summary>
+        /// 淇濆瓨娓犻亾骞冲畨閾惰閽卞寘
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
         public async Task<SaveChannelPingAnPayWalletCommandResult> Handle(SaveChannelPingAnPayWalletCommand request, CancellationToken cancellationToken)
         {
             var logier = JwtUtils.GetCurrentLogier();
@@ -40,23 +46,23 @@
                 wallet = new ChannelWallet();
                 wallet.ChannelId = logier.ChannelId;
                 wallet.Access = EnumWalletAccess.PingAnPay;
-                wallet.SignStatus = EnumWalletSignStatus.Normal;
+                wallet.Bank = "骞冲畨閾惰";
+                wallet.SignStatus = EnumWalletSignStatus.Apply;
                 request.Adapt(wallet);
                 await channelWalletRepository.SetCode(wallet);
                 await channelWalletRepository.InsertNowAsync(wallet);
             }
             else
             {
+                wallet.SignStatus = EnumWalletSignStatus.Apply;
                 request.Adapt(wallet);
                 await channelWalletRepository.UpdateNowAsync(wallet);
             }
             await channelWalletService.GetEnterpriseWalletBalance(wallet);
             return new SaveChannelPingAnPayWalletCommandResult
             {
-                WalletId = wallet.Id,
+                Id = wallet.Id,
                 Balance = wallet.Balance,
-                ErrorCode = wallet.ErrorCode,
-                FailReason = wallet.FailReason
             };
         }
 
@@ -80,7 +86,7 @@
                 .FirstOrDefaultAsync();
 
             if (wallet == null) throw Oops.Oh(EnumErrorCodeType.s404, "鏈紑閫氶挶鍖�");
-
+            if (wallet.SignStatus != EnumWalletSignStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s404, "閽卞寘鏈绾�");
             await channelWalletService.GetEnterpriseWalletBalance(wallet);
             if (request.Amount > wallet.Balance) throw Oops.Oh(EnumErrorCodeType.s404, "浣欓涓嶈冻");
 
diff --git a/ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs b/ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs
index cbc93a4..59fa35e 100644
--- a/ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs
+++ b/ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs
@@ -14,11 +14,28 @@
     /// 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
     /// </summary>
     public class ChannelWalletQueryHandler(
+            ChannelWalletRepository channelWalletRepository,
             ChannelWalletTransactionRepository channelWalletTransactionRepository
         ) :
+        IRequestHandler<GetChannelPingAnPayWalletQuery, GetChannelPingAnPayWalletQueryResult>,
         IRequestHandler<GetChannelWalletTransactionQuery, GetChannelWalletTransactionQueryResult>
     {
+        private readonly ChannelWalletRepository channelWalletRepository = channelWalletRepository;
         private readonly ChannelWalletTransactionRepository channelWalletTransactionRepository = channelWalletTransactionRepository;
+
+        /// <summary>
+        /// 鏌ヨ娓犻亾骞冲畨閾惰閽卞寘
+        /// </summary>
+        /// <param name="request"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<GetChannelPingAnPayWalletQueryResult> Handle(GetChannelPingAnPayWalletQuery request, CancellationToken cancellationToken)
+        {
+            return await channelWalletRepository.GetQueryable()
+                .Where(it => it.OutWalletId == request.OutWalletId)
+                .ProjectToType<GetChannelPingAnPayWalletQueryResult>()
+                .FirstOrDefaultAsync();
+        }
 
         /// <summary>
         /// 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
@@ -28,11 +45,11 @@
         /// <returns></returns>
         public async Task<GetChannelWalletTransactionQueryResult> Handle(GetChannelWalletTransactionQuery request, CancellationToken cancellationToken)
         {
-            var logier = JwtUtils.GetCurrentLogier();
             return await channelWalletTransactionRepository.GetQueryable()
-                .Where(it => it.Wallet.ChannelId == logier.ChannelId && it.OutCode == request.OutCode)
+                .Where(it => it.OutCode == request.OutCode)
                 .ProjectToType<GetChannelWalletTransactionQueryResult>()
                 .FirstOrDefaultAsync();
         }
+
     }
 }
diff --git a/ApiTools.Core/ApiTools.Core.xml b/ApiTools.Core/ApiTools.Core.xml
index 17bfcba..9e8d375 100644
--- a/ApiTools.Core/ApiTools.Core.xml
+++ b/ApiTools.Core/ApiTools.Core.xml
@@ -2263,16 +2263,6 @@
             澶栭儴閽卞寘Id
             </summary>
         </member>
-        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommand.Bank">
-            <summary>
-            鎵�灞為摱琛�
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommand.BankBranch">
-            <summary>
-            鎵�灞炴敮琛�
-            </summary>
-        </member>
         <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommand.Name">
             <summary>
             鎴峰悕
@@ -2283,7 +2273,7 @@
             璐﹀彿
             </summary>
         </member>
-        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.WalletId">
+        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.Id">
             <summary>
             閽卞寘Id
             </summary>
@@ -2291,16 +2281,6 @@
         <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.Balance">
             <summary>
             浣欓
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.ErrorCode">
-            <summary>
-            閿欒浠g爜
-            </summary>
-        </member>
-        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.FailReason">
-            <summary>
-            杩斿洖鍏蜂綋鐨勫師鍥犮��
             </summary>
         </member>
         <member name="T:ApiTools.Core.SubmitChannelWalletTransferCommand">
@@ -2403,6 +2383,41 @@
             鏌ヨ鍒扮殑璁㈠崟鐘舵�佷负FAIL澶辫触鎴朢EFUND閫�绁ㄦ椂锛岃繑鍥炲叿浣撶殑鍘熷洜銆�
             </summary>
         </member>
+        <member name="T:ApiTools.Core.GetChannelPingAnPayWalletQuery">
+            <summary>
+            鏌ヨ娓犻亾骞冲畨閾惰閽卞寘
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQuery.OutWalletId">
+            <summary>
+            澶栭儴閽卞寘Id
+            </summary>
+        </member>
+        <member name="T:ApiTools.Core.GetChannelPingAnPayWalletQueryResult">
+            <summary>
+            鏌ヨ娓犻亾骞冲畨閾惰閽卞寘
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQueryResult.Id">
+            <summary>
+            閽卞寘Id
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQueryResult.Name">
+            <summary>
+            鎴峰悕
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQueryResult.Identity">
+            <summary>
+            璐﹀彿
+            </summary>
+        </member>
+        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQueryResult.Balance">
+            <summary>
+            浣欓
+            </summary>
+        </member>
         <member name="T:ApiTools.Core.GetChannelWalletTransactionQuery">
             <summary>
             鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
diff --git a/ApiTools.Core/Models/ChannelWallets/Commands/SaveChannelPingAnPayWalletCommand.cs b/ApiTools.Core/Models/ChannelWallets/Commands/SaveChannelPingAnPayWalletCommand.cs
index a2a82c2..bc740c5 100644
--- a/ApiTools.Core/Models/ChannelWallets/Commands/SaveChannelPingAnPayWalletCommand.cs
+++ b/ApiTools.Core/Models/ChannelWallets/Commands/SaveChannelPingAnPayWalletCommand.cs
@@ -19,16 +19,6 @@
         public string OutWalletId { get; set; }
 
         /// <summary>
-        /// 鎵�灞為摱琛�
-        /// </summary>
-        public string Bank { get; set; }
-
-        /// <summary>
-        /// 鎵�灞炴敮琛�
-        /// </summary>
-        public string BankBranch { get; set; }
-
-        /// <summary>
         /// 鎴峰悕
         /// </summary>
         public string Name { get; set; }
@@ -45,21 +35,11 @@
         /// <summary>
         /// 閽卞寘Id
         /// </summary>
-        public Guid WalletId { get; set; }
+        public Guid Id { get; set; }
 
         /// <summary>
         /// 浣欓
         /// </summary>
         public decimal Balance { get; set; }
-
-        /// <summary>
-        /// 閿欒浠g爜
-        /// </summary>
-        public string ErrorCode { get; set; }
-
-        /// <summary>
-        /// 杩斿洖鍏蜂綋鐨勫師鍥犮��
-        /// </summary>
-        public string FailReason { get; set; }
     }
 }
diff --git a/ApiTools.Core/Models/ChannelWallets/Queries/GetChannelPingAnPayWalletQuery.cs b/ApiTools.Core/Models/ChannelWallets/Queries/GetChannelPingAnPayWalletQuery.cs
new file mode 100644
index 0000000..bf77529
--- /dev/null
+++ b/ApiTools.Core/Models/ChannelWallets/Queries/GetChannelPingAnPayWalletQuery.cs
@@ -0,0 +1,53 @@
+锘縰sing MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ApiTools.Core
+{
+    /// <summary>
+    /// 鏌ヨ娓犻亾骞冲畨閾惰閽卞寘
+    /// </summary>
+    [Resource([EnumResourceController.UserServerChannelWallet])]
+    public class GetChannelPingAnPayWalletQuery : IRequest<GetChannelPingAnPayWalletQueryResult>
+    {
+        /// <summary>
+        /// 澶栭儴閽卞寘Id
+        /// </summary>
+        public string OutWalletId { get; set; }
+    }
+
+    /// <summary>
+    /// 鏌ヨ娓犻亾骞冲畨閾惰閽卞寘
+    /// </summary>
+    public class GetChannelPingAnPayWalletQueryResult
+    {
+        /// <summary>
+        /// 閽卞寘Id
+        /// </summary>
+        public Guid Id { get; set; }
+
+        /// <summary>
+        /// 鎴峰悕
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 璐﹀彿
+        /// </summary>
+        public string Identity { get; set; }
+
+        /// <summary>
+        /// 浣欓
+        /// </summary>
+        public decimal Balance { get; set; }
+
+        /// <summary>
+        /// 绛剧害鐘舵��
+        /// </summary>
+        public EnumWalletSignStatus SignStatus { get; set; }
+
+    }
+}
diff --git a/ApiTools.Core/Services/ChannelPingAnPayWalletService.cs b/ApiTools.Core/Services/ChannelPingAnPayWalletService.cs
index e49da82..628ecc6 100644
--- a/ApiTools.Core/Services/ChannelPingAnPayWalletService.cs
+++ b/ApiTools.Core/Services/ChannelPingAnPayWalletService.cs
@@ -52,6 +52,9 @@
                 }
                 else
                 {
+                    wallet.ErrorCode = null;
+                    wallet.FailReason = null;
+                    wallet.SignStatus = EnumWalletSignStatus.Normal;
                     wallet.Balance = response.AcctBalance.ToDecimal().Value;
                 }
             }
@@ -184,6 +187,16 @@
                         : response.Stt == "30"
                         ? EnumWalletTransactionStatus.Fail
                         : EnumWalletTransactionStatus.Dealing;
+                if (transaction.TransactionStatus == EnumWalletTransactionStatus.Fail)
+                {
+                    transaction.ErrorCode = response.Stt;
+                    transaction.FailReason = response.BackRem;
+                }
+                else
+                {
+                    transaction.ErrorCode = null;
+                    transaction.FailReason = null;
+                }
                 if (transaction.TransactionStatus == EnumWalletTransactionStatus.Success && transaction.TransDate == null)
                 {
                     transaction.TransDate = DateTime.Now;
diff --git a/ApiTools.Web.Entry/ApiTools.Web.Entry.csproj b/ApiTools.Web.Entry/ApiTools.Web.Entry.csproj
index 617bd5a..b7ace61 100644
--- a/ApiTools.Web.Entry/ApiTools.Web.Entry.csproj
+++ b/ApiTools.Web.Entry/ApiTools.Web.Entry.csproj
@@ -21,6 +21,13 @@
 	  <ProjectReference Include="..\ApiTools.Application\ApiTools.Application.csproj" />
 	  <ProjectReference Include="..\ApiTools.Database.Migrations\ApiTools.Database.Migrations.csproj" />
 	</ItemGroup>
+
+
+	<ItemGroup>
+	  <None Update="PingAnPayCert\config.properties">
+	    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+	  </None>
+	</ItemGroup>
 	<ProjectExtensions>
 		<VisualStudio>
 			<UserProperties properties_4launchsettings_1json__JsonSchema="" />
diff --git a/ApiTools.Web.Entry/PingAnPayCert/config.properties b/ApiTools.Web.Entry/PingAnPayCert/config.properties
new file mode 100644
index 0000000..17a8514
--- /dev/null
+++ b/ApiTools.Web.Entry/PingAnPayCert/config.properties
@@ -0,0 +1,8 @@
+appId=22c4781c85
+publicKey=0480E866C61C385C2916901CFC10AA53DFD89DBFFA87A4A49C26F82C66F30B7A7038D61FDBE08236F6ACFA6216A6FBCC511841586ABE24107438E049BE98C4660C
+appPrivateKey=7051c204b10e5380859d8e38c3061fbe2d309c4cac1b89f0c331690d291fb18b
+baseUrl=https://my-st1.orangebank.com.cn:567/fat7/openapi/gateway/
+fileUploadUrl=https://my-st1.orangebank.com.cn:567/fat7/openapi/file//boapFile/upload
+fileDownLoadUrl=https://my-st1.orangebank.com.cn:567/fat7/openapi/file//boapFile/download
+signMethod=SM2
+appSecret=73W620

--
Gitblit v1.9.1