feat: 完善系统配置审计通知功能并优化异常处理

- 新增异常处理体系(BaseException及其子类)
- 优化密码、邮箱、用户名等基础类型
- 添加字典管理、登录日志、操作日志的E2E测试
- 完善API集成测试和安全测试
- 添加性能测试配置和脚本
- 优化OpenAPI配置和全局异常处理器
This commit is contained in:
张翔
2026-03-24 14:05:35 +08:00
parent be5d5ede90
commit e4721053bd
47 changed files with 3006 additions and 816 deletions
@@ -2,6 +2,8 @@ package cn.novalon.manage.notify.handler;
import cn.novalon.manage.notify.core.domain.SysNotice;
import cn.novalon.manage.notify.core.service.ISysNoticeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
@@ -15,6 +17,7 @@ import java.util.List;
import java.util.Map;
@Component
@Tag(name = "通知管理", description = "系统通知相关操作")
public class SysNoticeHandler {
private final ISysNoticeService noticeService;
@@ -25,11 +28,13 @@ public class SysNoticeHandler {
this.noticeService = noticeService;
}
@Operation(summary = "获取所有通知", description = "获取系统中所有通知列表")
public Mono<ServerResponse> getAllNotices(ServerRequest request) {
Flux<SysNotice> notices = noticeService.getAllNotices();
return ServerResponse.ok().body(notices, SysNotice.class);
}
@Operation(summary = "根据ID获取通知", description = "根据通知ID获取通知详细信息")
public Mono<ServerResponse> getNoticeById(ServerRequest request) {
Long id = Long.parseLong(request.pathVariable("id"));
return noticeService.getNoticeById(id)
@@ -37,12 +42,14 @@ public class SysNoticeHandler {
.switchIfEmpty(ServerResponse.notFound().build());
}
@Operation(summary = "根据状态获取通知", description = "根据状态获取通知列表")
public Mono<ServerResponse> getNoticesByStatus(ServerRequest request) {
String status = request.pathVariable("status");
Flux<SysNotice> notices = noticeService.getNoticesByStatus(status);
return ServerResponse.ok().body(notices, SysNotice.class);
}
@Operation(summary = "创建通知", description = "创建新通知")
public Mono<ServerResponse> createNotice(ServerRequest request) {
return request.bodyToMono(SysNotice.class)
.filter(notice -> notice.getNoticeTitle() != null && !notice.getNoticeTitle().trim().isEmpty())
@@ -64,6 +71,7 @@ public class SysNoticeHandler {
});
}
@Operation(summary = "更新通知", description = "更新通知信息")
public Mono<ServerResponse> updateNotice(ServerRequest request) {
Long id = Long.parseLong(request.pathVariable("id"));
return request.bodyToMono(SysNotice.class)
@@ -72,6 +80,7 @@ public class SysNoticeHandler {
.switchIfEmpty(ServerResponse.notFound().build());
}
@Operation(summary = "删除通知", description = "删除指定通知")
public Mono<ServerResponse> deleteNotice(ServerRequest request) {
Long id = Long.parseLong(request.pathVariable("id"));
return noticeService.getNoticeById(id)