1. 查明空库真正 Bootstrap Chain:明确以 ry_20250522.sql + quartz.sql + 000_phase05_exact_schema.sql 为前置基线; 2. 纠偏 API Inventory 统计指标:确立 107 个端点、0 重复,升级为读写分离物理表调用链 (100% 源码追踪); 3. 明确四类 API 边界:自研业务端点 107、平台端点 95、甲方端点 0、第三方端点 9、纯模拟端点 1; 4. 升级 Client API 状态模型:引入连通性、真实数据与可用性三维矩阵,实证 DMS 0 资源现状,将远程开门更正为 SECURITY_PROHIBITED; 5. 输出纯净演示数据库设计规约草案 (CLEAN_DEMO_DATABASE_SPEC.md)。
153 lines
31 KiB
Markdown
153 lines
31 KiB
Markdown
# 04 - 系统全量 API 接口总账与数据库调用链 (API Inventory & Database Lineage)
|
||
|
||
> **最高原则**:**拒绝根据 URL 猜测表名与调用状态**!
|
||
> 1. **`PRIMARY_TABLE` / `READ_TABLES` / `WRITE_TABLES`**:必须通过 `Controller → Service → Mapper → XML/SQL` 源码调用链完整确认,标记为 **`VERIFIED_FROM_SOURCE`**;未穷尽调用链的标注为 `NOT_YET_VERIFIED`;
|
||
> 2. **`USED_BY_UI`**:必须通过 `build_ui/src/api/**` 与 `build_ui/src/views/**` 实际调用证据确认,分为 **`VERIFIED_USED_BY_UI`**(API 文件定义且被 View 组件导入调用)、**`DEFINED_IN_UI_API_ONLY`**(API 文件已声明函数但 View 暂未直接引用)、**`NOT_FOUND_IN_UI`**(前端未定义),严禁无证据一刀切填 `YES`;
|
||
> 3. **`IMPLEMENTATION_STATUS`**:Controller 存在仅证明端点已定义,标注为 **`ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)`**,受外部硬件阻断的标注为 **`ENDPOINT_DEFINED (BLOCKED_EXTERNAL)`**。
|
||
|
||
---
|
||
|
||
## 1. 核心培训业务 API 账本 (`CUSTOM_TRAIN_BUSINESS_API`)
|
||
|
||
| 接口路径 (API) | 请求方式 (METHOD) | 数据来源 (SOURCE) | 承载控制器 (CONTROLLER) | 主实体表 (PRIMARY_TABLE) | 读操作表 (READ_TABLES) | 写操作表 (WRITE_TABLES) | 调用链追踪状态 (LINEAGE_STATUS) | UI调用状态 (USED_BY_UI) | 实现状态 (STATUS) |
|
||
| :--- | :---: | :---: | :--- | :--- | :--- | :--- | :---: | :---: | :---: |
|
||
| `/train/teacher/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `train_teacher` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/teacher/{tId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `train_teacher` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/teacher` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `NONE` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/teacher` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `train_teacher` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/teacher/{tIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `train_teacher` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/teacher/export` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `NONE` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/teacher/plans` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherMeController` | `train_teacher` | `train_teacher` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/teacher` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherMeController` | `train_teacher` | `train_teacher` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/teacher/students` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherMeController` | `train_teacher` | `train_teacher` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/teacher/lessons/{lessonId}/attendance` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherMeController` | `train_teacher` | `train_teacher` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/student/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/student/{sId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/student` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `NONE` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/student` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `train_student` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/student/{sIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `train_student` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/student/export` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/student/importTemplate` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/student/importData` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `NONE` | `train_student` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/student/enrollments` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/student/timetable` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/student/report` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/student/attendance` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/student/duration` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/me/student/portrait` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_student` | `train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/course/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `train_course` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/course/{cId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `train_course` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/course` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `NONE` | `train_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/course` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `train_course` | `train_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/course/{cIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `train_course` | `train_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/classroom/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `train_classroom_info` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/classroom/{classRoomId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `train_classroom_info` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/classroom` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `NONE` | `train_classroom_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/classroom` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `train_classroom_info` | `train_classroom_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/classroom/{classRoomIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `train_classroom_info` | `train_classroom_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/training-site/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTrainingSiteController` | `train_training_site` | `train_training_site` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/training-site/{siteId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTrainingSiteController` | `train_training_site` | `train_training_site` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/training-site` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainTrainingSiteController` | `train_training_site` | `NONE` | `train_training_site` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/training-site` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainTrainingSiteController` | `train_training_site` | `train_training_site` | `train_training_site` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/training-site/{siteIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainTrainingSiteController` | `train_training_site` | `train_training_site` | `train_training_site` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `train_class_plan` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `train_class_plan` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `train_class_plan` | `train_class_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `train_class_plan` | `train_class_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `train_class_plan` | `train_class_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/publish` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `train_class_plan` | `train_class_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/start` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `train_class_plan` | `train_class_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/complete` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `train_class_plan` | `train_class_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/courses` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanCourseController` | `train_plan_course` | `train_plan_course, train_course, train_teacher` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/courses` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanCourseController` | `train_plan_course` | `train_plan_course` | `train_plan_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/courses/{planCourseId}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanCourseController` | `train_plan_course` | `train_plan_course` | `train_plan_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/enrollments` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `train_enrollment, train_student, train_class_plan` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/enrollments` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `train_enrollment, train_student` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/enrollments/batch` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `train_enrollment, train_student` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/enrollments/{enrollmentId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `train_enrollment, train_student, train_class_plan` | `NONE` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/enrollments/{enrollmentId}/status` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `train_enrollment` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/enrollments/{enrollmentId}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `train_enrollment` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/lessons` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `train_lesson, train_class_plan, train_course, train_teacher, train_classroom_info, train_training_site` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/lessons` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `train_lesson, train_classroom_info, train_training_site` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/lessons/{lessonId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `train_lesson, train_class_plan, train_course, train_teacher, train_classroom_info, train_training_site` | `NONE` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/lessons/{lessonId}` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `train_lesson, train_classroom_info, train_training_site` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/lessons/{lessonId}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `train_lesson, train_classroom_info, train_training_site` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/lessons/check-conflict` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `train_lesson, train_classroom_info, train_training_site` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/lessons/scheduling-options` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_classroom_info` | `train_classroom_info, train_training_site, train_teacher` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/plans/{planId}/timetable` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `train_lesson, train_class_plan, train_course, train_teacher, train_classroom_info, train_training_site` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/enrollments/{enrollmentId}/report` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainReportActionController` | `train_class_report` | `train_enrollment, train_class_report` | `train_class_report, train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/report/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassReportController` | `train_class_report` | `train_class_report, train_student, train_class_plan` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/checkin/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentCheckinController` | `train_student_checkin` | `train_student_checkin, train_student, train_lesson` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/attendance/lessons/{lessonId}/checkins` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `train_student_checkin` | `train_student_checkin, train_lesson, train_enrollment` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/attendance/sign-in` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `train_student_checkin` | `train_student_checkin, train_lesson` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/attendance/sign-out` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `train_student_checkin` | `train_student_checkin, train_lesson` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/attendance/proxy-checkin` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `train_student_checkin` | `train_student_checkin, train_lesson` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/attendance/mark-absent` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `train_student_checkin` | `train_student_checkin, train_lesson` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/attendance/adjust` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `train_student_checkin` | `train_student_checkin, train_lesson` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/dormitory/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `train_dormitory_info` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/dormitory/{dormId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `train_dormitory_info` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/dormitory` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `NONE` | `train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/dormitory` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `train_dormitory_info` | `train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/dormitory/{dormIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `train_dormitory_info` | `train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation, train_dormitory_info, train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation/{accommodationId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation, train_dormitory_info, train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation/enrollment/{enrollmentId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation, train_dormitory_info, train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation/enrollment/{enrollmentId}/history` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation, train_dormitory_info, train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation, train_dormitory_info` | `train_accommodation, train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation/{accommodationId}/checkin` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation, train_dormitory_info` | `train_accommodation, train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation/{accommodationId}/checkout` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation, train_dormitory_info` | `train_accommodation, train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation/{accommodationId}/transfer` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation, train_dormitory_info` | `train_accommodation, train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/accommodation/{accommodationIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `train_accommodation` | `train_accommodation, train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/score/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `train_score_info, train_student, train_course` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/score/{scoreId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `train_score_info, train_student, train_course` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/score` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `NONE` | `train_score_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/score` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `train_score_info` | `train_score_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/score/{scoreIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `train_score_info` | `train_score_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/analysis/dashboard/overview` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | `聚合多表` | `train_class_plan, train_enrollment, train_lesson, train_student_checkin, train_accommodation` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/analysis/dashboard/charts` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | `聚合多表` | `train_class_plan, train_enrollment, train_lesson, train_student_checkin, train_accommodation` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/analysis/attendance/summary` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | `聚合多表` | `train_student_checkin, train_lesson, train_class_plan` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/analysis/attendance/charts` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | `聚合多表` | `train_student_checkin, train_lesson, train_class_plan` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/analysis/portrait/student-360/{studentId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | `聚合多表` | `train_student, train_enrollment, train_student_checkin, train_score_info, train_study_duration` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/access/mapping/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_external_resource_mapping` | `train_external_resource_mapping, train_dormitory_info` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/access/auth/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_dorm_auth` | `train_dorm_auth, train_accommodation, train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/access/operation/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_external_operation` | `train_external_operation` | `NONE` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/access/capability` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `N/A (配置与常量)` | `NONE` | `NONE` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/access/issue` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_dorm_auth` | `train_dorm_auth, train_accommodation` | `train_dorm_auth, train_external_operation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BLOCKED_EXTERNAL)` |
|
||
| `/train/access/revoke` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_dorm_auth` | `train_dorm_auth, train_accommodation` | `train_dorm_auth, train_external_operation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BLOCKED_EXTERNAL)` |
|
||
| `/train/binding/teachers/bindable-users` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccountBindingAdminController` | `sys_user` | `sys_user, train_teacher, train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `NOT_FOUND_IN_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/binding/teachers/{teacherId}/bind` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccountBindingAdminController` | `train_teacher` | `sys_user, train_teacher` | `train_teacher (user_id)` | `VERIFIED_FROM_SOURCE` | `NOT_FOUND_IN_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/binding/students/bindable-users` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccountBindingAdminController` | `sys_user` | `sys_user, train_teacher, train_student` | `NONE` | `VERIFIED_FROM_SOURCE` | `NOT_FOUND_IN_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
| `/train/binding/students/{studentId}/bind` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccountBindingAdminController` | `train_student` | `sys_user, train_student` | `train_student (user_id)` | `VERIFIED_FROM_SOURCE` | `NOT_FOUND_IN_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||
|
||
---
|
||
|
||
## 2. 统计汇总与实证说明
|
||
|
||
### 2.1 端点数量与结构化审计指标
|
||
- **表格端点行数 (TOTAL_ENDPOINT_ROWS)**:107 行
|
||
- **唯一端点标识 (UNIQUE_METHOD_PATH_COUNT)**:107 项(以 `METHOD + PATH` 为联合主键)
|
||
- **重复端点数量 (DUPLICATE_METHOD_PATH_COUNT)**:0 项(0 冲突,0 重复记录)
|
||
|
||
### 2.2 数据库调用链追踪分布 (`LINEAGE_STATUS`)
|
||
- **`VERIFIED_FROM_SOURCE`**:107 / 107 (100% 经 Controller → Service → Mapper → XML 链路追踪验证)
|
||
- **`NOT_YET_VERIFIED`**:0 项(无未经证实的猜测项)
|
||
- **细粒度读写分离**:所有 107 个端点均明确标注了读取表清单 (`READ_TABLES`) 与写入变更表清单 (`WRITE_TABLES`),包含 5 个聚合分析类复杂多表只读端点。
|
||
|
||
### 2.3 前端调用状态分布 (`USED_BY_UI` 基于 `build_ui/` 扫描)
|
||
- **`VERIFIED_USED_BY_UI`**:92 项(在 `build_ui/src/views/` 页面中实际被用户交互触发)
|
||
- **`DEFINED_IN_UI_API_ONLY`**:11 项(在 `build_ui/src/api/` 中已封装接口,但页面视图暂未直接引用,如部分导出/批量导入端点)
|
||
- **`NOT_FOUND_IN_UI`**:4 项(纯管理端底层端点,前端未声明:教师/学员账号手工绑定与候选人过滤接口)
|
||
|
||
### 2.4 四类 API 边界范围确立 (API Scope Definition)
|
||
为彻底杜绝不同领域接口职责混淆,系统 API 划分为以下四大独立边界:
|
||
1. **`CUSTOM_TRAIN_BUSINESS_API` (RailwaySystem 自研培训业务端点)**:**107 个**
|
||
- 涵盖 24 个培训核心控制器,承载开班、排课、学员、考勤、报到、住宿、成绩与画像全生命周期;
|
||
2. **`RUOYI_PLATFORM_API` (RuoYi 底座系统平台端点)**:**95 个**
|
||
- 涵盖 `/login`、`/captchaImage`、`/system/user/*`、`/system/role/*`、`/system/menu/*`、`/system/dict/*`、`/monitor/*` 等若依通用平台能力;
|
||
3. **`CLIENT_PROVIDED_API` (甲方沈阳房建公寓段自身提供的接口)**:**0 个**
|
||
- 甲方当前未向本项目开放或提供任何内部信息化系统的 Web API,系统业务主流程完全由自建数据库闭环;
|
||
4. **`THIRD_PARTY_API` (第三方外部服务端点,以 DMS 门锁平台为主)**:**9 个**
|
||
- 涵盖 DMS Token、建筑、楼层、房间、门锁查询、在线密码增删及状态轮询;
|
||
5. **`MOCK_ONLY_INTERFACE` (纯本地模拟桩接口)**:**1 个**
|
||
- 电子班牌硬件数据推送(由于缺少现场物理联网班牌,当前由本地模拟桩与心跳表驱动)。
|