zhengyuxuan
2025-03-24 c3df0d611fc5fde066867c772bd268e5921f5b05
LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -397,8 +397,10 @@
        var channle = await _lifePayChannlesRep.FirstOrDefaultAsync(r => r.ChannlesNum == order.ChannelId);
         CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在");
        var user = await _lifePayUserRepository.FirstOrDefaultAsync(x => x.Id == order.UserId);
        var channlesRakePrice = (order.PayAmount - (order.PlatformDeductionAmount == null ? 0 : order.PlatformDeductionAmount)) * channle.ChannlesRakeRate / 100;
        var orderpirce = await GetOrderPrice(order.RechargeAmount, order.PayAmount,order.PlatformRate, order.ChannleRate, order.ChannlesRakeRate,order.PremiumRate);
        var result = new LifePayOrderOutput()
                {
            UserName = user.Name,
@@ -430,12 +432,12 @@
            PlatformPrice = order.PlatformDeductionAmount,
            ElecBillUrl = order.ElecBillUrl.GetOssPath(),
            RefundElecBillUrl = order.RefundElecBillUrl.GetOssPath(),
            ChannleRate = channle.ChannlesRate,
            ChannlesRakeRate = channle.ChannlesRakeRate,
            ChannlesRakePrice = channlesRakePrice.HasValue ? 0 : Math.Round(channlesRakePrice.Value, 2),
            ChannleRate = order.ChannleRate,
            ChannlesRakeRate = order.ChannlesRakeRate,
            ChannlesRakePrice = orderpirce.ChannlesRakePrice,
            PremiumRate = order.PremiumRate,
            PremiumPrice = Math.Round(order.PayAmount * (order.PremiumRate.HasValue ? order.PremiumRate.Value:0), 2),
            Profit = (order.PayAmount - order.PlatformDeductionAmount) * (1.00m - channle.ChannlesRakeRate / 100) - Math.Round(order.PayAmount * (order.PremiumRate.HasValue ? order.PremiumRate.Value : 0), 2)
            PremiumPrice = orderpirce.PremiumPrice,
            Profit = orderpirce.Profit
        };
        return result;
@@ -1305,6 +1307,7 @@
        {
            order.ACOOLYOrderNo = acoolyOrderNo;
        }
        if (refundApplyRemark.IsNotNullOrEmpty())
        {
            order.RefundApplyRemark = refundApplyRemark;
@@ -1312,7 +1315,7 @@
        order.LifePayOrderStatus = status;
        order.ACOOLYStatus = acoolyStatus;
        order.FinishTime = DateTime.Now;
        await _lifePayOrderRepository.UpdateAsync(order);
    }
@@ -2008,8 +2011,8 @@
        var result = (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository)
     .Where(x => x.LifePayOrderStatus == LifePayOrderStatusEnum.待退款 || x.LifePayOrderStatus == LifePayOrderStatusEnum.已退款 || x.LifePayOrderStatus == LifePayOrderStatusEnum.退款中
     || x.LifePayRefundStatus > LifePayRefundStatusEnum.无需退款)
                                         .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime)
                                         .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime)
                                         .WhereIf(input.BeginRefundTime.HasValue, x => x.RefundTime >= input.BeginRefundTime)
                                         .WhereIf(input.EndRefundTime.HasValue, x => x.RefundTime <= input.EndRefundTime)
                                         .WhereIf(input.BeginRefundApplyTime.HasValue, x => x.RefundApplyTime >= input.BeginRefundApplyTime)
                                         .WhereIf(input.LifePayType.HasValue, x => x.LifePayType == input.LifePayType)
                                         .WhereIf(input.EndRefundApplyTime.HasValue, x => x.RefundApplyTime <= input.EndRefundApplyTime)
@@ -2069,5 +2072,32 @@
                    });
    }
    public async Task<OrderPriceReturn> GetOrderPrice(decimal price, decimal priceAmount, decimal? platformRate,decimal? channleRate,
        decimal? channlesRakeRate,decimal? premiumRate)
    {
        /// 毛利
        var grossProfit = price * (channleRate - platformRate) / 100;
        /// 平台扣款金额  充值面额 * 平台折扣比例
        var platformPrice = price * platformRate / 100;
        /// 手续费
        var premiumPrice = priceAmount * premiumRate / 100;
        /// 渠道佣金  ((充值面额 * 渠道折扣比例)-(充值面额 * 平台折扣比例))* 佣金比例
        var channlesRakePrice = grossProfit * channlesRakeRate / 100;
        /// 利润
        var profit = grossProfit - channlesRakePrice - premiumPrice;
        return new OrderPriceReturn()
        {
            PlatformPrice = platformPrice.HasValue? platformPrice.Value :0,
            PremiumPrice = premiumPrice.HasValue ? premiumPrice.Value : 0,
            ChannlesRakePrice = channlesRakePrice.HasValue? channlesRakePrice.Value:0,
            Profit = profit.HasValue ? profit.Value : 0
        };
    }
    #endregion
}