Files
railwaysystem/DEMO_RUNBOOK.md
T

8.4 KiB
Raw Blame History

SYFJGYD学员管理系统(融合演示版)— Clean Demo Candidate 运行与演示说明书

一、系统概况

本工程为 SYFJGYD学员管理系统 的隔离融合演示候选版本(Clean Demo Candidate),集成了 Java 21 + Spring Boot 4 架构升级、培训管理业务(学员、班级、住宿全周期)与智能门锁 IoT 协同授权中枢。

核心演示原则

  • 数据源隔离:严格运行于独立研发 QA 数据库(railwaysystem_fusion_qa_20261013),采用最小权限应用账号连接,与共享试用库(training)及生产环境完全隔离。
  • 仿真受控运行:IoT 底层采用仿真受控模式,物理 MQTT 硬件与实体门锁处于安全隔离状态,防止误触发真实硬件动作。
  • 真实完整业务闭环:前端 UI、后端业务逻辑、Kingbase 事务状态流转均为 100% 真实执行。

二、系统访问与前置准备

1. 访问地址

  • 前端 Web 控制台:http://127.0.0.1:8088
  • 默认演示账号:admin / admin123
  • 后端 API 服务:http://127.0.0.1:8096(由前端通过 /prod-api 自动反向代理)

2. 演示前服务状态核验

在启动系统前,请确保研发数据库 SSH 隧道处于连通状态:

  • 隧道端口:127.0.0.1:14321
  • 若隧道未连通,请在终端执行:
    ssh -N -L 127.0.0.1:14321:192.168.139.218:4321 -o ServerAliveInterval=15 wzbmatebook
    
  • 安全凭据文件:系统启动依赖受限目录下的环境变量配置(~/.railwaysystem-qa.env),密码由启动脚本安全注入,无需人工输入。

三、一键启停操作指南

系统提供了平滑、健壮的一键管理脚本,支持自动端口清理与就绪健康探测:

1. 启动系统

在工程根目录下执行:

./start_demo.sh

启动脚本自动完成:

  1. 校验环境变量与凭据完整性;
  2. 探测数据库 SSH 隧道连通性(未连通时给出明确操作指引并安全终止);
  3. 自动释放 8096 与 8088 端口历史旧进程;
  4. 启动 Spring Boot 4 后端,轮询 /captchaImage 验证就绪(约 4~6 秒);
  5. 启动前端反向代理服务并验证 HTTP 200 就绪;
  6. 打印就绪提示与访问入口。

2. 停止系统

在演示结束或需要重置时执行:

./stop_demo.sh

停止脚本自动完成:

  1. 优雅停止前端反向代理进程(释放端口 8088);
  2. 优雅停止后端 Spring Boot 进程(释放端口 8096);
  3. 清理 Headless Chrome 测试残留进程;
  4. 确认所有演示端口已完全释放。

四、建议的五分钟核心业务演示路线

建议按照培训学员入宿、门锁授权、调宿换锁、退宿撤权的标准业务生命周期进行演示:

[1. 管理员登录] 
      ↓
[2. 住宿管理:查询预分配学员] ──> 点击【入住】办理 ──> 状态流转为【在住】
      ↓
[3. 智能门锁:授权管理] ──> 查看自动生成的人脸授权意图 (待下发/待回执)
      ↓
[4. 仿真回执确认] ──> 受控驱动网关与门锁回执 ──> 页面刷新为【已生效/下发成功】
      ↓
[5. 住宿管理:办理调房] ──> 选择新宿舍 (致远楼 102) 提交 ──> 触发新门锁建权与旧门锁撤权
      ↓
[6. 住宿管理:办理退宿] ──> 点击【退宿】确认 ──> 状态更新为【已退宿】,授权彻底清除
      ↓
[7. 履历与流水核查] ──> 查看【住宿履历】对话框 & 【命令记录】指令流水

步骤详解:

  1. 登录系统:
    • 打开浏览器访问 http://127.0.0.1:8088,输入账号 admin,密码 admin123,点击登录,进入系统仪表盘首页。
  2. 查询并办理入住:
    • 点击左侧菜单【培训管理】->【住宿安排】(或访问 /train/accommodation);
    • 在学号输入框输入演示学员学号(例如 S_DEMO_20261013),点击【搜索】;
    • 找到处于“预分配”状态的学员记录,点击操作列的【入住】按钮;
    • 在弹出的确认对话框中点击【确定】;
    • 页面提示“入住办理成功”,学员住宿状态实时刷新为绿色的【在住】标签。
  3. 核查门锁授权意图:
    • 点击左侧菜单【门禁管理】->【授权管理】(或访问 /iot/auth);
    • 看到系统已根据学员的人脸特征与所分配的宿舍房间(致远楼 101),自动建立门锁授权意图记录。
  4. 演示仿真回执确认生效:
    • 在仿真环境下,系统调用受控 Mock 回执端点驱动状态;
    • 在授权管理页面点击【搜索】刷新,授权同步状态变更为【已生效】(或【下发成功】),展示端到端联动效果。
  5. 办理学员调房:
    • 返回【住宿安排】页面,点击学员右侧的【调房】按钮;
    • 在弹出的【办理学员调房】对话框中,目标宿舍选择“致远楼 102”,输入床位号“2号床”,点击【确认调房】;
    • 系统执行调房事务:原宿舍记录流转为“已退宿”,新宿舍记录建立并流转为“在住”;
    • 后台自动向旧门锁下发撤权指令,向新门锁下发建权指令。
  6. 办理退宿:
    • 在【住宿安排】页面中,点击学员所在行的【退宿】按钮,在确认框中点击【确定】;
    • 提示“退宿办理成功”,住宿状态更新为红色的【已退宿】标签。
  7. 查看历史履历与指令流水:
    • 点击该行操作列的【住宿履历】按钮,弹出【学员历史住宿记录】对话框,清晰展示从预分配、调房退宿到最终退宿的完整时间轴;
    • 点击左侧菜单【门禁管理】->【命令记录】(或访问 /iot/command),查看全流程自动生成的授权下发(0011)与清除授权(0012)指令流水,证明全链路具备完整审计溯源能力。

五、真实业务流程 vs 仿真(Mock)环节说明

为了确保演示的真实性与合规性,系统严格区分业务逻辑与硬件模拟:

业务环节 实现方式 状态说明
管理员鉴权与 RBAC 权限 真实数据库与 Spring Security 100% 真实执行
学员基本信息与班级档案 真实 Kingbase QA 数据库表 100% 真实执行
住宿全生命周期状态机 真实业务 Service 与事务 100% 真实执行(预分配/在住/退宿)
住宿调房多阶段事务 真实业务 Service 100% 真实执行(旧记退宿 + 新建在住)
门锁授权意图关联生成 真实 IoT 业务桥接器 100% 真实执行(自动解析人脸与房间锁映射)
指令流水与审计日志 真实 Kingbase iot_command 表 100% 真实执行,全链路持久化
前端交互与响应 真实 Vue SPA 页面与 Element UI 100% 真实执行,无静态伪造
MQTT 指令双端回执 Mock 仿真驱动(iot.mqtt.mock=true) 仿真模拟网关与门锁硬件回执,隔绝物理设备
人脸识别特征提取 仿真服务 仿真特征向量映射,未连接物理人脸终端
实体门锁物理开锁/状态 物理隔离(未接入) BLOCKED / HARDWARE_PENDING

六、常见问题排查与快速恢复

1. 启动脚本提示 [BLOCKED] 数据库 SSH 隧道未连接

  • 原因:本地 14321 端口无法连接到 Kingbase 研发服务器。
  • 排查方法:
    1. 检查 SSH 隧道进程:ps aux | grep 14321;
    2. 重新建立隧道:ssh -N -L 127.0.0.1:14321:192.168.139.218:4321 wzbmatebook;
    3. 验证端口连通:nc -z 127.0.0.1 14321。

2. 页面访问提示 502 Bad Gateway

  • 原因:后端 Spring Boot 正在启动中或由于数据库超时启动失败。
  • 排查方法:
    1. 查看后端日志:tail -n 50 backend.log;
    2. 检查是否有 Druid 数据源连接超时异常;
    3. 确认后执行 ./stop_demo.sh && ./start_demo.sh 重启。

3. 演示过程中需要重置测试数据

  • 方法: 可直接在工程根目录下执行演示数据预置脚本:
    java -cp RuoYi-Vue-master/ruoyi-admin/target/test-classes:RuoYi-Vue-master/ruoyi-admin/target/ruoyi-admin.jar com.ruoyi.train.PrepareDemoData
    
    该命令将自动重置学员 S_DEMO_20261013 为初始的“预分配”住宿状态,并清理门锁历史旧授权,无需重启系统即可开始下一轮完整演示。