diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java index 7bb2266..185d42e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java @@ -9,6 +9,7 @@ import com.ruoyi.framework.websocket.OneToManyWebSocket; import com.ruoyi.framework.websocket.WebSocketServer; import com.ruoyi.framework.websocket.WebSocketUsers; import com.ruoyi.system.domain.SysNoticeUser; +import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -77,26 +78,9 @@ public class SysNoticeController extends BaseController { notice.setCreateBy(getUsername()); noticeService.insertNotice(notice); - - List sysNoticeUsers = new ArrayList(); - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_ID, notice.getNoticeId()); - obj.put(WebsocketConst.MSG_TITLE, notice.getNoticeTitle()); - obj.put(WebsocketConst.MSG_CONTENT, notice.getNoticeContent()); - if(!"3".equals(notice.getNoticeType())){//系统通知 或 通知公告 - oneToManyWebSocket.sendMessage(obj.toString()); - - SysNoticeUser sysNoticeUser = null; - Map users = oneToManyWebSocket.getUsers(); - for(String userId:users.keySet()){ - sysNoticeUser = new SysNoticeUser(); - sysNoticeUser.setNoticeId(notice.getNoticeId()); - sysNoticeUser.setUserId(Long.valueOf(userId)); - sysNoticeUsers.add(sysNoticeUser); - } - noticeService.insertNoticeUserBatch(sysNoticeUsers); - } - + //推送消息插入中间表 + Long userId = getLoginUser().getUserId();//当前登陆者 + insertNoticeUser(userId,notice,noticeService,oneToManyWebSocket,null); return success(); } @@ -140,4 +124,65 @@ public class SysNoticeController extends BaseController } return groupedByNoticeType; } + + /** + * 导航面板 消息通知 获取详细信息 + */ + @GetMapping(value = "navbarNotice/{noticeId}") + public AjaxResult getNavbarNoticeInfo(@PathVariable Long noticeId) + { + return success(noticeService.selectNoticeById(noticeId)); + } + + /** + * 推送消息插入中间表 + * @param userId 发送对象排除自身 + * @param notice 发送信息对象 + * @param noticeService 接口 + * @param oneToManyWebSocket WebSocket服务 + */ + public static void insertNoticeUser(Long userId,SysNotice notice,ISysNoticeService noticeService,OneToManyWebSocket oneToManyWebSocket,List userIds){ + List sysNoticeUsers = new ArrayList(); + + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_ID, notice.getNoticeId()); + obj.put(WebsocketConst.MSG_TITLE, notice.getNoticeTitle()); + obj.put(WebsocketConst.MSG_CONTENT, notice.getNoticeContent()); + + if(!"3".equals(notice.getNoticeType())){//系统通知 或 通知公告 + oneToManyWebSocket.sendMessage(obj.toString(),String.valueOf(userId)); + + SysNoticeUser sysNoticeUser = null; + Map users = oneToManyWebSocket.getUsers();//获取在线用户 + for(String userid:users.keySet()){ + if(!userid.equals(String.valueOf(userId))){ + sysNoticeUser = new SysNoticeUser(); + sysNoticeUser.setNoticeId(notice.getNoticeId()); + sysNoticeUser.setUserId(Long.valueOf(userid)); + sysNoticeUsers.add(sysNoticeUser); + } + } + if(!sysNoticeUsers.isEmpty()){ + noticeService.insertNoticeUserBatch(sysNoticeUsers); + } + }else{ + if(userIds!=null&&userIds.size()>0){ + oneToManyWebSocket.sendMessageByUserIds(obj.toString(),userIds); + + SysNoticeUser sysNoticeUser = null; + Map users = oneToManyWebSocket.getUsers();//获取在线用户 + for(String userid:users.keySet()){ + if(userIds.contains(userid)){ + sysNoticeUser = new SysNoticeUser(); + sysNoticeUser.setNoticeId(notice.getNoticeId()); + sysNoticeUser.setUserId(Long.valueOf(userid)); + sysNoticeUsers.add(sysNoticeUser); + } + } + if(!sysNoticeUsers.isEmpty()){ + noticeService.insertNoticeUserBatch(sysNoticeUsers); + } + } + } + } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/websocket/OneToManyWebSocket.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/websocket/OneToManyWebSocket.java index e297f94..c4fb082 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/websocket/OneToManyWebSocket.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/websocket/OneToManyWebSocket.java @@ -90,29 +90,30 @@ public class OneToManyWebSocket { /** * 群发消息 - * * @param message + * @param userId */ - public static void sendMessage(String message) { + public static void sendMessage(String message,String userId) { for (Map.Entry sessionEntry : clients.entrySet()) { Session toSession = sessionEntry.getValue(); + String suid = sessionEntry.getKey(); // 排除掉自己 - //if (!fromSession.getId().equals(toSession.getId())) { - LOGGER.info("服务端给客户端[{}]发送消息{}", toSession.getId(), message); - toSession.getAsyncRemote().sendText(message); - //} + if (!suid.equals(userId)) { + LOGGER.info("服务端给客户端[{}]发送消息{}", toSession.getId(), message); + toSession.getAsyncRemote().sendText(message); + } } } /** * 群发消息 - * * @param message - * 消息内容 + * @param userIds */ - public static void sendMessage(String message, List ids) { - for (String id : ids) { + public static void sendMessageByUserIds(String message, List userIds) { + + for (String id : userIds) { Session session = clients.get(id); if(session!=null){ LOGGER.info("服务端给客户端[{}]发送消息{}", session.getId(), message); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java index cc963c6..941d405 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets; /** * 通知公告表 sys_notice - * + * * @author ruoyi */ public class SysNotice extends BaseEntity @@ -35,6 +35,9 @@ public class SysNotice extends BaseEntity /** 公告状态(0正常 1关闭) */ private String status; + /** 公告是否已读(0未读 1已读) */ + private String isRead; + public Long getNoticeId() { return noticeId; @@ -94,6 +97,10 @@ public class SysNotice extends BaseEntity return status; } + public String getIsRead() { return isRead; } + + public void setIsRead(String isRead) { this.isRead = isRead; } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml index d450174..b6a5140 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml @@ -92,14 +92,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" inner join sys_user_notice b on a.notice_id = b.noticeId and b.userId = #{userId} - and CONVERT(date, create_time) = CONVERT(date, GETDATE()) + and CONVERT(date, a.create_time) = CONVERT(date, GETDATE()) + and a.status = '0' and a.isRead = '0' order by create_time desc - - insert into sys_user_notice - (noticeId,userId) + + insert into sys_user_notice(noticeId,userId) values ( diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development index ceed7e3..73a1157 100644 --- a/ruoyi-ui/.env.development +++ b/ruoyi-ui/.env.development @@ -7,5 +7,9 @@ ENV = 'development' # 江南业务系统/开发环境 VUE_APP_BASE_API = '/dev-api' +# 江南业务系统-WebSocket/开发环境 +VUE_APP_WEBSOCKET_API = '/websocket-api' +VUE_APP_WSS_WEBSOCKET_API = '/wss-websocket-api' + # 路由懒加载 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production index 41e8cd8..baf0287 100644 --- a/ruoyi-ui/.env.production +++ b/ruoyi-ui/.env.production @@ -6,3 +6,7 @@ ENV = 'production' # 江南业务系统/生产环境 VUE_APP_BASE_API = '/prod-api' + +# 江南业务系统-WebSocket/开发环境 +VUE_APP_WEBSOCKET_API = '/websocket-api' +VUE_APP_WSS_WEBSOCKET_API = '/wss-websocket-api' diff --git a/ruoyi-ui/src/api/system/notice.js b/ruoyi-ui/src/api/system/notice.js index 2600b07..4bea853 100644 --- a/ruoyi-ui/src/api/system/notice.js +++ b/ruoyi-ui/src/api/system/notice.js @@ -51,3 +51,12 @@ export function navbarNoticelist(query) { params: query }) } + +// 导航面板 消息通知 获取详细信息 +export function getNavbarNotice(noticeId) { + return request({ + url: '/system/notice/navbarNotice/' + noticeId, + method: 'get' + }) +} + diff --git a/ruoyi-ui/src/layout/components/NavbarNotice.vue b/ruoyi-ui/src/layout/components/NavbarNotice.vue index 2904826..7eda334 100644 --- a/ruoyi-ui/src/layout/components/NavbarNotice.vue +++ b/ruoyi-ui/src/layout/components/NavbarNotice.vue @@ -3,7 +3,7 @@ - + @@ -12,31 +12,70 @@ {{item.noticeTitle}} + {{item.noticeTitle}} + + + + + {{item.noticeTitle}} + + - + + + + + + + + + + + + + + + + + + + + + + +