zhengyuxuan
2025-03-31 394393e91e51dea4ae5b689cc471fa62f2913da3
LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -28,6 +28,7 @@
using NPOI.SS.Formula.Functions;
using StackExchange.Redis;
using static Volo.Abp.Identity.Settings.IdentitySettingNames;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace LifePayment.Application;
@@ -45,6 +46,7 @@
    private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep;
    private readonly IRepository<LifePayAccount, Guid> _lifePayAccount;
    private readonly IRepository<OperateHistory, Guid> _operateHistory;
    private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository;
    private readonly IDataFilter dataFilter;
    private readonly IChannelFilter _channelFilter;
    private readonly IAliPayApi _aliPayApi;
@@ -63,6 +65,7 @@
                          IRepository<LifePayUser, Guid> lifePayUserRepository,
                          IRepository<LifePayPremium, Guid> lifePayPremiumRepository,
                          IRepository<LifePayIntroInfo, Guid> lifePayIntroInfoRepository,
                          IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository,
                          IRepository<OperateHistory, Guid> operateHistory,
                          IAliPayApi aliPayApi,
                          IAlipayInterfaceManager aliPayInterfaceManager,
@@ -79,6 +82,7 @@
        _lifePayRateRepository = lifePayRateRepository;
        _lifePayOrderRepository = lifePayOrderRepository;
        _lifePayUserRepository = lifePayUserRepository;
        _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository;
        _lifePayPremiumRepository = lifePayPremiumRepository;
        _lifePayIntroInfoRepository = lifePayIntroInfoRepository;
        _aliPayApi = aliPayApi;
@@ -829,6 +833,7 @@
    public async Task<AlipayTradeQueryResponse> QueryAlipayTrade(OrderInQuiryInput input)
    {
        var result = await _aliPayApi.OrderInQuiry(input);
        return result;
    }
@@ -840,13 +845,37 @@
    public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input)
    {
        var result = await _aliPayApi.QueryAlipayTradeRefund(input);
        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OutTradeNo).FirstOrDefaultAsync();
        if (result.Code == AlipayResultCode.Success && result.RefundStatus == AlipayRefundStatus.Success)
        {
            order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款;
            order.LifePayRefundStatus = LifePayRefundStatusEnum.已退款;
        }
        return result;
    }
    public async Task WxPayDomesticRefundsQuery(string outTradeNo)
    /// <summary>
    /// 查询微信退款订单信息
    /// </summary>
    /// <param name="outTradeNo"></param>
    /// <returns></returns>
    public async Task<WxPayDomesticRefundsQueryReponse> WxPayDomesticRefundsQuery(string outTradeNo)
    {
        await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo);
        return await _wxPayApi.WxPayDomesticRefundsQuery(outTradeNo);
    }
    /// <summary>
    /// 查询微信订单信息
    /// </summary>
    /// <param name="outTradeNo"></param>
    /// <returns></returns>
    public async Task<WxPayTradeQueryReponse> WxPayTradeQuery(string outTradeNo)
    {
        return await _wxPayApi.WxPayTradeQuery(outTradeNo);
    }
    #endregion
@@ -1037,8 +1066,8 @@
        //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type);
        var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, res.PayAmount, ip, input.H5Type);
#else
      //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type);
        var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, order.PayAmount??0, ip, input.H5Type);
      //var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, 0.01m, ip, input.H5Type);
        var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, res.PayAmount, ip, input.H5Type);
#endif
        return payUrl;
@@ -1346,6 +1375,27 @@
        order.ACOOLYStatus = acoolyStatus;
        order.FinishTime = DateTime.Now;
        await _lifePayOrderRepository.UpdateAsync(order);
        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成)
        {
            /// 毛利
            var grossProfit = order.RechargeAmount * (order.ChannleRate - order.PlatformRate) / 100;
            /// 渠道佣金  ((充值面额 * 渠道折扣比例)-(充值面额 * 平台折扣比例))* 佣金比例
            var channlesRakePrice = grossProfit * (order.ChannlesRakeRate) / 100;
            if (channlesRakePrice.HasValue)
            {
                LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake()
                {
                    OrderNo = order.OrderNo,
                    PayAmount = order.PayAmount.Value,
                    ChannlesRakeRate = order.ChannlesRakeRate.Value,
                    ChannlesRakePrice = channlesRakePrice.Value,
                    FinishTime = order.FinishTime.Value,
                    ChannelId = order.ChannelId,
                };
                await _lifePayChannlesRakeRepository.InsertAsync(lifePayChannlesRake);
            }
        }
    }
    /// <summary>
@@ -1403,7 +1453,7 @@
                break;
            case LifePayTypeEnum.AliPay:
                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = input.RefundPrice.ToString() });
                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, OutRefundNo = outRefundNo, RefundAmount = input.RefundPrice.ToString() });
                if (aliRefundResult.Code != AlipayResultCode.Success)
                {
                    throw new UserFriendlyException("退款失败:" + aliRefundResult.SubMsg);
@@ -2151,6 +2201,7 @@
            return channel.ChannlesRate;
        }
    }
    public async Task<SetPayTypeReturn> SetPayType(string orderNo, LifePayTypeEnum lifePayType, string ip)
    {
        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();