using Aop.Api.Domain;
|
using Furion.DatabaseAccessor;
|
using Furion.DependencyInjection;
|
using Furion.FriendlyException;
|
using Microsoft.EntityFrameworkCore;
|
using pingan.openbank.api.sdk.enums;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace ApiTools.Core
|
{
|
/// <summary>
|
/// 渠道钱包服务
|
/// </summary>
|
/// <param name="channelWalletRepository"></param>
|
/// <param name="channelPingAnPayWalletService"></param>
|
public class ChannelWalletService(
|
ChannelWalletRepository channelWalletRepository,
|
ChannelPingAnPayWalletService channelPingAnPayWalletService
|
) :
|
ITransient
|
{
|
private readonly ChannelWalletRepository channelWalletRepository = channelWalletRepository;
|
private readonly ChannelPingAnPayWalletService channelPingAnPayWalletService = channelPingAnPayWalletService;
|
|
public IChannelWalletService GetService(EnumWalletAccess access)
|
{
|
switch (access)
|
{
|
//case EnumWalletAccess.Alipay:
|
// return enterpriseAliPayWalletService;
|
case EnumWalletAccess.PingAnPay:
|
return channelPingAnPayWalletService;
|
//case EnumWalletAccess.WeChatPay:
|
// return enterpriseWeChatPayWalletService;
|
default:
|
throw Oops.Oh(EnumErrorCodeType.s400, "支付通道不支持");
|
}
|
}
|
|
/// <summary>
|
/// 查询企业钱包余额
|
/// </summary>
|
/// <param name="outWalletId"></param>
|
/// <returns></returns>
|
public async Task<ChannelWallet> GetEnterpriseWallet(string outWalletId)
|
{
|
var logier = JwtUtils.GetCurrentLogier();
|
var wallet = await channelWalletRepository.GetQueryable(false)
|
.Where(it => it.ChannelId == logier.ChannelId && it.OutWalletId == outWalletId)
|
.FirstOrDefaultAsync();
|
return await GetService(wallet.Access).GetEnterpriseWalletBalance(wallet);
|
}
|
|
/// <summary>
|
/// 查询企业钱包余额
|
/// </summary>
|
/// <param name="wallet"></param>
|
/// <returns></returns>
|
public async Task<ChannelWallet> GetEnterpriseWalletBalance(ChannelWallet wallet)
|
{
|
return await GetService(wallet.Access).GetEnterpriseWalletBalance(wallet);
|
}
|
|
/// <summary>
|
/// 转账
|
/// </summary>
|
/// <param name="wallet"></param>
|
/// <param name="transaction"></param>
|
/// <returns></returns>
|
public async Task Transfer(ChannelWallet wallet, ChannelWalletTransaction transaction)
|
{
|
await GetService(wallet.Access).Transfer(wallet, transaction);
|
}
|
|
/// <summary>
|
/// 查询交易记录
|
/// </summary>
|
/// <param name="wallet"></param>
|
/// <param name="transaction"></param>
|
/// <returns></returns>
|
public async Task GetTransactionDetail(ChannelWallet wallet, ChannelWalletTransaction transaction)
|
{
|
await GetService(wallet.Access).GetTransactionDetail(wallet, transaction);
|
}
|
|
/// <summary>
|
/// 下载电子收据
|
/// </summary>
|
/// <param name="wallet"></param>
|
/// <param name="transaction"></param>
|
/// <returns></returns>
|
public async Task DownloadEreceiptUrl(ChannelWallet wallet, ChannelWalletTransaction transaction)
|
{
|
if (transaction.TransactionStatus == EnumWalletTransactionStatus.Success)
|
{
|
await GetService(wallet.Access).DownloadEreceiptUrl(wallet, transaction);
|
}
|
}
|
|
public string GetLockKey(Guid channelId, string outWalletId)
|
{
|
return $"EnterpriseWallet:{channelId}:{outWalletId}";
|
}
|
}
|
}
|