// Admin.NET 项目的版æƒã€å•†æ ‡ã€ä¸“利和其他相关æƒåˆ©å‡å—ç›¸åº”æ³•å¾‹æ³•è§„çš„ä¿æŠ¤ã€‚ä½¿ç”¨æœ¬é¡¹ç›®åº”éµå®ˆç›¸å…³æ³•律法规和许å¯è¯çš„è¦æ±‚。 // // 本项目主è¦éµå¾ª MIT 许å¯è¯å’Œ Apache 许å¯è¯ï¼ˆç‰ˆæœ¬ 2.0)进行分å‘和使用。许å¯è¯ä½äºŽæºä»£ç æ ‘æ ¹ç›®å½•ä¸çš„ LICENSE-MIT å’Œ LICENSE-APACHE 文件。 // // ä¸å¾—利用本项目从事å±å®³å›½å®¶å®‰å…¨ã€æ‰°ä¹±ç¤¾ä¼šç§©åºã€ä¾µçŠ¯ä»–äººåˆæ³•æƒç›Šç‰æ³•å¾‹æ³•è§„ç¦æ¢çš„æ´»åЍï¼ä»»ä½•基于本项目二次开å‘è€Œäº§ç”Ÿçš„ä¸€åˆ‡æ³•å¾‹çº çº·å’Œè´£ä»»ï¼Œæˆ‘ä»¬ä¸æ‰¿æ‹…ä»»ä½•è´£ä»»ï¼ namespace Admin.NET.Core.Service; /// <summary> /// 系统通知公告æœåŠ¡ 🧩 /// </summary> [ApiDescriptionSettings(Order = 380)] public class SysNoticeService : IDynamicApiController, ITransient { private readonly UserManager _userManager; private readonly SqlSugarRepository<SysUser> _sysUserRep; private readonly SqlSugarRepository<SysNotice> _sysNoticeRep; private readonly SqlSugarRepository<SysNoticeUser> _sysNoticeUserRep; private readonly SysOnlineUserService _sysOnlineUserService; public SysNoticeService( UserManager userManager, SqlSugarRepository<SysUser> sysUserRep, SqlSugarRepository<SysNotice> sysNoticeRep, SqlSugarRepository<SysNoticeUser> sysNoticeUserRep, SysOnlineUserService sysOnlineUserService) { _userManager = userManager; _sysUserRep = sysUserRep; _sysNoticeRep = sysNoticeRep; _sysNoticeUserRep = sysNoticeUserRep; _sysOnlineUserService = sysOnlineUserService; } /// <summary> /// 获å–通知公告分页列表 📢 /// </summary> /// <param name="input"></param> /// <returns></returns> [DisplayName("获å–通知公告分页列表")] public async Task<SqlSugarPagedList<SysNotice>> Page(PageNoticeInput input) { return await _sysNoticeRep.AsQueryable() .WhereIF(!string.IsNullOrWhiteSpace(input.Title), u => u.Title.Contains(input.Title.Trim())) .WhereIF(input.Type > 0, u => u.Type == input.Type) .WhereIF(!_userManager.SuperAdmin, u => u.CreateUserId == _userManager.UserId) .OrderBy(u => u.CreateTime, OrderByType.Desc) .ToPagedListAsync(input.Page, input.PageSize); } /// <summary> /// å¢žåŠ é€šçŸ¥å…¬å‘Š 📢 /// </summary> /// <param name="input"></param> /// <returns></returns> [ApiDescriptionSettings(Name = "Add"), HttpPost] [DisplayName("å¢žåŠ é€šçŸ¥å…¬å‘Š")] public async Task AddNotice(AddNoticeInput input) { var notice = input.Adapt<SysNotice>(); InitNoticeInfo(notice); await _sysNoticeRep.InsertAsync(notice); } /// <summary> /// 更新通知公告 📢 /// </summary> /// <param name="input"></param> /// <returns></returns> [UnitOfWork] [ApiDescriptionSettings(Name = "Update"), HttpPost] [DisplayName("更新通知公告")] public async Task UpdateNotice(UpdateNoticeInput input) { var notice = input.Adapt<SysNotice>(); InitNoticeInfo(notice); await _sysNoticeRep.UpdateAsync(notice); } /// <summary> /// åˆ é™¤é€šçŸ¥å…¬å‘Š 📢 /// </summary> /// <param name="input"></param> /// <returns></returns> [UnitOfWork] [ApiDescriptionSettings(Name = "Delete"), HttpPost] [DisplayName("åˆ é™¤é€šçŸ¥å…¬å‘Š")] public async Task DeleteNotice(DeleteNoticeInput input) { await _sysNoticeRep.DeleteAsync(u => u.Id == input.Id); await _sysNoticeUserRep.DeleteAsync(u => u.NoticeId == input.Id); } /// <summary> /// å‘布通知公告 📢 /// </summary> /// <param name="input"></param> /// <returns></returns> [DisplayName("å‘布通知公告")] public async Task Public(NoticeInput input) { // æ›´æ–°å‘布状æ€å’Œæ—¶é—´ await _sysNoticeRep.UpdateAsync(u => new SysNotice() { Status = NoticeStatusEnum.PUBLIC, PublicTime = DateTime.Now }, u => u.Id == input.Id); var notice = await _sysNoticeRep.GetFirstAsync(u => u.Id == input.Id); // 通知到的人(所有账å·) var userIdList = await _sysUserRep.AsQueryable().Select(u => u.Id).ToListAsync(); await _sysNoticeUserRep.DeleteAsync(u => u.NoticeId == notice.Id); var noticeUserList = userIdList.Select(u => new SysNoticeUser { NoticeId = notice.Id, UserId = u, }).ToList(); await _sysNoticeUserRep.InsertRangeAsync(noticeUserList); // å¹¿æ’æ‰€æœ‰åœ¨çº¿è´¦å· await _sysOnlineUserService.PublicNotice(notice, userIdList); } /// <summary> /// è®¾ç½®é€šçŸ¥å…¬å‘Šå·²è¯»çŠ¶æ€ ðŸ“¢ /// </summary> /// <param name="input"></param> /// <returns></returns> [DisplayName("设置通知公告已读状æ€")] public async Task SetRead(NoticeInput input) { await _sysNoticeUserRep.UpdateAsync(u => new SysNoticeUser { ReadStatus = NoticeUserStatusEnum.READ, ReadTime = DateTime.Now }, u => u.NoticeId == input.Id && u.UserId == _userManager.UserId); } /// <summary> /// èŽ·å–æŽ¥æ”¶çš„é€šçŸ¥å…¬å‘Š /// </summary> /// <param name="input"></param> /// <returns></returns> [DisplayName("èŽ·å–æŽ¥æ”¶çš„é€šçŸ¥å…¬å‘Š")] public async Task<SqlSugarPagedList<SysNoticeUser>> GetPageReceived([FromQuery] PageNoticeInput input) { return await _sysNoticeUserRep.AsQueryable().Includes(u => u.SysNotice) .Where(u => u.UserId == _userManager.UserId) .WhereIF(!string.IsNullOrWhiteSpace(input.Title), u => u.SysNotice.Title.Contains(input.Title.Trim())) .WhereIF(input.Type is > 0, u => u.SysNotice.Type == input.Type) .OrderBy(u => u.SysNotice.CreateTime, OrderByType.Desc) .ToPagedListAsync(input.Page, input.PageSize); } /// <summary> /// èŽ·å–æœªè¯»çš„通知公告 📢 /// </summary> /// <returns></returns> [DisplayName("èŽ·å–æœªè¯»çš„通知公告")] public async Task<List<SysNotice>> GetUnReadList() { var noticeUserList = await _sysNoticeUserRep.AsQueryable().Includes(u => u.SysNotice) .Where(u => u.UserId == _userManager.UserId && u.ReadStatus == NoticeUserStatusEnum.UNREAD) .OrderBy(u => u.SysNotice.CreateTime, OrderByType.Desc).ToListAsync(); return noticeUserList.Select(t => t.SysNotice).ToList(); } /// <summary> /// åˆå§‹åŒ–é€šçŸ¥å…¬å‘Šä¿¡æ¯ /// </summary> /// <param name="notice"></param> [NonAction] private void InitNoticeInfo(SysNotice notice) { notice.PublicUserId = _userManager.UserId; notice.PublicUserName = _userManager.RealName; notice.PublicOrgId = _userManager.OrgId; } }