From 2f01e054a463a344aae75148dd3978055c50b63b Mon Sep 17 00:00:00 2001 From: ray <1490493387@qq.com> Date: Tue, 8 Oct 2024 00:40:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=80=9A=E7=9F=A5=E5=85=AC=E5=91=8A?= =?UTF-8?q?=E5=92=8C=E5=AD=97=E5=85=B8=E9=87=8D=E6=9E=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- sql/mysql5/youlai_boot.sql | 6 ++-- sql/mysql8/youlai_boot.sql | 6 ++-- .../boot/core/filter/RequestLogFilter.java | 4 ++- .../handler/OnlineUserJobHandler.java | 33 +++++++++++++++++++ .../system/controller/NoticeController.java | 2 +- .../youlai/boot/system/model/bo/NoticeBO.java | 5 --- .../boot/system/model/dto/NoticeDTO.java | 4 +++ .../boot/system/model/form/DictDataForm.java | 3 ++ .../boot/system/model/vo/NoticePageVO.java | 3 -- .../system/model/vo/UserNoticePageVO.java | 9 ++--- .../service/impl/NoticeServiceImpl.java | 2 +- .../mapper/system/UserNoticeMapper.xml | 4 ++- 13 files changed, 58 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/youlai/boot/module/websocket/handler/OnlineUserJobHandler.java diff --git a/pom.xml b/pom.xml index d54f8436..10b374d6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.youlai youlai-boot - 2.12.1 + 2.12.2 基于 Java 17 + SpringBoot 3 + Spring Security 构建的权限管理系统。 diff --git a/sql/mysql5/youlai_boot.sql b/sql/mysql5/youlai_boot.sql index 5819a0ed..58c9922f 100644 --- a/sql/mysql5/youlai_boot.sql +++ b/sql/mysql5/youlai_boot.sql @@ -206,9 +206,9 @@ INSERT INTO `sys_menu` VALUES (75, 4, '0,1,4', '菜单删除', 4, NULL, '', NULL INSERT INTO `sys_menu` VALUES (76, 5, '0,1,5', '部门新增', 4, NULL, '', NULL, 'sys:dept:add', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); INSERT INTO `sys_menu` VALUES (77, 5, '0,1,5', '部门编辑', 4, NULL, '', NULL, 'sys:dept:edit', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); INSERT INTO `sys_menu` VALUES (78, 5, '0,1,5', '部门删除', 4, NULL, '', NULL, 'sys:dept:delete', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (79, 6, '0,1,6', '字典新增', 4, NULL, '', NULL, 'sys:dict_type:add', NULL, NULL, 1, 1, '', NULL,now(),now(), NULL); -INSERT INTO `sys_menu` VALUES (81, 6, '0,1,6', '字典编辑', 4, NULL, '', NULL, 'sys:dict_type:edit', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (84, 6, '0,1,6', '字典删除', 4, NULL, '', NULL, 'sys:dict_type:delete', NULL, NULL, 1, 3, '', NULL,now(),now(), NULL); +INSERT INTO `sys_menu` VALUES (79, 6, '0,1,6', '字典新增', 4, NULL, '', NULL, 'sys:dict:add', NULL, NULL, 1, 1, '', NULL,now(),now(), NULL); +INSERT INTO `sys_menu` VALUES (81, 6, '0,1,6', '字典编辑', 4, NULL, '', NULL, 'sys:dict:edit', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); +INSERT INTO `sys_menu` VALUES (84, 6, '0,1,6', '字典删除', 4, NULL, '', NULL, 'sys:dict:delete', NULL, NULL, 1, 3, '', NULL,now(),now(), NULL); INSERT INTO `sys_menu` VALUES (88, 2, '0,1,2', '重置密码', 4, NULL, '', NULL, 'sys:user:password:reset', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL); INSERT INTO `sys_menu` VALUES (89, 0, '0', '功能演示', 2, NULL, '/function', 'Layout', NULL, NULL, NULL, 1, 12, 'menu', '', now(), now(), NULL); INSERT INTO `sys_menu` VALUES (90, 89, '0,89', 'Websocket', 1, NULL, '/function/websocket', 'demo/websocket', NULL, NULL, 1, 1, 3, '', '', now(), now(), NULL); diff --git a/sql/mysql8/youlai_boot.sql b/sql/mysql8/youlai_boot.sql index 50d42cf8..ec6dc052 100644 --- a/sql/mysql8/youlai_boot.sql +++ b/sql/mysql8/youlai_boot.sql @@ -207,9 +207,9 @@ INSERT INTO `sys_menu` VALUES (76, 5, '0,1,5', '部门新增', 4, NULL, '', NULL, 'sys:dept:add', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); INSERT INTO `sys_menu` VALUES (77, 5, '0,1,5', '部门编辑', 4, NULL, '', NULL, 'sys:dept:edit', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); INSERT INTO `sys_menu` VALUES (78, 5, '0,1,5', '部门删除', 4, NULL, '', NULL, 'sys:dept:delete', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); - INSERT INTO `sys_menu` VALUES (79, 6, '0,1,6', '字典新增', 4, NULL, '', NULL, 'sys:dict_type:add', NULL, NULL, 1, 1, '', NULL,now(),now(), NULL); - INSERT INTO `sys_menu` VALUES (81, 6, '0,1,6', '字典编辑', 4, NULL, '', NULL, 'sys:dict_type:edit', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); - INSERT INTO `sys_menu` VALUES (84, 6, '0,1,6', '字典删除', 4, NULL, '', NULL, 'sys:dict_type:delete', NULL, NULL, 1, 3, '', NULL,now(),now(), NULL); + INSERT INTO `sys_menu` VALUES (79, 6, '0,1,6', '字典新增', 4, NULL, '', NULL, 'sys:dict:add', NULL, NULL, 1, 1, '', NULL,now(),now(), NULL); + INSERT INTO `sys_menu` VALUES (81, 6, '0,1,6', '字典编辑', 4, NULL, '', NULL, 'sys:dict:edit', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); + INSERT INTO `sys_menu` VALUES (84, 6, '0,1,6', '字典删除', 4, NULL, '', NULL, 'sys:dict:delete', NULL, NULL, 1, 3, '', NULL,now(),now(), NULL); INSERT INTO `sys_menu` VALUES (88, 2, '0,1,2', '重置密码', 4, NULL, '', NULL, 'sys:user:password:reset', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL); INSERT INTO `sys_menu` VALUES (89, 0, '0', '功能演示', 2, NULL, '/function', 'Layout', NULL, NULL, NULL, 1, 12, 'menu', '', now(), now(), NULL); INSERT INTO `sys_menu` VALUES (90, 89, '0,89', 'Websocket', 1, NULL, '/function/websocket', 'demo/websocket', NULL, NULL, 1, 1, 3, '', '', now(), now(), NULL); diff --git a/src/main/java/com/youlai/boot/core/filter/RequestLogFilter.java b/src/main/java/com/youlai/boot/core/filter/RequestLogFilter.java index d8942efa..200ddd88 100644 --- a/src/main/java/com/youlai/boot/core/filter/RequestLogFilter.java +++ b/src/main/java/com/youlai/boot/core/filter/RequestLogFilter.java @@ -1,5 +1,6 @@ package com.youlai.boot.core.filter; +import com.youlai.boot.common.util.IPUtils; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; @@ -24,7 +25,8 @@ public class RequestLogFilter extends CommonsRequestLoggingFilter { @Override protected void beforeRequest(HttpServletRequest request, String message) { String requestURI = request.getRequestURI(); - log.info("request uri: {}", requestURI); + String ip = IPUtils.getIpAddr(request); + log.info("request,ip:{}, uri: {}", ip, requestURI); super.beforeRequest(request, message); } diff --git a/src/main/java/com/youlai/boot/module/websocket/handler/OnlineUserJobHandler.java b/src/main/java/com/youlai/boot/module/websocket/handler/OnlineUserJobHandler.java new file mode 100644 index 00000000..879c1fdd --- /dev/null +++ b/src/main/java/com/youlai/boot/module/websocket/handler/OnlineUserJobHandler.java @@ -0,0 +1,33 @@ +package com.youlai.boot.module.websocket.handler; + + +import com.youlai.boot.module.websocket.service.OnlineUserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 在线用户定时任务 + * + * @since 2024/10/7 + * + */ +@Component +@Slf4j +@RequiredArgsConstructor +public class OnlineUserJobHandler { + + private final OnlineUserService onlineUserService; + private final SimpMessagingTemplate messagingTemplate; + + // 每分钟统计一次在线用户数 + @Scheduled(cron = "0 * * * * ?") + public void execute() { + log.info("定时任务:统计在线用户数"); + // 推送在线用户人数 + messagingTemplate.convertAndSend("/topic/onlineUserCount", onlineUserService.getOnlineUserCount()); + } + +} diff --git a/src/main/java/com/youlai/boot/system/controller/NoticeController.java b/src/main/java/com/youlai/boot/system/controller/NoticeController.java index 29e74751..c2955ece 100644 --- a/src/main/java/com/youlai/boot/system/controller/NoticeController.java +++ b/src/main/java/com/youlai/boot/system/controller/NoticeController.java @@ -120,7 +120,7 @@ public class NoticeController { } @Operation(summary = "获取我的通知公告分页列表") - @GetMapping("/my/page") + @GetMapping("/my-page") public PageResult getMyNoticePage( NoticePageQuery queryParams ) { diff --git a/src/main/java/com/youlai/boot/system/model/bo/NoticeBO.java b/src/main/java/com/youlai/boot/system/model/bo/NoticeBO.java index 6acc5e29..72175c47 100644 --- a/src/main/java/com/youlai/boot/system/model/bo/NoticeBO.java +++ b/src/main/java/com/youlai/boot/system/model/bo/NoticeBO.java @@ -48,11 +48,6 @@ public class NoticeBO { */ private String level; - /** - * 通知等级标签 - */ - private String levelLabel; - /** * 目标类型(1: 全体 2: 指定) */ diff --git a/src/main/java/com/youlai/boot/system/model/dto/NoticeDTO.java b/src/main/java/com/youlai/boot/system/model/dto/NoticeDTO.java index 044d3a5b..ab94a53e 100644 --- a/src/main/java/com/youlai/boot/system/model/dto/NoticeDTO.java +++ b/src/main/java/com/youlai/boot/system/model/dto/NoticeDTO.java @@ -3,6 +3,7 @@ package com.youlai.boot.system.model.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.time.LocalDateTime; import java.util.Set; /** @@ -23,5 +24,8 @@ public class NoticeDTO { @Schema(description = "通知标题") private String title; + @Schema(description = "通知时间") + private LocalDateTime publishTime; + } diff --git a/src/main/java/com/youlai/boot/system/model/form/DictDataForm.java b/src/main/java/com/youlai/boot/system/model/form/DictDataForm.java index de3f90ee..7b6409ce 100644 --- a/src/main/java/com/youlai/boot/system/model/form/DictDataForm.java +++ b/src/main/java/com/youlai/boot/system/model/form/DictDataForm.java @@ -22,6 +22,9 @@ public class DictDataForm { @Schema(description = "字典ID") private Long id; + @Schema(description = "字典编码") + private String dictCode; + @Schema(description = "字典值") private String value; diff --git a/src/main/java/com/youlai/boot/system/model/vo/NoticePageVO.java b/src/main/java/com/youlai/boot/system/model/vo/NoticePageVO.java index 6f61027d..25de2efe 100644 --- a/src/main/java/com/youlai/boot/system/model/vo/NoticePageVO.java +++ b/src/main/java/com/youlai/boot/system/model/vo/NoticePageVO.java @@ -41,9 +41,6 @@ public class NoticePageVO implements Serializable { @Schema(description = "通知等级") private String level; - @Schema(description = "通知等级") - private String levelLabel; - @Schema(description = "发布时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm") private LocalDateTime publishTime; diff --git a/src/main/java/com/youlai/boot/system/model/vo/UserNoticePageVO.java b/src/main/java/com/youlai/boot/system/model/vo/UserNoticePageVO.java index 8fd5722b..a21643fb 100644 --- a/src/main/java/com/youlai/boot/system/model/vo/UserNoticePageVO.java +++ b/src/main/java/com/youlai/boot/system/model/vo/UserNoticePageVO.java @@ -22,18 +22,15 @@ public class UserNoticePageVO { @Schema(description = "通知标题") private String title; + @Schema(description = "通知类型") + private Integer type; + @Schema(description = "通知等级") private String level; - @Schema(description = "通知类型") - private String typeLabel; - @Schema(description = "发布人姓名") private String publisherName; - @Schema(description = "通知级别") - private String levelLabel; - @Schema(description = "发布时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm") private LocalDateTime publishTime; diff --git a/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java index 190e3209..03853f3a 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java @@ -222,11 +222,11 @@ public class NoticeServiceImpl extends ServiceImpl impleme // 找出在线用户的通知接收者 Set onlineReceivers = new HashSet<>(CollectionUtil.intersection(receivers, allOnlineUsers)); - NoticeDTO noticeDTO = new NoticeDTO(); noticeDTO.setId(id); noticeDTO.setTitle(notice.getTitle()); noticeDTO.setType(notice.getType()); + noticeDTO.setPublishTime(notice.getPublishTime()); onlineReceivers.forEach(receiver -> messagingTemplate.convertAndSendToUser(receiver, "/queue/message", noticeDTO)); } diff --git a/src/main/resources/mapper/system/UserNoticeMapper.xml b/src/main/resources/mapper/system/UserNoticeMapper.xml index 1d97a906..46332903 100644 --- a/src/main/resources/mapper/system/UserNoticeMapper.xml +++ b/src/main/resources/mapper/system/UserNoticeMapper.xml @@ -7,6 +7,7 @@ SELECT t2.id, t2.title, + t2.type, t3.nickname publisherName, t2.publish_time, t1.is_read, @@ -21,6 +22,7 @@ AND t2.title LIKE CONCAT('%',#{queryParams.title},'%') ORDER BY - t2.publish_time DESC + t2.publish_time DESC, + t2.create_time DESC