zhengyuxuan
2025-03-20 bf83f6be388f97302c88f21cb340811abf3a596b
LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -19,6 +19,7 @@
using Volo.Abp.EventBus.Distributed;
using Z.EntityFramework.Plus;
using ZeroD.Util;
using Alipay.EasySDK.Payment.Common.Models;
using static LifePayment.Domain.Shared.LifePaymentConstant;
namespace LifePayment.Application;
@@ -218,7 +219,6 @@
    /// <returns></returns>
    public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input)
    {
        var result = await (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository)
                      .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime)
                                            .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime)
@@ -254,8 +254,43 @@
                                RefundCheckRemark = a.RefundCheckRemark,
                                RefundApplyRemark = a.RefundApplyRemark,
                                RefundTime = a.RefundTime,
                                ChannelName = b.ChannlesName
                                ChannelName = b.ChannlesName,
                                ActualRechargeAmount = a.ActualRechargeAmount,
                                PlatformDeductionAmount = a.PlatformDeductionAmount,
                                ACOOLYStatus = a.ACOOLYStatus,
                                LifePayRefundStatus = a.LifePayRefundStatus,
                            }).GetPageResult(input.PageModel);
        return result;
    }
    public async Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo)
    {
        var result = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo)
                                            .Select(x =>
                                                    new LifePayOrderOutput
                                                    {
                                                        DiscountAmount = x.DiscountAmount,
                                                        FinishTime = x.FinishTime,
                                                        Id = x.Id,
                                                        LifePayOrderStatus = x.LifePayOrderStatus,
                                                        LifePayOrderType = x.LifePayOrderType,
                                                        LifePayType = x.LifePayType,
                                                        OrderNo = x.OrderNo,
                                                        PayAmount = x.PayAmount,
                                                        RechargeAmount = x.RechargeAmount,
                                                        PayStatus = x.PayStatus,
                                                        PayTime = x.PayTime,
                                                        OrderParamDetailJsonStr = x.OrderParamDetailJsonStr,
                                                        RefundCredentialsImgUrl = x.RefundCredentialsImgUrl.GetOssPath(),
                                                        CreationTime = x.CreationTime,
                                                        RefundCheckRemark = x.RefundCheckRemark,
                                                        RefundApplyRemark = x.RefundApplyRemark,
                                                        RefundTime = x.RefundTime,
                                                        ACOOLYOrderNo = x.ACOOLYOrderNo,
                                                    })
                                            .FirstOrDefaultAsync();
        CheckExtensions.IfTrueThrowUserFriendlyException(result == null, "订单不存在");
        return result;
    }
@@ -336,6 +371,8 @@
        return result;
    }
    /// <summary>
    /// 根据订单号获取支付状态
@@ -549,7 +586,7 @@
        var orderInput = new CreateLifePayOrderInput
        {
            OrderNo = CreateOrderNo(),
            OrderNo = channle.ChannlesNum + CreateOrderNo(),
            LifePayOrderStatus = LifePayOrderStatusEnum.待确认,
            LifePayOrderType = LifePayOrderTypeEnum.话费订单,
            //LifePayType = input.LifePayType,
@@ -593,7 +630,7 @@
        var orderInput = new CreateLifePayOrderInput
        {
            OrderNo = CreateOrderNo(),
            OrderNo = channle.ChannlesNum + CreateOrderNo(),
            LifePayOrderStatus = LifePayOrderStatusEnum.待确认,
            LifePayOrderType = LifePayOrderTypeEnum.电费订单,
            // LifePayType = input.LifePayType,
@@ -637,7 +674,7 @@
        var orderInput = new CreateLifePayOrderInput
        {
            OrderNo = CreateOrderNo(),
            OrderNo = channle.ChannlesNum + CreateOrderNo(),
            LifePayOrderStatus = LifePayOrderStatusEnum.待确认,
            LifePayOrderType = LifePayOrderTypeEnum.燃气订单,
            // LifePayType = input.LifePayType,
@@ -965,7 +1002,7 @@
    /// <param name="orderNo"></param>
    /// <param name="outOrderNo"></param>
    /// <returns></returns>
    public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status)
    public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount)
    {
        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在");
@@ -976,6 +1013,8 @@
        }
        order.LifePayOrderStatus = status;
        order.ACOOLYStatus = acoolyStatus;
        order.PlatformDeductionAmount = payAmount;
        if (acoolyOrderNo.IsNotNullOrEmpty())
        {
            order.ACOOLYOrderNo = acoolyOrderNo;
@@ -1015,15 +1054,44 @@
            throw new UserFriendlyException("当前订单状态无法退款");
        }
        /// TODO 退款请求完成后如何操作
        /// var refundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100));
        switch (order.LifePayType)
        {
            case LifePayTypeEnum.WxPay:
                var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100));
                if (wxRefundResult.Status == "SUCCESS")
                {
                    order.PayStatus = LifePayStatusEnum.已退款;
                    order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款;
                }
                else if (wxRefundResult.Status == "PROCESSING")
                {
                    order.PayStatus = LifePayStatusEnum.退款中;
                    order.LifePayOrderStatus = LifePayOrderStatusEnum.退款中;
                }
                else
                {
                    throw new UserFriendlyException("退款失败");
                }
        order.PayStatus = LifePayStatusEnum.已退款;
        order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款;
                break;
            case LifePayTypeEnum.AliPay:
                var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = order.PayAmount.ToString() });
                if (aliRefundResult.Code != AlipayResultCode.Success)
                {
                    throw new UserFriendlyException("退款失败");
                }
                order.PayStatus = LifePayStatusEnum.已退款;
                order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款;
                break;
            default: throw new UserFriendlyException("退款失败");
        }
        order.RefundCredentialsImgUrl = input.RefundCredentialsImgUrl;
        order.RefundCheckRemark = input.RefundCheckRemark;
        order.RefundTime = DateTime.Now;
        order.RefundCheckUserId = CurrentUser.Id;
        order.RefundPrice = order.PayAmount;
        await _lifePayOrderRepository.UpdateAsync(order);
@@ -1063,7 +1131,7 @@
        order.LifePayOrderStatus = LifePayOrderStatusEnum.退款待审核;
        order.RefundApplyRemark = input.RefundApplyRemark;
        order.RefundTime = DateTime.Now;
        order.RefundApplyTime = DateTime.Now;
        await _lifePayOrderRepository.UpdateAsync(order);
    }
@@ -1097,7 +1165,10 @@
        return res;
    }
    private async Task<AlipayTradeRefundResponse> AliTradeRefund(AlipayTradeRefundRequest input)
    {
        return await _aliPayApi.TradeRefund(input);
    }
    public async Task<int> AddUpdateUserAccount(AddUpdateUserAccountInput input)
    {
@@ -1369,10 +1440,10 @@
    private (decimal PayAmont, decimal DiscountAmount, decimal RechargeAmount) CalculateAmount(decimal amount, decimal rate)
    {
        /// 正常支付
        var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero);
        //var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero);
        /// 1分钱支付
        //decimal payAmount = 0.01m;
        decimal payAmount = 0.01m;
        CheckExtensions.IfTrueThrowUserFriendlyException(payAmount < 0.01m, "支付金额错误");
@@ -1492,7 +1563,6 @@
        CheckExtensions.IfTrueThrowUserFriendlyException(amount <= 0,
                                                         CustomeErrorMessage.SometingMustSometing,
                                                         "获取支付二维码时金额", "大于0");
        var res = await _wxPayApi.PayTransactionsH5(new PayTransactionsNativeH5
        {
            Appid = _wxPayOptions.AppID,
@@ -1545,6 +1615,7 @@
        return res.QrCode;
    }
    /// <summary>
    /// 构造待签名字符串
    /// </summary>