From a3bfd6cd7ee9580db08aa03a8656ad5572089756 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期一, 31 三月 2025 16:19:36 +0800 Subject: [PATCH] Merge branch 'dev-lifepay-v1.3' of http://120.26.58.240:8888/r/LifePaymentApi into dev-lifepay-v1.3 --- LifePayment/LifePayment.Application/LifePay/StatisticsService.cs | 162 ++++++++++++++++++++++++++++++----------------------- 1 files changed, 92 insertions(+), 70 deletions(-) diff --git a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs index 7547c44..0ff2fb3 100644 --- a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs +++ b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs @@ -16,6 +16,8 @@ using Volo.Abp.EventBus.Distributed; using static Nest.FileSystemStats; using Microsoft.EntityFrameworkCore; +using System.Threading.Channels; +using ZeroD.Util; namespace LifePayment.Application.LifePay { @@ -24,15 +26,18 @@ private readonly IRepository<LifePayOrder, Guid> _lifePayOrderRepository; private readonly IRepository<LifePayUser, Guid> _lifePayUserRepository; private readonly IRepository<DallyStatistics, Guid> _dallyStatisticsRepository; + private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep; public StatisticsService( IRepository<LifePayOrder, Guid> lifePayOrderRepository, IRepository<LifePayUser, Guid> lifePayUserRepository, - IRepository<DallyStatistics, Guid> dallyStatisticsRepository) + IRepository<DallyStatistics, Guid> dallyStatisticsRepository, + IRepository<LifePayChannles, Guid> lifePayChannlesRep) { _lifePayOrderRepository = lifePayOrderRepository; _lifePayUserRepository = lifePayUserRepository; _dallyStatisticsRepository = dallyStatisticsRepository; + _lifePayChannlesRep = lifePayChannlesRep; } /// <summary> @@ -40,95 +45,112 @@ /// </summary> /// <param name="channleId"></param> /// <returns></returns> - public async Task<TopStatisticsOutput> GetTopStatistics(string channleId = "") + public async Task<TopStatisticsOutput> GetTopStatistics(List<string> channleList) { var today = DateTime.Now.Date; var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.Date == today) - .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId) - .FirstOrDefaultAsync(); - if (statistics == null) + .WhereIf(channleList.Count() > 0, x => channleList.Contains(x.ChannelId)) + .ToListAsync(); + if (statistics == null || statistics.Count() == 0) { - /// 绱鏀舵锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏀跺埌鐨勩�愮敤鎴锋敮浠樻垚鍔熺殑閲戦-閫�娆剧粰鐢ㄦ埛鐨勯噾棰濄�戯紱 - var accumulatedReceipts = await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.PayStatus != LifePayStatusEnum.鏈敮浠�) - .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.PayAmount) - await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.LifePayRefundStatus == LifePayRefundStatusEnum.宸查��娆�).SumAsync(x => (x.RefundPrice ?? 0)); - /// 鏄ㄦ棩鏀舵锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╂敹鍒扮殑銆愮敤鎴锋敮浠樻垚鍔熺殑閲戦-閫�娆剧粰鐢ㄦ埛鐨勯噾棰濄�戯紱 - var receiptsYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.PayStatus == LifePayStatusEnum.宸叉敮浠�) - .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.PayAmount) - await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayRefundStatus == LifePayRefundStatusEnum.宸查��娆�).SumAsync(x => (x.RefundPrice ?? 0)); - /// 绱鏀跺叆锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鐘舵�佷负鈥滃凡瀹屾垚鈥濅笖璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏀跺埌鐨勩�愮敤鎴峰疄浠橀噾棰�-骞冲彴鎵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)); - /// 绱涓嬪崟锛氱粺璁″钩鍙颁腑璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏃堕棿鐨勮鍗曡褰曪紱 - var accumulatedOrders = await _lifePayOrderRepository.Where(x => x.CreationTime < today).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).CountAsync(); - /// 鏄ㄦ棩涓嬪崟锛氱粺璁″钩鍙颁腑璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╃殑璁㈠崟璁板綍锛� - var ordersNumYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today) - .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).CountAsync(); - /// 鏄ㄦ棩鎴愬姛锛氱粺璁″钩鍙颁腑璁㈠崟鐘舵�佷负鈥滃凡瀹屾垚/閮ㄥ垎鍏呭�兼垚鍔熲�濅笖璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╃殑璁㈠崟璁板綍锛� - var yesterdaySuccess = 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 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 yesterdayActiveUsers = await _lifePayUserRepository.WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).Where(x => x.LastLoginTime >= today.AddDays(-1)).CountAsync(); - - var entity = new DallyStatistics() + TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput() { }; + var allChannle = await _lifePayChannlesRep.Where(x => x.IsDeleted == false).ToListAsync(); + foreach (var item in allChannle) { - Id = GuidGenerator.Create(), - CreationTime = DateTime.Now, - Amount = 0, - AccumulatedReceipts = accumulatedReceipts??0, - AccumulatedIncome = accumulatedIncome ?? 0, - ReceiptsYesterday = receiptsYesterday ?? 0, - AccumulatedOrders = accumulatedOrders, - OrdersNumYesterday = ordersNumYesterday, - YesterdaySuccess = yesterdaySuccess, - YesterdayFail = yesterdayFail, - AccumulatedUsers = accumulatedUsers, - YesterdayActiveUsers = yesterdayActiveUsers, - ChannelId = channleId - }; - await _dallyStatisticsRepository.InsertAsync(entity); + 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; + topStatisticsOutput.AccumulatedOrders += entity.AccumulatedOrders; + topStatisticsOutput.OrdersNumYesterday += entity.OrdersNumYesterday; + topStatisticsOutput.YesterdaySuccess += entity.YesterdaySuccess; + topStatisticsOutput.YesterdayFail += entity.YesterdayFail; + topStatisticsOutput.AccumulatedUsers += entity.AccumulatedUsers; + topStatisticsOutput.YesterdayActiveUsers += entity.YesterdayActiveUsers; + } + } - TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput() - { - Amount = entity.Amount, - AccumulatedReceipts = entity.AccumulatedReceipts, - AccumulatedIncome = entity.AccumulatedIncome, - ReceiptsYesterday = entity.ReceiptsYesterday, - AccumulatedOrders = entity.AccumulatedOrders, - OrdersNumYesterday = entity.OrdersNumYesterday, - YesterdaySuccess = entity.YesterdaySuccess, - YesterdayFail = entity.YesterdayFail, - AccumulatedUsers = entity.AccumulatedUsers, - YesterdayActiveUsers = entity.YesterdayActiveUsers, - }; + return topStatisticsOutput; } else { TopStatisticsOutput topStatisticsOutput = new TopStatisticsOutput() { - Amount = statistics.Amount, - AccumulatedReceipts = statistics.AccumulatedReceipts, - AccumulatedIncome = statistics.AccumulatedIncome, - ReceiptsYesterday = statistics.ReceiptsYesterday, - AccumulatedOrders = statistics.AccumulatedOrders, - OrdersNumYesterday = statistics.OrdersNumYesterday, - YesterdaySuccess = statistics.YesterdaySuccess, - YesterdayFail = statistics.YesterdayFail, - AccumulatedUsers = statistics.AccumulatedUsers, - YesterdayActiveUsers = statistics.YesterdayActiveUsers, + Amount = statistics.Sum(s => s.Amount), + AccumulatedReceipts = statistics.Sum(s => s.AccumulatedReceipts), + AccumulatedIncome = statistics.Sum(s => s.AccumulatedIncome), + ReceiptsYesterday = statistics.Sum(s => s.ReceiptsYesterday), + AccumulatedOrders = statistics.Sum(s => s.AccumulatedOrders), + OrdersNumYesterday = statistics.Sum(s => s.OrdersNumYesterday), + YesterdaySuccess = statistics.Sum(s => s.YesterdaySuccess), + YesterdayFail = statistics.Sum(s => s.YesterdayFail), + AccumulatedUsers = statistics.Sum(s => s.AccumulatedUsers), + YesterdayActiveUsers = statistics.Sum(s => s.YesterdayActiveUsers), }; return topStatisticsOutput; } } - //public async Task<ReceiptsListOutPut> GetReceiptsList(string channleId = "") + //public async Task<ReceiptsListOutPut> GetReceiptsList(List<string> channleList) //{ // var today = DateTime.Now.Date; //} + + private async Task<DallyStatistics> TopStatistics(string channleId, DateTime today) + { + /// 绱鏀舵锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏀跺埌鐨勩�愮敤鎴锋敮浠樻垚鍔熺殑閲戦-閫�娆剧粰鐢ㄦ埛鐨勯噾棰濄�戯紱 + var accumulatedReceipts = await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.PayStatus != LifePayStatusEnum.鏈敮浠�) + .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.PayAmount) - + await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.LifePayRefundStatus == LifePayRefundStatusEnum.宸查��娆�) + .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => (x.RefundPrice ?? 0)); + /// 鏄ㄦ棩鏀舵锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╂敹鍒扮殑銆愮敤鎴锋敮浠樻垚鍔熺殑閲戦-閫�娆剧粰鐢ㄦ埛鐨勯噾棰濄�戯紱 + var receiptsYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.PayStatus == LifePayStatusEnum.宸叉敮浠�) + .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.PayAmount) - + await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayRefundStatus == LifePayRefundStatusEnum.宸查��娆�) + .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => (x.RefundPrice ?? 0)); + /// 绱鏀跺叆锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鐘舵�佷负鈥滃凡瀹屾垚鈥濅笖璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏀跺埌鐨勩�愮敤鎴峰疄浠橀噾棰�-骞冲彴鎵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)); + /// 绱涓嬪崟锛氱粺璁″钩鍙颁腑璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏃堕棿鐨勮鍗曡褰曪紱 + var accumulatedOrders = await _lifePayOrderRepository.Where(x => x.CreationTime < today).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).CountAsync(); + /// 鏄ㄦ棩涓嬪崟锛氱粺璁″钩鍙颁腑璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╃殑璁㈠崟璁板綍锛� + var ordersNumYesterday = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today) + .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).CountAsync(); + /// 鏄ㄦ棩鎴愬姛锛氱粺璁″钩鍙颁腑璁㈠崟鐘舵�佷负鈥滃凡瀹屾垚/閮ㄥ垎鍏呭�兼垚鍔熲�濅笖璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╃殑璁㈠崟璁板綍锛� + var yesterdaySuccess = 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 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 yesterdayActiveUsers = await _lifePayUserRepository.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, + Amount = 0, + AccumulatedReceipts = accumulatedReceipts ?? 0, + AccumulatedIncome = accumulatedIncome ?? 0, + ReceiptsYesterday = receiptsYesterday ?? 0, + AccumulatedOrders = accumulatedOrders, + OrdersNumYesterday = ordersNumYesterday, + YesterdaySuccess = yesterdaySuccess, + YesterdayFail = yesterdayFail, + AccumulatedUsers = accumulatedUsers, + YesterdayActiveUsers = yesterdayActiveUsers, + ChannelId = channleId + }; + await _dallyStatisticsRepository.InsertAsync(entity); + return entity; + } } } -- Gitblit v1.9.1