From 846d6eb9a0ebbf12893eaa332d5c611b1062272e Mon Sep 17 00:00:00 2001 From: zpc Date: Sat, 7 Dec 2024 02:46:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CloudGaming.Code/Monitor/MonitorBLL.cs | 1 + .../Monitor/UserMonitorProcessor.cs | 77 +++++++++++++++++++ .../Db/Db_Ext/CloudGamingCBTContext.cs | 6 +- .../Db/Db_Ext/T_App_Config.cs | 2 +- .../Db/Db_Ext/T_Statistics_UserHour.cs | 7 +- 5 files changed, 87 insertions(+), 6 deletions(-) diff --git a/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs index 0ad2a5c..1182168 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs @@ -107,6 +107,7 @@ public class MonitorBLL : CloudGamingBase return new { Login = userLogin, Registr = userRegistr, Active = userActive }; } + /// /// 获取近一月登录人数统计 /// diff --git a/src/CloudGaming/Code/CloudGaming.Code/Monitor/UserMonitorProcessor.cs b/src/CloudGaming/Code/CloudGaming.Code/Monitor/UserMonitorProcessor.cs index 290aa6b..b23a47c 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Monitor/UserMonitorProcessor.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Monitor/UserMonitorProcessor.cs @@ -87,3 +87,80 @@ public class UserMonitorProcessor : AppJobBase } } + +/// +/// 用户定时类 +/// +[QuartzTrigger("UserHourMonitorProcessor", "0 1 * * * ?")] +public class UserHourMonitorProcessor : AppJobBase +{ + public UserHourMonitorProcessor(IServiceScopeFactory scopeFactory) : base(scopeFactory) + { + } + + public override async Task AppConfigProcessLoop(AppConfig appConfig, AppMonitorInfo appMonitorInfo, IServiceProvider serviceProvider, CloudGamingBase cloudGamingBase) + { + var dao = cloudGamingBase.Dao; + var now = DateTime.Now.AddHours(-1); + int day = int.Parse(now.ToString("yyyyMMdd")); + var newDayHour = now.Date.AddHours(now.Hour); + var oldDayHour = now.Date.AddHours(now.AddHours(1).Hour); + int dayHour = int.Parse(now.ToString("yyyyMMddHH")); + var nowDay = DateOnly.FromDateTime(now); + + // 获取所有用户数据 + var userLoginData = cloudGamingBase.Dao.DaoExt.Context.T_User_LoginDay_Log + .Where(it => it.CreateTimeDay == day && it.CreateTimeHour == dayHour).AsQueryable(); + //登录数据 + var todayLoggedInUsers = await userLoginData.GroupBy(it => it.Channel ?? "") + .ToDictionaryAsync(g => g.Key, g => g.Count()); + //注册数据 + var todayRegisteredUsers = await userLoginData.Where(it => it.IsNew) + .GroupBy(it => it.Channel ?? "") + .ToDictionaryAsync(g => g.Key, g => g.Count()); + + + // 获取当前统计数据 + var userStatistics = await dao.DaoExt.Context.T_Statistics_UserHour + .Where(it => it.LoginDay == day) + .ToDictionaryAsync(it => it.Channel ?? ""); + + // 更新或创建统计记录 + void UpdateStatistics(string channel, int loginCount, int registrCount) + { + if (!userStatistics.TryGetValue(channel, out var statisticsUser)) + { + statisticsUser = new T_Statistics_UserHour() + { + LoginHour = dayHour, + Channel = channel, + CreatedAt = DateTime.Now, + LoginCount = 0, + RegistrCount = 0, + LoginDate = nowDay, + LoginDay = day, + UpdatedAt = DateTime.Now, + }; + dao.DaoExt.Context.T_Statistics_UserHour.Add(statisticsUser); + userStatistics.Add(channel, statisticsUser); + } + statisticsUser.OnlineCount = appMonitorInfo?.CurrentOnlineUsers ?? 0; + statisticsUser.LoginCount = loginCount; + statisticsUser.RegistrCount = registrCount; + statisticsUser.UpdatedAt = DateTime.Now; + } + var list = dao.DaoExt.Context.T_App_Channel.ToList(); + foreach (var item in list) + { + var key = item.ChannelId; + if (string.IsNullOrEmpty(key)) + { + key = "27001"; + } + UpdateStatistics(key, todayLoggedInUsers.GetValueOrDefault(key, 0), todayRegisteredUsers.GetValueOrDefault(key, 0)); + + } + await dao.DaoExt.Context.SaveChangesAsync(); + } + +} diff --git a/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/CloudGamingCBTContext.cs b/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/CloudGamingCBTContext.cs index a5d24eb..b1f45b7 100644 --- a/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/CloudGamingCBTContext.cs +++ b/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/CloudGamingCBTContext.cs @@ -382,10 +382,8 @@ public partial class CloudGamingCBTContext : DbContext entity.Property(e => e.LoginCount).HasComment("用户登录数"); entity.Property(e => e.LoginDate).HasComment("日期"); entity.Property(e => e.LoginDay).HasComment("天"); - entity.Property(e => e.LoginHour) - .HasMaxLength(255) - .IsUnicode(false) - .HasComment("小时"); + entity.Property(e => e.LoginHour).HasComment("小时"); + entity.Property(e => e.OnlineCount).HasComment("在线人数"); entity.Property(e => e.RegistrCount).HasComment("用户注册数"); entity.Property(e => e.UpdatedAt) .HasComment("修改时间") diff --git a/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/T_App_Config.cs b/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/T_App_Config.cs index 2cb7eda..8fcd5da 100644 --- a/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/T_App_Config.cs +++ b/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/T_App_Config.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace CloudGaming.GameModel.Db.Db_Ext; diff --git a/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/T_Statistics_UserHour.cs b/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/T_Statistics_UserHour.cs index 13ad064..4cf814c 100644 --- a/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/T_Statistics_UserHour.cs +++ b/src/CloudGaming/Model/CloudGaming.GameModel/Db/Db_Ext/T_Statistics_UserHour.cs @@ -24,7 +24,7 @@ public partial class T_Statistics_UserHour /// /// 小时 /// - public virtual string LoginHour { get; set; } = null!; + public virtual int LoginHour { get; set; } /// /// 用户登录数 @@ -50,4 +50,9 @@ public partial class T_Statistics_UserHour /// 修改时间 /// public virtual DateTime UpdatedAt { get; set; } + + /// + /// 在线人数 + /// + public virtual int OnlineCount { get; set; } }