From e08d70b9e610a2c176b88cb092d580754e009de5 Mon Sep 17 00:00:00 2001
From: zhengyuxuan <zhengyuxuan1995>
Date: 星期二, 01 四月 2025 15:41:04 +0800
Subject: [PATCH] 统计

---
 LifePayment/LifePayment.Application/LifePay/StatisticsService.cs |  127 +++++++++++++++++++++++++++++++++++++++---
 1 files changed, 118 insertions(+), 9 deletions(-)

diff --git a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
index 0ff2fb3..4998753 100644
--- a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
@@ -18,6 +18,7 @@
 using Microsoft.EntityFrameworkCore;
 using System.Threading.Channels;
 using ZeroD.Util;
+using NPOI.SS.Formula.Functions;
 
 namespace LifePayment.Application.LifePay
 {
@@ -26,17 +27,20 @@
         private readonly IRepository<LifePayOrder, Guid> _lifePayOrderRepository;
         private readonly IRepository<LifePayUser, Guid> _lifePayUserRepository;
         private readonly IRepository<DallyStatistics, Guid> _dallyStatisticsRepository;
+        private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository;
         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)
         {
             _lifePayOrderRepository = lifePayOrderRepository;
             _lifePayUserRepository = lifePayUserRepository;
             _dallyStatisticsRepository = dallyStatisticsRepository;
+            _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository;
             _lifePayChannlesRep = lifePayChannlesRep;
         }
 
@@ -72,8 +76,6 @@
                         topStatisticsOutput.YesterdayActiveUsers += entity.YesterdayActiveUsers;
                     }
                 }
-
-               
                 return topStatisticsOutput;
             }
             else
@@ -95,11 +97,114 @@
             }
         }
 
-        //public async Task<ReceiptsListOutPut> GetReceiptsList(List<string> channleList)
-        //{
-        //    var today = DateTime.Now.Date;
+        /// <summary>
+        /// 杩�30鏃ユ敹娆炬暟鎹�
+        /// </summary>
+        /// <param name="channleList"></param>
+        /// <returns></returns>
+        public async Task<ReceiptsListOutPut> GetReceiptsList(List<string> channleList)
+        {
+            var today = DateTime.Now.Date;
+            var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.Date <= today && x.CreationTime.Date >= today.AddDays(-30))
+                .WhereIf(channleList.Count() > 0, x => channleList.Contains(x.ChannelId))
+                .OrderBy(o => o.CreationTime)
+                .ToListAsync();
 
-        //}
+            var groupedStatistics = statistics
+                .GroupBy(x => x.CreationTime)
+                .Select(g => new
+                {
+                    CreationTime = g.Key,
+                    TotalReceiptsYesterday = g.Sum(x => x.ReceiptsYesterday),
+                    TotalIncomeYesterday = g.Sum(x => x.IncomeYesterday)
+                })
+                .ToList();
+            ReceiptsListOutPut receiptsListOutPut = new ReceiptsListOutPut();
+
+            foreach (var item in groupedStatistics)
+            {
+                ReceiptsDetail receive = new ReceiptsDetail()
+                {
+                    CreationTime = item.CreationTime.ToString("yyyy-MM-dd"),
+                    Amount = item.TotalReceiptsYesterday
+                };
+                ReceiptsDetail income = new ReceiptsDetail()
+                {
+                    CreationTime = item.CreationTime.ToString("yyyy-MM-dd"),
+                    Amount = item.TotalIncomeYesterday
+                };
+                receiptsListOutPut.ReceiveList.Add(receive);
+                receiptsListOutPut.IncomeList.Add(income);
+            }
+
+            return receiptsListOutPut;
+
+        }
+
+        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();
+            var groupedStatistics = statistics
+               .GroupBy(x => x.ChannelId)
+               .Select(g => new
+               {
+                   ChannelId = g.Key,
+                   ReceivePrice = g.Sum(x => x.PayAmount),
+                   ChannlesRakePrice = g.Sum(x => x.ChannlesRakePrice),
+               })
+               .OrderByDescending(o => o.ReceivePrice)
+               .ToList();
+
+            ChannelDataListOutPut channelDataList = new ChannelDataListOutPut();
+
+            foreach (var item in groupedStatistics)
+            {
+                ChannelDataReceive receive = new ChannelDataReceive()
+                {
+                    ChannelId = item.ChannelId,
+                    ReceivePrice = item.ReceivePrice,
+                    ChannlesRakePrice = item.ChannlesRakePrice,
+                };
+                if (channelDataList.ReceiveList.Count() < 5)
+                {
+                    channelDataList.ReceiveList.Add(receive);
+                }
+            }
+
+            /// 绱鐢ㄦ埛
+            var users = await _lifePayUserRepository.Where(x => x.IsDeleted == false).WhereIf(channleList.Count() > 0, x => channleList.Contains(x.CreationChannleNum))
+                .ToListAsync();
+            var groupedUsers = users
+              .GroupBy(x => x.CreationChannleNum)
+              .Select(g => new
+              {
+                  ChannelId = g.Key,
+                  Number = g.Count(),
+              })
+              .OrderByDescending(o => o.Number)
+              .ToList();
+            foreach (var item in groupedUsers)
+            {
+                ChannelDataUserNumber usernumber = new ChannelDataUserNumber()
+                {
+                    ChannelId = item.ChannelId,
+                    Number = item.Number,
+                };
+                if (channelDataList.UserNumberList.Count() < 5)
+                {
+                    channelDataList.UserNumberList.Add(usernumber);
+                }
+            }
+
+
+
+            return channelDataList;
+
+        }
+
 
         private async Task<DallyStatistics> TopStatistics(string channleId, DateTime today)
         {
@@ -116,6 +221,9 @@
             /// 绱鏀跺叆锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鐘舵�佷负鈥滃凡瀹屾垚鈥濅笖璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏀跺埌鐨勩�愮敤鎴峰疄浠橀噾棰�-骞冲彴鎵f閲戦-閮ㄥ垎閫�娆鹃噾棰濄�戯紱
             var accumulatedIncome = await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
                 .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.PayAmount - (x.PlatformDeductionAmount ?? 0) - (x.RefundPrice ?? 0));
+            /// 鏄ㄦ棩鏀跺叆锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鐘舵�佷负鈥滃凡瀹屾垚鈥濅笖璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╂敹鍒扮殑銆愮敤鎴峰疄浠橀噾棰�-骞冲彴鎵f閲戦-閮ㄥ垎閫�娆鹃噾棰濄�戯紱
+            var yesterdayIncome = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
+                .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.PayAmount - (x.PlatformDeductionAmount ?? 0) - (x.RefundPrice ?? 0));
             /// 绱涓嬪崟锛氱粺璁″钩鍙颁腑璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏃堕棿鐨勮鍗曡褰曪紱
             var accumulatedOrders = await _lifePayOrderRepository.Where(x => x.CreationTime < today).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).CountAsync();
             /// 鏄ㄦ棩涓嬪崟锛氱粺璁″钩鍙颁腑璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╃殑璁㈠崟璁板綍锛�
@@ -128,18 +236,19 @@
             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.WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).CountAsync();
+            var accumulatedUsers = await _lifePayUserRepository.Where(x => x.IsDeleted == false).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).CountAsync();
             /// 鏄ㄦ棩娲昏穬鐢ㄦ埛
-            var yesterdayActiveUsers = await _lifePayUserRepository.WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).Where(x => x.LastLoginTime >= today.AddDays(-1)).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 entity = new DallyStatistics()
             {
                 Id = GuidGenerator.Create(),
-                CreationTime = DateTime.Now,
+                CreationTime = today,
                 Amount = 0,
                 AccumulatedReceipts = accumulatedReceipts ?? 0,
                 AccumulatedIncome = accumulatedIncome ?? 0,
+                IncomeYesterday = yesterdayIncome ?? 0,
                 ReceiptsYesterday = receiptsYesterday ?? 0,
                 AccumulatedOrders = accumulatedOrders,
                 OrdersNumYesterday = ordersNumYesterday,

--
Gitblit v1.9.1