diff --git a/WGShare.API/Controllers/AuthController.cs b/WGShare.API/Controllers/AuthController.cs index 3f81065..25df117 100644 --- a/WGShare.API/Controllers/AuthController.cs +++ b/WGShare.API/Controllers/AuthController.cs @@ -108,7 +108,7 @@ namespace WGShare.API.Controllers pipe.Del(RedisKeyConstant.Data.GetRefreshTokenKey(tokens.RefreshToken)); } // 设置新的刷新token - pipe.Set(RedisKeyConstant.Data.GetRefreshTokenKey(refreshToken), user, TimeSpan.FromDays(7).TotalSeconds.ToInt32()); + pipe.Set(RedisKeyConstant.Data.GetRefreshTokenKey(refreshToken), user, TimeSpan.FromDays(360).TotalSeconds.ToInt32()); // 记录accessToken pipe.Set(RedisKeyConstant.Data.GetAccessTokenKey(user.Id), new AccessAndRefreshToken { @@ -177,7 +177,7 @@ namespace WGShare.API.Controllers using (var pipe = RedisHelper.Instance.StartPipe()) { pipe.Del(RedisKeyConstant.Data.GetRefreshTokenKey(refreshToken)); - pipe.Set(RedisKeyConstant.Data.GetRefreshTokenKey(refreshTokenNew), user, TimeSpan.FromDays(7).TotalSeconds.ToInt32()); + pipe.Set(RedisKeyConstant.Data.GetRefreshTokenKey(refreshTokenNew), user, TimeSpan.FromDays(360).TotalSeconds.ToInt32()); pipe.Set(RedisKeyConstant.Data.GetAccessTokenKey(user.Id), new AccessAndRefreshToken { AccessToken = accessToken, diff --git a/WGShare.API/Controllers/Frontend/HomeController.cs b/WGShare.API/Controllers/Frontend/HomeController.cs index bcf1736..715355b 100644 --- a/WGShare.API/Controllers/Frontend/HomeController.cs +++ b/WGShare.API/Controllers/Frontend/HomeController.cs @@ -8,12 +8,14 @@ using MiniExcelLibs; using MiniExcelLibs.Attributes; using MiniExcelLibs.OpenXml; using SqlSugar; +using SqlSugar.Extensions; using System.IO; using System.Net.Http.Headers; using System.Text.RegularExpressions; using WGShare.API.Controllers.Basic; using WGShare.API.Helpers; using WGShare.Domain.Constant; +using WGShare.Domain.DTOs.Home; using WGShare.Domain.DTOs.MiniProgram; using WGShare.Domain.DTOs.Room; using WGShare.Domain.Entities; @@ -354,5 +356,20 @@ namespace WGShare.API.Controllers.Frontend _logger.LogError("返回 ContentType 未命中"); throw Oops.Oh("二维码生成失败"); } + + /// + /// 反馈打分 + /// + /// + [HttpPost("feedback")] + public async Task FeedbackScoring([FromBody] FeedBackRequset requset) + { + var entity = requset.Adapt(); + entity.UID = UId.ToInt64(); + entity.Types = string.Join(",", requset.Types); + + await _sqlSugar.Insertable(entity).ExecuteCommandAsync(); + } + } } diff --git a/WGShare.API/Controllers/Frontend/RoomController.cs b/WGShare.API/Controllers/Frontend/RoomController.cs index e604326..ac3b409 100644 --- a/WGShare.API/Controllers/Frontend/RoomController.cs +++ b/WGShare.API/Controllers/Frontend/RoomController.cs @@ -104,17 +104,27 @@ namespace WGShare.API.Controllers.Frontend var showUserId = RedisHelper.Instance.HGet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), inputDTO.RoomNum); if (showUserId == inputDTO.UserId || showUserId == user.ScreenShareId) { - - //var users = RedisHelper.Instance.HVals(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum)); - //var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager || x.RoleId == ((int)RoleEnums.RoomManager).ToString()); - //if (showUser != null) - //{ - - // 取消显示用户,设置显示当前操作的管理员 - RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), inputDTO.RoomNum, UId); - await _hubContext.Clients.Group(inputDTO.RoomNum).ShowUser(UId, UserName, string.Empty, string.Empty); - //} - + if (UId == inputDTO.UserId) + { + // 表示自己取消自己的发言权限 + var users = RedisHelper.Instance.HVals(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum)); + var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager || x.RoleId == ((int)RoleEnums.RoomManager).ToString()); + if (showUser != null) + { + RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), inputDTO.RoomNum, showUser.UID); + await _hubContext.Clients.Group(inputDTO.RoomNum).ShowUser(showUser.UID, showUser.UserName, string.Empty, string.Empty); + } + else + { + RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), inputDTO.RoomNum, 0); + } + } + else + { + // 取消显示用户,设置显示当前操作的管理员 + RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), inputDTO.RoomNum, UId); + await _hubContext.Clients.Group(inputDTO.RoomNum).ShowUser(UId, UserName, string.Empty, string.Empty); + } } await _hubContext.Clients.Group(inputDTO.RoomNum).ManagerRefresh(user, UId); @@ -220,7 +230,7 @@ namespace WGShare.API.Controllers.Frontend } return true; } - + } /// diff --git a/WGShare.API/Hubs/IMessageClient.cs b/WGShare.API/Hubs/IMessageClient.cs index 9dbc21e..506bb40 100644 --- a/WGShare.API/Hubs/IMessageClient.cs +++ b/WGShare.API/Hubs/IMessageClient.cs @@ -1,4 +1,5 @@ -using WGShare.Domain.DTOs.User; +using SignalRSwaggerGen.Attributes; +using WGShare.Domain.DTOs.User; using WGShare.Domain.Entities; namespace WGShare.API.Hubs @@ -6,6 +7,7 @@ namespace WGShare.API.Hubs /// /// 客户端消息 /// + [SignalRHub] public interface IMessageClient { /// diff --git a/WGShare.API/Program.cs b/WGShare.API/Program.cs index 21adf8f..a10a9c0 100644 --- a/WGShare.API/Program.cs +++ b/WGShare.API/Program.cs @@ -59,7 +59,7 @@ namespace WGShare.API }); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); - builder.Services.AddSwagger(); + builder.Services.AddSwagger(); builder.Services.AddSignalR(); builder.Services.AddHttpClient(); builder.Services.ConfigureHangfire(); @@ -99,7 +99,6 @@ namespace WGShare.API options.SwaggerEndpoint($"/swagger/frontend/swagger.json", "ǰ"); options.SwaggerEndpoint($"/swagger/backend/swagger.json", ""); options.SwaggerEndpoint($"/swagger/public/swagger.json", "ӿ"); - }); app.UseCustomCors(); } diff --git a/WGShare.API/ServiceConfigs/SwaggerServiceExtensions.cs b/WGShare.API/ServiceConfigs/SwaggerServiceExtensions.cs index 356c089..7474d11 100644 --- a/WGShare.API/ServiceConfigs/SwaggerServiceExtensions.cs +++ b/WGShare.API/ServiceConfigs/SwaggerServiceExtensions.cs @@ -22,6 +22,7 @@ namespace WGShare.API.ServiceConfigs { services.AddSwaggerGen(w => { + w.AddSignalRSwaggerGen(); w.SwaggerDoc("frontend", new OpenApiInfo { Title = "前端", Version = "frontend" }); w.SwaggerDoc("backend", new OpenApiInfo { Title = "后端", Version = "backend" }); w.SwaggerDoc("public", new OpenApiInfo { Title = "公共接口", Version = "public" }); diff --git a/WGShare.API/WGShare.API.csproj b/WGShare.API/WGShare.API.csproj index e1639d3..872b42a 100644 --- a/WGShare.API/WGShare.API.csproj +++ b/WGShare.API/WGShare.API.csproj @@ -15,6 +15,7 @@ + diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml index e801979..797888f 100644 --- a/WGShare.API/WGShare.API.xml +++ b/WGShare.API/WGShare.API.xml @@ -156,6 +156,12 @@ + + + 反馈打分 + + + 会议室接口 diff --git a/WGShare.API/appsettings.Development.json b/WGShare.API/appsettings.Development.json index 697dbbe..2fed05d 100644 --- a/WGShare.API/appsettings.Development.json +++ b/WGShare.API/appsettings.Development.json @@ -36,12 +36,12 @@ "Issuer": "WGshareApi", "Audience": "WGshareClient", // 过期 秒 - "Expires": 86400 + "Expires": 600000 }, "Agora": { "appId": "4a4f7be64fa1404ebda74784fe9ac381", "appSecret": "255e05d96c794251b282a0de84242355", - "tokenExpireTimeInSecond": 7200, + "tokenExpireTimeInSecond": 300, "apiPrefix": "https://api.sd-rtn.com/", "clientId": "80cdc24f7dfa4497a37d98da95a3c4a4", "clientSecret": "8323581d4d464114b1f324b26cc62e09", diff --git a/WGShare.API/appsettings.json b/WGShare.API/appsettings.json index c3af738..35e6949 100644 --- a/WGShare.API/appsettings.json +++ b/WGShare.API/appsettings.json @@ -13,8 +13,8 @@ "SecretKey": "apDbztyqjSNuvWnezhbdUxduhDidZbF897t2uTJs53RMdY9Cai7eexavBhka3HN6mcTe9oohjFg6bNffRRkcfMqnVKNBnmyPzkRgNopHGJAL7KMwkeZdZ7BaWnT57jCi11", "Issuer": "WGshareApi", "Audience": "WGshareClient", - // 过期 秒 - "Expires": 86400 + // 过期 秒 360 天 + "Expires": 31104000 }, "ConnectionStrings": { "metting": "Database=metting;Server=rm-2vc20nd3d11g0oh6g.rwlb.cn-chengdu.rds.aliyuncs.com;Port=3306;Uid=marking;Pwd=poiuytPOIUYT098765)(*&^%;AllowZeroDateTime=True;ConvertZeroDateTime=True;", @@ -26,7 +26,7 @@ "Agora": { "appId": "dcfc466a6ecb4a1f972630065dfb1e75", "appSecret": "fc77000e329b4be7a0e26fa789e20d00", - "tokenExpireTimeInSecond": 7200, + "tokenExpireTimeInSecond": 72000, "apiPrefix": "https://api.sd-rtn.com/", "clientId": "80cdc24f7dfa4497a37d98da95a3c4a4", "clientSecret": "8323581d4d464114b1f324b26cc62e09", diff --git a/WGShare.Domain/DTOs/Home/FeedBackRequset.cs b/WGShare.Domain/DTOs/Home/FeedBackRequset.cs new file mode 100644 index 0000000..a97ea82 --- /dev/null +++ b/WGShare.Domain/DTOs/Home/FeedBackRequset.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WGShare.Domain.Enums; + +namespace WGShare.Domain.DTOs.Home +{ + public class FeedBackRequset + { + /// + /// 分值 + /// + public double Score { get; set; } + + /// + /// 反馈内容 + /// + public string OtherContent { get; set; } + + /// + /// 反馈类型 + /// + public List Types { get; set; } + } +} diff --git a/WGShare.Domain/Entities/FeedbackIssue.cs b/WGShare.Domain/Entities/FeedbackIssue.cs new file mode 100644 index 0000000..c429f7b --- /dev/null +++ b/WGShare.Domain/Entities/FeedbackIssue.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using SqlSugar; +using WGShare.Domain.Enums; +using Yitter.IdGenerator; +namespace WGShare.Domain.Entities +{ + /// + /// 反馈问题表 + /// + [SugarTable("feedback_issue")] + public class FeedbackIssue + { + /// + /// + /// + [SugarColumn(ColumnName = "id", IsPrimaryKey = true)] + public string Id { get; set; } = YitIdHelper.NextId().ToString(); + + /// + /// 创建时间 + /// 默认值: CURRENT_TIMESTAMP + /// + [SugarColumn(ColumnName = "create_time", IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)] + public DateTime CreateTime { get; set; } + + /// + /// 用户id + /// + [SugarColumn(ColumnName = "uid")] + public long UID { get; set; } + + /// + /// 分值 + /// + [SugarColumn(ColumnName = "score")] + public double Score { get; set; } + + /// + /// 反馈其他 + /// + [SugarColumn(ColumnName = "other_content")] + public string OtherContent { get; set; } + + /// + /// 反馈其他 + /// + [SugarColumn(ColumnName = "types")] + public string Types { get; set; } + } +} diff --git a/WGShare.Domain/Enums/FeedbackIssueEnums.cs b/WGShare.Domain/Enums/FeedbackIssueEnums.cs new file mode 100644 index 0000000..da261f3 --- /dev/null +++ b/WGShare.Domain/Enums/FeedbackIssueEnums.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WGShare.Domain.Enums +{ + /// + /// 反馈问题枚举 + /// + public enum FeedbackIssueEnums + { + /// + /// 其他 + /// + Other = 1, + /// + /// 软件卡顿 + /// + SoftwareLag = 2, + + /// + /// 设计不合理 + /// + UnreasonableDesign = 3, + + /// + /// 功能太少 + /// + TooLittleFeatures = 4, + + /// + /// 通话不流畅 + /// + CallIsNotSmooth = 5, + + /// + /// 视频卡顿 + /// + VideoLag = 6, + + /// + /// 操作麻烦 + /// + OperationTrouble + } +}