This commit is contained in:
youngq 2024-07-22 09:34:28 +08:00
parent cc309355c6
commit ad962e3e15
8 changed files with 136 additions and 26 deletions

View File

@ -120,7 +120,7 @@ namespace WGShare.API.Controllers.Frontend
result.ForEach(x =>
{
x.IsManager = managerIds.Contains(x.Id);
x.IsManager = (x.RoleId == "1" || managerIds.Contains(x.Id));
var info = channelUsers.FirstOrDefault(q => q.UID == x.Id);
if (info != null)
{
@ -257,10 +257,16 @@ namespace WGShare.API.Controllers.Frontend
{
return;
}
allUsers.ForEach(x => x.Value.EnableMicr = enableMicr);
allUsers.ForEach(x =>
{
if (x.Key != uid)
{
x.Value.EnableMicr = enableMicr;
}
});
RedisHelper.Instance.HMSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), allUsers);
await _hubContext.Clients.Group(roomNum).OperMicr(enableMicr);
await _hubContext.Clients.GroupExcept(roomNum, allUsers[uid].ConnectId).OperMicr(enableMicr);
await _hubContext.Clients.Group(roomNum).RefreshUserList();
return;
}
@ -294,11 +300,19 @@ namespace WGShare.API.Controllers.Frontend
{
return;
}
allUsers.ForEach(x => x.Value.EnableCamera = enableCamera);
allUsers.ForEach(x =>
{
if (x.Key != uid)
{
x.Value.EnableCamera = enableCamera;
}
});
//allUsers.ForEach(x => x.Value.EnableCamera = enableCamera);
RedisHelper.Instance.HMSet(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum), allUsers);
// 全员开关闭摄像头
await _hubContext.Clients.Group(roomNum).OperCamera(enableCamera);
await _hubContext.Clients.GroupExcept(roomNum, allUsers[uid].ConnectId).OperCamera(enableCamera);
await _hubContext.Clients.Group(roomNum).RefreshUserList();
return;
}
@ -317,7 +331,16 @@ namespace WGShare.API.Controllers.Frontend
await _hubContext.Clients.Group(roomNum).RefreshUserList();
}
/// <summary>
/// 同步视图
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
[HttpGet("sync-view")]
public async Task ChangeView([FromQuery] string roomNum, [FromQuery] string type)
{
await _hubContext.Clients.Groups(roomNum).RefreshView(type);
}
#region
/// <summary>

View File

@ -2,6 +2,8 @@
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using WGShare.API.Controllers.Basic;
using WGShare.API.Helpers;
using WGShare.Domain.Constant;
using WGShare.Domain.DTOs.User;
using WGShare.Domain.Entities;
using WGShare.Domain.FriendlyException;
@ -29,14 +31,19 @@ namespace WGShare.API.Controllers.Frontend
/// <param name="pagedBaseDto">翻页信息</param>
/// <returns></returns>
[HttpGet("list")]
public async Task<PagedResult<UserOutputDTO>> GetUserList([FromQuery] string? searchKeywod, [FromQuery] PagedBaseDto pagedBaseDto)
public async Task<PagedResult<UserOutputDTO>> GetUserList([FromQuery] string? searchKeywod, [FromQuery] bool? isOnline, [FromQuery] PagedBaseDto pagedBaseDto)
{
RefAsync<int> total = 0;
// 获取在线用户id
var onlineUid = RedisHelper.Instance.HKeys(RedisKeyConstant.SessionManage.GetOnlineUserKey(TenantId));
var list = await _sqlSugar.Queryable<User>()
.InnerJoin<Role>((u, r) => u.RoleId == r.Id)
.Where((u, r) => u.IsDelete == false && u.TenantId == TenantId)
.WhereIF(!string.IsNullOrWhiteSpace(searchKeywod), (u, r) => u.UserName.Contains(searchKeywod) || u.Account.Contains(searchKeywod))
.WhereIF(isOnline.HasValue && isOnline.Value == true, (u, r) => onlineUid.Contains(u.Id))
.WhereIF(isOnline.HasValue && isOnline.Value == false, (u, r) => !onlineUid.Contains(u.Id))
.Select((u, r) => new UserOutputDTO
{
Id = u.Id,
@ -47,6 +54,9 @@ namespace WGShare.API.Controllers.Frontend
})
.ToPageListAsync(pagedBaseDto.PageIndex, pagedBaseDto.PageSize, total);
list.ForEach(x => x.IsOnline = onlineUid.Contains(x.Id));
return PagedResult<UserOutputDTO>.Create(list, total.Value);
}

View File

@ -50,11 +50,17 @@
/// <returns></returns>
Task RefreshUserList();
///// <summary>
///// 客户端操作
///// </summary>
///// <param name="type"></param>
///// <returns></returns>
//Task Operation(int type);
/// <summary>
/// 客户端操作
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
Task Operation(int type);
/// <summary>
/// 更新视图
/// </summary>
/// <returns></returns>
Task RefreshView(string type);
}
}

View File

@ -131,15 +131,15 @@ namespace WGShare.API.Hubs
await Clients.GroupExcept(rooNum, Context.ConnectionId).ReceiveMessage(uid, uname, msg);
}
///// <summary>
///// 发送客户端指令
///// </summary>
///// <returns></returns>
//[HubMethodName("sendOper")]
//public async Task SendOperation(string roomNum, int type)
//{
// await Clients.Group(roomNum).Operation(type);
//}
/// <summary>
/// 发送客户端指令
/// </summary>
/// <returns></returns>
[HubMethodName("sendOper")]
public async Task SendOperation(string roomNum, int type)
{
await Clients.Group(roomNum).Operation(type);
}
}
}

View File

@ -2,11 +2,13 @@ using Hangfire;
using Hangfire.MemoryStorage;
using Masuit.Tools;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.FileSystemGlobbing.Internal;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using SqlSugar;
using System.Linq;
using WGShare.API.BackgroudServices;
using WGShare.API.Helpers;
using WGShare.API.Hubs;
@ -19,7 +21,9 @@ namespace WGShare.API
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var configuration = builder.Configuration;
// Add services to the container.
@ -30,6 +34,8 @@ namespace WGShare.API
Deserialize = (x, t) => JsonConvert.DeserializeObject(x, t),
//DeserializeRaw = (x, t) => JsonConvert.DeserializeObject(x, t),
});
ResetRedisKey();
builder.Services.AddControllers(options =>
{
// 全局异常捕获,无需在代码中 写 try catch
@ -78,6 +84,7 @@ namespace WGShare.API
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
@ -103,5 +110,33 @@ namespace WGShare.API
app.Run();
}
/// <summary>
/// 程序启动前删除redis中得数据
/// </summary>
private static void ResetRedisKey()
{
Console.WriteLine($@"程序开始前执行Redis清除操作开始...");
var keys = new List<string>();
long nextCursor = 0;
do
{
var scanResult = RedisHelper.Instance.Scan(nextCursor, "wgshare:*", 1000, "");
nextCursor = scanResult.cursor;
var items = scanResult.items;
keys.AddRange(items);
}
while (nextCursor != 0);
var keysArr = keys.ConvertAll(x => x.Replace("wgshare:", "")).Distinct().ToArray();
if (!keysArr.IsNullOrEmpty())
{
Console.WriteLine($@"删除键值:{Environment.NewLine}{string.Join(Environment.NewLine, keysArr)}");
RedisHelper.Instance.Del(keysArr);
}
Console.WriteLine("执行完毕,初始化Redis完成");
}
}
}

View File

@ -43,7 +43,7 @@ namespace WGShare.API.ServiceConfigs
db.Aop.OnLogExecuting = (sql, pars) =>
{
// 打印 Sql 语句
Console.WriteLine($@"{new string('=', 10)}BEGIN{new string('=', 5)} DB-IP{ipMatch.Value} {new string('=', 5)} DB-Name:{dbNamne} {new string('=', 15)}");
Console.WriteLine($@"{DateTime.Now.ToShortTimeString()}{new string('=', 10)}BEGIN{new string('=', 5)} DB-IP{ipMatch.Value} {new string('=', 5)} DB-Name:{dbNamne} {new string('=', 15)}");
Console.WriteLine($"执行Sql:{Environment.NewLine}{sql}");
Console.WriteLine($"参数:{db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))}");
};
@ -53,7 +53,7 @@ namespace WGShare.API.ServiceConfigs
{
//执行完了可以输出SQL执行时间
Console.WriteLine("Sql用时:" + db.Ado.SqlExecutionTime.ToString());
Console.WriteLine($@"{new string('=', 10)}END{new string('=', 7)} DB-IP{ipMatch.Value} {new string('=', 5)} DB-Name:{dbNamne} {new string('=', 15)}");
Console.WriteLine($@"{DateTime.Now.ToShortTimeString()}{new string('=', 10)}END{new string('=', 7)} DB-IP{ipMatch.Value} {new string('=', 5)} DB-Name:{dbNamne} {new string('=', 15)}");
};
}
});

View File

@ -143,6 +143,13 @@
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.ChangeView(System.String,System.String)">
<summary>
同步视图
</summary>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.RoomController.AddFile(WGShare.Domain.DTOs.File.ShareFileInputDTO)">
<summary>
分享上传文件
@ -178,7 +185,7 @@
<param name="fileId">文件Id</param>
<returns></returns>
</member>
<member name="M:WGShare.API.Controllers.Frontend.UserController.GetUserList(System.String,WGShare.Domain.GeneralModel.PagedBaseDto)">
<member name="M:WGShare.API.Controllers.Frontend.UserController.GetUserList(System.String,System.Nullable{System.Boolean},WGShare.Domain.GeneralModel.PagedBaseDto)">
<summary>
获取用户列表
</summary>
@ -332,6 +339,19 @@
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Hubs.IMessageClient.Operation(System.Int32)">
<summary>
客户端操作
</summary>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:WGShare.API.Hubs.IMessageClient.RefreshView(System.String)">
<summary>
更新视图
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Hubs.SessionManageHub.JoinChannel(System.String,System.Boolean,System.Boolean)">
<summary>
加入频道
@ -353,6 +373,17 @@
<param name="rooNum"></param>
<param name="msg"></param>
</member>
<member name="M:WGShare.API.Hubs.SessionManageHub.SendOperation(System.String,System.Int32)">
<summary>
发送客户端指令
</summary>
<returns></returns>
</member>
<member name="M:WGShare.API.Program.ResetRedisKey">
<summary>
程序启动前删除redis中得数据
</summary>
</member>
<member name="M:WGShare.API.ServiceConfigs.AuthenticationServiceExtensions.AddAuth(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.String,System.String,System.String)">
<summary>
添加认证和授权

View File

@ -35,5 +35,10 @@ namespace WGShare.Domain.DTOs.User
/// 是否关闭摄像头
/// </summary>
public bool EnableCamera { get; set; }
/// <summary>
/// 是否在线
/// </summary>
public bool IsOnline { get; set; }
}
}