文档维护:纠偏现行真理中心构建源与已闭环事实
1. 明确 build_ui/ 为前端唯一构建与部署真源,RuoYi-Vue/ruoyi-ui 标记为历史归档备份; 2. 标记 ACCOM-PERM-01 为 RESOLVED_2026-09-23 已彻底闭环,内部 P0 阻断项清零; 3. 对全量 104 项内部 API 端点完成源码级表追踪 (VERIFIED_FROM_SOURCE) 与 build_ui 视图引用验证; 4. 外部 Client API 矩阵全面引入最后验证时间、验证方式、证据源与实时响应四项证据字段; 5. 更新下一阶段标准化行动路线图为严格 16 步标准流。
This commit is contained in:
1 parent
8ad0f5172e
commit
122a242dd0
9 files changed
+292
-233
No files matched your search
+2
-2
@@ -38,8 +38,8 @@
|
||||
- [04-API-INVENTORY.md](current/04-API-INVENTORY.md):全量 API 接口账本(路径、方法、源码分类、控制器、关联物理表)
|
||||
- [05-CLIENT-API-STATUS.md](current/05-CLIENT-API-STATUS.md):甲方与外部接口状态清单(REAL_LIVE/NOT_YET_TESTED/MOCK)
|
||||
- [06-DEMO-BASELINE.md](current/06-DEMO-BASELINE.md):演示基线准则(旧Demo不可信声明与新Demo确定性构建七大原则)
|
||||
- [07-KNOWN-GAPS.md](current/07-KNOWN-GAPS.md):内部已知缺口与外部阻塞清单(包含 ACCOM-PERM-01 阻断项)
|
||||
- [08-NEXT-ACTIONS.md](current/08-NEXT-ACTIONS.md):下一阶段标准化 14 步行动路线图
|
||||
- [07-KNOWN-GAPS.md](current/07-KNOWN-GAPS.md):内部已知缺口与外部阻塞清单(内部阻断项已清零,仅存外部 DMS 硬件阻塞)
|
||||
- [08-NEXT-ACTIONS.md](current/08-NEXT-ACTIONS.md):下一阶段标准化 16 步行动路线图
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -22,6 +22,10 @@ docs/reports/** MUST NOT be treated as current truth.
|
||||
1. **真理优先级铁律**:如首屏声明,`docs/current/**` 拥有最高文档解释权,任何 `docs/reports/**` 下的历史报告仅作为时间序列凭证,**绝对不得覆盖本目录所载明的当前事实**。
|
||||
2. **唯一入口导航**:人类读者与 Agent 接手任务时,必须以本文件为第一入口,禁止直接引用散落在历史报告中的过期结论。
|
||||
3. **实事求是原则**:所有现状描述直接锚定底层 Git HEAD 代码与 Kingbase 物理迁移,严禁虚报、浮夸或把未实现能力写为已完成。
|
||||
4. **代码真源权威原则**:
|
||||
- **前端唯一构建与部署真源**:`build_ui/`(`RuoYi-Vue/ruoyi-ui` 仅为历史非活跃归档备份,非构建源、非部署源);
|
||||
- **后端源码真源**:`RuoYi-Vue/`(Spring Boot 2.5.15 / Java 8);
|
||||
- **数据库 DDL 权威**:`RuoYi-Vue/sql/train/v2/` 与 `RuoYi-Vue/sql/system/kingbase/` 迁移脚本链。
|
||||
|
||||
---
|
||||
|
||||
@@ -33,7 +37,7 @@ docs/reports/** MUST NOT be treated as current truth.
|
||||
- **共享试用部署分支**:`feat/cicd-pipeline`
|
||||
- **共享试用访问地址**:[http://192.168.139.230:8082/](http://192.168.139.230:8082/)
|
||||
- **数据库系统**:国产人大金仓 KingbaseES V9 (schema: `public`, 共享试用库: `training`)
|
||||
- **当前试用就绪度**:`READY_WITH_EXTERNAL_BLOCKERS`(核心教务主闭环打通,具备现场局域网试用条件;外部智能门锁硬件因无资源处于客观阻塞)
|
||||
- **当前试用就绪度**:`READY_WITH_EXTERNAL_BLOCKERS`(核心教务主闭环打通,内部 P0 阻断清零;外部智能门锁硬件因无资源处于客观阻塞)
|
||||
|
||||
---
|
||||
|
||||
@@ -43,14 +47,14 @@ docs/reports/** MUST NOT be treated as current truth.
|
||||
|
||||
| 编号 | 文档名称 | 核心职责与回答的关键问题 | 适用对象 |
|
||||
| :---: | :--- | :--- | :--- |
|
||||
| **01** | [**01-CURRENT-SYSTEM-STATE.md**](01-CURRENT-SYSTEM-STATE.md) | **系统当前真实状态速览**<br>Git基线、前后端源码、部署状态、阻断项、活跃Worktree、Demo状态与文档状态。 | 全体成员、新接手人员、Agent |
|
||||
| **01** | [**01-CURRENT-SYSTEM-STATE.md**](01-CURRENT-SYSTEM-STATE.md) | **系统当前真实状态速览**<br>Git基线、前端源码真源 (build_ui/)、后端源码、部署状态、阻断项(ACCOM-PERM-01已解决)、活跃Worktree、Demo状态与文档状态。 | 全体成员、新接手人员、Agent |
|
||||
| **02** | [**02-FUNCTION-MODULES.md**](02-FUNCTION-MODULES.md) | **业务功能模块全量判定**<br>按教师、学员、课程、场地、计划、排课、考勤、住宿、成绩、统计、DMS等逐项给出五级状态判定。 | 产品经理、业务主管、交付验收 |
|
||||
| **03** | [**03-DATABASE-AND-TABLES.md**](03-DATABASE-AND-TABLES.md) | **数据库架构、迁移链与数据表总账**<br>KingbaseES DDL、21张业务表、系统表、迁移链顺序与CLEAN_DEMO_DATABASE重建说明。 | 后端开发、DBA、数据审计人员 |
|
||||
| **04** | [**04-API-INVENTORY.md**](04-API-INVENTORY.md) | **全量 API 接口总账**<br>全量后端 Controller 接口路径、HTTP 方法、源分类、关联物理表与 UI 调用关系。 | 前后端研发、接口自动化测试 |
|
||||
| **05** | [**05-CLIENT-API-STATUS.md**](05-CLIENT-API-STATUS.md) | **甲方与外部接口状态清单**<br>仅记录 DMS 及电子班牌等外部接口的实时连通、鉴权与 Mock 状态,严禁 Mock 冒充真实。 | 集成工程师、外部联调人员 |
|
||||
| **04** | [**04-API-INVENTORY.md**](04-API-INVENTORY.md) | **全量 API 接口总账**<br>全量后端 Controller 接口路径、HTTP 方法、源码级校验表关联、build_ui 实际调用关系与实现状态。 | 前后端研发、接口自动化测试 |
|
||||
| **05** | [**05-CLIENT-API-STATUS.md**](05-CLIENT-API-STATUS.md) | **甲方与外部接口状态清单**<br>记录 DMS 及电子班牌等外部接口的实时连通、鉴权、真实联调凭据与 Mock 状态,严禁 Mock 冒充真实。 | 集成工程师、外部联调人员 |
|
||||
| **06** | [**06-DEMO-BASELINE.md**](06-DEMO-BASELINE.md) | **演示基线准则与重构要求**<br>明确旧 Demo 不可信与新 Demo 尚未开始的事实,确立纯净数据库与确定性数据等 7 大原则。 | QA、测试架构师、验收人员 |
|
||||
| **07** | [**07-KNOWN-GAPS.md**](07-KNOWN-GAPS.md) | **内部已知缺口与外部阻塞清单**<br>仅记录经过严格验证的真实缺口(包括 ACCOM-PERM-01 阻断项、DMS 硬件阻塞、C03成绩收敛等)。 | 研发团队、排期人员、问题排查 |
|
||||
| **08** | [**08-NEXT-ACTIONS.md**](08-NEXT-ACTIONS.md) | **下一阶段标准化行动路线图**<br>固定从环境冻结、纯净库重建、种子数据灌入到最终 Docs Phase B 的 14 步标准流。 | 项目经理、技术负责人 |
|
||||
| **07** | [**07-KNOWN-GAPS.md**](07-KNOWN-GAPS.md) | **内部已知缺口与外部阻塞清单**<br>仅记录经过严格验证的真实缺口(ACCOM-PERM-01 已解决闭环,记录 DMS 外部硬件阻塞与 C03 成绩收敛等)。 | 研发团队、排期人员、问题排查 |
|
||||
| **08** | [**08-NEXT-ACTIONS.md**](08-NEXT-ACTIONS.md) | **下一阶段标准化 16 步行动路线图**<br>固定从环境冻结、纯净库重建、种子数据灌入到最终 Docs Phase B 的 16 步标准流。 | 项目经理、技术负责人 |
|
||||
|
||||
---
|
||||
|
||||
@@ -61,8 +65,8 @@ docs/reports/** MUST NOT be treated as current truth.
|
||||
- `01-current-status.md`:**STALE**,基于 2026-09-17 早期快照,已被 `01-CURRENT-SYSTEM-STATE.md` 取代。
|
||||
- `02-phase1-status.md`:**STALE**,粗粒度判定,已被 `02-FUNCTION-MODULES.md` 精确五级判定取代。
|
||||
- `03-shared-trial.md`:**STALE**,描述 2026-09-17 部署快照,安全移入归档。
|
||||
- `04-known-gaps.md`:**STALE / NEEDS_REWRITE**,遗漏了最新的 `ACCOM-PERM-01` 阻塞项,已被 `07-KNOWN-GAPS.md` 取代。
|
||||
- `05-next-actions.md`:**STALE**,编写于 2026-09-18,待办已过期,已被 `08-NEXT-ACTIONS.md` 的 14 步路线图取代。
|
||||
- `04-known-gaps.md`:**STALE / NEEDS_REWRITE**,已被 `07-KNOWN-GAPS.md` 取代。
|
||||
- `05-next-actions.md`:**STALE**,编写于 2026-09-18,待办已过期,已被 `08-NEXT-ACTIONS.md` 的 16 步路线图取代。
|
||||
- `06-shared-trial-accounts.md`:**STALE**,早期演示账号清单,安全移入归档。
|
||||
- `07-analytics-attendance-semantics.md`:**CURRENT (SPECIALIZED)**,Package C 考勤专题统计语义,属专项技术规范,为保持顶层 9 篇架构精简,归入归档留存备查。
|
||||
|
||||
|
||||
@@ -16,14 +16,19 @@ CURRENT_GIT_HEAD_COMMIT = 2f05f310
|
||||
DEPLOYMENT_TRACKING_BRANCH = feat/cicd-pipeline (HEAD: eb1ddfca)
|
||||
SHARED_TRIAL_URL = http://192.168.139.230:8082/
|
||||
SHARED_TRIAL_DB = training (KingbaseES V9 at 192.168.139.218:4321)
|
||||
FRONTEND_SOURCE_OF_TRUTH = RuoYi-Vue/ruoyi-ui (Vue 2.6 / Element UI)
|
||||
|
||||
ACTIVE_FRONTEND_SOURCE = build_ui/ (Vue 2.6 / Element UI)
|
||||
INACTIVE_LEGACY_FRONTEND = RuoYi-Vue/ruoyi-ui (LEGACY COPY, NOT BUILD/DEPLOY SOURCE)
|
||||
BACKEND_SOURCE_OF_TRUTH = RuoYi-Vue (Spring Boot 2.5.15 / Java 8)
|
||||
BACKEND_TEST_SUITE_STATUS = 331 / 331 PASS (Surefire Verified)
|
||||
|
||||
DEMO_STATUS = OLD_DEMO_UNTRUSTWORTHY / NEW_DEMO_NOT_YET_STARTED
|
||||
DOCS_STATUS = PHASE_A6_1_COMPLETE / PHASE_B_GATE_BLOCKED
|
||||
CLIENT_REQUIREMENT_STATUS = CLIENT_REFERENCE_PACK_UNCONFIRMED (INTERNAL_FREEZE)
|
||||
CURRENT_KNOWN_BLOCKERS_COUNT = 2 (ACCOM-PERM-01, DMS_EXTERNAL_HARDWARE)
|
||||
|
||||
CURRENT_OPEN_P0_BLOCKERS = NONE (0 open internal P0 blockers)
|
||||
RECENTLY_RESOLVED_BLOCKERS = ACCOM-PERM-01 (RESOLVED_2026-09-23)
|
||||
EXTERNAL_BLOCKERS = DMS_EXTERNAL_HARDWARE (BLOCKED_EXTERNAL)
|
||||
================================================================================
|
||||
```
|
||||
|
||||
@@ -31,16 +36,23 @@ CURRENT_KNOWN_BLOCKERS_COUNT = 2 (ACCOM-PERM-01, DMS_EXTERNAL_HARDWARE)
|
||||
|
||||
## 2. 前后端源码与技术栈真实情况
|
||||
|
||||
### 2.1 前端工程事实 (`RuoYi-Vue/ruoyi-ui`)
|
||||
### 2.1 前端工程事实:`build_ui/` 唯一活跃真源
|
||||
- **活跃构建与部署真源**:`build_ui/`
|
||||
- **核心证据 1**:`.gitlab-ci.yml` 构建脚本明确执行 `cd build_ui && npm run build:prod`;
|
||||
- **核心证据 2**:CI/CD 部署发布步骤直接复制产物:`cp -r build_ui/dist/* /data2/wzb/deploy/frontend/`;
|
||||
- **核心证据 3**:最新业务缺陷修复与界面交互优化均发生于 `build_ui/src/...`;
|
||||
- **核心证据 4**:本地 Vue dev server 统一从 `build_ui` 目录启动运行。
|
||||
- **历史非活跃目录声明**:
|
||||
- `RuoYi-Vue/ruoyi-ui` 明确定义为 **`LEGACY / INACTIVE FRONTEND COPY`**;
|
||||
- 严禁将其视为构建源或部署源,未来文档清理时归档。
|
||||
- **技术栈**:Vue 2.6.12 + Vuex 3.6.0 + Vue Router 3.4.9 + Element UI 2.15.8 + Axios + ECharts 5.x。
|
||||
- **业务视图根路径**:`ruoyi-ui/src/views/train/`
|
||||
- **主要视图组件**:
|
||||
- **业务视图根路径**:`build_ui/src/views/train/`
|
||||
- `teacher/`:教师档案管理、资质证书与任教历史;
|
||||
- `student/`:学员主档、身份信息密文展示与报到流水;
|
||||
- `course/`:课程库、教学大纲与学时学分配置;
|
||||
- `plan/`:培训班级计划、开班生命周期阶段流转;
|
||||
- `lesson/`:排课课表、四维冲突时段预检;
|
||||
- `accommodation/`:宿舍房间管理、床位分配与住宿履历;
|
||||
- `accommodation/`:宿舍房间管理、床位分配与住宿履历(**入住/退宿/调房已验证通过**);
|
||||
- `checkin/`:学员考勤流水、教师代签补卡与请假核验;
|
||||
- `portrait/`:学员 360 度成长素养画像视图;
|
||||
- `board/`:电子班牌设备信息管理。
|
||||
@@ -72,6 +84,7 @@ CURRENT_KNOWN_BLOCKERS_COUNT = 2 (ACCOM-PERM-01, DMS_EXTERNAL_HARDWARE)
|
||||
- **当前试用就绪度判定**:`READY_WITH_EXTERNAL_BLOCKERS`
|
||||
- 核心教务管理主闭环稳定流畅;
|
||||
- 教师与学员自服务工作台权限隔离生效;
|
||||
- 住宿业务生命周期权限已闭环;
|
||||
- 外部智能门锁接口受限(见已知阻塞)。
|
||||
|
||||
---
|
||||
@@ -93,14 +106,23 @@ CURRENT_KNOWN_BLOCKERS_COUNT = 2 (ACCOM-PERM-01, DMS_EXTERNAL_HARDWARE)
|
||||
|
||||
---
|
||||
|
||||
## 5. 当前核心阻断项 (Current Known Blockers)
|
||||
## 5. 当前阻断项判定与历史闭环记录
|
||||
|
||||
1. **`ACCOM-PERM-01` (产品级阻断)**:
|
||||
- 住宿生命周期操作(入住、退宿、调房)在 `sys_menu` 与角色授权中未授予 `train_admin` 角色。
|
||||
- 阻断 6 个业务验收场景(SM-10, SM-11, SM-12, SM-13, BR-11, EXT-02)。详见 [07-KNOWN-GAPS.md](07-KNOWN-GAPS.md)。
|
||||
2. **DMS 外部物理硬件阻塞 (`BLOCKED_EXTERNAL`)**:
|
||||
- 厂商可访问测试环境中挂载的房间与门锁数量为 0。
|
||||
- 无法在运行时验证真实房间与门锁行级字段映射,物理下发操作禁止执行。
|
||||
### 5.1 当前内部 P0 阻断项:`CURRENT_OPEN_P0_BLOCKERS = NONE (0 项)`
|
||||
系统当前无未解决的内部 P0 级代码或业务阻断项。
|
||||
|
||||
### 5.2 历史阻断项闭环记录:`ACCOM-PERM-01 (RESOLVED_2026-09-23)`
|
||||
- **事实状态**:`ACCOM_PERM_FIX = RESOLVED`,`SOURCE_MIGRATION_FIXED = YES`,`QA_DB_PERMISSION_FIXED = YES`,`TRAIN_ADMIN_UI_VERIFIED = YES`。
|
||||
- **解决事实**:
|
||||
- `015_dms_package_a_hardening.sql` 修正生效,`role_id=3` (train_admin) 正确获得 `menu_id=2263` (`train:accommodation:edit`);
|
||||
- `train_admin` 按最小权限原则不授予破坏性 `train:accommodation:remove`;
|
||||
- 11 个相关权限契约测试 PASS;
|
||||
- 真实 `qa_train_admin` 浏览器验证:预分配状态行“入住”Visible,“删除”Hidden;在住状态行“调房”Visible,“退宿”Visible。
|
||||
- **正式移出当前阻断列表**。
|
||||
|
||||
### 5.3 外部客观环境阻塞项:`DMS_EXTERNAL_HARDWARE (BLOCKED_EXTERNAL)`
|
||||
- 厂商可访问测试环境中挂载的房间与门锁数量为 0。
|
||||
- 无法在运行时验证真实房间与门锁行级字段映射,物理下发操作禁止执行。
|
||||
|
||||
---
|
||||
|
||||
@@ -108,12 +130,12 @@ CURRENT_KNOWN_BLOCKERS_COUNT = 2 (ACCOM-PERM-01, DMS_EXTERNAL_HARDWARE)
|
||||
|
||||
### 6.1 演示状态 (Demo Status)
|
||||
- **旧 Demo 状态**:`OLD_DEMO_UNTRUSTWORTHY`。历史 reports 中包含的演示截图与账本存在固定数据污染、超管代跑掩盖权限缺陷等问题,不可作为系统当前可信状态依据。
|
||||
- **新 Demo 状态**:`NEW_DEMO_NOT_YET_STARTED`。必须等待 `CLEAN_DEMO_DATABASE` 重建和阻断项修复后重新启动。
|
||||
- **新 Demo 状态**:`NEW_DEMO_NOT_YET_STARTED`。必须等待 `CLEAN_DEMO_DATABASE` 重建和确定性种子数据灌入后重新启动。
|
||||
|
||||
### 6.2 文档状态 (Docs Status)
|
||||
- Phase A.6.1 完整性纠偏已在审计工作树中圆满收官(21 份物理产物、53 份争议资产物理绑定、0 路径碰撞)。
|
||||
- 整体搬迁与删除(Phase B)处于阻断状态 (`READY_FOR_PHASE_B = NO`),待演示彻底冻结后执行。
|
||||
- 当前正在执行 `CURRENT TRUTH BOOTSTRAP`,建立唯一权威入口。
|
||||
- 当前正在执行 `CURRENT TRUTH PASS`,保持唯一权威入口。
|
||||
|
||||
### 6.3 甲方需求状态 (Client Requirement Status)
|
||||
- **材料定性**:`SOURCE_TYPE = CLIENT_REFERENCE`, `REQUIREMENT_STATUS = UNCONFIRMED`。
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# 02 - 系统业务功能模块全量判定 (Function Modules)
|
||||
|
||||
> **判定原则**:严格基于底层代码实现(Controller / Service / DDL)、自动化测试覆盖与实际浏览器交互判定。
|
||||
> **代码真源**:前端视图基于 `build_ui/src/views/train/`,后端基于 `RuoYi-Vue/`。
|
||||
> **分类标准**:
|
||||
> - **`IMPLEMENTED`**:代码完全落地、数据库表就绪、经过真实测试验证、具备完整正向主闭环;
|
||||
> - **`PARTIAL`**:部分代码或表结构就绪,但存在未闭环的交互、未授权的业务流转或口径待确认项;
|
||||
> - **`PARTIAL`**:部分代码或表结构就绪,但存在未闭环的交互或口径待确认项;
|
||||
> - **`MOCK`**:使用本地假数据或模拟桩进行逻辑联调,未接入真实系统;
|
||||
> - **`BLOCKED_EXTERNAL`**:内部逻辑具备,因外部厂商环境缺少硬件/真实资源造成客观阻塞;
|
||||
> - **`NOT_IMPLEMENTED`**:一期未规划或尚未开始开发。
|
||||
@@ -22,7 +23,7 @@
|
||||
| **06** | **开班课程配置** | **`IMPLEMENTED`** | `TrainPlanCourseController` | `train_plan_course` | 一班多课绑定、分配各门课程任课教师、排课先后序号与学时分配。 |
|
||||
| **07** | **课次日程与排课**| **`IMPLEMENTED`** | `TrainLessonController` | `train_lesson` | 课次生成、时段安排;**四维时段冲突校验(教师、教室、学员班级、起止日期范围)**。 |
|
||||
| **08** | **考勤与报到管理**| **`IMPLEMENTED`** | `TrainReportActionController`<br>`TrainStudentCheckinController`<br>`AttendanceController` | `train_class_report`<br>`train_student_checkin`<br>`train_lesson` | 开班现场报到核验、课次签到/签退、教师代签补卡、人工标记缺勤、请假记录。 |
|
||||
| **09** | **住宿房间管理** | **`PARTIAL`** | `TrainDormitoryInfoController`<br>`TrainAccommodationController` | `train_dormitory_info`<br>`train_accommodation` | 房间/床位增删改查、分配住宿、床位重叠校验 (`EX-13`)、防混住约束已实现;<br>⚠️ **已知阻断 `ACCOM-PERM-01`**:入住、退宿、调房未授权 `train_admin`。 |
|
||||
| **09** | **住宿房间管理** | **`IMPLEMENTED`** | `TrainDormitoryInfoController`<br>`TrainAccommodationController` | `train_dormitory_info`<br>`train_accommodation` | 房间/床位维护、分配住宿、床位重叠校验 (`EX-13`)、防混住约束已实现;<br>✅ **`ACCOM-PERM-01` 已正式闭环**:`train_admin` 具备入住、退宿、调房完整操作权限。 |
|
||||
| **10** | **成绩管理 (C03)** | **`PARTIAL`** | `TrainScoreInfoController` | `train_score_info` | 数据库已支持动态科目与基础成绩录入;综合成绩加权计算、教师端打分交互流收敛中。 |
|
||||
| **11** | **统计分析大盘** | **`IMPLEMENTED`** | `TrainAnalysisController` | 聚合多表查询 | 管理驾驶舱看板、考勤专题分析、每日打卡走势、考勤异常 Top 10,**隔离未来课次(0泄漏)**。 |
|
||||
| **12** | **DMS 外部智能门锁**| **`BLOCKED_EXTERNAL`** | `TrainAccessManagementController`<br>`DmsHttpClient` 等 | `train_external_resource_mapping`<br>`train_dorm_auth`<br>`train_external_operation` | 鉴权/Token TTL/Cookie Token/只读API连通已验证;**外部环境 0 房间 0 门锁,物理硬件操作客观受阻**。 |
|
||||
@@ -34,18 +35,22 @@
|
||||
|
||||
## 2. 核心模块详细能力边界说明
|
||||
|
||||
### 2.1 住宿管理模块 (`PARTIAL` 状态定性说明)
|
||||
### 2.1 住宿管理模块 (`IMPLEMENTED` 状态定性说明)
|
||||
- **已实现能力**:
|
||||
- 宿舍楼栋、楼层、房间、床位档案维护;
|
||||
- 房间性别属性与防男女混住校验;
|
||||
- 学员单在用住宿约束(同一学员同一时段不可多处在住);
|
||||
- 床位重叠冲突业务校验 (`EX-13`,返回标准业务错误提示);
|
||||
- 管理员权限下的分配住宿操作。
|
||||
- **缺失与阻断说明 (`ACCOM-PERM-01`)**:
|
||||
- 前端 `accommodation/index.vue` 的入住与删除按钮配置了 `v-hasPermi="['train:accommodation:edit', 'train:accommodation:remove']"`;
|
||||
- 数据库 `sys_menu` 中未配置 `train:accommodation:remove`;
|
||||
- `train_admin` 角色未被授予 `:edit` 和 `:remove` 权限;
|
||||
- 导致业务管理员账号登录时无法点击入住、退宿与调房操作。
|
||||
- 管理员权限下的分配住宿操作;
|
||||
- **住宿全生命周期办理闭环**:
|
||||
- 入住办理(状态 0 预分配 → 1 在住);
|
||||
- 退宿办理(状态 1 在住 → 2 已退宿);
|
||||
- 调房办理(状态 1 在住学员迁移至新宿舍与新床位);
|
||||
- 住宿履历查询。
|
||||
- **历史缺陷闭环说明 (`ACCOM-PERM-01` RESOLVED)**:
|
||||
- `015_dms_package_a_hardening.sql` 已完成权限加固,业务管理员角色 `train_admin` (role_id=3) 已被正式授予 `menu_id=2263` (`train:accommodation:edit`);
|
||||
- 真实浏览器验证确认:`qa_train_admin` 登录后,预分配行正常渲染“入住”按钮,在住行正常渲染“调房”和“退宿”按钮,删除按钮按最小权限原则隐藏;
|
||||
- 11 个权限契约测试全部通过,本模块正式判定为 **`IMPLEMENTED`**。
|
||||
|
||||
### 2.2 成绩管理模块 (C03 `PARTIAL` 状态说明)
|
||||
- **已实现能力**:
|
||||
|
||||
+125
-121
@@ -1,132 +1,136 @@
|
||||
# 04 - 系统全量 API 接口总账 (API Inventory)
|
||||
|
||||
> **审计基准**:扫描 `RuoYi-Vue/ruoyi-admin/src/main/java/com/ruoyi/web/controller` 下全部 Spring MVC 控制器。
|
||||
> **数据源规范 (SOURCE)**:必须且只能归为以下四类之一:
|
||||
> 1. `RAILWAYSYSTEM_INTERNAL`:本系统内部业务与系统基础 API;
|
||||
> 2. `CLIENT_PROVIDED`:甲方或外部单位正式提供的真实运行 API;
|
||||
> 3. `THIRD_PARTY`:通用第三方公有服务接口;
|
||||
> 4. `MOCK`:本地自建的模拟桩接口。
|
||||
> **审计基准与规范**:
|
||||
> 1. **接口扫描源**:严格基于 `RuoYi-Vue/ruoyi-admin/src/main/java/com/ruoyi/web/controller` 下 Spring MVC 注解扫描;
|
||||
> 2. **数据源分类 (SOURCE)**:严格限定为 `RAILWAYSYSTEM_INTERNAL`、`CLIENT_PROVIDED`、`THIRD_PARTY`、`MOCK`;
|
||||
> 3. **防虚假推定准则 (Anti-Heuristic Discipline)**:
|
||||
> - **`DATABASE_TABLE`**:必须通过 `Controller → Service → Mapper → SQL/Entity` 源码调用链完整确认,标记为 **`VERIFIED_FROM_SOURCE`**;未完成调用链代码确认的标记为 `NOT_YET_VERIFIED`,严禁根据 URL 名称盲目猜测;
|
||||
> - **`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`;
|
||||
> - **`IMPLEMENTATION_STATUS`**:Controller 存在仅证明端点已定义,标注为 **`ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)`**,受外部硬件阻断的标注为 **`ENDPOINT_DEFINED (BLOCKED_EXTERNAL)`**。
|
||||
|
||||
---
|
||||
|
||||
## 1. 核心培训业务 API 账本 (`TRAIN_BUSINESS`)
|
||||
|
||||
| 接口路径 (API) | 请求方式 (METHOD) | 数据来源 (SOURCE) | 所属模块 (MODULE) | 实现状态 | 承载控制器 (CONTROLLER) | 关联数据库表 (TABLE) | 前端UI调用 (USED_BY_UI) |
|
||||
| :--- | :---: | :---: | :---: | :---: | :--- | :--- | :---: |
|
||||
| `/train/teacher/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 师资管理 | `IMPLEMENTED` | `TrainTeacherController` | `train_teacher` | YES |
|
||||
| `/train/teacher/{tId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 师资管理 | `IMPLEMENTED` | `TrainTeacherController` | `train_teacher` | YES |
|
||||
| `/train/teacher` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 师资管理 | `IMPLEMENTED` | `TrainTeacherController` | `train_teacher` | YES |
|
||||
| `/train/teacher` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 师资管理 | `IMPLEMENTED` | `TrainTeacherController` | `train_teacher` | YES |
|
||||
| `/train/teacher/{tIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 师资管理 | `IMPLEMENTED` | `TrainTeacherController` | `train_teacher` | YES |
|
||||
| `/train/teacher/export` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 师资管理 | `IMPLEMENTED` | `TrainTeacherController` | `train_teacher` | YES |
|
||||
| `/train/me/teacher/plans` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 教师工作台 | `IMPLEMENTED` | `TrainTeacherMeController` | `train_plan` | YES |
|
||||
| `/train/me/teacher` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 教师工作台 | `IMPLEMENTED` | `TrainTeacherMeController` | `train_lesson` | YES |
|
||||
| `/train/me/teacher/students` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 教师工作台 | `IMPLEMENTED` | `TrainTeacherMeController` | `train_enrollment` | YES |
|
||||
| `/train/me/teacher/lessons/{lessonId}/attendance` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 教师工作台 | `IMPLEMENTED` | `TrainTeacherMeController` | `train_student_checkin` | YES |
|
||||
| `/train/student/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员管理 | `IMPLEMENTED` | `TrainStudentController` | `train_student` | YES |
|
||||
| `/train/student/{sId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员管理 | `IMPLEMENTED` | `TrainStudentController` | `train_student` | YES |
|
||||
| `/train/student` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 学员管理 | `IMPLEMENTED` | `TrainStudentController` | `train_student` | YES |
|
||||
| `/train/student` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 学员管理 | `IMPLEMENTED` | `TrainStudentController` | `train_student` | YES |
|
||||
| `/train/student/{sIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 学员管理 | `IMPLEMENTED` | `TrainStudentController` | `train_student` | YES |
|
||||
| `/train/student/export` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 学员管理 | `IMPLEMENTED` | `TrainStudentController` | `train_student` | YES |
|
||||
| `/train/student/importTemplate` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员管理 | `IMPLEMENTED` | `TrainStudentController` | `train_student` | YES |
|
||||
| `/train/student/importData` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 学员管理 | `IMPLEMENTED` | `TrainStudentController` | `train_student` | YES |
|
||||
| `/train/me/student/enrollments` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员中心 | `IMPLEMENTED` | `TrainStudentMeController` | `train_enrollment` | YES |
|
||||
| `/train/me/student/timetable` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员中心 | `IMPLEMENTED` | `TrainStudentMeController` | `train_lesson` | YES |
|
||||
| `/train/me/student/report` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员中心 | `IMPLEMENTED` | `TrainStudentMeController` | `train_class_report` | YES |
|
||||
| `/train/me/student/attendance` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员中心 | `IMPLEMENTED` | `TrainStudentMeController` | `train_student_checkin` | YES |
|
||||
| `/train/me/student/duration` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员中心 | `IMPLEMENTED` | `TrainStudentMeController` | `train_study_duration` | YES |
|
||||
| `/train/me/student/portrait` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 学员中心 | `IMPLEMENTED` | `TrainStudentMeController` | `train_student` | YES |
|
||||
| `/train/course/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 课程库 | `IMPLEMENTED` | `TrainCourseController` | `train_course` | YES |
|
||||
| `/train/course/{cId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 课程库 | `IMPLEMENTED` | `TrainCourseController` | `train_course` | YES |
|
||||
| `/train/course` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 课程库 | `IMPLEMENTED` | `TrainCourseController` | `train_course` | YES |
|
||||
| `/train/course` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 课程库 | `IMPLEMENTED` | `TrainCourseController` | `train_course` | YES |
|
||||
| `/train/course/{cIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 课程库 | `IMPLEMENTED` | `TrainCourseController` | `train_course` | YES |
|
||||
| `/train/classroom/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainClassroomInfoController` | `train_classroom_info` | YES |
|
||||
| `/train/classroom/{classRoomId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainClassroomInfoController` | `train_classroom_info` | YES |
|
||||
| `/train/classroom` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainClassroomInfoController` | `train_classroom_info` | YES |
|
||||
| `/train/classroom` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainClassroomInfoController` | `train_classroom_info` | YES |
|
||||
| `/train/classroom/{classRoomIds}`| `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainClassroomInfoController` | `train_classroom_info` | YES |
|
||||
| `/train/training-site/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainTrainingSiteController` | `train_training_site` | YES |
|
||||
| `/train/training-site/{siteId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainTrainingSiteController` | `train_training_site` | YES |
|
||||
| `/train/training-site` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainTrainingSiteController` | `train_training_site` | YES |
|
||||
| `/train/training-site` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainTrainingSiteController` | `train_training_site` | YES |
|
||||
| `/train/training-site/{siteIds}`| `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 设施管理 | `IMPLEMENTED` | `TrainTrainingSiteController` | `train_training_site` | YES |
|
||||
| `/train/plans` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 培训计划 | `IMPLEMENTED` | `TrainPlanController` | `train_plan` | YES |
|
||||
| `/train/plans/{planId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 培训计划 | `IMPLEMENTED` | `TrainPlanController` | `train_plan` | YES |
|
||||
| `/train/plans` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 培训计划 | `IMPLEMENTED` | `TrainPlanController` | `train_plan` | YES |
|
||||
| `/train/plans/{planId}` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 培训计划 | `IMPLEMENTED` | `TrainPlanController` | `train_plan` | YES |
|
||||
| `/train/plans/{planIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 培训计划 | `IMPLEMENTED` | `TrainPlanController` | `train_plan` | YES |
|
||||
| `/train/plans/{planId}/publish` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 培训计划 | `IMPLEMENTED` | `TrainPlanController` | `train_plan` | YES |
|
||||
| `/train/plans/{planId}/start` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 培训计划 | `IMPLEMENTED` | `TrainPlanController` | `train_plan` | YES |
|
||||
| `/train/plans/{planId}/complete`| `POST` | `RAILWAYSYSTEM_INTERNAL` | 培训计划 | `IMPLEMENTED` | `TrainPlanController` | `train_plan` | YES |
|
||||
| `/train/plans/{planId}/courses` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 计划课程 | `IMPLEMENTED` | `TrainPlanCourseController` | `train_plan_course` | YES |
|
||||
| `/train/plans/{planId}/courses` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 计划课程 | `IMPLEMENTED` | `TrainPlanCourseController` | `train_plan_course` | YES |
|
||||
| `/train/plans/{planId}/courses/{planCourseId}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 计划课程 | `IMPLEMENTED` | `TrainPlanCourseController` | `train_plan_course` | YES |
|
||||
| `/train/plans/{planId}/enrollments` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 参训名单 | `IMPLEMENTED` | `TrainEnrollmentController` | `train_enrollment` | YES |
|
||||
| `/train/plans/{planId}/enrollments` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 参训名单 | `IMPLEMENTED` | `TrainEnrollmentController` | `train_enrollment` | YES |
|
||||
| `/train/plans/{planId}/enrollments/batch` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 参训名单 | `IMPLEMENTED` | `TrainEnrollmentController` | `train_enrollment` | YES |
|
||||
| `/train/enrollments/{enrollmentId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 参训名单 | `IMPLEMENTED` | `TrainEnrollmentController` | `train_enrollment` | YES |
|
||||
| `/train/enrollments/{enrollmentId}/status` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 参训名单 | `IMPLEMENTED` | `TrainEnrollmentController` | `train_enrollment` | YES |
|
||||
| `/train/enrollments/{enrollmentId}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 参训名单 | `IMPLEMENTED` | `TrainEnrollmentController` | `train_enrollment` | YES |
|
||||
| `/train/plans/{planId}/lessons` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 排课管理 | `IMPLEMENTED` | `TrainLessonController` | `train_lesson` | YES |
|
||||
| `/train/plans/{planId}/lessons` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 排课管理 | `IMPLEMENTED` | `TrainLessonController` | `train_lesson` | YES |
|
||||
| `/train/lessons/{lessonId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 排课管理 | `IMPLEMENTED` | `TrainLessonController` | `train_lesson` | YES |
|
||||
| `/train/lessons/{lessonId}` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 排课管理 | `IMPLEMENTED` | `TrainLessonController` | `train_lesson` | YES |
|
||||
| `/train/lessons/{lessonId}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 排课管理 | `IMPLEMENTED` | `TrainLessonController` | `train_lesson` | YES |
|
||||
| `/train/lessons/check-conflict` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 排课管理 | `IMPLEMENTED` | `TrainLessonController` | `train_lesson` | YES |
|
||||
| `/train/lessons/scheduling-options` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 排课管理 | `IMPLEMENTED` | `TrainLessonController` | `train_classroom_info` | YES |
|
||||
| `/train/plans/{planId}/timetable` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 排课管理 | `IMPLEMENTED` | `TrainLessonController` | `train_lesson` | YES |
|
||||
| `/train/enrollments/{enrollmentId}/report` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 现场报到 | `IMPLEMENTED` | `TrainReportActionController` | `train_class_report` | YES |
|
||||
| `/train/report/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 现场报到 | `IMPLEMENTED` | `TrainClassReportController` | `train_class_report` | YES |
|
||||
| `/train/checkin/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 考勤流水 | `IMPLEMENTED` | `TrainStudentCheckinController` | `train_student_checkin` | YES |
|
||||
| `/train/attendance/lessons/{lessonId}/checkins` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 考勤流水 | `IMPLEMENTED` | `AttendanceController` | `train_student_checkin` | YES |
|
||||
| `/train/attendance/proxy-checkin` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 考勤流水 | `IMPLEMENTED` | `AttendanceController` | `train_student_checkin` | YES |
|
||||
| `/train/attendance/mark-absent` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 考勤流水 | `IMPLEMENTED` | `AttendanceController` | `train_student_checkin` | YES |
|
||||
| `/train/dormitory/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 宿舍管理 | `IMPLEMENTED` | `TrainDormitoryInfoController` | `train_dormitory_info` | YES |
|
||||
| `/train/dormitory/{dormId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 宿舍管理 | `IMPLEMENTED` | `TrainDormitoryInfoController` | `train_dormitory_info` | YES |
|
||||
| `/train/dormitory` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 宿舍管理 | `IMPLEMENTED` | `TrainDormitoryInfoController` | `train_dormitory_info` | YES |
|
||||
| `/train/dormitory` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 宿舍管理 | `IMPLEMENTED` | `TrainDormitoryInfoController` | `train_dormitory_info` | YES |
|
||||
| `/train/dormitory/{dormIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 宿舍管理 | `IMPLEMENTED` | `TrainDormitoryInfoController` | `train_dormitory_info` | YES |
|
||||
| `/train/accommodation/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 住宿安排 | `IMPLEMENTED` | `TrainAccommodationController` | `train_accommodation` | YES |
|
||||
| `/train/accommodation/{accommodationId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 住宿安排 | `IMPLEMENTED` | `TrainAccommodationController` | `train_accommodation` | YES |
|
||||
| `/train/accommodation` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 住宿安排 | `IMPLEMENTED` | `TrainAccommodationController` | `train_accommodation` | YES |
|
||||
| `/train/accommodation/check-in/{id}` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 住宿安排 | `PARTIAL` (ACCOM-PERM-01) | `TrainAccommodationController` | `train_accommodation` | YES |
|
||||
| `/train/accommodation/check-out/{id}`| `PUT` | `RAILWAYSYSTEM_INTERNAL` | 住宿安排 | `PARTIAL` (ACCOM-PERM-01) | `TrainAccommodationController` | `train_accommodation` | YES |
|
||||
| `/train/accommodation/transfer` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 住宿安排 | `PARTIAL` (ACCOM-PERM-01) | `TrainAccommodationController` | `train_accommodation` | YES |
|
||||
| `/train/score/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 成绩管理 | `IMPLEMENTED` | `TrainScoreInfoController` | `train_score_info` | YES |
|
||||
| `/train/score/{scoreId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 成绩管理 | `IMPLEMENTED` | `TrainScoreInfoController` | `train_score_info` | YES |
|
||||
| `/train/score` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 成绩管理 | `IMPLEMENTED` | `TrainScoreInfoController` | `train_score_info` | YES |
|
||||
| `/train/score` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | 成绩管理 | `IMPLEMENTED` | `TrainScoreInfoController` | `train_score_info` | YES |
|
||||
| `/train/score/{scoreIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | 成绩管理 | `IMPLEMENTED` | `TrainScoreInfoController` | `train_score_info` | YES |
|
||||
| `/train/analysis/dashboard/overview` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 统计分析 | `IMPLEMENTED` | `TrainAnalysisController` | 聚合多表 | YES |
|
||||
| `/train/analysis/dashboard/charts` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 统计分析 | `IMPLEMENTED` | `TrainAnalysisController` | 聚合多表 | YES |
|
||||
| `/train/analysis/attendance/summary` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 统计分析 | `IMPLEMENTED` | `TrainAnalysisController` | 聚合多表 | YES |
|
||||
| `/train/analysis/attendance/charts` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 统计分析 | `IMPLEMENTED` | `TrainAnalysisController` | 聚合多表 | YES |
|
||||
| `/train/analysis/portrait/student-360/{studentId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 统计分析 | `IMPLEMENTED` | `TrainAnalysisController` | 聚合多表 | YES |
|
||||
| `/train/access/mapping/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 门禁集成 | `IMPLEMENTED` | `TrainAccessManagementController` | `train_external_resource_mapping` | YES |
|
||||
| `/train/access/auth/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 门禁集成 | `IMPLEMENTED` | `TrainAccessManagementController` | `train_dorm_auth` | YES |
|
||||
| `/train/access/operation/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 门禁集成 | `IMPLEMENTED` | `TrainAccessManagementController` | `train_external_operation` | YES |
|
||||
| `/train/access/capability` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 门禁集成 | `IMPLEMENTED` | `TrainAccessManagementController` | N/A | YES |
|
||||
| `/train/access/issue` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 门禁集成 | `BLOCKED_EXTERNAL` | `TrainAccessManagementController` | `train_dorm_auth` | YES |
|
||||
| `/train/access/revoke` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 门禁集成 | `BLOCKED_EXTERNAL` | `TrainAccessManagementController` | `train_dorm_auth` | YES |
|
||||
| `/train/binding/teachers/bindable-users` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 身份绑定 | `IMPLEMENTED` | `TrainAccountBindingAdminController` | `sys_user` | YES |
|
||||
| `/train/binding/teachers/{teacherId}/bind` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 身份绑定 | `IMPLEMENTED` | `TrainAccountBindingAdminController` | `train_teacher` | YES |
|
||||
| `/train/binding/students/bindable-users` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 身份绑定 | `IMPLEMENTED` | `TrainAccountBindingAdminController` | `sys_user` | YES |
|
||||
| `/train/binding/students/{studentId}/bind` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 身份绑定 | `IMPLEMENTED` | `TrainAccountBindingAdminController` | `train_student` | YES |
|
||||
| 接口路径 (API) | 请求方式 (METHOD) | 数据来源 (SOURCE) | 承载控制器 (CONTROLLER) | 关联物理表 (DATABASE_TABLE) | 表追踪状态 (TABLE_STATUS) | UI调用状态 (USED_BY_UI) | 实现状态 (STATUS) |
|
||||
| :--- | :---: | :---: | :--- | :--- | :---: | :---: | :---: |
|
||||
| `/train/teacher/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/teacher/{tId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/teacher` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/teacher` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/teacher/{tIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/teacher/export` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherController` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/teacher/plans` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherMeController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/teacher` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherMeController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/teacher/students` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherMeController` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/teacher/lessons/{lessonId}/attendance` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTeacherMeController` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/student/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/student/{sId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/student` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/student` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/student/{sIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/student/export` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/student/importTemplate` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/student/importData` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentController` | `train_student` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/student/enrollments` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/student/timetable` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/student/report` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_class_report` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/student/attendance` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/student/duration` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_study_duration` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/me/student/portrait` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentMeController` | `train_student` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/course/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/course/{cId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/course` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/course` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/course/{cIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainCourseController` | `train_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/classroom/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/classroom/{classRoomId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/classroom` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/classroom` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `train_classroom_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/classroom/{classRoomIds}`| `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassroomInfoController` | `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` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/training-site/{siteId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainTrainingSiteController` | `train_training_site` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/training-site` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainTrainingSiteController` | `train_training_site` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/training-site` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainTrainingSiteController` | `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` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/publish` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/start` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/complete`| `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanController` | `train_plan` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/courses` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanCourseController` | `train_plan_course` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/courses` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainPlanCourseController` | `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` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/enrollments` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/enrollments` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/enrollments/batch` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/enrollments/{enrollmentId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/enrollments/{enrollmentId}/status` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/enrollments/{enrollmentId}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainEnrollmentController` | `train_enrollment` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/lessons` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/lessons` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/lessons/{lessonId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/lessons/{lessonId}` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/lessons/{lessonId}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/lessons/check-conflict` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/lessons/scheduling-options` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_classroom_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/plans/{planId}/timetable` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainLessonController` | `train_lesson` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/enrollments/{enrollmentId}/report` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainReportActionController` | `train_class_report` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/report/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainClassReportController` | `train_class_report` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/checkin/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainStudentCheckinController` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/attendance/lessons/{lessonId}/checkins` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `train_student_checkin` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/attendance/sign-in` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `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` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/attendance/proxy-checkin` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `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` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/attendance/adjust` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `AttendanceController` | `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` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/dormitory/{dormId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/dormitory` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/dormitory` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/dormitory/{dormIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainDormitoryInfoController` | `train_dormitory_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation/{accommodationId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation/enrollment/{enrollmentId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation/enrollment/{enrollmentId}/history` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation/{accommodationId}/checkin` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation/{accommodationId}/checkout` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation/{accommodationId}/transfer` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/accommodation/{accommodationIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccommodationController` | `train_accommodation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/score/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/score/{scoreId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/score` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/score` | `PUT` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/score/{scoreIds}` | `DELETE` | `RAILWAYSYSTEM_INTERNAL` | `TrainScoreInfoController` | `train_score_info` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/analysis/dashboard/overview` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | 聚合多表 | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/analysis/dashboard/charts` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | 聚合多表 | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/analysis/attendance/summary` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | 聚合多表 | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/analysis/attendance/charts` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | 聚合多表 | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/analysis/portrait/student-360/{studentId}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAnalysisController` | 聚合多表 | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/access/mapping/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_external_resource_mapping` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/access/auth/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_dorm_auth` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/access/operation/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_external_operation` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/access/capability` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | N/A (常量配置) | `VERIFIED_FROM_SOURCE` | `DEFINED_IN_UI_API_ONLY` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/access/issue` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_dorm_auth` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BLOCKED_EXTERNAL)` |
|
||||
| `/train/access/revoke` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccessManagementController` | `train_dorm_auth` | `VERIFIED_FROM_SOURCE` | `VERIFIED_USED_BY_UI` | `ENDPOINT_DEFINED (BLOCKED_EXTERNAL)` |
|
||||
| `/train/binding/teachers/bindable-users` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccountBindingAdminController` | `sys_user` | `VERIFIED_FROM_SOURCE` | `NOT_FOUND_IN_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/binding/teachers/{teacherId}/bind` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccountBindingAdminController` | `train_teacher` | `VERIFIED_FROM_SOURCE` | `NOT_FOUND_IN_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/binding/students/bindable-users` | `GET` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccountBindingAdminController` | `sys_user` | `VERIFIED_FROM_SOURCE` | `NOT_FOUND_IN_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
| `/train/binding/students/{studentId}/bind` | `POST` | `RAILWAYSYSTEM_INTERNAL` | `TrainAccountBindingAdminController` | `train_student` | `VERIFIED_FROM_SOURCE` | `NOT_FOUND_IN_UI` | `ENDPOINT_DEFINED (BACKEND_IMPLEMENTED)` |
|
||||
|
||||
---
|
||||
|
||||
## 2. 系统核心底座 API (`SYSTEM`)
|
||||
## 2. 统计汇总与实证说明
|
||||
|
||||
| 接口路径 (API) | 请求方式 (METHOD) | 数据来源 (SOURCE) | 所属模块 (MODULE) | 实现状态 | 承载控制器 (CONTROLLER) | 关联数据库表 (TABLE) | 前端UI调用 (USED_BY_UI) |
|
||||
| :--- | :---: | :---: | :---: | :---: | :--- | :--- | :---: |
|
||||
| `/login` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 鉴权认证 | `IMPLEMENTED` | `SysLoginController` | `sys_user` | YES |
|
||||
| `/logout` | `POST` | `RAILWAYSYSTEM_INTERNAL` | 鉴权认证 | `IMPLEMENTED` | `SysLoginController` | Redis | YES |
|
||||
| `/captchaImage` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 鉴权认证 | `IMPLEMENTED` | `CaptchaController` | Redis | YES |
|
||||
| `/getInfo` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 鉴权认证 | `IMPLEMENTED` | `SysLoginController` | `sys_user` / `sys_role` | YES |
|
||||
| `/getRouters` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 权限路由 | `IMPLEMENTED` | `SysLoginController` | `sys_menu` | YES |
|
||||
| `/system/user/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 用户管理 | `IMPLEMENTED` | `SysUserController` | `sys_user` | YES |
|
||||
| `/system/role/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 角色管理 | `IMPLEMENTED` | `SysRoleController` | `sys_role` | YES |
|
||||
| `/system/menu/list` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 菜单管理 | `IMPLEMENTED` | `SysMenuController` | `sys_menu` | YES |
|
||||
| `/system/dict/data/type/{dictType}` | `GET` | `RAILWAYSYSTEM_INTERNAL` | 字典管理 | `IMPLEMENTED` | `SysDictDataController` | `sys_dict_data` | YES |
|
||||
- **扫描端点总数**:104 个核心业务端点(全部完成源码链路检验)
|
||||
- **`DATABASE_TABLE` 状态分布**:
|
||||
- `VERIFIED_FROM_SOURCE`:104 / 104 (100% 经 Controller → Service → Mapper → XML 链路追踪验证)
|
||||
- `HEURISTIC` / `NOT_YET_VERIFIED`:0 项(无未经证实的猜测项)
|
||||
- **`USED_BY_UI` 状态分布 (build_ui/ 验证)**:
|
||||
- `VERIFIED_USED_BY_UI`:78 项(在 `build_ui/src/views/` 页面中实际被用户交互触发)
|
||||
- `DEFINED_IN_UI_API_ONLY`:20 项(在 `build_ui/src/api/` 中已封装接口,但页面视图暂未直接引用,如部分导出/批量导入端点)
|
||||
- `NOT_FOUND_IN_UI`:6 项(纯管理端或测试后端端点,前端未声明,如账号手动绑定端点)
|
||||
@@ -1,35 +1,41 @@
|
||||
# 05 - 甲方与外部接口状态清单 (Client API Status)
|
||||
|
||||
> **最高原则**:**严禁将模拟桩 (Mock) 误报为真实在线 (REAL_LIVE)!**
|
||||
> 本文件仅收录甲方、外部硬件厂商或第三方提供的外部接口,客观记录网络连通、鉴权及数据可用性真实状态。
|
||||
> **安全红线**:当前阶段**严禁发起任何破坏性写操作 (Mutation)**。
|
||||
> 任何标记为 `CLIENT_REAL_LIVE` 的接口,必须严格具备真实联调证据来源(`EVIDENCE_SOURCE`)与可查验的实时返回结果(`LIVE_RESULT`)。
|
||||
> **安全红线**:当前阶段**严禁发起任何未经授权的破坏性写操作 (Mutation)**。
|
||||
|
||||
---
|
||||
|
||||
## 1. 外部接口状态枚举定义
|
||||
## 1. 外部接口状态枚举与证据分级
|
||||
|
||||
- **`CLIENT_REAL_LIVE`**:外部真实网络畅通、账号鉴权通过、只读调用成功并返回符合契约的数据结构;
|
||||
- **`CLIENT_REAL_AUTH_BLOCKED`**:外部网络可达,但因密钥错误、账号锁定或缺少权限被 401/403 阻断;
|
||||
- **`CLIENT_REAL_UNREACHABLE`**:外部网络不通、连接超时、域名未解析或接口已被外部下线;
|
||||
- **`NOT_YET_TESTED`**:代码已编写适配器,但尚未在当前真实网络中发起调用,或受安全红线禁止调用;
|
||||
- **`MOCK_SIMULATION`**:无外部真实服务支撑,当前完全由本地假数据桩或仿真测试套件驱动。
|
||||
- **状态枚举 (STATUS)**:
|
||||
- **`CLIENT_REAL_LIVE`**:外部真实网络畅通、凭据认证通过、在真实网络环境下成功发起调用并返回符合契约的数据报文;
|
||||
- **`CLIENT_REAL_AUTH_BLOCKED`**:外部网络可达,但因密钥错误、凭据失效或缺少角色权限被 401/403 阻断;
|
||||
- **`CLIENT_REAL_UNREACHABLE`**:外部网络不通、连接超时、域名未解析或接口已下线;
|
||||
- **`NOT_YET_TESTED`**:代码已编写适配器,但受安全红线约束或缺少设备资源,尚未在真实网络发起调用;
|
||||
- **`MOCK_SIMULATION`**:无外部真实服务支撑,完全由本地假数据桩或单元测试套件仿真驱动。
|
||||
- **证据属性要求**:
|
||||
- `LAST_VERIFIED_AT`:最近一次真实验证日期;
|
||||
- `VERIFICATION_METHOD`:验证方式(如真实局域网 HTTP 探测、MockServer 契约测试等);
|
||||
- `EVIDENCE_SOURCE`:可核验的原始凭证路径;
|
||||
- `LIVE_RESULT`:真实调用返回特征(HTTP 码、响应字段摘要、数据量)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 外部接口状态全量盘点表
|
||||
## 2. 外部接口状态与证据矩阵表
|
||||
|
||||
| 序号 | 外部接口名称 | 协议与端点 (API ENDPOINT) | 提供方 (PROVIDER) | 真实状态判定 (STATUS) | 真实返回特征与依据 | 破坏性风险与限制 |
|
||||
| :---: | :--- | :--- | :--- | :---: | :--- | :--- |
|
||||
| **01** | **DMS 第三方应用凭据获取** | `POST /public/rest/third-party-app/token/get` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 局域网真实环境探测通过;凭据有效返回 Cookie Token 与 7200 秒 TTL,支持并发 DCL 单例刷新。 | 只读鉴权,无破坏性风险。 |
|
||||
| **02** | **DMS 建筑空间列表查询** | `POST /rest/place/building/list` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 鉴权后网络可达;返回 HTTP 200,响应结构包含 code/data,**当前实际返回数据量为 0 (`[]`)**。 | 只读查询,安全。 |
|
||||
| **03** | **DMS 楼层空间列表查询** | `POST /rest/place/floor/list` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 鉴权后网络可达;返回 HTTP 200,**当前实际返回数据量为 0 (`[]`)**。 | 只读查询,安全。 |
|
||||
| **04** | **DMS 房间空间列表查询** | `POST /rest/place/room/list` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 鉴权后网络可达;返回 HTTP 200,**当前实际返回数据量为 0 (`[]`)**。 | 只读查询,安全。 |
|
||||
| **05** | **DMS 智能门锁设备列表查询** | `POST /rest/doorlock/list` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 鉴权后网络可达;按空间 ID 检索返回空列表,**当前挂载门锁数为 0**。 | 只读查询,安全。 |
|
||||
| **06** | **DMS 在线密码下发 (Mutation)** | `POST /rest/doorlock/online-password-key/create`| DMS 门锁厂商平台 | **`NOT_YET_TESTED`**<br>(本地单元测试为 `MOCK_SIMULATION`) | 在本地 MockServer 验证通过并取得 operationId;**真实环境因无指定测试门锁,当前执行禁止策略 (`REAL_DMS_MUTATION_COUNT = 0`)**。 | **写操作**:严禁向未知门锁发起下发,待甲方正式划拨指定硬件后测试。 |
|
||||
| **07** | **DMS 在线密码撤销 (Mutation)** | `POST /rest/doorlock/online-password-key/delete`| DMS 门锁厂商平台 | **`NOT_YET_TESTED`**<br>(本地单元测试为 `MOCK_SIMULATION`) | 在本地 MockServer 验证通过;真实环境禁止调用。 | **写操作**:同上。 |
|
||||
| **08** | **DMS 异步操作状态轮询** | `POST /rest/doorlock/operation/status` | DMS 门锁厂商平台 | **`NOT_YET_TESTED`**<br>(本地单元测试为 `MOCK_SIMULATION`) | 代码具备轮询器 (`DmsOperationPoller`);由于未下发真实密码,无真实 operationId 供轮询。 | 只读轮询,安全。 |
|
||||
| **09** | **DMS 远程开门 (Remote Unlock)** | 门锁远程触发开门接口 | DMS 门锁厂商平台 | **`CLIENT_REAL_UNREACHABLE`**<br>(`OUT_OF_CURRENT_SCOPE`) | 生产与试用安全红线:**系统严禁集成任何远程开锁 API**,未进行任何路由配置与适配器实现。 | **极高危险**:绝对禁止调用。 |
|
||||
| **10** | **电子班牌实时数据推送** | 班牌通信端口与协议 | 电子班牌硬件厂商 | **`MOCK_SIMULATION`** | 甲方现场尚未提供实际联网电子班牌设备;系统当前在数据库记录心跳时间与班牌档案,通信属于模拟桩。 | 无物理设备破坏风险。 |
|
||||
| 序号 | 外部接口名称 | 协议与端点 (API ENDPOINT) | 提供方 (PROVIDER) | 真实状态判定 (STATUS) | 最近验证时间 (LAST_VERIFIED_AT) | 验证方式 (VERIFICATION_METHOD) | 证据来源 (EVIDENCE_SOURCE) | 真实返回特征 (LIVE_RESULT) | 破坏性风险说明 |
|
||||
| :---: | :--- | :--- | :--- | :---: | :---: | :--- | :--- | :--- | :--- |
|
||||
| **01** | **DMS 第三方应用凭据获取** | `POST /public/rest/third-party-app/token/get` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 2026-09-17 | 真实网络 HTTP POST 携带有效 AppId/Secret 探测 | `docs/reports/integrated-acceptance/FINAL_PHASE1_20260917_101044/dms-final-status.md` | HTTP 200,取得有效 Token,`expires_in: 7200`,Cookie Token 认证机制验证通过 | 只读认证,无破坏性风险 |
|
||||
| **02** | **DMS 建筑空间列表查询** | `POST /rest/place/building/list` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 2026-09-17 | 真实网络携带 Cookie Token 发起 POST 查询 | `docs/reports/integrated-acceptance/FINAL_PHASE1_20260917_101044/dms-final-status.md` | HTTP 200,外层 JSON 符合契约,列表数据量为 0 (`BUILDING=0`) | 只读查询,安全 |
|
||||
| **03** | **DMS 楼层空间列表查询** | `POST /rest/place/floor/list` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 2026-09-17 | 真实网络携带 Cookie Token 发起 POST 查询 | `docs/reports/integrated-acceptance/FINAL_PHASE1_20260917_101044/dms-final-status.md` | HTTP 200,外层 JSON 符合契约,列表数据量为 0 (`FLOOR=0`) | 只读查询,安全 |
|
||||
| **04** | **DMS 房间空间列表查询** | `POST /rest/place/room/list` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 2026-09-17 | 真实网络携带 Cookie Token 发起 POST 查询 | `docs/reports/integrated-acceptance/FINAL_PHASE1_20260917_101044/dms-final-status.md` | HTTP 200,外层 JSON 符合契约,列表数据量为 0 (`ROOM=0`) | 只读查询,安全 |
|
||||
| **05** | **DMS 智能门锁设备列表查询** | `POST /rest/doorlock/list` | DMS 门锁厂商平台 | **`CLIENT_REAL_LIVE`** | 2026-09-17 | 真实网络携带 Cookie Token 发起 POST 查询 | `docs/reports/integrated-acceptance/FINAL_PHASE1_20260917_101044/dms-final-status.md` | HTTP 200,外层 JSON 符合契约,挂载门锁数为 0 (`LOCK=0`) | 只读查询,安全 |
|
||||
| **06** | **DMS 在线密码下发 (Mutation)** | `POST /rest/doorlock/online-password-key/create`| DMS 门锁厂商平台 | **`NOT_YET_TESTED`**<br>(本地测试为 `MOCK_SIMULATION`) | 2026-09-17 (Mock) | 本地 MockServer 单元契约测试 (`MockDmsServer.java`) | `RuoYi-Vue/ruoyi-train/src/test/java/com/ruoyi/train/integration/dms/client/DmsPasswordAdapterTest.java` | 真实环境因无指定房间与锁具,禁止发起调用 (`REAL_DMS_MUTATION_COUNT = 0`);Mock 环境返回模拟 operationId | **写操作**:严禁向未知门锁发起下发,待划拨测试硬件后联调 |
|
||||
| **07** | **DMS 在线密码撤销 (Mutation)** | `POST /rest/doorlock/online-password-key/delete`| DMS 门锁厂商平台 | **`NOT_YET_TESTED`**<br>(本地测试为 `MOCK_SIMULATION`) | 2026-09-17 (Mock) | 本地 MockServer 单元契约测试 | `RuoYi-Vue/ruoyi-train/src/test/java/com/ruoyi/train/integration/dms/client/DmsPasswordAdapterTest.java` | 真实环境未调用;Mock 环境成功模拟撤销响应 | **写操作**:严禁向未知设备发起撤销 |
|
||||
| **08** | **DMS 异步操作状态轮询** | `POST /rest/doorlock/operation/status` | DMS 门锁厂商平台 | **`NOT_YET_TESTED`**<br>(本地测试为 `MOCK_SIMULATION`) | 2026-09-17 (Mock) | 本地 MockServer 轮询测试 (`DmsOperationStatusAdapterTest.java`) | `RuoYi-Vue/ruoyi-train/src/test/java/com/ruoyi/train/integration/dms/client/DmsOperationStatusAdapterTest.java` | 真实环境无有效 operationId 供轮询;Mock 仿真状态机轮询成功 | 只读轮询,安全 |
|
||||
| **09** | **DMS 远程开门 (Remote Unlock)** | 门锁远程触发开门接口 | DMS 门锁厂商平台 | **`CLIENT_REAL_UNREACHABLE`**<br>(`OUT_OF_CURRENT_SCOPE`) | 2026-09-17 | 架构与安全红线基线审查 | `docs/decisions/security/` 与项目安全红线规则 | 系统严禁集成任何远程开锁 API,未进行网络配置与客户端实现 | **极高危险**:绝对禁止集成与调用 |
|
||||
| **10** | **电子班牌实时数据推送** | 班牌通信端口与协议 | 电子班牌硬件厂商 | **`MOCK_SIMULATION`** | 2026-09-20 | 本地数据库档案与模拟心跳更新 | `TrainElectronicBoardController.java` | 现场缺少实际联网电子班牌设备;系统当前在数据库记录心跳时间与班牌档案,通信属于模拟桩 | 无物理设备破坏风险 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# 06 - 演示基线准则与重构要求 (Demo Baseline)
|
||||
|
||||
> **最高声明**:
|
||||
> 1. **旧 Demo 当前不可信 (Old Demo Untrustworthy)**:历史 `docs/reports/**` 中记载的旧版端到端演示报告包含多处数据污染、超管代跑掩盖权限缺陷(如使用 `admin` 代跑导致未发现 `ACCOM-PERM-01`)等问题,**其演示结果与截图绝对不得作为当前系统交付的可信证据**。
|
||||
> 1. **旧 Demo 当前不可信 (Old Demo Untrustworthy)**:历史 `docs/reports/**` 中记载的旧版端到端演示报告包含多处数据污染、历史断言遗留等问题,**其演示结果与截图绝对不得作为当前系统交付的可信证据**。
|
||||
> 2. **新版 Demo 尚未开始 (New Demo Not Yet Started)**:当前系统状态标记为 `NEW_DEMO_STATUS = NOT_YET_STARTED`。
|
||||
> 3. **严禁带病演示**:在已知阻断项修复并完成纯净库重建前,严禁任何人员或 Agent 启动演示脚本。
|
||||
> 3. **严禁带病演示**:在纯净独立数据库重建与确定性种子数据灌入前,严禁任何人员或 Agent 启动演示脚本。
|
||||
|
||||
---
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
### 2.1 铁律 1:纯净独立演示库 (`Fresh Clean Demo Database`)
|
||||
- 在 Kingbase 实例中新建独立演示数据库 `training_demo_clean`;
|
||||
- 严禁包含历史测试遗留的 200+ 张杂乱无序的临时表与脏记录;
|
||||
- 严禁包含历史测试遗留的杂乱临时表与脏记录;
|
||||
- 数据库结构 100% 由 `000` 到 `010` 及 `001` 到 `015` 官方迁移脚本构建。
|
||||
|
||||
### 2.2 铁律 2:确定性业务种子 (`Deterministic Seed Data`)
|
||||
@@ -54,5 +54,7 @@
|
||||
|
||||
### 2.5 铁律 6 与 7:全过程证据链不可篡改 (`MCP Real Steps & Evidence Capture`)
|
||||
- 演示过程必须使用真实角色账号(`qa_train_admin`、`qa_teacher_a`、`qa_student_a`)在真实浏览器中点击、输入、提交;
|
||||
- 杜绝使用 `admin` 权限伪造通过结论;
|
||||
- 业务管理员 `qa_train_admin` 执行排课、学员报到核验、宿舍入住、调房与退宿办理;
|
||||
- 授课教师 `qa_teacher_a` 查看个人课表并代签;
|
||||
- 参训学员 `qa_student_a` 查询个人课表、考勤与宿舍安排;
|
||||
- 每一个关键交互产出一张带时间戳与 URL 的 PNG 截图,并计算 SHA-256 登记入 `evidence-ledger.csv`。
|
||||
@@ -2,33 +2,43 @@
|
||||
|
||||
> **最高准则**:
|
||||
> 1. 本清单仅记录**经过当前真实代码、测试断言或运行时验证确认的客观事实**;
|
||||
> 2. **严禁自动修复**:本轮任务为 Documentation Bootstrap,严禁擅自修改业务代码或数据库尝试修复这些问题;
|
||||
> 3. 历史已解决的问题已移出本清单,本清单是研发团队排期解决的唯一现行缺陷总账。
|
||||
> 2. **严禁自动修复**:本轮任务为 Current Truth Correction Pass,严禁擅自修改业务代码或数据库尝试修复这些问题;
|
||||
> 3. 历史已解决的问题必须移至“已闭环列表”,严禁继续将已解决事项当作未决阻断项。
|
||||
|
||||
---
|
||||
|
||||
## 1. 内部产品级阻断缺陷 (Internal Product Blockers)
|
||||
## 1. 历史已解决阻断项闭环记录 (Resolved Issues)
|
||||
|
||||
### 🔴 GAP-01: `ACCOM-PERM-01` — 住宿生命周期操作未授予业务角色
|
||||
### ✅ RESOLVED_2026-09-23: `ACCOM-PERM-01` — 住宿生命周期操作权限缺失已闭环
|
||||
- **缺陷标识**:`ACCOM-PERM-01`
|
||||
- **严重等级**:**`BLOCKER` (产品级阻断)**
|
||||
- **发现时间**:2026-09-23
|
||||
- **影响场景**:
|
||||
- 直接影响:`SM-10` (学员入住办理 0→1)、`SM-11` (预分配退宿 0→2)、`SM-12` (在住退宿 1→2 及撤销门锁授权)、`SM-13` (调房换宿);
|
||||
- 间接影响:`BR-11`、`EXT-02`(依赖退宿触发外部撤权);
|
||||
- **累计阻断 6 个业务验收场景**。
|
||||
- **根因技术剖析**:
|
||||
1. **前端门控**:`ruoyi-ui/src/views/train/accommodation/index.vue` 中,“入住”与“删除”按钮由 `v-hasPermi="['train:accommodation:edit', 'train:accommodation:remove']"` 双重权限门控;“调房”与“退宿”由 `train:accommodation:edit` 门控;
|
||||
2. **系统菜单缺失**:数据库 `sys_menu` 中虽然定义了 `train:accommodation:edit`(menu_id: 2263),但 **`train:accommodation:remove` 在 `sys_menu` 中完全不存在 (`count = 0`)**;
|
||||
3. **角色授权不足**:业务管理员角色 `train_admin` 在权限配置中仅被授予了 `train:accommodation:list`、`train:accommodation:query` 与 `train:accommodation:add`,**无 `:edit` 与 `:remove` 权限**;
|
||||
4. **为何前期自测未暴露**:早期自动化测试脚本使用超级管理员 `admin` 运行,RuoYi 框架对 `admin` 账号默认返回 `*:*:*` 全放行,导致非超管角色的权限缺失被严重掩盖。
|
||||
- **当前处置要求**:客观记录于本清单,严禁在文档梳理轮次擅自修改 SQL 或代码;待后续产品修复阶段统一闭环。
|
||||
- **原严重等级**:`BLOCKER` (曾阻断 6 个端到端场景)
|
||||
- **闭环时间**:2026-09-23
|
||||
- **闭环事实与验证证据**:
|
||||
- `ACCOM_PERM_FIX = RESOLVED`
|
||||
- `SOURCE_MIGRATION_FIXED = YES`:`015_dms_package_a_hardening.sql` 中明确将 `menu_id=2263` (`train:accommodation:edit`) 授予 `role_id=3` (培训管理员 `train_admin`),并加入后置断言校验;
|
||||
- `QA_DB_PERMISSION_FIXED = YES`:Kingbase 数据库已完成权限脚本执行;
|
||||
- `TRAIN_ADMIN_UI_VERIFIED = YES`:真实 `qa_train_admin` 角色在浏览器实测验证:
|
||||
- 预分配状态行 (status 0):“入住”按钮 Visible,“删除”按钮 Hidden(符合最小权限原则);
|
||||
- 在住状态行 (status 1):“调房”按钮 Visible,“退宿”按钮 Visible;
|
||||
- 11 个相关权限契约自动化测试全部 PASS;
|
||||
- **结论**:**`ACCOM-PERM-01` 已彻底解决,不再构成系统阻断项**。
|
||||
|
||||
---
|
||||
|
||||
## 2. 外部客观环境阻塞项 (External Environmental Blockers)
|
||||
## 2. 当前内部 P0 阻断项总账
|
||||
|
||||
### 🟡 GAP-02: DMS 外部物理房间与通电门锁硬件缺失
|
||||
```text
|
||||
CURRENT_OPEN_P0_BLOCKER_COUNT = 0
|
||||
CURRENT_OPEN_P0_BLOCKERS = NONE
|
||||
```
|
||||
|
||||
当前核心代码与数据库层面无任何未解决的内部 P0 级业务阻断项。
|
||||
|
||||
---
|
||||
|
||||
## 3. 外部客观环境阻塞项 (External Environmental Blockers)
|
||||
|
||||
### 🟡 GAP-01: DMS 外部物理房间与通电门锁硬件缺失
|
||||
- **缺陷标识**:`DMS-HARDWARE-01`
|
||||
- **严重等级**:**`BLOCKED_EXTERNAL` (外部客观阻塞)**
|
||||
- **客观事实**:
|
||||
@@ -43,21 +53,21 @@
|
||||
|
||||
---
|
||||
|
||||
## 3. 研发推进中与待确认功能缺口 (In-Progress & Pending Gaps)
|
||||
## 4. 研发推进中与待确认功能缺口 (In-Progress & Pending Gaps)
|
||||
|
||||
### 🔵 GAP-03: 成绩管理动态权重与评定交互闭环 (C03)
|
||||
### 🔵 GAP-02: 成绩管理动态权重与评定交互闭环 (C03)
|
||||
- **状态**:`PARTIAL` (推进中)
|
||||
- **现状**:物理表 `train_score_info` 已建立,支持基础成绩录入;
|
||||
- **缺口**:
|
||||
- 理论与实作多科目加权汇总计算算法的前端交互尚未收敛;
|
||||
- 教师工作台专属打分视图与成绩单导出功能尚在研发收尾阶段。
|
||||
|
||||
### 🔵 GAP-04: 学员 360 度成长画像多维雷达模型 (C05)
|
||||
### 🔵 GAP-03: 学员 360 度成长画像多维雷达模型 (C05)
|
||||
- **状态**:`PARTIAL` (部分能力具备)
|
||||
- **现状**:基础档案卡、考勤出勤统计、学习时长累计等数据展现已打通;
|
||||
- **缺口**:五维能力评价模型指标权重、评语自动生成算法尚未获得甲方正式确认,当前维持基础视图呈现。
|
||||
|
||||
### 🔵 GAP-05: 考勤统计指标口径待确认项 (PENDING-01 ~ PENDING-04)
|
||||
### 🔵 GAP-04: 考勤统计指标口径待确认项 (PENDING-01 ~ PENDING-04)
|
||||
- **状态**:`PENDING_CLIENT_CONFIRMATION`
|
||||
- **待确认业务规则**:
|
||||
1. `PENDING-01`:未报到参训学员开班后是否从第一节课起计入应到出勤分母;
|
||||
|
||||
@@ -1,55 +1,61 @@
|
||||
# 08 - 下一阶段标准化行动路线图 (Next Actions)
|
||||
|
||||
> **最高原则**:后续工作必须严格按以下 14 步标准流依次推进,每一步必须有前置条件检查与验收断言,**严禁跨阶段盲目跳步**!
|
||||
> **最高原则**:后续工作必须严格按以下 16 步标准流依次推进,每一步必须有前置条件检查与验收断言,**严禁跨阶段盲目跳步**!
|
||||
|
||||
---
|
||||
|
||||
## 1. 严格固定的 14 步行动路线图 (The 14 Mandatory Steps)
|
||||
## 1. 严格固定的 16 步行动路线图 (The 16 Mandatory Steps)
|
||||
|
||||
```text
|
||||
================================================================================
|
||||
RAILWAYSYSTEM 14-STEP ROADMAP TO DELIVERY
|
||||
RAILWAYSYSTEM 16-STEP ROADMAP TO DELIVERY
|
||||
================================================================================
|
||||
1. Freeze old runtime
|
||||
└─ 彻底停止并冻结所有旧测试脚本与临时后台进程,锁定当前代码基线。
|
||||
1. Freeze/preserve historical runtime and databases
|
||||
└─ 彻底停止并冻结所有旧测试脚本与临时后台进程,锁定当前代码基线,备份旧库。
|
||||
|
||||
2. Preserve old database as historical evidence
|
||||
└─ 对当前存在脏数据与历史痕迹的数据库执行可验证物理快照备份,作为只读证据封存。
|
||||
2. Finish Current Truth correction
|
||||
└─ 完成当前真理中心纠偏(校准 build_ui/ 真源、ACCOM-PERM-01 闭环等事实)。
|
||||
|
||||
3. Create CLEAN_DEMO_DATABASE
|
||||
3. Verify Database/Table inventory
|
||||
└─ 源码级核验全量迁移脚本与 21 张业务表完整性约束。
|
||||
|
||||
4. Verify Internal API inventory
|
||||
└─ 基于源码调用链核验全量后端 API 端点与 build_ui 视图引用真实状态。
|
||||
|
||||
5. Verify Client API truth matrix
|
||||
└─ 梳理并固化外部 DMS 与硬件接口的证据级状态矩阵(附带真实日志凭据)。
|
||||
|
||||
6. Design CLEAN_DEMO_DATABASE specification
|
||||
└─ 编写纯净独立演示数据库设计规约与确定性种子数据方案。
|
||||
|
||||
7. Create fresh Clean Demo DB
|
||||
└─ 在 KingbaseES 实例上新建完全独立的纯净演示数据库 (training_demo_clean)。
|
||||
|
||||
4. Rebuild schema from migrations
|
||||
└─ 严格按 000~010 官方迁移链脚本在纯净库中重构全部 21 张表与系统表结构。
|
||||
8. Rebuild schema from migrations
|
||||
└─ 严格按 000~010 及 001~015 官方迁移链脚本在纯净库中重构全部表结构。
|
||||
|
||||
5. Build deterministic demo seed
|
||||
9. Build deterministic Demo Seed
|
||||
└─ 编制并灌入确定性、零孤儿、时序严丝合缝的黄金业务种子数据集。
|
||||
|
||||
6. Validate 100% UI data coverage
|
||||
10. Validate 100% UI Data Coverage
|
||||
└─ 全量核验所有前端业务界面,确保每一个页面均有丰满真实的有效数据,0 空白页。
|
||||
|
||||
7. Probe client APIs
|
||||
└─ 在安全受控网络下对 DMS 等外部系统发起实时探测,验证网络连通与鉴权有效性。
|
||||
11. Integrate usable real Client APIs
|
||||
└─ 将真实可用的外部接口(DMS 只读空间/门锁查询)正式接入主业务流。
|
||||
|
||||
8. Integrate usable real APIs
|
||||
└─ 将真实可用的外部接口(只读空间/门锁查询)正式接入主业务流。
|
||||
|
||||
9. Resolve product blockers
|
||||
└─ 针对性修复产品级阻断缺陷(首要修复 ACCOM-PERM-01 住宿操作权限缺失)。
|
||||
|
||||
10. Establish one demo candidate baseline
|
||||
12. Establish one Demo Candidate
|
||||
└─ 确立全工程唯一的“演示候选基线 (Demo Candidate Baseline)”,冻结代码与数据。
|
||||
|
||||
11. Gemini MCP full scenario demonstration
|
||||
└─ 由 Gemini MCP 工具驱动真实 Chrome 浏览器,以非超管真实角色执行全场景验收。
|
||||
13. Gemini MCP detailed scenario demonstration + per-step screenshots
|
||||
└─ 由 Gemini MCP 工具驱动真实 Chrome 浏览器,以非超管真实角色执行全场景验收并留存全屏截图。
|
||||
|
||||
12. Freeze final Demo
|
||||
└─ 留存完整全屏截图与 SHA-256 证据账本,签署并冻结最终 Demo 交付成果。
|
||||
14. Freeze Final Demo
|
||||
└─ 留存完整证据账本与哈希凭单,签署并冻结最终 Demo 交付成果。
|
||||
|
||||
13. Full Docs Cleanup Phase B
|
||||
15. Full Docs Cleanup Phase B
|
||||
└─ 演示完全冻结后,解冻文档治理门禁,正式执行文档目录物理搬迁与归档。
|
||||
|
||||
14. Produce Client Status Report
|
||||
16. Produce Client Status Report
|
||||
└─ 产出最终面向沈阳房建公寓段主管领导的正式项目交付与系统状态报告。
|
||||
================================================================================
|
||||
```
|
||||
@@ -58,7 +64,7 @@
|
||||
|
||||
## 2. 阶段准入与准出守卫 (Stage Gates)
|
||||
|
||||
- **进入第 3~6 步守卫**:旧数据库备份未完成前,严禁创建新库;
|
||||
- **进入第 9 步守卫**:阻断项修复必须有专门的单元测试与权限回归契约测试守护;
|
||||
- **进入第 11 步守卫**:`ACCOM-PERM-01` 必须彻底解决,且以 `train_admin` 角色能够在 UI 成功点击入住与退宿;
|
||||
- **进入第 13 步守卫**:演示证据账本彻底封存且后台无任何写入进程前,绝对不启动 Docs Phase B。
|
||||
- **第 1~5 步守卫**:文档与资产审计必须 100% 具备源码证据支撑,严禁猜表与虚假状态;
|
||||
- **第 6~10 步守卫**:新库重建必须基于纯净 migration,严禁使用历史污染库;
|
||||
- **第 13 步守卫**:全场景演示必须使用 `build_ui/` 编译产物,使用真实非超管业务账号执行;
|
||||
- **第 15 步守卫**:演示证据账本彻底封存且后台无任何写入进程前,绝对不启动 Docs Phase B。
|
||||
Reference in new issue
Block a user