From ab9b84ee42c872cd2277d2e3a863718355bcc6aa Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期一, 15 十二月 2025 16:20:27 +0800
Subject: [PATCH] feat:开发
---
ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs | 129 ++++++++++++++++++++++++++++++++-----------
1 files changed, 96 insertions(+), 33 deletions(-)
diff --git a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
index 0fd2503..51d567d 100644
--- a/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
+++ b/ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs
@@ -19,15 +19,18 @@
IDistributedLockProvider distributedLockProvider,
ChannelWalletRepository channelWalletRepository,
ChannelWalletTransactionRepository channelWalletTransactionRepository,
- ChannelWalletService channelWalletService
+ ChannelWalletService channelWalletService,
+ NongYePayUtils nongYePayUtils
) :
IRequestHandler<SaveChannelPingAnPayWalletCommand, SaveChannelPingAnPayWalletCommandResult>,
- IRequestHandler<SubmitChannelWalletTransferCommand, SubmitChannelWalletTransferCommandResult>
+ IRequestHandler<SubmitChannelWalletTransferCommand, SubmitChannelWalletTransferCommandResult>,
+ IRequestHandler<TestNongYePayCommand, bool>
{
private readonly IDistributedLockProvider distributedLockProvider = distributedLockProvider;
private readonly ChannelWalletRepository channelWalletRepository = channelWalletRepository;
private readonly ChannelWalletTransactionRepository channelWalletTransactionRepository = channelWalletTransactionRepository;
private readonly ChannelWalletService channelWalletService = channelWalletService;
+ private readonly NongYePayUtils nongYePayUtils = nongYePayUtils;
/// <summary>
/// 淇濆瓨娓犻亾骞冲畨閾惰閽卞寘
@@ -90,37 +93,77 @@
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()
+ .Include(it => it.PingAnPay)
+ .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
{
@@ -131,5 +174,25 @@
FailReason = transaction.FailReason,
};
}
+
+ /// <summary>
+ /// 娴嬭瘯鍐滀笟閾惰鎺ュ彛
+ /// </summary>
+ /// <param name="request"></param>
+ /// <param name="cancellationToken"></param>
+ /// <returns></returns>
+ public async Task<bool> Handle(TestNongYePayCommand request, CancellationToken cancellationToken)
+ {
+ var res = await nongYePayUtils.GetBalance(new Core.Utils.NongYePayUtils.Models.NongYePayGetBalanceRequest
+ {
+ Cmp = new Core.Utils.NongYePayUtils.Models.NongYePayGetBalanceRequestCmp
+ {
+ AccountNo = "314101046433493",
+ CurrencyCode = "01",
+ ProvinceCode = "14"
+ }
+ });
+ return true;
+ }
}
}
--
Gitblit v1.9.1