sunpengfei
2025-11-19 7b47c91bcf89d667a5c99cfafe0d899280f7fbe3
feat:平安转账开发
7个文件已修改
2个文件已添加
215 ■■■■ 已修改文件
ApiTools.Application/ApiTools.Application.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Application/ChannelWallets/Commands/ChannelWalletCommandHandler.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/ApiTools.Core.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/Models/ChannelWallets/Commands/SaveChannelPingAnPayWalletCommand.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/Models/ChannelWallets/Queries/GetChannelPingAnPayWalletQuery.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Core/Services/ChannelPingAnPayWalletService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Web.Entry/ApiTools.Web.Entry.csproj 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Web.Entry/PingAnPayCert/config.properties 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ApiTools.Application/ApiTools.Application.xml
@@ -149,6 +149,14 @@
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:ApiTools.Application.ChannelWalletCommandHandler.Handle(ApiTools.Core.SaveChannelPingAnPayWalletCommand,System.Threading.CancellationToken)">
            <summary>
            保存渠道平安银行钱包
            </summary>
            <param name="request"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:ApiTools.Application.ChannelWalletCommandHandler.Handle(ApiTools.Core.SubmitChannelWalletTransferCommand,System.Threading.CancellationToken)">
            <summary>
            提交渠道钱包转账
@@ -162,11 +170,19 @@
            查询渠道钱包交易详情
            </summary>
        </member>
        <member name="M:ApiTools.Application.ChannelWalletQueryHandler.#ctor(ApiTools.Core.ChannelWalletTransactionRepository)">
        <member name="M:ApiTools.Application.ChannelWalletQueryHandler.#ctor(ApiTools.Core.ChannelWalletRepository,ApiTools.Core.ChannelWalletTransactionRepository)">
            <summary>
            查询渠道钱包交易详情
            </summary>
        </member>
        <member name="M:ApiTools.Application.ChannelWalletQueryHandler.Handle(ApiTools.Core.GetChannelPingAnPayWalletQuery,System.Threading.CancellationToken)">
            <summary>
            查询渠道平安银行钱包
            </summary>
            <param name="request"></param>
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:ApiTools.Application.ChannelWalletQueryHandler.Handle(ApiTools.Core.GetChannelWalletTransactionQuery,System.Threading.CancellationToken)">
            <summary>
            查询渠道钱包交易详情
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,7 +86,7 @@
                .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, "余额不足");
ApiTools.Application/ChannelWallets/Queries/ChannelWalletQueryHandler.cs
@@ -14,11 +14,28 @@
    /// 查询渠道钱包交易详情
    /// </summary>
    public class ChannelWalletQueryHandler(
            ChannelWalletRepository channelWalletRepository,
            ChannelWalletTransactionRepository channelWalletTransactionRepository
        ) :
        IRequestHandler<GetChannelPingAnPayWalletQuery, GetChannelPingAnPayWalletQueryResult>,
        IRequestHandler<GetChannelWalletTransactionQuery, GetChannelWalletTransactionQueryResult>
    {
        private readonly ChannelWalletRepository channelWalletRepository = channelWalletRepository;
        private readonly ChannelWalletTransactionRepository channelWalletTransactionRepository = channelWalletTransactionRepository;
        /// <summary>
        /// 查询渠道平安银行钱包
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<GetChannelPingAnPayWalletQueryResult> Handle(GetChannelPingAnPayWalletQuery request, CancellationToken cancellationToken)
        {
            return await channelWalletRepository.GetQueryable()
                .Where(it => it.OutWalletId == request.OutWalletId)
                .ProjectToType<GetChannelPingAnPayWalletQueryResult>()
                .FirstOrDefaultAsync();
        }
        /// <summary>
        /// 查询渠道钱包交易详情
@@ -28,11 +45,11 @@
        /// <returns></returns>
        public async Task<GetChannelWalletTransactionQueryResult> Handle(GetChannelWalletTransactionQuery request, CancellationToken cancellationToken)
        {
            var logier = JwtUtils.GetCurrentLogier();
            return await channelWalletTransactionRepository.GetQueryable()
                .Where(it => it.Wallet.ChannelId == logier.ChannelId && it.OutCode == request.OutCode)
                .Where(it => it.OutCode == request.OutCode)
                .ProjectToType<GetChannelWalletTransactionQueryResult>()
                .FirstOrDefaultAsync();
        }
    }
}
ApiTools.Core/ApiTools.Core.xml
@@ -2263,16 +2263,6 @@
            外部钱包Id
            </summary>
        </member>
        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommand.Bank">
            <summary>
            所属银行
            </summary>
        </member>
        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommand.BankBranch">
            <summary>
            所属支行
            </summary>
        </member>
        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommand.Name">
            <summary>
            户名
@@ -2283,7 +2273,7 @@
            账号
            </summary>
        </member>
        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.WalletId">
        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.Id">
            <summary>
            钱包Id
            </summary>
@@ -2291,16 +2281,6 @@
        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.Balance">
            <summary>
            余额
            </summary>
        </member>
        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.ErrorCode">
            <summary>
            错误代码
            </summary>
        </member>
        <member name="P:ApiTools.Core.SaveChannelPingAnPayWalletCommandResult.FailReason">
            <summary>
            返回具体的原因。
            </summary>
        </member>
        <member name="T:ApiTools.Core.SubmitChannelWalletTransferCommand">
@@ -2403,6 +2383,41 @@
            查询到的订单状态为FAIL失败或REFUND退票时,返回具体的原因。
            </summary>
        </member>
        <member name="T:ApiTools.Core.GetChannelPingAnPayWalletQuery">
            <summary>
            查询渠道平安银行钱包
            </summary>
        </member>
        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQuery.OutWalletId">
            <summary>
            外部钱包Id
            </summary>
        </member>
        <member name="T:ApiTools.Core.GetChannelPingAnPayWalletQueryResult">
            <summary>
            查询渠道平安银行钱包
            </summary>
        </member>
        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQueryResult.Id">
            <summary>
            钱包Id
            </summary>
        </member>
        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQueryResult.Name">
            <summary>
            户名
            </summary>
        </member>
        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQueryResult.Identity">
            <summary>
            账号
            </summary>
        </member>
        <member name="P:ApiTools.Core.GetChannelPingAnPayWalletQueryResult.Balance">
            <summary>
            余额
            </summary>
        </member>
        <member name="T:ApiTools.Core.GetChannelWalletTransactionQuery">
            <summary>
            查询渠道钱包交易详情
ApiTools.Core/Models/ChannelWallets/Commands/SaveChannelPingAnPayWalletCommand.cs
@@ -19,16 +19,6 @@
        public string OutWalletId { get; set; }
        /// <summary>
        /// 所属银行
        /// </summary>
        public string Bank { get; set; }
        /// <summary>
        /// 所属支行
        /// </summary>
        public string BankBranch { get; set; }
        /// <summary>
        /// 户名
        /// </summary>
        public string Name { get; set; }
@@ -45,21 +35,11 @@
        /// <summary>
        /// 钱包Id
        /// </summary>
        public Guid WalletId { get; set; }
        public Guid Id { get; set; }
        /// <summary>
        /// 余额
        /// </summary>
        public decimal Balance { get; set; }
        /// <summary>
        /// 错误代码
        /// </summary>
        public string ErrorCode { get; set; }
        /// <summary>
        /// 返回具体的原因。
        /// </summary>
        public string FailReason { get; set; }
    }
}
ApiTools.Core/Models/ChannelWallets/Queries/GetChannelPingAnPayWalletQuery.cs
New file
@@ -0,0 +1,53 @@
using 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])]
    public class GetChannelPingAnPayWalletQuery : IRequest<GetChannelPingAnPayWalletQueryResult>
    {
        /// <summary>
        /// 外部钱包Id
        /// </summary>
        public string OutWalletId { get; set; }
    }
    /// <summary>
    /// 查询渠道平安银行钱包
    /// </summary>
    public class GetChannelPingAnPayWalletQueryResult
    {
        /// <summary>
        /// 钱包Id
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 户名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 账号
        /// </summary>
        public string Identity { get; set; }
        /// <summary>
        /// 余额
        /// </summary>
        public decimal Balance { get; set; }
        /// <summary>
        /// 签约状态
        /// </summary>
        public EnumWalletSignStatus SignStatus { get; set; }
    }
}
ApiTools.Core/Services/ChannelPingAnPayWalletService.cs
@@ -52,6 +52,9 @@
                }
                else
                {
                    wallet.ErrorCode = null;
                    wallet.FailReason = null;
                    wallet.SignStatus = EnumWalletSignStatus.Normal;
                    wallet.Balance = response.AcctBalance.ToDecimal().Value;
                }
            }
@@ -184,6 +187,16 @@
                        : response.Stt == "30"
                        ? EnumWalletTransactionStatus.Fail
                        : EnumWalletTransactionStatus.Dealing;
                if (transaction.TransactionStatus == EnumWalletTransactionStatus.Fail)
                {
                    transaction.ErrorCode = response.Stt;
                    transaction.FailReason = response.BackRem;
                }
                else
                {
                    transaction.ErrorCode = null;
                    transaction.FailReason = null;
                }
                if (transaction.TransactionStatus == EnumWalletTransactionStatus.Success && transaction.TransDate == null)
                {
                    transaction.TransDate = DateTime.Now;
ApiTools.Web.Entry/ApiTools.Web.Entry.csproj
@@ -21,6 +21,13 @@
      <ProjectReference Include="..\ApiTools.Application\ApiTools.Application.csproj" />
      <ProjectReference Include="..\ApiTools.Database.Migrations\ApiTools.Database.Migrations.csproj" />
    </ItemGroup>
    <ItemGroup>
      <None Update="PingAnPayCert\config.properties">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>
    <ProjectExtensions>
        <VisualStudio>
            <UserProperties properties_4launchsettings_1json__JsonSchema="" />
ApiTools.Web.Entry/PingAnPayCert/config.properties
New file
@@ -0,0 +1,8 @@
appId=22c4781c85
publicKey=0480E866C61C385C2916901CFC10AA53DFD89DBFFA87A4A49C26F82C66F30B7A7038D61FDBE08236F6ACFA6216A6FBCC511841586ABE24107438E049BE98C4660C
appPrivateKey=7051c204b10e5380859d8e38c3061fbe2d309c4cac1b89f0c331690d291fb18b
baseUrl=https://my-st1.orangebank.com.cn:567/fat7/openapi/gateway/
fileUploadUrl=https://my-st1.orangebank.com.cn:567/fat7/openapi/file//boapFile/upload
fileDownLoadUrl=https://my-st1.orangebank.com.cn:567/fat7/openapi/file//boapFile/download
signMethod=SM2
appSecret=73W620