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