fix: 通知公告和字典重构问题修复
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>com.youlai</groupId>
|
<groupId>com.youlai</groupId>
|
||||||
<artifactId>youlai-boot</artifactId>
|
<artifactId>youlai-boot</artifactId>
|
||||||
<version>2.12.1</version>
|
<version>2.12.2</version>
|
||||||
<description>基于 Java 17 + SpringBoot 3 + Spring Security 构建的权限管理系统。</description>
|
<description>基于 Java 17 + SpringBoot 3 + Spring Security 构建的权限管理系统。</description>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
|
|||||||
@@ -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 (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 (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 (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 (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_type:edit', NULL, NULL, 1, 2, '', 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_type:delete', NULL, NULL, 1, 3, '', 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 (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 (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);
|
INSERT INTO `sys_menu` VALUES (90, 89, '0,89', 'Websocket', 1, NULL, '/function/websocket', 'demo/websocket', NULL, NULL, 1, 1, 3, '', '', now(), now(), NULL);
|
||||||
|
|||||||
@@ -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 (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 (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 (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 (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_type:edit', NULL, NULL, 1, 2, '', 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_type:delete', NULL, NULL, 1, 3, '', 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 (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 (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);
|
INSERT INTO `sys_menu` VALUES (90, 89, '0,89', 'Websocket', 1, NULL, '/function/websocket', 'demo/websocket', NULL, NULL, 1, 1, 3, '', '', now(), now(), NULL);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.youlai.boot.core.filter;
|
package com.youlai.boot.core.filter;
|
||||||
|
|
||||||
|
import com.youlai.boot.common.util.IPUtils;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
@@ -24,7 +25,8 @@ public class RequestLogFilter extends CommonsRequestLoggingFilter {
|
|||||||
@Override
|
@Override
|
||||||
protected void beforeRequest(HttpServletRequest request, String message) {
|
protected void beforeRequest(HttpServletRequest request, String message) {
|
||||||
String requestURI = request.getRequestURI();
|
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);
|
super.beforeRequest(request, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -120,7 +120,7 @@ public class NoticeController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "获取我的通知公告分页列表")
|
@Operation(summary = "获取我的通知公告分页列表")
|
||||||
@GetMapping("/my/page")
|
@GetMapping("/my-page")
|
||||||
public PageResult<UserNoticePageVO> getMyNoticePage(
|
public PageResult<UserNoticePageVO> getMyNoticePage(
|
||||||
NoticePageQuery queryParams
|
NoticePageQuery queryParams
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -48,11 +48,6 @@ public class NoticeBO {
|
|||||||
*/
|
*/
|
||||||
private String level;
|
private String level;
|
||||||
|
|
||||||
/**
|
|
||||||
* 通知等级标签
|
|
||||||
*/
|
|
||||||
private String levelLabel;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 目标类型(1: 全体 2: 指定)
|
* 目标类型(1: 全体 2: 指定)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.youlai.boot.system.model.dto;
|
|||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -23,5 +24,8 @@ public class NoticeDTO {
|
|||||||
@Schema(description = "通知标题")
|
@Schema(description = "通知标题")
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
|
@Schema(description = "通知时间")
|
||||||
|
private LocalDateTime publishTime;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ public class DictDataForm {
|
|||||||
@Schema(description = "字典ID")
|
@Schema(description = "字典ID")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "字典编码")
|
||||||
|
private String dictCode;
|
||||||
|
|
||||||
@Schema(description = "字典值")
|
@Schema(description = "字典值")
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,6 @@ public class NoticePageVO implements Serializable {
|
|||||||
@Schema(description = "通知等级")
|
@Schema(description = "通知等级")
|
||||||
private String level;
|
private String level;
|
||||||
|
|
||||||
@Schema(description = "通知等级")
|
|
||||||
private String levelLabel;
|
|
||||||
|
|
||||||
@Schema(description = "发布时间")
|
@Schema(description = "发布时间")
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
|
||||||
private LocalDateTime publishTime;
|
private LocalDateTime publishTime;
|
||||||
|
|||||||
@@ -22,18 +22,15 @@ public class UserNoticePageVO {
|
|||||||
@Schema(description = "通知标题")
|
@Schema(description = "通知标题")
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
|
@Schema(description = "通知类型")
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "通知等级")
|
@Schema(description = "通知等级")
|
||||||
private String level;
|
private String level;
|
||||||
|
|
||||||
@Schema(description = "通知类型")
|
|
||||||
private String typeLabel;
|
|
||||||
|
|
||||||
@Schema(description = "发布人姓名")
|
@Schema(description = "发布人姓名")
|
||||||
private String publisherName;
|
private String publisherName;
|
||||||
|
|
||||||
@Schema(description = "通知级别")
|
|
||||||
private String levelLabel;
|
|
||||||
|
|
||||||
@Schema(description = "发布时间")
|
@Schema(description = "发布时间")
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
|
||||||
private LocalDateTime publishTime;
|
private LocalDateTime publishTime;
|
||||||
|
|||||||
@@ -222,11 +222,11 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
|
|||||||
// 找出在线用户的通知接收者
|
// 找出在线用户的通知接收者
|
||||||
Set<String> onlineReceivers = new HashSet<>(CollectionUtil.intersection(receivers, allOnlineUsers));
|
Set<String> onlineReceivers = new HashSet<>(CollectionUtil.intersection(receivers, allOnlineUsers));
|
||||||
|
|
||||||
|
|
||||||
NoticeDTO noticeDTO = new NoticeDTO();
|
NoticeDTO noticeDTO = new NoticeDTO();
|
||||||
noticeDTO.setId(id);
|
noticeDTO.setId(id);
|
||||||
noticeDTO.setTitle(notice.getTitle());
|
noticeDTO.setTitle(notice.getTitle());
|
||||||
noticeDTO.setType(notice.getType());
|
noticeDTO.setType(notice.getType());
|
||||||
|
noticeDTO.setPublishTime(notice.getPublishTime());
|
||||||
|
|
||||||
onlineReceivers.forEach(receiver -> messagingTemplate.convertAndSendToUser(receiver, "/queue/message", noticeDTO));
|
onlineReceivers.forEach(receiver -> messagingTemplate.convertAndSendToUser(receiver, "/queue/message", noticeDTO));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
SELECT
|
SELECT
|
||||||
t2.id,
|
t2.id,
|
||||||
t2.title,
|
t2.title,
|
||||||
|
t2.type,
|
||||||
t3.nickname publisherName,
|
t3.nickname publisherName,
|
||||||
t2.publish_time,
|
t2.publish_time,
|
||||||
t1.is_read,
|
t1.is_read,
|
||||||
@@ -21,6 +22,7 @@
|
|||||||
AND t2.title LIKE CONCAT('%',#{queryParams.title},'%')
|
AND t2.title LIKE CONCAT('%',#{queryParams.title},'%')
|
||||||
</if>
|
</if>
|
||||||
ORDER BY
|
ORDER BY
|
||||||
t2.publish_time DESC
|
t2.publish_time DESC,
|
||||||
|
t2.create_time DESC
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user