From 2d5d89d98701c5f11a982be9c84d60972fb3b6d1 Mon Sep 17 00:00:00 2001 From: zpc Date: Sun, 8 Dec 2024 01:33:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/MonitorController.cs | 12 +++++ .../CloudGaming.Code/Monitor/MonitorBLL.cs | 52 ++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/CloudGaming/Api/CloudGaming.ExtApi/Controllers/MonitorController.cs b/src/CloudGaming/Api/CloudGaming.ExtApi/Controllers/MonitorController.cs index bc88026..a656c6d 100644 --- a/src/CloudGaming/Api/CloudGaming.ExtApi/Controllers/MonitorController.cs +++ b/src/CloudGaming/Api/CloudGaming.ExtApi/Controllers/MonitorController.cs @@ -37,4 +37,16 @@ public class MonitorController : CloudGamingControllerBase { return await new MonitorBLL(ServiceProvider).GetActiveUserCount(startTimeStamp, endTimeStamp); } + /// + /// 获取每小时统计 + /// + /// + /// + /// + [HttpGet] + public async Task GetAppMonitorHourAsync([FromQuery] long startTimeStamp = 0, [FromQuery] long endTimeStamp = 0) + { + return await new MonitorBLL(ServiceProvider).GetAppMonitorHourAsync(startTimeStamp, endTimeStamp); + } + } diff --git a/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs index 1182168..b124951 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs @@ -1,3 +1,4 @@ +using CloudGaming.Code.DataAccess; using CloudGaming.DtoModel.Other; using Microsoft.Win32; @@ -7,6 +8,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading.Channels; using System.Threading.Tasks; using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateNewTaxControlFapiaoApplicationRequest.Types.Fapiao.Types; @@ -112,10 +114,58 @@ public class MonitorBLL : CloudGamingBase /// 获取近一月登录人数统计 /// /// - public async Task GetLoginUserCount() + public async Task GetAppMonitorHourAsync(long startTimeStamp = 0, long endTimeStamp = 0) { + if (endTimeStamp == 0) + { + endTimeStamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); + } + if (startTimeStamp == 0) + { + startTimeStamp = DateTimeOffset.UtcNow.AddHours(-24).ToUnixTimeSeconds(); + } + //开始时间 + var startDate = DateTimeOffset.FromUnixTimeSeconds(startTimeStamp).ToLocalTime().DateTime; + //结束时间 + var endDate = DateTimeOffset.FromUnixTimeSeconds(endTimeStamp).ToLocalTime().DateTime; + var curr = startDate; + var list = await Dao.DaoExt.Context.T_App_Channel.Where(it => !string.IsNullOrEmpty(it.ChannelId)).Select(it => it.ChannelId).ToListAsync(); + int startDateHour = int.Parse(startDate.ToString("yyyyMMddHH")); + int endDateHour = int.Parse(endDate.ToString("yyyyMMddHH")); + var userStatisticsList = await Dao.DaoExt.Context.T_Statistics_UserHour.Where(it => it.LoginHour >= startDateHour && it.LoginHour <= endDateHour).ToListAsync(); + List userLogin = new List(); + List userRegistr = new List(); + while (curr <= endDate) + { + var loginAll = GetStatisticsDto(curr, "全部", 0); + var registrAll = GetStatisticsDto(curr, "全部", 0); + userLogin.Add(loginAll); + userRegistr.Add(registrAll); + int dayHour = int.Parse(curr.ToString("yyyyMMddHH")); + foreach (var channelId in list) + { + var statis = userStatisticsList.FirstOrDefault(it => it.LoginHour == dayHour && it.Channel == channelId); + var _loginCount = statis?.LoginCount ?? 0; + var _registrCount = statis?.RegistrCount ?? 0; + loginAll.Value += _loginCount; + registrAll.Value += _registrCount; + userLogin.Add(GetStatisticsDto(curr, channelId, _loginCount)); + userRegistr.Add(GetStatisticsDto(curr, channelId, _registrCount)); + } + curr = curr.AddHours(1); + } + return new { Login = userLogin, Registr = userRegistr }; } + private StatisticsDto GetStatisticsDto(DateTime curr, string channelId, int count) + { + return new StatisticsDto() + { + Category = channelId, + TimeStamp = curr.ToString("dd-HH"), + Value = count + }; + } /// /// 获取近一月注册人数统计 ///