Files
railwaysystem/docs/codebase-audit/00_project_overview.md
T

79 lines
6.7 KiB
Markdown
Raw Normal View History

# RailwaySystem 代码基线审计:项目概览
> 审计日期:2026-09-11
> 审计对象:当前 Git 工作树(包含已跟踪、未提交及未跟踪代码)
> 审计方式:静态只读检查;未连接数据库,未执行迁移,未编译、未启动、未修改业务代码。文中“存在”表示仓库中有相应代码,“可运行/已接通”只有在存在直接证据时才成立。
## 1. 工程定位与版本
- 当前仓库分支为 `main`。
- 后端是经典版 **RuoYi-Vue 前后端分离项目**,若依版本 **3.9.1**。依据:`RuoYi-Vue/README.md`、`RuoYi-Vue/pom.xml`、`RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml`。
- 无法仅凭当前仓库证明最初从若依上游的哪个 Git 分支拉取;能确认的是当前代码属于经典 Vue 2 / Spring Boot 2 的 RuoYi-Vue 3.9.1 技术线,而当前仓库自己的分支是 `main`。
- 项目中有两个 Vue 工程:
- `build_ui/`:标题和描述均为“智慧培训管理平台”,含完整 `src/views/train` 与 `src/api/train`,是当前培训业务前端。
- `RuoYi-Vue/ruoyi-ui/`:描述为“知识图谱构建平台”,没有本次 14 组培训 CRUD 对应页面,应视为历史/基础前端副本,不能与 `build_ui/` 混为一个运行入口。
## 2. 后端技术栈
| 项目 | 当前代码证据 | 结论 |
| --- | --- | --- |
| Java | `RuoYi-Vue/pom.xml` 的 `java.version=1.8` | 源码/字节码目标 Java 8 |
| 当前机器 Java | `java -version` 为 OpenJDK 21.0.2 | 本机实际 Maven 运行时是 Java 21,与项目目标版本不同 |
| Spring Boot | `RuoYi-Vue/pom.xml` 的 `spring-boot.version=2.5.15` | Spring Boot 2.5.15 |
| Spring Framework | 同文件 `spring-framework.version=5.3.39` | 5.3.39 |
| Spring Security | 同文件 `spring-security.version=5.7.14` | 5.7.14,方法级鉴权 |
| 持久层 | `pagehelper-spring-boot-starter=1.4.7`、`mapper/**/*.xml` | 原生 MyBatis XML + PageHelper;未发现 MyBatis-Plus/baomidou |
| 数据源 | `application-druid.yml` | Druid 1.2.27,当前主库配置为 KingbaseES |
| JDBC 驱动 | 根 POM 与 `ruoyi-admin/pom.xml` | `com.kingbase:kingbase8:8.6.0`;MySQL 驱动也仍保留 |
| Excel | `ruoyi-common/.../ExcelUtil.java`、POI 4.1.2 | 若依 Excel 导入导出基础能力保留;培训 Controller 仅接了导出 |
| Token/JWT | `TokenService.java`、`JwtAuthenticationTokenFilter.java` | JWT 携带会话键,登录态主体保存在 Redis |
## 3. Maven 模块关系
父工程 `RuoYi-Vue/pom.xml` 聚合 7 个模块:
| 模块 | 作用 | 主要依赖关系 |
| --- | --- | --- |
| `ruoyi-admin` | Spring Boot 启动入口、Web Controller、配置 | 依赖 `framework`、`quartz`、`generator`、`train` |
| `ruoyi-framework` | Security、Token、AOP、数据源、Web 框架 | 依赖 `ruoyi-system` |
| `ruoyi-system` | 用户、角色、菜单、部门、字典、日志、配置、公告 | 依赖 `ruoyi-common` |
| `ruoyi-quartz` | Quartz 定时任务与任务日志 | 依赖 `ruoyi-common` |
| `ruoyi-generator` | 代码生成器 | 依赖 `ruoyi-common`、Druid |
| `ruoyi-common` | 通用返回、分页、异常、Excel、文件、安全工具 | 公共基础层 |
| `ruoyi-train` | 14 个培训领域对象、Mapper、Service | 依赖 `ruoyi-common`;Controller 放在 `ruoyi-admin` |
依据:`RuoYi-Vue/pom.xml:257`、各模块 `pom.xml`、`RuoYi-Vue/ruoyi-admin/pom.xml`。
## 4. 前端技术栈
`build_ui/package.json` 显示:Vue 2.6.12、Vue Router 3.4.9、Vuex 3.6.0、Element UI 2.15.12、Axios 0.24.0、ECharts 5.4.0、Vue CLI Service 4.4.6。`engines` 只声明 Node `>=8.9`、npm `>=3.0.0`,范围过宽,不能代表在当前 Node 22 上已被官方验证。
当前机器为 Node 22.23.2、npm 10.9.8。`build_ui/node_modules/.bin/vue-cli-service` 存在;本次没有执行 `npm run dev` 或构建。`build_ui/vue.config.js` 中存在尚未提交的 Node 22/MD4 兼容处理,并将开发端口从 80 改为 8080。
## 5. 数据库、Redis与环境
- 当前激活的 Spring profile 是 `druid`,配置位置:`RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml`。
- 实际 datasource 配置位置:`RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml`。
- 当前配置使用 KingbaseES JDBC URL、`com.kingbase8.Driver` 与 `kingbase8:8.6.0`;账号口令以明文存在配置文件中,本报告不复述。
- `application.yml` 同时将 PageHelper 方言固定为 `mysql`;若依系统 Mapper 和代码生成器还存在 `date_format`、`find_in_set`、反引号、`ifnull` 等 MySQL 语法。
- Redis 配置为本机 `localhost:6379`、database 0。Token 会话、验证码/密码错误计数、缓存和在线用户依赖 Redis,因此正常登录运行时 Redis 是实际依赖。
- `ruoyi-quartz`、Quartz Controller/Service/Mapper、`sql/quartz.sql` 均存在;这只能证明定时任务框架保留,不能证明已配置培训业务任务。
## 6. 已保留的若依能力
代码层已保留:登录、JWT/Redis 登录态、RBAC、动态菜单、按钮权限、操作日志、数据权限框架、字典、定时任务、文件上传下载、Excel 工具、分页、统一返回、全局异常处理、代码生成、系统配置、通知公告。
“正常保留”不等于“已在 Kingbase 环境验证正常”。其中系统 SQL、代码生成元数据查询、PageHelper 方言和训练权限配置仍存在明确的接通风险,详见 `03_database_current_state.md`、`06_security_and_permissions.md` 和 `09_reusable_ruoyi_capabilities.md`。
## 7. 培训业务总体成熟度
- 后端存在 14 组标准生成式 CRUD,每组均有 Entity、Mapper、XML、Service、ServiceImpl、Controller。
- 前端当前工作树存在 14 组对应 CRUD 页面/API;其中成绩页面/API以及部分适配文件仍未跟踪,教室、宿舍、成绩 Controller 的别名也未提交。
- 14 组 Controller 共形成 84 个映射:每组 6 个,分别为分页列表、导出、详情、新增、修改、批量删除。
- 未发现培训导入接口、统计接口、设备回调/外部接入接口、流程动作接口、领域事务或专用 DTO/VO。
- 仓库没有 14 张 `train_` 表的 DDL、培训菜单/权限初始化 SQL、培训种子数据或迁移文件,也没有培训自动化测试。
- 因此当前基线应描述为:**14 组数据模型和 CRUD 脚手架基本齐全,但端到端可运行状态、数据库对象、菜单权限和业务闭环尚未由仓库证据证明。**
## 8. 审计边界
本次没有查询实时数据库。因此以下事项仍属“未验证”:14 张业务表是否已真实创建、表字段/约束是否与设计一致、当前 `sys_menu` 是否另由人工配置、当前 Kingbase 实例是否开启兼容模式、现有账号是否拥有培训权限、外部设备或系统是否另有未入库服务。