sunpengfei
2025-06-13 67fc39c356d8b480b7005cb2fa4769a0a6c6cfb1
LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -1533,82 +1533,91 @@
    {
        await using var orderLock = await distributedLock.TryAcquireAsync($"LockKey:UpdateOrder:{orderNo}", TimeSpan.FromSeconds(60));
        _logger.LogInformation($"锁:LockKey:UpdateOrder:{orderNo} - {orderLock != null}");
        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
        CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在");
        if (order.ACOOLYStatus.HasValue && (int)order.ACOOLYStatus > (int)acoolyStatus)
        try
        {
            _logger.LogInformation($"订单({orderNo})由{order.ACOOLYStatus}至{acoolyStatus}失败,不可回滚状态");
            return;
        }
            var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
        if (order.LifePayOrderStatus == status && order.ACOOLYStatus == acoolyStatus)
        {
            _logger.LogInformation($"订单({orderNo})已处理该状态");
            return;
        }
            CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "订单不存在");
        order.ActualReceivedAmount = actualParValue;
        order.PlatformDeductionAmount = Math.Round((order.ActualReceivedAmount ?? 0) * (order.PlatformRate ?? 0) / 100, 2);
        if (acoolyOrderNo.IsNotNullOrEmpty())
        {
            order.ACOOLYOrderNo = acoolyOrderNo;
        }
        if (status == LifePayOrderStatusEnum.待退款)
        {
            order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款;
        }
        if (refundApplyRemark.IsNotNullOrEmpty())
        {
            order.RefundApplyRemark = refundApplyRemark;
        }
        order.LifePayOrderStatus = status;
        order.ACOOLYStatus = acoolyStatus;
        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成
            || order.LifePayOrderStatus == LifePayOrderStatusEnum.已退款)
        {
            order.FinishTime = DateTime.Now;
        }
        if (order.ACOOLYStatus == ACOOLYStatusEnum.已退款 || order.ACOOLYStatus == ACOOLYStatusEnum.部分充值成功)
        {
            order.RefundPrice = Math.Round((1 - ((order.ActualReceivedAmount ?? 0) / (order.RechargeAmount ?? 0))) * (order.PayAmount ?? 0), 2);
        }
        if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成)
        {
            ///结算渠道佣金
            /// 毛利
            var grossProfit = order.RechargeAmount * (order.ChannleRate - order.PlatformRate) / 100;
            /// 渠道佣金  ((充值面额 * 渠道折扣比例)-(充值面额 * 平台折扣比例))* 佣金比例
            var channlesRakePrice = grossProfit * (order.ChannlesRakeRate) / 100;
            if (channlesRakePrice.HasValue)
            if (order.ACOOLYStatus.HasValue && (int)order.ACOOLYStatus > (int)acoolyStatus)
            {
                LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake()
                {
                    OrderNo = order.OrderNo,
                    PayAmount = order.RechargeAmount ?? 0,
                    ChannlesRakeRate = order.ChannlesRakeRate ?? 0,
                    ChannlesRakePrice = channlesRakePrice ?? 0,
                    FinishTime = order.FinishTime.Value,
                    ChannelId = order.ChannelId,
                };
                await _lifePayChannlesRakeRepository.InsertAsync(lifePayChannlesRake);
                _logger.LogInformation($"订单({orderNo})由{order.ACOOLYStatus}至{acoolyStatus}失败,不可回滚状态");
                return;
            }
            if (order.LifePayOrderStatus == status && order.ACOOLYStatus == acoolyStatus)
            {
                _logger.LogInformation($"订单({orderNo})已处理该状态");
                return;
            }
            order.ActualReceivedAmount = actualParValue;
            order.PlatformDeductionAmount = Math.Round((order.ActualReceivedAmount ?? 0) * (order.PlatformRate ?? 0) / 100, 2);
            if (acoolyOrderNo.IsNotNullOrEmpty())
            {
                order.ACOOLYOrderNo = acoolyOrderNo;
            }
            if (status == LifePayOrderStatusEnum.待退款)
            {
                order.LifePayRefundStatus = LifePayRefundStatusEnum.待退款;
            }
            if (refundApplyRemark.IsNotNullOrEmpty())
            {
                order.RefundApplyRemark = refundApplyRemark;
            }
            order.LifePayOrderStatus = status;
            order.ACOOLYStatus = acoolyStatus;
            if (order.LifePayOrderStatus == LifePayOrderStatusEnum.已完成
                || order.LifePayOrderStatus == LifePayOrderStatusEnum.已退款)
            {
                order.FinishTime = DateTime.Now;
            }
            if (order.ACOOLYStatus == ACOOLYStatusEnum.已退款 || order.ACOOLYStatus == ACOOLYStatusEnum.部分充值成功)
            {
                order.RefundPrice = Math.Round((1 - ((order.ActualReceivedAmount ?? 0) / (order.RechargeAmount ?? 0))) * (order.PayAmount ?? 0), 2);
            }
            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.RechargeAmount ?? 0,
                        ChannlesRakeRate = order.ChannlesRakeRate ?? 0,
                        ChannlesRakePrice = channlesRakePrice ?? 0,
                        FinishTime = order.FinishTime.Value,
                        ChannelId = order.ChannelId,
                    };
                    await _lifePayChannlesRakeRepository.InsertAsync(lifePayChannlesRake);
                }
            }
            /// 创建生活缴费消费记录
            await _lifePayOrderService.CreatLifePayConsumption(acoolyStatus, order.OrderNo, order.ACOOLYOrderNo,
                        order.PlatformDeductionAmount ?? 0, order.ChannelId, order.CreationTime, order.FinishTime, order.ChannleRate, parValue, actualParValue);
            await CurrentUnitOfWork.CompleteAsync();
            _logger.LogInformation("事务完成");
        }
        /// 创建生活缴费消费记录
        await _lifePayOrderService.CreatLifePayConsumption(acoolyStatus, order.OrderNo, order.ACOOLYOrderNo,
                    order.PlatformDeductionAmount ?? 0, order.ChannelId, order.CreationTime, order.FinishTime, order.ChannleRate, parValue, actualParValue);
        await CurrentUnitOfWork.SaveChangesAsync();
        catch (Exception ex)
        {
            await CurrentUnitOfWork.RollbackAsync();
            _logger.LogError($"供应商回调异常:{ex.Message}", ex);
        }
    }
    /// <summary>