From a47038826eb7d1c152a50e95b3c9be177a130e8d Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 20 十一月 2025 09:26:18 +0800
Subject: [PATCH] feat:开发平安转账
---
ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs | 117 ++++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 81 insertions(+), 36 deletions(-)
diff --git a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
index 3feb977..50032f2 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,41 +86,80 @@
.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, "浣欓涓嶈冻");
- 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
{
--
Gitblit v1.9.1