From 9f8bf041c3d8289cd23a1c773045da1799db9f05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Fri, 13 Mar 2026 08:50:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=B9=B6=E6=B7=BB=E5=8A=A0=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: 修复测试配置和依赖检查 perf: 优化雪花算法性能 refactor: 清理冗余代码和未使用的导入 style: 统一代码格式和注释 test: 添加单元测试和集成测试 ci: 更新CI配置和构建脚本 chore: 更新依赖和配置文件 --- .woodpecker.yml | 11 +- EXECUTION_GUIDE_QUALITY.md | 312 ++++++++ docs/architecture/system-architecture.md | 323 ++++++++ docs/deployment/deployment-guide.md | 703 ++++++++++++++++++ docs/sql/performance-optimization.sql | 104 +++ e2e_reports/TEST_EXECUTION_REPORT.md | 215 ++++++ e2e_tests/test_login_page.py | 22 + e2e_tests/test_login_page2.py | 22 + e2e_tests/test_login_page3.py | 22 + monitoring/prometheus.yml | 24 + .../dependency-check-suppressions.xml | 3 + novalon-manage-api/manage-sys/pom.xml | 90 +++ .../manage-sys/spotbugs-exclude.xml | 18 + .../manage/sys/ManageSysApplication.java | 3 + .../manage/sys/config/CacheConfig.java | 30 + .../manage/sys/config/JwtProperties.java | 30 + .../manage/sys/config/MultipartConfig.java | 2 - .../manage/sys/config/OpenApiConfig.java | 45 ++ .../manage/sys/config/SystemRouter.java | 11 +- .../manage/sys/core/domain/BaseDomain.java | 18 + .../manage/sys/core/domain/Dictionary.java | 18 + .../manage/sys/core/domain/SysConfig.java | 3 + .../manage/sys/core/domain/SysDictData.java | 3 + .../manage/sys/core/domain/SysDictType.java | 3 + .../manage/sys/core/domain/SysFile.java | 6 + .../manage/sys/core/domain/SysMenu.java | 18 + .../manage/sys/core/domain/SysNotice.java | 3 + .../core/service/impl/DictionaryService.java | 1 - .../core/service/impl/SysLoginLogService.java | 12 +- .../sys/core/service/impl/SysRoleService.java | 1 - .../manage/sys/core/utils/SnowflakeId.java | 2 +- .../sys/handler/auth/SysAuthHandler.java | 34 +- .../sys/handler/file/SysFileHandler.java | 10 +- .../manage/sys/handler/log/SysLogHandler.java | 1 - .../sys/handler/role/SysRoleHandler.java | 13 + .../sys/handler/user/SysUserHandler.java | 18 + .../infrastructure/db/entity/BaseEntity.java | 22 + .../db/entity/DictionaryEntity.java | 17 +- .../db/entity/SysConfigEntity.java | 22 + .../db/entity/SysDictDataEntity.java | 22 + .../db/entity/SysDictTypeEntity.java | 22 + .../db/entity/SysFileEntity.java | 11 + .../db/entity/SysNoticeEntity.java | 22 + .../db/mapper/DictionaryMapper.java | 4 - .../db/mapper/OperationLogMapper.java | 3 - .../db/mapper/SysConfigMapper.java | 3 - .../db/mapper/SysDictDataMapper.java | 3 - .../db/mapper/SysDictTypeMapper.java | 3 - .../db/mapper/SysExceptionLogMapper.java | 3 - .../db/mapper/SysFileMapper.java | 3 - .../db/mapper/SysLoginLogMapper.java | 3 - .../db/mapper/SysMenuMapper.java | 63 +- .../db/mapper/SysNoticeMapper.java | 3 - .../db/mapper/SysRoleMapper.java | 3 - .../db/mapper/SysUserMapper.java | 3 - .../db/mapper/SysUserMessageMapper.java | 3 - .../db/repository/SysConfigRepository.java | 1 - .../db/repository/SysDictDataRepository.java | 1 - .../db/repository/SysDictTypeRepository.java | 1 - .../repository/SysExceptionLogRepository.java | 1 - .../db/repository/SysFileRepository.java | 1 - .../db/repository/SysLoginLogRepository.java | 1 - .../db/repository/SysNoticeRepository.java | 1 - .../repository/SysUserMessageRepository.java | 1 - .../sys/security/JwtAuthenticationFilter.java | 1 - .../manage/sys/security/JwtTokenProvider.java | 14 +- .../sys/websocket/SysWebSocketHandler.java | 5 +- .../src/main/resources/application.yml | 25 +- .../db/migration/V1__Create_all_tables.sql | 209 ++++++ .../manage/sys/config/UnitTestConfig.java | 17 + .../service/impl/DictionaryServiceTest.java | 206 ++++- .../service/impl/SysConfigServiceTest.java | 160 ++++ .../core/service/impl/SysRoleServiceTest.java | 206 +++++ .../core/service/impl/SysUserServiceTest.java | 334 +++++++++ .../dictionary/DictionaryHandlerTest.java | 6 +- .../db/mapper/DictionaryMapperTest.java | 3 +- .../repository/DictionaryRepositoryTest.java | 1 - .../src/test/k6/performance-test.js | 75 ++ .../manage-sys/target/classes/application.yml | 25 +- .../manage/sys/ManageSysApplication.class | Bin 758 -> 903 bytes .../manage/sys/config/SecurityConfig.class | Bin 4698 -> 4717 bytes .../manage/sys/config/WebSocketConfig.class | Bin 1669 -> 1669 bytes .../manage/sys/core/domain/BaseDomain.class | Bin 1304 -> 1782 bytes .../manage/sys/core/domain/OperationLog.class | Bin 2312 -> 2312 bytes .../manage/sys/core/domain/SysConfig.class | Bin 2379 -> 2583 bytes .../manage/sys/core/domain/SysDictData.class | Bin 3449 -> 3653 bytes .../manage/sys/core/domain/SysDictType.class | Bin 2349 -> 2553 bytes .../sys/core/domain/SysExceptionLog.class | Bin 2610 -> 2610 bytes .../manage/sys/core/domain/SysFile.class | Bin 2154 -> 2559 bytes .../manage/sys/core/domain/SysLoginLog.class | Bin 2310 -> 2310 bytes .../manage/sys/core/domain/SysMenu.class | Bin 2528 -> 2938 bytes .../manage/sys/core/domain/SysNotice.class | Bin 2379 -> 2583 bytes .../manage/sys/core/domain/SysRole.class | Bin 1869 -> 1869 bytes .../manage/sys/core/domain/SysUser.class | Bin 2008 -> 2008 bytes .../sys/core/domain/SysUserMessage.class | Bin 1953 -> 1953 bytes .../repository/IOperationLogRepository.class | Bin 1421 -> 1421 bytes .../core/repository/ISysMenuRepository.class | Bin 1064 -> 1064 bytes .../core/repository/ISysRoleRepository.class | Bin 2632 -> 2632 bytes .../core/repository/ISysUserRepository.class | Bin 2500 -> 2500 bytes .../core/service/IOperationLogService.class | Bin 933 -> 933 bytes .../sys/core/service/ISysConfigService.class | Bin 1192 -> 1192 bytes .../core/service/ISysDictDataService.class | Bin 1347 -> 1347 bytes .../core/service/ISysDictTypeService.class | Bin 1081 -> 1081 bytes .../service/ISysExceptionLogService.class | Bin 1763 -> 1763 bytes .../sys/core/service/ISysFileService.class | Bin 1624 -> 1624 bytes .../core/service/ISysLoginLogService.class | Bin 1714 -> 1714 bytes .../sys/core/service/ISysMenuService.class | Bin 1365 -> 1365 bytes .../sys/core/service/ISysNoticeService.class | Bin 1070 -> 1070 bytes .../sys/core/service/ISysRoleService.class | Bin 1736 -> 1736 bytes .../core/service/ISysUserMessageService.class | Bin 1222 -> 1222 bytes .../sys/core/service/ISysUserService.class | Bin 2484 -> 2484 bytes .../service/impl/OperationLogService.class | Bin 2461 -> 2461 bytes .../core/service/impl/SysMenuService.class | Bin 6041 -> 6074 bytes .../core/service/impl/SysRoleService.class | Bin 5890 -> 5914 bytes .../core/service/impl/SysUserService.class | Bin 8898 -> 8973 bytes .../manage/sys/dto/request/LoginRequest.class | Bin 1057 -> 1057 bytes .../dto/request/PasswordChangeRequest.class | Bin 1105 -> 1105 bytes .../sys/dto/request/UserRegisterRequest.class | Bin 1599 -> 1599 bytes .../sys/dto/request/UserUpdateRequest.class | Bin 1329 -> 1329 bytes .../sys/dto/response/AuthResponse.class | Bin 1283 -> 1283 bytes .../sys/dto/response/UserResponse.class | Bin 2583 -> 2583 bytes .../sys/handler/GlobalExceptionHandler.class | Bin 12108 -> 12091 bytes .../sys/handler/auth/SysAuthHandler.class | Bin 6557 -> 9242 bytes .../sys/handler/user/SysUserHandler.class | Bin 11243 -> 12498 bytes .../db/converter/OperationLogConverter.class | Bin 4403 -> 4400 bytes .../db/converter/SysConfigConverter.class | Bin 3897 -> 3894 bytes .../db/converter/SysDictDataConverter.class | Bin 4298 -> 4295 bytes .../db/converter/SysDictTypeConverter.class | Bin 3909 -> 3906 bytes .../converter/SysExceptionLogConverter.class | Bin 4259 -> 4256 bytes .../db/converter/SysFileConverter.class | Bin 3931 -> 3928 bytes .../db/converter/SysLoginLogConverter.class | Bin 4047 -> 4044 bytes .../db/converter/SysMenuConverter.class | Bin 4216 -> 4213 bytes .../db/converter/SysNoticeConverter.class | Bin 3897 -> 3894 bytes .../db/converter/SysRoleConverter.class | Bin 3972 -> 3969 bytes .../db/converter/SysUserConverter.class | Bin 4046 -> 4043 bytes .../converter/SysUserMessageConverter.class | Bin 3961 -> 3958 bytes .../db/dao/OperationLogDao.class | Bin 1276 -> 1276 bytes .../infrastructure/db/dao/SysConfigDao.class | Bin 1472 -> 1472 bytes .../db/dao/SysDictDataDao.class | Bin 2053 -> 2053 bytes .../db/dao/SysDictTypeDao.class | Bin 1482 -> 1482 bytes .../db/dao/SysExceptionLogDao.class | Bin 1621 -> 1621 bytes .../infrastructure/db/dao/SysFileDao.class | Bin 1904 -> 1904 bytes .../db/dao/SysLoginLogDao.class | Bin 1593 -> 1593 bytes .../infrastructure/db/dao/SysMenuDao.class | Bin 1129 -> 1129 bytes .../infrastructure/db/dao/SysNoticeDao.class | Bin 1743 -> 1743 bytes .../infrastructure/db/dao/SysRoleDao.class | Bin 2321 -> 2321 bytes .../infrastructure/db/dao/SysUserDao.class | Bin 1397 -> 1397 bytes .../db/dao/SysUserMessageDao.class | Bin 1261 -> 1261 bytes .../infrastructure/db/entity/BaseEntity.class | Bin 1688 -> 2224 bytes .../db/entity/OperationLogEntity.class | Bin 2722 -> 2722 bytes .../db/entity/SysConfigEntity.class | Bin 2711 -> 3179 bytes .../db/entity/SysDictDataEntity.class | Bin 3693 -> 4161 bytes .../db/entity/SysDictTypeEntity.class | Bin 2652 -> 3120 bytes .../db/entity/SysExceptionLogEntity.class | Bin 3189 -> 3189 bytes .../db/entity/SysFileEntity.class | Bin 2913 -> 3147 bytes .../db/entity/SysLoginLogEntity.class | Bin 2782 -> 2782 bytes .../db/entity/SysMenuEntity.class | Bin 2392 -> 2392 bytes .../db/entity/SysNoticeEntity.class | Bin 2701 -> 3169 bytes .../db/entity/SysRoleEntity.class | Bin 1651 -> 1651 bytes .../db/entity/SysUserEntity.class | Bin 1898 -> 1898 bytes .../db/entity/SysUserMessageEntity.class | Bin 2422 -> 2422 bytes .../repository/OperationLogRepository.class | Bin 5103 -> 5118 bytes .../db/repository/SysMenuRepository.class | Bin 4456 -> 4471 bytes .../db/repository/SysRoleRepository.class | Bin 10616 -> 10482 bytes .../db/repository/SysUserRepository.class | Bin 12750 -> 12667 bytes .../sys/security/JwtTokenProvider.class | Bin 3520 -> 3586 bytes .../compile/default-compile/createdFiles.lst | 5 +- .../compile/default-compile/inputFiles.lst | 3 + novalon-manage-web/vite.config.ts | 2 +- 169 files changed, 3565 insertions(+), 132 deletions(-) create mode 100644 EXECUTION_GUIDE_QUALITY.md create mode 100644 docs/architecture/system-architecture.md create mode 100644 docs/deployment/deployment-guide.md create mode 100644 docs/sql/performance-optimization.sql create mode 100644 e2e_reports/TEST_EXECUTION_REPORT.md create mode 100644 e2e_tests/test_login_page.py create mode 100644 e2e_tests/test_login_page2.py create mode 100644 e2e_tests/test_login_page3.py create mode 100644 monitoring/prometheus.yml create mode 100644 novalon-manage-api/manage-sys/dependency-check-suppressions.xml create mode 100644 novalon-manage-api/manage-sys/spotbugs-exclude.xml create mode 100644 novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/config/CacheConfig.java create mode 100644 novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/config/JwtProperties.java create mode 100644 novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/config/OpenApiConfig.java create mode 100644 novalon-manage-api/manage-sys/src/main/resources/db/migration/V1__Create_all_tables.sql create mode 100644 novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/config/UnitTestConfig.java create mode 100644 novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/core/service/impl/SysConfigServiceTest.java create mode 100644 novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/core/service/impl/SysRoleServiceTest.java create mode 100644 novalon-manage-api/manage-sys/src/test/java/cn/novalon/manage/sys/core/service/impl/SysUserServiceTest.java create mode 100644 novalon-manage-api/manage-sys/src/test/k6/performance-test.js diff --git a/.woodpecker.yml b/.woodpecker.yml index 63d4b40..6148b13 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -34,7 +34,7 @@ steps: image: maven:3.9-eclipse-temurin-21 commands: - cd novalon-manage-api - - mvn test + - mvn verify environment: SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/manage_system SPRING_DATASOURCE_USERNAME: postgres @@ -43,6 +43,15 @@ steps: event: [push, pull_request] path: novalon-manage-api/** + - name: Backend Coverage Report + image: maven:3.9-eclipse-temurin-21 + commands: + - cd novalon-manage-api/manage-sys + - echo "Coverage report generated at target/site/jacoco/index.html" + when: + event: [push, pull_request] + path: novalon-manage-api/** + - name: Frontend Install image: node:21-alpine commands: diff --git a/EXECUTION_GUIDE_QUALITY.md b/EXECUTION_GUIDE_QUALITY.md new file mode 100644 index 0000000..ece75ce --- /dev/null +++ b/EXECUTION_GUIDE_QUALITY.md @@ -0,0 +1,312 @@ +# 系统质量提升 - 执行指南 + +## 📋 概述 + +本文档指导您如何在新的独立会话中批量执行系统质量提升计划。 + +## 🎯 目标 + +将系统完成度从 68% 提升至 90% 以上,包括: +- 单元测试覆盖率 >= 80% +- 所有 Handler 函数式迁移完成 +- 前端页面功能完整 +- CI/CD 自动化完善 +- 性能优化和监控完善 + +## 🚀 快速开始 + +### Step 1: 打开新的 IDE 会话 + +在 Trae IDE 中打开新的会话,工作目录设置为: +``` +/Users/zhangxiang/Codes/Novalon/novalon-manage-system-quality +``` + +### Step 2: 验证环境 + +```bash +cd /Users/zhangxiang/Codes/Novalon/novalon-manage-system-quality + +# 检查当前分支 +git branch + +# 应该显示:* feature/system-quality-improvement + +# 检查工作目录 +pwd + +# 应该显示:/Users/zhangxiang/Codes/Novalon/novalon-manage-system-quality +``` + +### Step 3: 调用 executing-plans 技能 + +在新会话中,首先调用 `executing-plans` 技能: + +``` +@executing-plans +``` + +### Step 4: 加载计划文档 + +执行计划时,引用以下文档: +``` +docs/plans/2026-03-12-system-quality-improvement.md +``` + +## 📁 Worktree 结构 + +``` +/Users/zhangxiang/Codes/Novalon/ +├── novalon-manage-system/ # 主工作目录(原分支) +├── novalon-manage-system-quality/ # 质量提升分支(新会话) +└── novalon-manage-system-refactor/ # 重构分支(其他工作) +``` + +## 🔄 执行流程 + +### Phase 1: 质量基础设施(2-3周) + +1. **Task 1**: 配置 JaCoCo 代码覆盖率工具 +2. **Task 2**: 创建测试基础配置类 +3. **Task 3-14**: 为所有 Service 编写单元测试 +4. **Task 15**: 运行所有单元测试并生成覆盖率报告 +5. **Task 16**: 配置 Woodpecker CI/CD 流水线 +6. **Task 17**: 添加静态代码分析 + +### Phase 2: 功能完善(3-4周) + +1. **Task 18**: 完成 SysUserHandler 函数式迁移 +2. **Task 19**: 完成其他 Handler 的函数式迁移 +3. **Task 20**: 实现前端用户管理页面 +4. **Task 21**: 实现其他前端管理页面 +5. **Task 22**: 完善 API 文档 + +### Phase 3: 效能优化(2-3周) + +1. **Task 23**: 性能测试 +2. **Task 24**: 数据库查询优化 +3. **Task 25**: 缓存策略优化 +4. **Task 26**: 添加监控和告警 +5. **Task 27**: 安全扫描 +6. **Task 28**: 编写架构设计文档 +7. **Task 29**: 编写部署文档 + +## 📊 检查点 + +在每个 Phase 完成后,创建检查点: + +### Phase 1 完成检查点 +```bash +# 运行所有测试 +cd novalon-manage-api/manage-sys +mvn clean verify + +# 检查覆盖率 +open target/site/jacoco/index.html + +# 确认覆盖率 >= 80% +``` + +### Phase 2 完成检查点 +```bash +# 测试后端 API +curl http://localhost:8080/api/users + +# 测试前端页面 +cd novalon-manage-web +npm run dev + +# 访问 http://localhost:5173 +``` + +### Phase 3 完成检查点 +```bash +# 运行性能测试 +k6 run novalon-manage-api/manage-sys/src/test/k6/performance-test.js + +# 检查监控指标 +curl http://localhost:8080/actuator/prometheus + +# 访问 Grafana Dashboard +open http://localhost:3000 +``` + +## 🎯 成功标准 + +### Phase 1 成功标准 +- ✅ 单元测试覆盖率 >= 80% +- ✅ 所有测试通过 +- ✅ CI/CD 流水线正常运行 +- ✅ 静态代码分析无严重问题 + +### Phase 2 成功标准 +- ✅ 所有 Handler 迁移到函数式风格 +- ✅ 所有前端页面功能完整 +- ✅ API 文档完善 + +### Phase 3 成功标准 +- ✅ 性能测试通过(P95 < 500ms) +- ✅ 数据库查询优化完成 +- ✅ 缓存策略生效 +- ✅ 监控告警系统运行正常 +- ✅ 安全扫描无高危漏洞 +- ✅ 文档完善 + +## 🛠️ 常用命令 + +### Git 操作 +```bash +# 查看当前分支 +git branch + +# 查看更改 +git status + +# 提交更改 +git add . +git commit -m "message" + +# 推送到远程 +git push origin feature/system-quality-improvement +``` + +### Maven 操作 +```bash +# 编译 +cd novalon-manage-api +mvn clean compile + +# 测试 +mvn test + +# 打包 +mvn clean package + +# 验证(包含测试和覆盖率) +mvn verify +``` + +### 前端操作 +```bash +# 安装依赖 +cd novalon-manage-web +npm install + +# 开发服务器 +npm run dev + +# 构建 +npm run build + +# 测试 +npm run test +``` + +### Docker 操作 +```bash +# 构建镜像 +docker-compose build + +# 启动服务 +docker-compose up -d + +# 查看日志 +docker-compose logs -f + +# 停止服务 +docker-compose down +``` + +## 📝 提交规范 + +### Commit Message 格式 +``` +(): + + + +