zhengyuxuan
2025-04-02 87095b4a2d3e342f4374423b22d90f0ed6557a7d
LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -16,6 +16,7 @@
using Newtonsoft.Json;
using LifePayment.Domain.Common;
using Spire.Pdf.Exporting.XPS.Schema;
using Nest;
namespace LifePayment.Application.LifePay
{
@@ -182,7 +183,13 @@
                })
                .GetPageResult(input.PageModel);
            var totalRakePrice = await _lifePayChannlesRakeRepository.Where(x => x.IsDeleted == false).SumAsync(x => x.ChannlesRakePrice);
            var totalRakePrice = await _lifePayChannlesRakeRepository.Where(x => x.IsDeleted == false)
                .WhereIf(input.ChannelId.IsNotNullOrEmpty(), x => x.ChannelId == input.ChannelId)
                .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin)
                .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd)
                .WhereIf(input.FinishTimeBegin.HasValue, x => x.FinishTime >= input.FinishTimeBegin)
                .WhereIf(input.FinishTimeEnd.HasValue, x => x.FinishTime <= input.FinishTimeEnd)
                .SumAsync(x => x.ChannlesRakePrice);
            LifePayLifePayChannlesRakeStatistics objectData = new LifePayLifePayChannlesRakeStatistics();
            objectData.TotalRakePrice = totalRakePrice;
@@ -309,6 +316,7 @@
                                data.OrderNo = input.OrderNo;
                                data.ExtraProperties = JsonConvert.SerializeObject(query);
                                data.FinishTime = Convert.ToDateTime(query.SuccessTime);
                                data.Amount = Convert.ToDecimal(query.Amount.Total) / 100;
                                await _lifePayExpensesReceiptsRepository.InsertAsync(data);
                            }
                        }
@@ -320,6 +328,7 @@
                                data.OrderNo = input.OutRefundNo;
                                data.ExtraProperties = JsonConvert.SerializeObject(query);
                                data.FinishTime = Convert.ToDateTime(query.SuccessTime);
                                data.Amount = Convert.ToDecimal(query.Amount.Total) / 100;
                                await _lifePayExpensesReceiptsRepository.InsertAsync(data);
                            }
                        }
@@ -336,28 +345,45 @@
        public async Task GetAllLifePayConsumption()
        {
            var orderList = await _lifePayOrderRepository.Where(x => x.PayStatus == LifePayStatusEnum.已支付).ToListAsync();
            foreach (var item in orderList)
            {
                LifePayConsumption lifePayConsumption = new LifePayConsumption()
                if (item.ACOOLYStatus != null)
                {
                    OrderNo = item.OrderNo,
                    AcoolyOrderNo = item.ACOOLYOrderNo,
                    Amount = item.PlatformDeductionAmount.Value,
                    //ACOOLYStatus =
                };
                //switch (item.ACOOLYStatus)
                //{
                //    case ACOOLYStatusEnum.充值中:
                //        break;
                //    default:break;
                //}
                    switch (item.ACOOLYStatus)
                    {
                        case ACOOLYStatusEnum.充值中:
                            await CreatLifePayConsumption(ACOOLYStatusEnum.充值中, item.OrderNo, item.ACOOLYOrderNo,
                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
                            break;
                        case ACOOLYStatusEnum.充值成功:
                            await CreatLifePayConsumption(ACOOLYStatusEnum.充值中, item.OrderNo, item.ACOOLYOrderNo,
                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
                            await CreatLifePayConsumption(ACOOLYStatusEnum.充值成功, item.OrderNo, item.ACOOLYOrderNo,
                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
                            break;
                        case ACOOLYStatusEnum.已完成:
                            await CreatLifePayConsumption(ACOOLYStatusEnum.充值中, item.OrderNo, item.ACOOLYOrderNo,
                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
                            await CreatLifePayConsumption(ACOOLYStatusEnum.已完成, item.OrderNo, item.ACOOLYOrderNo,
                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
                            break;
                        case ACOOLYStatusEnum.充值失败:
                            await CreatLifePayConsumption(ACOOLYStatusEnum.充值中, item.OrderNo, item.ACOOLYOrderNo,
                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
                            await CreatLifePayConsumption(ACOOLYStatusEnum.充值失败, item.OrderNo, item.ACOOLYOrderNo,
                                item.PlatformDeductionAmount ?? 0, item.ChannelId, item.CreationTime, item.FinishTime);
                            break;
                        default: break;
                    }
                }
            }
        }
        /// <summary>
        /// 统计所有收支流水
        /// </summary>
        /// <returns></returns>
        public async Task GetAllLifePayExpensesReceipts()
        {
            var orderlist = await (from a in _lifePayOrderRepository.Where(x => x.PayStatus >= LifePayStatusEnum.已支付)
@@ -411,7 +437,8 @@
                /// 毛利
                var grossProfit = item.RechargeAmount * (item.ChannleRate - item.PlatformRate) / 100;
                /// 渠道佣金  ((充值面额 * 渠道折扣比例)-(充值面额 * 平台折扣比例))* 佣金比例
                var channlesRakePrice = grossProfit * (item.ChannlesRakeRate) / 100;
                var channlesRakePrice = grossProfit * item.ChannlesRakeRate / 100;
                if (channlesRakePrice.HasValue)
                {
                    LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake()
@@ -433,7 +460,105 @@
        }
        #endregion
        #region 私有
        #region 方法
        public async Task CreatLifePayConsumption(ACOOLYStatusEnum status, string orderNo, string aCOOLYOrderNo,
            decimal platformDeductionAmount, string channelId, DateTime orderCreationTime, DateTime? orderFinishTime)
        {
            LifePayConsumption lifePayConsumption = new LifePayConsumption()
            {
                OrderNo = orderNo,
                AcoolyOrderNo = aCOOLYOrderNo,
                Amount = platformDeductionAmount,
                ChannelId = channelId,
            };
            LifePayConsumption repeat = new LifePayConsumption();
            switch (status)
            {
                case ACOOLYStatusEnum.充值中:
                    lifePayConsumption.FinishTime = orderCreationTime;
                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.充值中;
                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Frozen;
                    lifePayConsumption.Flow = ConsumptionFlowEnum.Unchanged;
                    lifePayConsumption.DeductionAmount = 0;
                    lifePayConsumption.FrozenAmount = lifePayConsumption.Amount;
                    repeat = await _lifePayConsumption.Where(x => x.OrderNo == lifePayConsumption.OrderNo
                    && x.ACOOLYStatus == lifePayConsumption.ACOOLYStatus && x.Flow == lifePayConsumption.Flow).FirstOrDefaultAsync();
                    if (repeat == null)
                    {
                        await _lifePayConsumption.InsertAsync(lifePayConsumption);
                    }
                    break;
                case ACOOLYStatusEnum.已完成:
                    lifePayConsumption.FinishTime = orderFinishTime.Value;
                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.已完成;
                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Thaw;
                    lifePayConsumption.Flow = ConsumptionFlowEnum.Out;
                    lifePayConsumption.DeductionAmount = lifePayConsumption.Amount;
                    lifePayConsumption.FrozenAmount = 0;
                    repeat = await _lifePayConsumption.Where(x => x.OrderNo == lifePayConsumption.OrderNo
                    && x.ACOOLYStatus == lifePayConsumption.ACOOLYStatus && x.Flow == lifePayConsumption.Flow).FirstOrDefaultAsync();
                    if (repeat == null)
                    {
                        await _lifePayConsumption.InsertAsync(lifePayConsumption);
                    }
                    break;
                case ACOOLYStatusEnum.充值失败:
                    lifePayConsumption.FinishTime = orderCreationTime;
                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.充值失败;
                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Frozen;
                    lifePayConsumption.Flow = ConsumptionFlowEnum.Unchanged;
                    lifePayConsumption.DeductionAmount = 0;
                    lifePayConsumption.FrozenAmount = lifePayConsumption.Amount;
                    repeat = await _lifePayConsumption.Where(x => x.OrderNo == lifePayConsumption.OrderNo
                    && x.ACOOLYStatus == lifePayConsumption.ACOOLYStatus && x.Flow == lifePayConsumption.Flow).FirstOrDefaultAsync();
                    if (repeat == null)
                    {
                        await _lifePayConsumption.InsertAsync(lifePayConsumption);
                    }
                    break;
                case ACOOLYStatusEnum.已退款:
                    lifePayConsumption.FinishTime = orderFinishTime.Value;
                    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.已退款;
                    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Thaw;
                    lifePayConsumption.Flow = ConsumptionFlowEnum.Unchanged;
                    lifePayConsumption.DeductionAmount = 0;
                    lifePayConsumption.FrozenAmount = 0;
                    repeat = await _lifePayConsumption.Where(x => x.OrderNo == lifePayConsumption.OrderNo
                    && x.ACOOLYStatus == lifePayConsumption.ACOOLYStatus && x.Flow == lifePayConsumption.Flow).FirstOrDefaultAsync();
                    if (repeat == null)
                    {
                        await _lifePayConsumption.InsertAsync(lifePayConsumption);
                    }
                    break;
                //case ACOOLYStatusEnum.部分充值成功:
                //    lifePayConsumption.FinishTime = orderCreationTime;
                //    lifePayConsumption.ACOOLYStatus = ACOOLYStatusEnum.部分充值成功;
                //    lifePayConsumption.FrozenStatus = ConsumptionFrozenStatusEnum.Thaw;
                //    lifePayConsumption.Flow = ConsumptionFlowEnum.Unchanged;
                //    lifePayConsumption.DeductionAmount = 0;
                //    lifePayConsumption.FrozenAmount = lifePayConsumption.Amount;
                //    repeat = await _lifePayConsumption.Where(x => x.OrderNo == lifePayConsumption.OrderNo
                //    && x.ACOOLYStatus == lifePayConsumption.ACOOLYStatus && x.Flow == lifePayConsumption.Flow).FirstOrDefaultAsync();
                //    if (repeat == null)
                //    {
                //        await _lifePayConsumption.InsertAsync(lifePayConsumption);
                //    }
                //    break;
                default: break;
            }
        }
        private async Task<IQueryable<LifePayChannlesRakeListOutput>> GetLifePayChannlesRakeListFilter(LifePayChannlesRakePageInput input)
        {
            var list = _lifePayChannlesRakeRepository.Where(x => x.IsDeleted == false)
@@ -458,6 +583,7 @@
            return list;
        }
        #endregion
    }