From d47921dc014dfaee234ce50cb4c296d342e09085 Mon Sep 17 00:00:00 2001
From: zhengyuxuan <zhengyuxuan1995>
Date: 星期四, 03 四月 2025 10:40:32 +0800
Subject: [PATCH] 暂存

---
 LifePayment/LifePayment.Application/LifePay/StatisticsService.cs |  113 +++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 83 insertions(+), 30 deletions(-)

diff --git a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
index 4b9a3c5..c1e6c49 100644
--- a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
@@ -19,6 +19,8 @@
 using System.Threading.Channels;
 using ZeroD.Util;
 using NPOI.SS.Formula.Functions;
+using System.Security.Principal;
+using StackExchange.Redis;
 
 namespace LifePayment.Application.LifePay
 {
@@ -28,19 +30,22 @@
         private readonly IRepository<LifePayUser, Guid> _lifePayUserRepository;
         private readonly IRepository<DallyStatistics, Guid> _dallyStatisticsRepository;
         private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository;
+        private readonly IRepository<LifePayRechargeReceipts, Guid> _lifePayRechargeReceiptsRepository;
         private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep;
 
         public StatisticsService(
                               IRepository<LifePayOrder, Guid> lifePayOrderRepository,
                               IRepository<LifePayUser, Guid> lifePayUserRepository,
-                            IRepository<DallyStatistics, Guid> dallyStatisticsRepository,
-                            IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository,
-                            IRepository<LifePayChannles, Guid> lifePayChannlesRep)
+                                IRepository<DallyStatistics, Guid> dallyStatisticsRepository,
+                                IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository,
+                                IRepository<LifePayRechargeReceipts, Guid> lifePayRechargeReceiptsRepository,
+                                IRepository<LifePayChannles, Guid> lifePayChannlesRep)
         {
             _lifePayOrderRepository = lifePayOrderRepository;
             _lifePayUserRepository = lifePayUserRepository;
             _dallyStatisticsRepository = dallyStatisticsRepository;
             _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository;
+            _lifePayRechargeReceiptsRepository = lifePayRechargeReceiptsRepository;
             _lifePayChannlesRep = lifePayChannlesRep;
         }
 
@@ -55,16 +60,16 @@
             var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.Date == today)
                 .WhereIf(channleList.Count() > 0, x => channleList.Contains(x.ChannelId))
                 .ToListAsync();
+            var totalRechargeReceipts = await _lifePayRechargeReceiptsRepository.Where(x => x.CreationTime < today).SumAsync(x => x.RechargeAmount);
             if (statistics == null || statistics.Count() == 0)
             {
                 TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput() { };
-                var allChannle = await _lifePayChannlesRep.Where(x => x.IsDeleted == false).ToListAsync();
+                var allChannle = await _lifePayChannlesRep.ToListAsync();
                 foreach (var item in allChannle)
                 {
                     var entity = await TopStatistics(item.ChannlesNum, today);
                     if (channleList.Count() == 0 || channleList.Contains(item.ChannlesNum))
                     {
-                        topStatisticsOutput.Amount += entity.Amount;
                         topStatisticsOutput.AccumulatedReceipts += entity.AccumulatedReceipts;
                         topStatisticsOutput.AccumulatedIncome += entity.AccumulatedIncome;
                         topStatisticsOutput.ReceiptsYesterday += entity.ReceiptsYesterday;
@@ -74,15 +79,23 @@
                         topStatisticsOutput.YesterdayFail += entity.YesterdayFail;
                         topStatisticsOutput.AccumulatedUsers += entity.AccumulatedUsers;
                         topStatisticsOutput.YesterdayActiveUsers += entity.YesterdayActiveUsers;
+                        topStatisticsOutput.AccumulatedChannlesRakePrice += entity.AccumulatedChannlesRakePrice;
                     }
                 }
+
+                if (channleList.Count() == 0)
+                {
+                    /// 璐︽埛浣欓
+                    topStatisticsOutput.Amount = totalRechargeReceipts - await _lifePayOrderRepository.Where(x => x.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�兼垚鍔� || x.ACOOLYStatus == ACOOLYStatusEnum.宸插畬鎴� || x.ACOOLYStatus == ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�)
+                      .SumAsync(x => x.PlatformDeductionAmount) ?? 0;
+                }
+
                 return topStatisticsOutput;
             }
             else
             {
                 TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput()
                 {
-                    Amount = statistics.Sum(s => s.Amount),
                     AccumulatedReceipts = statistics.Sum(s => s.AccumulatedReceipts),
                     AccumulatedIncome = statistics.Sum(s => s.AccumulatedIncome),
                     ReceiptsYesterday = statistics.Sum(s => s.ReceiptsYesterday),
@@ -92,7 +105,15 @@
                     YesterdayFail = statistics.Sum(s => s.YesterdayFail),
                     AccumulatedUsers = statistics.Sum(s => s.AccumulatedUsers),
                     YesterdayActiveUsers = statistics.Sum(s => s.YesterdayActiveUsers),
+                    AccumulatedChannlesRakePrice = statistics.Sum(s => s.AccumulatedChannlesRakePrice)
                 };
+                if (channleList.Count() == 0)
+                {
+                    /// 璐︽埛浣欓
+                    topStatisticsOutput.Amount = totalRechargeReceipts - await _lifePayOrderRepository.Where(x => x.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�兼垚鍔� || x.ACOOLYStatus == ACOOLYStatusEnum.宸插畬鎴� || x.ACOOLYStatus == ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�)
+                      .SumAsync(x => x.PlatformDeductionAmount) ?? 0;
+                }
+
                 return topStatisticsOutput;
             }
         }
@@ -109,7 +130,7 @@
                 .WhereIf(channleList.Count() > 0, x => channleList.Contains(x.ChannelId))
                 .OrderBy(o => o.CreationTime)
                 .ToListAsync();
-
+            CheckExtensions.IfTrueThrowUserFriendlyException(statistics == null, "鏀舵缁熻澶辫触");
             var groupedStatistics = statistics
                 .GroupBy(x => x.CreationTime)
                 .Select(g => new
@@ -125,12 +146,12 @@
             {
                 ReceiptsDetail receive = new ReceiptsDetail()
                 {
-                    CreationTime = item.CreationTime.ToString("yyyy-MM-dd"),
+                    CreationTime = item.CreationTime.AddDays(-1).ToString("yyyy-MM-dd"),
                     Amount = item.TotalReceiptsYesterday
                 };
                 ReceiptsDetail income = new ReceiptsDetail()
                 {
-                    CreationTime = item.CreationTime.ToString("yyyy-MM-dd"),
+                    CreationTime = item.CreationTime.AddDays(-1).ToString("yyyy-MM-dd"),
                     Amount = item.TotalIncomeYesterday
                 };
                 receiptsListOutPut.ReceiveList.Add(receive);
@@ -140,21 +161,26 @@
             return receiptsListOutPut;
         }
 
+        /// <summary>
+        /// 鑾峰彇30澶╀剑閲�
+        /// </summary>
+        /// <param name="channleList"></param>
+        /// <returns></returns>
         public async Task<ChannlesRakeListOutPut> GetChannlesRakeList(List<string> channleList)
         {
             var today = DateTime.Now.Date;
-            var statistics = await _lifePayChannlesRakeRepository.Where(x => x.IsDeleted == false)
+            var statistics = await _lifePayChannlesRakeRepository.Where(x => x.FinishTime.Date <= today && x.FinishTime.Date >= today.AddDays(-30))
                             .WhereIf(channleList.Count() > 0, x => channleList.Contains(x.ChannelId))
                             .ToListAsync();
+            CheckExtensions.IfTrueThrowUserFriendlyException(statistics == null, "浣i噾缁熻澶辫触");
             var groupedStatistics = statistics
-               .GroupBy(x => x.CreationTime)
+               .GroupBy(x => x.FinishTime.ToString("yyyy-MM-dd"))
                .Select(g => new
                {
-                   CreationTime = g.Key,
+                   FinishTime = g.Key,
                    ChannlesRakePrice = g.Sum(x => x.ChannlesRakePrice),
                })
                .ToList();
-
 
             ChannlesRakeListOutPut channlesRakeListOutPut = new ChannlesRakeListOutPut();
 
@@ -162,23 +188,22 @@
             {
                 ReceiptsDetail receive = new ReceiptsDetail()
                 {
-                    CreationTime = item.CreationTime.ToString("yyyy-MM-dd"),
+                    CreationTime = item.FinishTime,
                     Amount = item.ChannlesRakePrice
                 };
-
                 channlesRakeListOutPut.ChannlesRakeList.Add(receive);
             }
 
             return channlesRakeListOutPut;
-
         }
 
         public async Task<ChannelDataListOutPut> GetChannelDataList(List<string> channleList)
         {
-
-            var statistics = await _lifePayChannlesRakeRepository.Where(x => x.IsDeleted == false)
-                            .WhereIf(channleList.Count() > 0, x => channleList.Contains(x.ChannelId))
-                            .ToListAsync();
+            int maxStatisticsNumber = 5;
+            var statistics = await _lifePayChannlesRakeRepository
+                            .WhereIf(channleList != null && channleList.Count() > 0, x => channleList.Contains(x.ChannelId))
+            .ToListAsync();
+            CheckExtensions.IfTrueThrowUserFriendlyException(statistics == null, "娓犻亾鏀舵缁熻澶辫触");
             var groupedStatistics = statistics
                .GroupBy(x => x.ChannelId)
                .Select(g => new
@@ -196,19 +221,20 @@
             {
                 ChannelDataReceive receive = new ChannelDataReceive()
                 {
-                    ChannelName = _lifePayChannlesRep.Where(x => x.ChannlesNum == item.ChannelId).FirstOrDefault().ChannlesName,
+                    ChannelName = _lifePayChannlesRep.Where(x => x.ChannlesNum == item.ChannelId).FirstOrDefault()?.ChannlesName,
                     ReceivePrice = item.ReceivePrice,
                     ChannlesRakePrice = item.ChannlesRakePrice,
                 };
-                if (channelDataList.ReceiveList.Count() < 5)
+                if (channelDataList.ReceiveList.Count() < maxStatisticsNumber)
                 {
                     channelDataList.ReceiveList.Add(receive);
                 }
             }
 
             /// 绱鐢ㄦ埛
-            var users = await _lifePayUserRepository.Where(x => x.IsDeleted == false).WhereIf(channleList.Count() > 0, x => channleList.Contains(x.CreationChannleNum))
+            var users = await _lifePayUserRepository.WhereIf(channleList.Count() > 0, x => channleList.Contains(x.CreationChannleNum))
                 .ToListAsync();
+            CheckExtensions.IfTrueThrowUserFriendlyException(statistics == null, "绱鐢ㄦ埛缁熻澶辫触");
             var groupedUsers = users
               .GroupBy(x => x.CreationChannleNum)
               .Select(g => new
@@ -222,10 +248,10 @@
             {
                 ChannelDataUserNumber usernumber = new ChannelDataUserNumber()
                 {
-                    ChannelName = _lifePayChannlesRep.Where(x => x.ChannlesNum == item.ChannelId).FirstOrDefault().ChannlesName,
+                    ChannelName = _lifePayChannlesRep.Where(x => x.ChannlesNum == item.ChannelId).FirstOrDefault()?.ChannlesName,
                     Number = item.Number,
                 };
-                if (channelDataList.UserNumberList.Count() < 5)
+                if (channelDataList.UserNumberList.Count() < maxStatisticsNumber)
                 {
                     channelDataList.UserNumberList.Add(usernumber);
                 }
@@ -234,9 +260,29 @@
 
 
             return channelDataList;
-
         }
 
+        public async Task StatisticsByDate(int days)
+        {
+            var today = DateTime.Now.Date;
+            for (var i = 0; i < days; i++)
+            {
+                var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.Date == today)
+                .ToListAsync();
+
+                if (statistics == null || statistics.Count() == 0)
+                {
+                    TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput() { };
+                    var allChannle = await _lifePayChannlesRep.ToListAsync();
+                    foreach (var item in allChannle)
+                    {
+                        var entity = await TopStatistics(item.ChannlesNum, today);
+                    }
+                }
+
+                today = today.AddDays(-1);
+            }
+        }
 
         private async Task<DallyStatistics> TopStatistics(string channleId, DateTime today)
         {
@@ -268,16 +314,22 @@
             var yesterdayFail = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸查��娆�)
                 .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).CountAsync();
             /// 绱鐢ㄦ埛
-            var accumulatedUsers = await _lifePayUserRepository.Where(x => x.IsDeleted == false).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).CountAsync();
+            var accumulatedUsers = await _lifePayUserRepository.Where(x => x.CreationTime < today)
+                .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).CountAsync();
             /// 鏄ㄦ棩娲昏穬鐢ㄦ埛
-            var yesterdayActiveUsers = await _lifePayUserRepository.Where(x => x.IsDeleted == false).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).Where(x => x.LastLoginTime >= today.AddDays(-1)).CountAsync();
-
+            var yesterdayActiveUsers = await (from a in _lifePayUserRepository
+                                              join b in _lifePayOrderRepository on a.Id equals b.UserId
+                                              where b.CreationTime >= today.AddDays(-1) && b.CreationTime < today
+                                              && (b.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�间腑 || b.ACOOLYStatus == ACOOLYStatusEnum.鍏呭�兼垚鍔� || b.ACOOLYStatus == ACOOLYStatusEnum.宸插畬鎴� || b.ACOOLYStatus == ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�)
+                                              select b).Distinct().CountAsync();
+            /// 绱浣i噾
+            var accumulatedChannlesRakePrice = await _lifePayChannlesRakeRepository.Where(x => x.FinishTime < today)
+                .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.ChannlesRakePrice);
 
             var entity = new DallyStatistics()
             {
                 Id = GuidGenerator.Create(),
                 CreationTime = today,
-                Amount = 0,
                 AccumulatedReceipts = accumulatedReceipts ?? 0,
                 AccumulatedIncome = accumulatedIncome ?? 0,
                 IncomeYesterday = yesterdayIncome ?? 0,
@@ -289,6 +341,7 @@
                 AccumulatedUsers = accumulatedUsers,
                 YesterdayActiveUsers = yesterdayActiveUsers,
                 ChannelId = channleId,
+                AccumulatedChannlesRakePrice = accumulatedChannlesRakePrice,
                 Date = today.AddDays(-1)
             };
             await _dallyStatisticsRepository.InsertAsync(entity);

--
Gitblit v1.9.1