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