From ee552e8f4dd8a2d7bd59f7bd87845de0188d7a36 Mon Sep 17 00:00:00 2001
From: lijin <17408817@qq.com>
Date: 星期四, 20 十一月 2025 10:49:24 +0800
Subject: [PATCH] Merge branch 'dev-818-3.4.2.12' of http://120.26.58.240:8888/r/ApiTools into dev-818-3.4.2.12
---
ApiTools.Core/Jobs/RefreshChannelWalletTransactionStatusJob.cs | 10
ApiTools.Application/ApiTools.Application.xml | 8
ApiTools.Core/Models/ChannelWallets/Queries/GetChannelWalletTransactionsQuery.cs | 208 ++++++++++++++++++++
ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs | 101 +++++++---
ApiTools.Core/ApiTools.Core.xml | 195 +++++++++++++++++++
ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs | 26 ++
6 files changed, 511 insertions(+), 37 deletions(-)
diff --git a/ApiTools.Application/ApiTools.Application.xml b/ApiTools.Application/ApiTools.Application.xml
index 1263057..a8261f0 100644
--- a/ApiTools.Application/ApiTools.Application.xml
+++ b/ApiTools.Application/ApiTools.Application.xml
@@ -191,6 +191,14 @@
<param name="cancellationToken"></param>
<returns></returns>
</member>
+ <member name="M:ApiTools.Application.ChannelWalletQueryHandler.Handle(ApiTools.Core.GetChannelWalletTransactionsQuery,System.Threading.CancellationToken)">
+ <summary>
+ 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
+ </summary>
+ <param name="request"></param>
+ <param name="cancellationToken"></param>
+ <returns></returns>
+ </member>
<member name="M:ApiTools.Application.SendSmsCommandHandler.Handle(ApiTools.Core.SendSmsCommand,System.Threading.CancellationToken)">
<summary>
鍙戦�佺煭淇�
diff --git a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
index 0fd2503..50032f2 100644
--- a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
+++ b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
@@ -90,37 +90,76 @@
await channelWalletService.GetEnterpriseWalletBalance(wallet);
if (request.Amount > wallet.Balance) throw Oops.Oh(EnumErrorCodeType.s404, "浣欓涓嶈冻");
- var checkExist = await channelWalletTransactionRepository.GetQueryable()
- .AnyAsync(it => it.WalletId == wallet.Id && it.OutCode == request.OutCode);
- if (checkExist) throw Oops.Oh(EnumErrorCodeType.s405, "浜ゆ槗鍗曞彿");
-
- var transaction = new ChannelWalletTransaction();
- transaction.Type = EnumWalletTransactionType.Transfer;
- transaction.WalletId = wallet.Id;
- transaction.OutCode = request.OutCode;
- transaction.ConcurrencyLock = $"{logier.ChannelId}:{transaction.OutCode}";
- transaction.Amount = request.Amount;
- transaction.Remark = request.Remark;
- transaction.TransactionStatus = EnumWalletTransactionStatus.WaitSubmit;
- transaction.Balance = wallet.Balance;
- transaction.AfterBalance = wallet.Balance - transaction.Amount;
- transaction.OutOperatorId = request.OutOperatorId;
- transaction.OperatorTime = request.OperatorTime;
- transaction.PayerName = wallet.Name;
- transaction.PayerAccount = wallet.Identity;
- transaction.PayerBank = wallet.Bank;
- transaction.PayerBankBranch = wallet.BankBranch;
- transaction.OutReceiveId = request.OutReceiveId;
- transaction.ReceiveBank = request.ReceiveBank;
- transaction.ReceiveBankBranch = request.ReceiveBankBranch;
- transaction.ReceiveName = request.ReceiveName;
- transaction.ReceiveIdentity = request.ReceiveIdentity;
- transaction.ReceiveAccount = request.ReceiveAccount;
- transaction.Currency = request.Currency;
- transaction.Purpose = request.Purpose;
- transaction.Remark = request.Remark;
- await channelWalletTransactionRepository.SetCode(transaction);
- await channelWalletTransactionRepository.InsertNowAsync(transaction);
+ var transaction = await channelWalletTransactionRepository.GetQueryable()
+ .Where(it => it.WalletId == wallet.Id && it.OutCode == request.OutCode)
+ .FirstOrDefaultAsync();
+ if (transaction == null)
+ {
+ transaction = new ChannelWalletTransaction();
+ transaction.Type = EnumWalletTransactionType.Transfer;
+ transaction.WalletId = wallet.Id;
+ transaction.OutCode = request.OutCode;
+ transaction.ConcurrencyLock = $"{logier.ChannelId}:{transaction.OutCode}";
+ transaction.TransactionStatus = EnumWalletTransactionStatus.WaitSubmit;
+ transaction.Amount = request.Amount;
+ transaction.Balance = wallet.Balance;
+ transaction.AfterBalance = wallet.Balance - transaction.Amount;
+ transaction.OutOperatorId = request.OutOperatorId;
+ transaction.OperatorTime = request.OperatorTime;
+ transaction.PayerName = wallet.Name;
+ transaction.PayerAccount = wallet.Identity;
+ transaction.PayerBank = wallet.Bank;
+ transaction.PayerBankBranch = wallet.BankBranch;
+ transaction.OutReceiveId = request.OutReceiveId;
+ transaction.ReceiveBank = request.ReceiveBank;
+ transaction.ReceiveBankBranch = request.ReceiveBankBranch;
+ transaction.ReceiveName = request.ReceiveName;
+ transaction.ReceiveIdentity = request.ReceiveIdentity;
+ transaction.ReceiveAccount = request.ReceiveAccount;
+ transaction.Currency = request.Currency;
+ transaction.Purpose = request.Purpose;
+ transaction.Remark = request.Remark;
+ await channelWalletTransactionRepository.SetCode(transaction);
+ await channelWalletTransactionRepository.InsertNowAsync(transaction);
+ }
+ else
+ {
+ switch (transaction.TransactionStatus)
+ {
+ case EnumWalletTransactionStatus.WaitSubmit:
+ throw Oops.Oh(EnumErrorCodeType.s510, "宸插瓨鍦ㄦ鍦ㄥ鐞嗙殑杞处锛岃鍕块噸澶嶆搷浣�");
+ case EnumWalletTransactionStatus.WaitPay:
+ case EnumWalletTransactionStatus.Dealing:
+ throw Oops.Oh(EnumErrorCodeType.s510, "杞处姝e湪杩涜涓紝璇峰嬁閲嶅鎿嶄綔");
+ case EnumWalletTransactionStatus.Success:
+ throw Oops.Oh(EnumErrorCodeType.s510, "宸茶浆璐︼紝璇峰嬁閲嶅鎿嶄綔");
+ case EnumWalletTransactionStatus.Refund:
+ case EnumWalletTransactionStatus.Fail:
+ transaction.TransactionStatus = EnumWalletTransactionStatus.WaitSubmit;
+ transaction.Amount = request.Amount;
+ transaction.Balance = wallet.Balance;
+ transaction.AfterBalance = wallet.Balance - transaction.Amount;
+ transaction.OutOperatorId = request.OutOperatorId;
+ transaction.OperatorTime = request.OperatorTime;
+ transaction.PayerName = wallet.Name;
+ transaction.PayerAccount = wallet.Identity;
+ transaction.PayerBank = wallet.Bank;
+ transaction.PayerBankBranch = wallet.BankBranch;
+ transaction.OutReceiveId = request.OutReceiveId;
+ transaction.ReceiveBank = request.ReceiveBank;
+ transaction.ReceiveBankBranch = request.ReceiveBankBranch;
+ transaction.ReceiveName = request.ReceiveName;
+ transaction.ReceiveIdentity = request.ReceiveIdentity;
+ transaction.ReceiveAccount = request.ReceiveAccount;
+ transaction.Currency = request.Currency;
+ transaction.Purpose = request.Purpose;
+ transaction.Remark = request.Remark;
+ await channelWalletTransactionRepository.UpdateNowAsync(transaction);
+ break;
+ default:
+ break;
+ }
+ }
await channelWalletService.Transfer(wallet, transaction);
return new SubmitChannelWalletTransferCommandResult
{
diff --git a/ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs b/ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs
index 59fa35e..81ad08b 100644
--- a/ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs
+++ b/ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs
@@ -18,7 +18,8 @@
ChannelWalletTransactionRepository channelWalletTransactionRepository
) :
IRequestHandler<GetChannelPingAnPayWalletQuery, GetChannelPingAnPayWalletQueryResult>,
- IRequestHandler<GetChannelWalletTransactionQuery, GetChannelWalletTransactionQueryResult>
+ IRequestHandler<GetChannelWalletTransactionQuery, GetChannelWalletTransactionQueryResult>,
+ IRequestHandler<GetChannelWalletTransactionsQuery, GetChannelWalletTransactionsQueryResult>
{
private readonly ChannelWalletRepository channelWalletRepository = channelWalletRepository;
private readonly ChannelWalletTransactionRepository channelWalletTransactionRepository = channelWalletTransactionRepository;
@@ -51,5 +52,28 @@
.FirstOrDefaultAsync();
}
+ /// <summary>
+ /// 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
+ /// </summary>
+ /// <param name="request"></param>
+ /// <param name="cancellationToken"></param>
+ /// <returns></returns>
+ public async Task<GetChannelWalletTransactionsQueryResult> Handle(GetChannelWalletTransactionsQuery request, CancellationToken cancellationToken)
+ {
+ var list = new GetChannelWalletTransactionsQueryResult();
+ list.Items = await channelWalletTransactionRepository.GetQueryable()
+ .Where(it => request.OutCodes.Contains(it.OutCode))
+ .ProjectToType<GetChannelWalletTransactionsQueryResultItem>()
+ .ToListAsync();
+ foreach (var item in list.Items)
+ {
+ if (item.EreceiptStatus == EnumWalletTransactionEreceiptStatus.SUCCESS
+ && item.EreceiptDownloadOssUrl.IsNotNull())
+ {
+ item.EreceiptDownloadOssFullUrl = AliyunOSSUtils.GetUrl(item.EreceiptDownloadOssUrl);
+ }
+ }
+ return list;
+ }
}
}
diff --git a/ApiTools.Core/ApiTools.Core.xml b/ApiTools.Core/ApiTools.Core.xml
index cb85746..ab8921b 100644
--- a/ApiTools.Core/ApiTools.Core.xml
+++ b/ApiTools.Core/ApiTools.Core.xml
@@ -2633,6 +2633,201 @@
鐘舵��
</summary>
</member>
+ <member name="T:ApiTools.Core.GetChannelWalletTransactionsQuery">
+ <summary>
+ 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQuery.OutCodes">
+ <summary>
+ 澶栭儴璁㈠崟鍙�
+ </summary>
+ </member>
+ <member name="T:ApiTools.Core.GetChannelWalletTransactionsQueryResult">
+ <summary>
+ 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResult.Items">
+ <summary>
+ 椤�
+ </summary>
+ </member>
+ <member name="T:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem">
+ <summary>
+ 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.Id">
+ <summary>
+ 浜ゆ槗Id
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.Type">
+ <summary>
+ 绫诲瀷
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.Code">
+ <summary>
+ 璁㈠崟鍙�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.OutCode">
+ <summary>
+ 澶栭儴璁㈠崟鍙�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.ConcurrencyLock">
+ <summary>
+ 骞跺彂閿�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.Amount">
+ <summary>
+ 閲戦
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.Balance">
+ <summary>
+ 浣欓
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.AfterBalance">
+ <summary>
+ 鏀舵敮鍚庝綑棰�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.OutOperatorId">
+ <summary>
+ 澶栭儴鎿嶄綔浜篒d
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.OperatorTime">
+ <summary>
+ 鎿嶄綔鏃堕棿
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.PayerAccount">
+ <summary>
+ 浠樻浜鸿处鎴�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.PayerName">
+ <summary>
+ 浠樻浜哄悕绉�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.PayerBank">
+ <summary>
+ 浠樻浜哄紑鎴疯
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.PayerBankBranch">
+ <summary>
+ 浠樻浜烘敮琛�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.OutReceiveId">
+ <summary>
+ 澶栭儴鏀舵浜篒d
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.ReceiveName">
+ <summary>
+ 鏀舵浜哄鍚�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.ReceiveIdentity">
+ <summary>
+ 鏀舵浜鸿韩浠借瘉鍙�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.ReceiveAccount">
+ <summary>
+ 鏀舵璐︽埛
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.ReceiveBank">
+ <summary>
+ 鏀舵浜哄紑鎴疯
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.ReceiveBankBranch">
+ <summary>
+ 鏀舵浜烘敮琛�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.Currency">
+ <summary>
+ 甯佺
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.Purpose">
+ <summary>
+ 鐢ㄩ��
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.Remark">
+ <summary>
+ 澶囨敞
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.ErrorCode">
+ <summary>
+ 鏌ヨ鍒扮殑璁㈠崟鐘舵�佷负FAIL澶辫触鎴朢EFUND閫�绁ㄦ椂锛岃繑鍥為敊璇唬鐮�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.FailReason">
+ <summary>
+ 鏌ヨ鍒扮殑璁㈠崟鐘舵�佷负FAIL澶辫触鎴朢EFUND閫�绁ㄦ椂锛岃繑鍥炲叿浣撶殑鍘熷洜銆�
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.TransDate">
+ <summary>
+ 璁㈠崟鏀粯鏃堕棿
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.OrderFee">
+ <summary>
+ 棰勮鏀惰垂閲戦锛堝厓锛夛紝杞处鍒伴摱琛屽崱涓撶敤
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.EreceiptFileId">
+ <summary>
+ 鐢靛瓙鏀舵嵁Id
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.EreceiptDownloadUrl">
+ <summary>
+ 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.EreceiptDownloadOssUrl">
+ <summary>
+ 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.EreceiptDownloadOssFullUrl">
+ <summary>
+ 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.EreceiptStatus">
+ <summary>
+ 鐢靛瓙鏀舵嵁鐘舵��
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.EreceiptErrorMessage">
+ <summary>
+ 鐢靛瓙鏀舵嵁閿欒淇℃伅
+ </summary>
+ </member>
+ <member name="P:ApiTools.Core.GetChannelWalletTransactionsQueryResultItem.TransactionStatus">
+ <summary>
+ 鐘舵��
+ </summary>
+ </member>
<member name="T:ApiTools.Core.CheckHealthQuery">
<summary>
鍋ュ悍鏍¢獙
diff --git a/ApiTools.Core/Jobs/RefreshChannelWalletTransactionStatusJob.cs b/ApiTools.Core/Jobs/RefreshChannelWalletTransactionStatusJob.cs
index c92df86..c0f092b 100644
--- a/ApiTools.Core/Jobs/RefreshChannelWalletTransactionStatusJob.cs
+++ b/ApiTools.Core/Jobs/RefreshChannelWalletTransactionStatusJob.cs
@@ -29,15 +29,15 @@
public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
- var env = App.GetConfig<string>("Environment");
- if (env != "Local")
- {
+ //var env = App.GetConfig<string>("Environment");
+ //if (env != "Local")
+ //{
var transactions = await channelWalletTransactionRepository.GetQueryable(false)
.Where(it =>
it.TransactionStatus == EnumWalletTransactionStatus.WaitPay
|| it.TransactionStatus == EnumWalletTransactionStatus.Dealing)
.ToListAsync();
- var walletIds = transactions.DistinctSelect(it => it.WalletId);
+ var walletIds = transactions.Select(it => it.WalletId).Distinct().ToList();
var wallets = await channelWalletRepository.GetQueryable(false)
.Where(it => walletIds.Contains(it.Id))
.ToListAsync();
@@ -52,7 +52,7 @@
await channelWalletService.DownloadEreceiptUrl(wallet, transaction);
}
}
- }
+ //}
}
}
}
diff --git a/ApiTools.Core/Models/ChannelWallets/Queries/GetChannelWalletTransactionsQuery.cs b/ApiTools.Core/Models/ChannelWallets/Queries/GetChannelWalletTransactionsQuery.cs
new file mode 100644
index 0000000..d89ba72
--- /dev/null
+++ b/ApiTools.Core/Models/ChannelWallets/Queries/GetChannelWalletTransactionsQuery.cs
@@ -0,0 +1,208 @@
+锘縰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], Method = EnumResourceMethod.Post)]
+ public class GetChannelWalletTransactionsQuery : IRequest<GetChannelWalletTransactionsQueryResult>
+ {
+ /// <summary>
+ /// 澶栭儴璁㈠崟鍙�
+ /// </summary>
+ public List<string> OutCodes { get; set; } = [];
+ }
+
+ /// <summary>
+ /// 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
+ /// </summary>
+ public class GetChannelWalletTransactionsQueryResult
+ {
+ /// <summary>
+ /// 椤�
+ /// </summary>
+ public List<GetChannelWalletTransactionsQueryResultItem> Items { get; set; } = [];
+ }
+
+ /// <summary>
+ /// 鏌ヨ娓犻亾閽卞寘浜ゆ槗璇︽儏
+ /// </summary>
+ public class GetChannelWalletTransactionsQueryResultItem
+ {
+ /// <summary>
+ /// 浜ゆ槗Id
+ /// </summary>
+ public Guid Id { get; set; }
+
+ /// <summary>
+ /// 绫诲瀷
+ /// </summary>
+ public EnumWalletTransactionType Type { get; set; }
+
+ /// <summary>
+ /// 璁㈠崟鍙�
+ /// </summary>
+ public string Code { get; set; }
+
+ /// <summary>
+ /// 澶栭儴璁㈠崟鍙�
+ /// </summary>
+ public string OutCode { get; set; }
+
+ /// <summary>
+ /// 骞跺彂閿�
+ /// </summary>
+ public string ConcurrencyLock { get; set; }
+
+ /// <summary>
+ /// 閲戦
+ /// </summary>
+ public decimal Amount { get; set; }
+
+ /// <summary>
+ /// 浣欓
+ /// </summary>
+ public decimal Balance { get; set; }
+
+ /// <summary>
+ /// 鏀舵敮鍚庝綑棰�
+ /// </summary>
+ public decimal AfterBalance { get; set; }
+
+ /// <summary>
+ /// 澶栭儴鎿嶄綔浜篒d
+ /// </summary>
+ public string OutOperatorId { get; set; }
+
+ /// <summary>
+ /// 鎿嶄綔鏃堕棿
+ /// </summary>
+ public DateTime? OperatorTime { get; set; }
+
+ /// <summary>
+ /// 浠樻浜鸿处鎴�
+ /// </summary>
+ public string PayerAccount { get; set; }
+
+ /// <summary>
+ /// 浠樻浜哄悕绉�
+ /// </summary>
+ public string PayerName { get; set; }
+
+ /// <summary>
+ /// 浠樻浜哄紑鎴疯
+ /// </summary>
+ public string PayerBank { get; set; }
+
+ /// <summary>
+ /// 浠樻浜烘敮琛�
+ /// </summary>
+ public string PayerBankBranch { get; set; }
+
+ /// <summary>
+ /// 澶栭儴鏀舵浜篒d
+ /// </summary>
+ public string OutReceiveId { get; set; }
+
+ /// <summary>
+ /// 鏀舵浜哄鍚�
+ /// </summary>
+ public string ReceiveName { get; set; }
+
+ /// <summary>
+ /// 鏀舵浜鸿韩浠借瘉鍙�
+ /// </summary>
+ public string ReceiveIdentity { get; set; }
+
+ /// <summary>
+ /// 鏀舵璐︽埛
+ /// </summary>
+ public string ReceiveAccount { get; set; }
+
+ /// <summary>
+ /// 鏀舵浜哄紑鎴疯
+ /// </summary>
+ public string ReceiveBank { get; set; }
+
+ /// <summary>
+ /// 鏀舵浜烘敮琛�
+ /// </summary>
+ public string ReceiveBankBranch { get; set; }
+
+ /// <summary>
+ /// 甯佺
+ /// </summary>
+ public string Currency { get; set; }
+
+ /// <summary>
+ /// 鐢ㄩ��
+ /// </summary>
+ public string Purpose { get; set; }
+
+ /// <summary>
+ /// 澶囨敞
+ /// </summary>
+ public string Remark { get; set; }
+
+ /// <summary>
+ /// 鏌ヨ鍒扮殑璁㈠崟鐘舵�佷负FAIL澶辫触鎴朢EFUND閫�绁ㄦ椂锛岃繑鍥為敊璇唬鐮�
+ /// </summary>
+ public string ErrorCode { get; set; }
+
+ /// <summary>
+ /// 鏌ヨ鍒扮殑璁㈠崟鐘舵�佷负FAIL澶辫触鎴朢EFUND閫�绁ㄦ椂锛岃繑鍥炲叿浣撶殑鍘熷洜銆�
+ /// </summary>
+ public string FailReason { get; set; }
+
+ /// <summary>
+ /// 璁㈠崟鏀粯鏃堕棿
+ /// </summary>
+ public DateTime? TransDate { get; set; }
+
+ /// <summary>
+ /// 棰勮鏀惰垂閲戦锛堝厓锛夛紝杞处鍒伴摱琛屽崱涓撶敤
+ /// </summary>
+ public decimal? OrderFee { get; set; }
+
+ /// <summary>
+ /// 鐢靛瓙鏀舵嵁Id
+ /// </summary>
+ public string EreceiptFileId { get; set; }
+
+ /// <summary>
+ /// 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴
+ /// </summary>
+ public string EreceiptDownloadUrl { get; set; }
+
+ /// <summary>
+ /// 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴
+ /// </summary>
+ public string EreceiptDownloadOssUrl { get; set; }
+
+ /// <summary>
+ /// 鐢靛瓙鏀舵嵁涓嬭浇閾炬帴
+ /// </summary>
+ public string EreceiptDownloadOssFullUrl { get; set; }
+
+ /// <summary>
+ /// 鐢靛瓙鏀舵嵁鐘舵��
+ /// </summary>
+ public EnumWalletTransactionEreceiptStatus? EreceiptStatus { get; set; }
+
+ /// <summary>
+ /// 鐢靛瓙鏀舵嵁閿欒淇℃伅
+ /// </summary>
+ public string EreceiptErrorMessage { get; set; }
+
+ /// <summary>
+ /// 鐘舵��
+ /// </summary>
+ public EnumWalletTransactionStatus TransactionStatus { get; set; }
+ }
+}
--
Gitblit v1.9.1