diff --git a/src/CloudGaming/Api/CloudGaming.ExtApi/Controllers/MonitorController.cs b/src/CloudGaming/Api/CloudGaming.ExtApi/Controllers/MonitorController.cs index 6df0653..bc88026 100644 --- a/src/CloudGaming/Api/CloudGaming.ExtApi/Controllers/MonitorController.cs +++ b/src/CloudGaming/Api/CloudGaming.ExtApi/Controllers/MonitorController.cs @@ -26,4 +26,15 @@ public class MonitorController : CloudGamingControllerBase { return new MonitorBLL(ServiceProvider).GetAppMonitorInfo(); } + /// + /// 获取用户登录数据 + /// + /// + /// + /// + [HttpGet] + public async Task GetActiveUserCount([FromQuery] long startTimeStamp = 0, [FromQuery] long endTimeStamp = 0) + { + return await new MonitorBLL(ServiceProvider).GetActiveUserCount(startTimeStamp, endTimeStamp); + } } diff --git a/src/CloudGaming/Api/CloudGaming.ExtApi/Program.cs b/src/CloudGaming/Api/CloudGaming.ExtApi/Program.cs index fc1cda5..93cdb25 100644 --- a/src/CloudGaming/Api/CloudGaming.ExtApi/Program.cs +++ b/src/CloudGaming/Api/CloudGaming.ExtApi/Program.cs @@ -3,6 +3,7 @@ using CloudGaming.Code.DataAccess.MultiTenantUtil; using CloudGaming.Code.Filter; using CloudGaming.Code.Game; using CloudGaming.Code.Monitor; +using CloudGaming.GameModel.Db.Db_Ext; using HuanMeng.DotNetCore.CustomExtension; using HuanMeng.DotNetCore.MiddlewareExtend; @@ -40,6 +41,20 @@ builder.Services.AddSingleton(typeof(ILogger), serviceProvi return loggerFactory.CreateLogger(); }); #endregion +#region automap +var mapperDomain = AppDomain.CurrentDomain.GetAssemblies().Where(it => it.FullName.Contains("HuanMeng") || it.FullName.Contains("CloudGaming.")).ToList(); +Type type = typeof(T_App_Config); +if (type != null) +{ + Assembly assembly = Assembly.GetAssembly(type); + if (!mapperDomain.Any(it => it.FullName == assembly.FullName)) + { + mapperDomain.Add(assembly); + } +} + +builder.Services.AddAutoMapper(mapperDomain); +#endregion #region 添加跨域 var _myAllowSpecificOrigins = "_myAllowSpecificOrigins"; builder.Services.AddCustomCors(_myAllowSpecificOrigins); diff --git a/src/CloudGaming/Api/CloudGaming.PayApi/appsettings.Development.json b/src/CloudGaming/Api/CloudGaming.PayApi/appsettings.Development.json index 9335132..3136758 100644 --- a/src/CloudGaming/Api/CloudGaming.PayApi/appsettings.Development.json +++ b/src/CloudGaming/Api/CloudGaming.PayApi/appsettings.Development.json @@ -10,7 +10,7 @@ "secret": "95BB717C61D1ECB0E9FB82C932CC77FF", "nodes": "http://124.220.55.158:94", //多个节点使用逗号分隔 "url": "http://124.220.55.158:94", - "env": "DEV", + "env": "TEST", "name": "payClient", "UserName": "admin", "Password": "dbt@com@1234" diff --git a/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs index 2b490d0..fa65a5c 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs @@ -1,5 +1,7 @@ using CloudGaming.DtoModel.Other; +using Microsoft.Win32; + using System; using System.Collections; using System.Collections.Generic; @@ -7,6 +9,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateNewTaxControlFapiaoApplicationRequest.Types.Fapiao.Types; + namespace CloudGaming.Code.Monitor; /// @@ -31,7 +35,7 @@ public class MonitorBLL : CloudGamingBase /// 获取近一月活跃人数统计 /// /// - public async Task GetActiveUserCount(long startTimeStamp = 0, long endTimeStamp = 0) + public async Task GetActiveUserCount(long startTimeStamp = 0, long endTimeStamp = 0) { if (endTimeStamp == 0) { @@ -47,12 +51,50 @@ public class MonitorBLL : CloudGamingBase DateOnly endDate = DateOnly.FromDateTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(endTimeStamp)); DateOnly curr = startDate; var userStatisticsList = await Dao.DaoExt.Context.T_Statistics_User.Where(it => it.LoginDate > startDate && it.LoginDate < endDate).ToListAsync(); + var channels = userStatisticsList.GroupBy(it => it.Channel).Select(it => it.Key).ToList(); + List userLogin = new List(); + List userRegistr = new List(); + List userActive = new List(); + while (curr <= endDate) { int day = int.Parse(curr.ToString("yyyyMMdd")); + var _Statistics_Users = userStatisticsList.Where(it => it.LoginDate == curr).OrderBy(it => it.Channel).ToList(); + var statisticsDtoUserList = new List(); + var statisticsDtoRegistrList = new List(); + var statisticsDtoActiveList = new List(); - curr.AddDays(1); + var currDateStr = curr.ToString("MM月dd号"); + StatisticsDto _UserLogin = new StatisticsDto(currDateStr, 0, "全部"); + StatisticsDto _userRegistr = new StatisticsDto(currDateStr, 0, "全部"); + StatisticsDto _userActive = new StatisticsDto(currDateStr, 0, "全部"); + foreach (var _channel in channels) + { + var item = _Statistics_Users.FirstOrDefault(it => it.Channel == _channel); + if (item == null) + { + item = new T_Statistics_User(); + } + _UserLogin.Value += item.LoginCount; + _userRegistr.Value += item.RegistrCount; + _userActive.Value += item.ActiveCount; + //item.ActiveCount + statisticsDtoUserList.Add(new StatisticsDto(currDateStr, item.LoginCount, item.Channel)); + + statisticsDtoRegistrList.Add(new StatisticsDto(currDateStr, item.RegistrCount, item.Channel)); + statisticsDtoActiveList.Add(new StatisticsDto(currDateStr, item.ActiveCount, item.Channel)); + + } + userLogin.Add(_UserLogin); + userLogin.AddRange(statisticsDtoUserList); + userRegistr.Add(_userRegistr); + userRegistr.AddRange(statisticsDtoRegistrList); + userActive.Add(_userActive); + userActive.AddRange(statisticsDtoActiveList); + + curr = curr.AddDays(1); } + return new { Login = userLogin, Registr = userRegistr, Active = userActive }; } /// @@ -72,3 +114,4 @@ public class MonitorBLL : CloudGamingBase } } + diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/Other/StatisticsDto.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/Other/StatisticsDto.cs new file mode 100644 index 0000000..e520536 --- /dev/null +++ b/src/CloudGaming/Model/CloudGaming.DtoModel/Other/StatisticsDto.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CloudGaming.DtoModel.Other; + +public class StatisticsDto +{ + public string TimeStamp { get; set; } + public int Value { get; set; } + public string Category { get; set; } + + public StatisticsDto() { } + public StatisticsDto(string timeStamp, int value, string category) + { + TimeStamp = timeStamp; + Value = value; + Category = category; + } + +}