diff --git a/WGShare.API/Controllers/Frontend/AgoraCallbackController.cs b/WGShare.API/Controllers/Frontend/AgoraCallbackController.cs index d90732b..5dc9cb0 100644 --- a/WGShare.API/Controllers/Frontend/AgoraCallbackController.cs +++ b/WGShare.API/Controllers/Frontend/AgoraCallbackController.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using SharpCompress; using SqlSugar; +using System.Collections.Concurrent; using System.Diagnostics.CodeAnalysis; using System.Net.Http; using WGShare.API.Controllers.Basic; @@ -32,15 +33,21 @@ namespace WGShare.API.Controllers.Frontend private readonly ILogger _logger; private readonly AgoraHelper _agoraHelper; private readonly IConfiguration _configuration; + private readonly ISqlSugarClient _sqlSugarClient; + private readonly IHostEnvironment _hostEnvironment; public AgoraCallbackController( ILogger logger, AgoraHelper agoraHelper, - IConfiguration configuration) + IConfiguration configuration, + ISqlSugarClient sqlSugarClient, + IHostEnvironment hostEnvironment) { this._logger = logger; this._agoraHelper = agoraHelper; this._configuration = configuration; + this._sqlSugarClient = sqlSugarClient; + this._hostEnvironment = hostEnvironment; } @@ -84,9 +91,10 @@ namespace WGShare.API.Controllers.Frontend switch (body.eventType) { case Domain.Enums.EventType.channel_create: - CreateChannel(body); + await CreateChannel(body); break; case Domain.Enums.EventType.channel_destroy: + await DestroyChannel(body); break; case Domain.Enums.EventType.broadcaster_join_channel: case Domain.Enums.EventType.audience_join_channel: @@ -130,13 +138,51 @@ namespace WGShare.API.Controllers.Frontend RedisHelper.Instance.LPush(RedisKeyConstant.PubSub.MeetingRecord, bodyString); } + + static List excludeChannel = new(); + static ConcurrentDictionary existsChannel = new(); /// /// 创建频道 /// [NonAction] - private void CreateChannel(EventBody eventBody) + private async Task CreateChannel(EventBody eventBody) { - ExceptionNotice.JoinAsync(eventBody); + if (_hostEnvironment.IsDevelopment()) + { + _logger.LogDebug($"测试环境不通知创建频道"); + return; + } + if (excludeChannel.IsNullOrEmpty()) + { + // 缓存测试区域房间 + excludeChannel = await _sqlSugarClient.Queryable().Where(x => x.TenantId == "559167236182085") + .Select(x => x.RoomNum).ToListAsync(); + } + + if (excludeChannel.Any(x => x == eventBody.payload.channelName)) + { + _logger.LogDebug($"正式环境的测试区域不通知创建频道"); + return; + } + + if(existsChannel.TryAdd(eventBody.payload.channelName, 0)) + { + ExceptionNotice.JoinAsync(eventBody); + } + + } + + + /// + /// 销毁频道 + /// + [NonAction] + private async Task DestroyChannel(EventBody eventBody) + { + if (_hostEnvironment.IsDevelopment()) + return; + existsChannel.TryRemove(eventBody.payload.channelName, out _); + } } diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml index 772336d..5394568 100644 --- a/WGShare.API/WGShare.API.xml +++ b/WGShare.API/WGShare.API.xml @@ -88,6 +88,11 @@ 创建频道 + + + 销毁频道 + + 首页接口 diff --git a/WGShare.Domain/FriendlyException/ExceptionNotice.cs b/WGShare.Domain/FriendlyException/ExceptionNotice.cs index b1e8d96..a222ab1 100644 --- a/WGShare.Domain/FriendlyException/ExceptionNotice.cs +++ b/WGShare.Domain/FriendlyException/ExceptionNotice.cs @@ -43,13 +43,33 @@ namespace WGShare.Domain.FriendlyException public static async Task JoinAsync(EventBody eventBody) { + // 获取当前的日期 + DateTime today = DateTime.Today; + + // 定义东八区的时区信息 + TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time"); + + // 创建东八区今天00:00:01的DateTime对象 + DateTime startOfDayLocal = new DateTime(today.Year, today.Month, today.Day, 0, 0, 1, DateTimeKind.Unspecified); + + // 创建东八区今天23:59:00的DateTime对象 + DateTime endOfDayLocal = new DateTime(today.Year, today.Month, today.Day, 23, 59, 0, DateTimeKind.Unspecified); + + // 将时间转换为UTC + DateTimeOffset startOfDayUtc = TimeZoneInfo.ConvertTimeToUtc(startOfDayLocal, timeZoneInfo); + DateTimeOffset endOfDayUtc = TimeZoneInfo.ConvertTimeToUtc(endOfDayLocal, timeZoneInfo); + + // 获取Unix时间戳(秒) + long startTimestamp = startOfDayUtc.ToUnixTimeSeconds(); + long endTimestamp = endOfDayUtc.ToUnixTimeSeconds(); + var reponse = await httpClient.PostAsync(string.Empty, JsonContent.Create(new { msgtype = "markdown", markdown = new { title = "有人入会通知", - text = $"有人进入会议室了,会议号:{eventBody.payload.channelName},点击查看:https://analytics-lab.agora.io/analytics/call/search?projectId=0tOpVUrmf" + text = $"有人进入会议室了,会议号:{eventBody.payload.channelName},点击查看:https://analytics-lab.agora.io/analytics/call/search?projectId=0tOpVUrmf&fromTs={startTimestamp}&toTs={endTimestamp}" }, })); }