From 267469dc55fc0732d37b02045999c070735bd75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Tue, 1 Mar 2022 14:04:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=B3=BB=E7=BB=9F=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=AE=9E=E6=97=B6=E9=80=9A=E7=9F=A5=E7=BB=99=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E7=9A=84=E5=AE=A2=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/SysNoticeController.cs | 42 +++++++++++++++---- ZR.Admin.WebApi/Hubs/MessageHub.cs | 29 +++++++++---- .../System/IService/ISysNoticeService.cs | 2 + ZR.Service/System/SysNoticeService.cs | 16 +++++++ ZR.Vue/src/api/system/notice.js | 8 ++++ ZR.Vue/src/components/Notice/Index.vue | 18 ++++---- ZR.Vue/src/main.js | 6 +-- ZR.Vue/src/store/getters.js | 3 +- ZR.Vue/src/store/modules/socket.js | 10 ++++- ZR.Vue/src/utils/signalR.js | 35 +++++++++++++--- ZR.Vue/src/views/system/notice/index.vue | 17 ++++++-- 11 files changed, 148 insertions(+), 38 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs b/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs index 65e5462..2d6d2af 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysNoticeController.cs @@ -1,8 +1,5 @@ using Microsoft.AspNetCore.Mvc; using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Infrastructure; using Infrastructure.Attribute; using Infrastructure.Enums; @@ -15,6 +12,9 @@ using ZR.Common; using ZR.Model.Dto; using ZR.Model.Models; using ZR.Service.System.IService; +using ZR.Admin.WebApi.Hubs; +using Microsoft.AspNetCore.SignalR; +using Infrastructure.Constant; namespace ZR.Admin.WebApi.Controllers.System { @@ -26,10 +26,12 @@ namespace ZR.Admin.WebApi.Controllers.System /// 通知公告表接口 /// private readonly ISysNoticeService _SysNoticeService; + private readonly IHubContext _hubContext; - public SysNoticeController(ISysNoticeService SysNoticeService) + public SysNoticeController(ISysNoticeService SysNoticeService, IHubContext hubContext) { _SysNoticeService = SysNoticeService; + _hubContext = hubContext; } /// @@ -96,11 +98,11 @@ namespace ZR.Admin.WebApi.Controllers.System throw new CustomException("请求参数错误"); } //从 Dto 映射到 实体 - var model = parm.Adapt().ToCreate(HttpContext); - model.Create_by = User.Identity.Name; - model.Create_time = DateTime.Now; + var modal = parm.Adapt().ToCreate(HttpContext); + modal.Create_by = User.Identity.Name; + modal.Create_time = DateTime.Now; - return SUCCESS(_SysNoticeService.Insert(model, it => new + int result = _SysNoticeService.Insert(modal, it => new { it.NoticeTitle, it.NoticeType, @@ -109,7 +111,9 @@ namespace ZR.Admin.WebApi.Controllers.System it.Remark, it.Create_by, it.Create_time - })); + }); + + return SUCCESS(result); } /// @@ -142,6 +146,26 @@ namespace ZR.Admin.WebApi.Controllers.System return SUCCESS(response); } + /// + /// 发送通知公告表 + /// + /// + [HttpPut("send/{NoticeId}")] + [ActionPermissionFilter(Permission = "system:notice:update")] + [Log(Title = "通知公告表", BusinessType = BusinessType.OTHER)] + public IActionResult SendNotice(int NoticeId = 0) + { + if (NoticeId <= 0) + { + throw new CustomException("请求实体不能为空"); + } + var response = _SysNoticeService.GetFirst(x => x.NoticeId == NoticeId); + if (response != null && response.Status == "0") + { + _hubContext.Clients.All.SendAsync(HubsConstant.ReceiveNotice, response.NoticeTitle, response.NoticeContent); + } + return SUCCESS(response); + } /// /// 删除通知公告表 diff --git a/ZR.Admin.WebApi/Hubs/MessageHub.cs b/ZR.Admin.WebApi/Hubs/MessageHub.cs index 9976156..5b680ec 100644 --- a/ZR.Admin.WebApi/Hubs/MessageHub.cs +++ b/ZR.Admin.WebApi/Hubs/MessageHub.cs @@ -1,13 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading.Tasks; +using Infrastructure.Constant; using Infrastructure.Model; -using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; -using ZR.Admin.WebApi.Filters; using ZR.Model; +using ZR.Service.System.IService; namespace ZR.Admin.WebApi.Hubs { @@ -15,6 +14,20 @@ namespace ZR.Admin.WebApi.Hubs { //创建用户集合,用于存储所有链接的用户数据 private static readonly List clientUsers = new(); + private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); + private ISysNoticeService SysNoticeService; + + public MessageHub(ISysNoticeService noticeService) + { + SysNoticeService = noticeService; + } + + private ApiResult SendNotice() + { + var result = SysNoticeService.GetSysNotices(); + + return new ApiResult(200, "success", result); + } #region 客户端连接 @@ -25,16 +38,18 @@ namespace ZR.Admin.WebApi.Hubs public override Task OnConnectedAsync() { var name = Context.User.Identity.Name; - + var user = clientUsers.Any(u => u.ConnnectionId == Context.ConnectionId); //判断用户是否存在,否则添加集合 if (!user && Context.User.Identity.IsAuthenticated) { clientUsers.Add(new OnlineUsers(Context.ConnectionId, name)); Console.WriteLine($"{DateTime.Now}:{name},{Context.ConnectionId}连接服务端success,当前已连接{clientUsers.Count}个"); + Clients.All.SendAsync("welcome", $"欢迎您:{name},当前时间:{DateTime.Now}"); + Clients.All.SendAsync(HubsConstant.MoreNotice, SendNotice()); } - - Clients.All.SendAsync("onlineNum", clientUsers.Count); + + Clients.All.SendAsync(HubsConstant.OnlineNum, clientUsers.Count); return base.OnConnectedAsync(); } @@ -50,7 +65,7 @@ namespace ZR.Admin.WebApi.Hubs { Console.WriteLine($"用户{user?.Name}离开了,当前已连接{clientUsers.Count}个"); clientUsers.Remove(user); - Clients.All.SendAsync("onlineNum", clientUsers.Count); + Clients.All.SendAsync(HubsConstant.OnlineNum, clientUsers.Count); } return base.OnDisconnectedAsync(exception); } diff --git a/ZR.Service/System/IService/ISysNoticeService.cs b/ZR.Service/System/IService/ISysNoticeService.cs index 9bdc748..fbeb568 100644 --- a/ZR.Service/System/IService/ISysNoticeService.cs +++ b/ZR.Service/System/IService/ISysNoticeService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using ZR.Model.Models; namespace ZR.Service.System.IService @@ -11,5 +12,6 @@ namespace ZR.Service.System.IService /// public interface ISysNoticeService: IBaseService { + List GetSysNotices(); } } diff --git a/ZR.Service/System/SysNoticeService.cs b/ZR.Service/System/SysNoticeService.cs index bbe5d28..2b7d094 100644 --- a/ZR.Service/System/SysNoticeService.cs +++ b/ZR.Service/System/SysNoticeService.cs @@ -1,5 +1,7 @@ using Infrastructure; using Infrastructure.Attribute; +using SqlSugar; +using System.Collections.Generic; using ZR.Model.Models; using ZR.Repository; using ZR.Repository.System; @@ -24,6 +26,20 @@ namespace ZR.Service.System #region 业务逻辑代码 + /// + /// 查询系统通知 + /// + /// + public List GetSysNotices() + { + //开始拼装查询条件 + var predicate = Expressionable.Create(); + + //搜索条件查询语法参考Sqlsugar + predicate = predicate.And(m => m.Status == "0"); + return _SysNoticerepository.GetList(predicate.ToExpression()); + } + #endregion } } \ No newline at end of file diff --git a/ZR.Vue/src/api/system/notice.js b/ZR.Vue/src/api/system/notice.js index cc6f68c..fc80afb 100644 --- a/ZR.Vue/src/api/system/notice.js +++ b/ZR.Vue/src/api/system/notice.js @@ -50,4 +50,12 @@ export function delNotice(noticeId) { url: '/system/notice/' + noticeId, method: 'delete' }) +} + +// 发送通知公告 +export function sendNotice(noticeId) { + return request({ + url: '/system/notice/send/' + noticeId, + method: 'PUT' + }) } \ No newline at end of file diff --git a/ZR.Vue/src/components/Notice/Index.vue b/ZR.Vue/src/components/Notice/Index.vue index ab5e6fe..491c826 100644 --- a/ZR.Vue/src/components/Notice/Index.vue +++ b/ZR.Vue/src/components/Notice/Index.vue @@ -2,11 +2,11 @@
通知
-
全部已读
+
-