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 | 101 +++++++++++++++++++++++++++++++++++---------------
1 files changed, 70 insertions(+), 31 deletions(-)
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
{
--
Gitblit v1.9.1