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 | 103 +++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 78 insertions(+), 25 deletions(-) diff --git a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs index b69b5b6..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 @@ -140,13 +161,18 @@ 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 && - x.FinishTime.Date <= today && x.FinishTime.Date >= today.AddDays(-30)) + 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.FinishTime.ToString("yyyy-MM-dd")) .Select(g => new @@ -165,20 +191,19 @@ 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