面向中小型驾校的报名与教务管理 Web 应用,覆盖学员在线报名、报名材料提交、资格审核、系统生成报名表/体检表等 PDF 文档、教练分配、学习进度、考试报名、考试成绩和基础信息管理。
项目采用 Spring Boot 分层单体架构。后台管理端使用 Thymeleaf 服务端渲染,学员和教练通过自助端查看与本人相关的报名、培训、考试数据。
| 页面 | 截图 |
|---|---|
| 登录页 | ![]() |
| 后台仪表盘 | ![]() |
| 报名申请详情 | ![]() |
| 教练分配 | ![]() |
| 学员自助端 | ![]() |
| 模块 | 说明 |
|---|---|
| 学员在线报名 | 支持公开注册、学员建档、创建报名申请、报名草稿和申请状态流转 |
| 报名材料 | 支持材料上传、下载、删除、审核、驳回原因记录和完整性校验 |
| 资格审核 | 支持初审/终审记录、审核通过/拒绝/要求补件,联动申请和学员状态 |
| 系统文档生成 | 审核通过后可生成报名表、体检表、报名回执、档案表等 PDF 文档 |
| 教练管理与分配 | 支持教练档案、准教车型、容量、推荐算法、人工/自动/按学员要求分配、结束分配 |
| 学习进度 | 支持初始化进度、维护科目一至科目四状态、已完成学时和最近培训日期 |
| 考试报名 | 支持创建、查询、取消考试报名,记录考试科目、时间、地点和考试次数 |
| 考试成绩 | 支持录入成绩、缺考/未通过记录、成绩查询,并联动学习进度 |
| 基础信息管理 | 通过字典项维护驾照类型、来源渠道、培训班型、材料类型、文档类型等基础数据 |
| 账号与权限 | 基于 Spring Security 和 RBAC,区分后台岗位、学员、教练,并做行级数据隔离 |
| 层次 | 技术 |
|---|---|
| 后端 | Java 21、Spring Boot 4.0.6、Spring MVC、Spring Security、Spring Data JPA |
| 前端 | Thymeleaf、Bootstrap 5、Bootstrap Icons、原生 JavaScript |
| 数据库 | MySQL、H2(测试环境) |
| 文档生成 | OpenPDF |
| 构建与测试 | Maven Wrapper、JUnit 5、Spring Boot Test、Spring Security Test |
flowchart LR
Browser["浏览器"]
Thymeleaf["Thymeleaf 页面"]
Api["REST API Controller"]
Security["Spring Security"]
Service["Service 业务服务"]
Repository["Repository 数据访问"]
MySQL[("MySQL")]
Storage["本地文件存储"]
Browser --> Thymeleaf
Browser --> Api
Thymeleaf --> Api
Api --> Security
Security --> Service
Service --> Repository
Repository --> MySQL
Service --> Storage
代码按 controller、service、repository、entity、enums、security、dto 分层,业务规则集中在 Service 层。所有实体继承 Root 基类,统一提供 UUID 主键、创建时间、更新时间和乐观锁版本号。
driving-school
├── docs # 架构、流程、接口、设计文档
├── src/main/java/org/yyds/drivingschool
│ ├── controller # 页面与 REST API 控制器
│ ├── entity # JPA 实体
│ ├── enums # 业务状态枚举
│ ├── repository # Spring Data JPA 仓库
│ ├── security # 认证、授权、登录处理、初始化
│ ├── service # 业务服务和 DTO
│ └── util # 工具类
├── src/main/resources
│ ├── db/demo-data.sql # 可选演示数据
│ ├── static # CSS、JS、图片
│ └── templates # Thymeleaf 页面
├── src/test # Repository、Service、Controller、权限测试
├── pom.xml
└── mvnw / mvnw.cmd
git clone https://github.com/Steel-Yao/driving-school.git
cd driving-school- JDK 21
- MySQL 8.0 或更高版本
- 项目自带 Maven Wrapper,无需单独安装 Maven
CREATE DATABASE driving_school CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;默认配置位于 src/main/resources/application.yaml,数据库密码、管理员初始化密码等敏感信息通过环境变量提供。
PowerShell:
$env:DB_USERNAME = "root"
$env:DB_PASSWORD = "your-db-password"
$env:ADMIN_USERNAME = "admin"
$env:ADMIN_PASSWORD = "your-admin-password"
.\mvnw.cmd spring-boot:runBash:
export DB_USERNAME=root
export DB_PASSWORD=your-db-password
export ADMIN_USERNAME=admin
export ADMIN_PASSWORD=your-admin-password
./mvnw spring-boot:run启动成功后访问:
http://localhost:8088
默认端口为 8088,如需修改可在 application.yaml 中调整 server.port。管理员登录名为 ADMIN_USERNAME 所配置的用户名,密码为 ADMIN_PASSWORD 所配置的初始密码。
项目提供 src/main/resources/db/demo-data.sql,包含角色、字典、学员、教练、报名申请、材料、审核记录、文档、进度、考试报名和成绩等演示数据。
建议先启动一次应用生成表结构,再导入演示数据:
mysql -u root -p driving_school < src/main/resources/db/demo-data.sql演示账号统一密码为 Demo@123456:
| 账号 | 角色 |
|---|---|
demo_admin |
系统管理员 |
demo_enroll |
报名专员 |
demo_reviewer |
审核专员 |
demo_operation |
教务/运营专员 |
demo_examiner |
考务/成绩录入员 |
stu_demo_001 |
学员 |
coach_demo_chen |
教练 |
| 配置 | 默认值 | 说明 |
|---|---|---|
DB_USERNAME |
root |
MySQL 用户名 |
DB_PASSWORD |
无 | MySQL 密码 |
ADMIN_USERNAME |
admin |
启动时初始化的管理员用户名 |
ADMIN_PASSWORD |
空 | 管理员初始密码,为空时不创建管理员账号 |
SECURITY_BOOTSTRAP_ENABLED |
true |
是否在启动时初始化基础角色和管理员 |
MATERIAL_STORAGE_DIR |
./storage/materials |
报名材料存储目录 |
DRIVING_SCHOOL_DOCUMENT_STORAGE_DIR |
./storage/documents |
生成文档存储目录 |
./mvnw test
./mvnw clean package运行单个测试:
./mvnw test -Dtest=ClassName#methodName测试环境使用 H2 数据库,不依赖本地 MySQL。
REST 接口统一挂载在 /api。完整请求与响应示例见 docs/api-example.md,统一错误响应格式为:
{
"message": "错误说明"
}常用接口:
| 场景 | 接口 |
|---|---|
| 学员公开注册 | POST /api/register/student |
| 创建报名申请 | POST /api/enrollment-applications |
| 创建资格审核记录 | POST /api/enrollment-applications/{id}/reviews |
| 上传报名材料 | POST /api/enrollment-applications/{id}/materials/upload |
| 生成系统文档 | POST /api/enrollment-applications/{id}/documents/generate |
| 获取教练推荐 | GET /api/students/{studentId}/coach-assignments/recommendations |
| 分配教练 | POST /api/students/{studentId}/coach-assignments |
| 初始化学习进度 | POST /api/students/{studentId}/training-progress |
| 创建考试报名 | POST /api/students/{studentId}/exam-registrations |
| 录入考试成绩 | POST /api/exam-registrations/{registrationId}/result |
| 角色 | 主要职责 |
|---|---|
ROLE_ADMIN |
账号管理、角色分配、字典配置、全量业务查看和系统维护 |
ROLE_ENROLLMENT_CLERK |
学员建档、创建报名申请、材料录入/补件、文档生成 |
ROLE_REVIEWER |
查看待审申请、创建资格审核记录、审核通过/拒绝/要求补件 |
ROLE_OPERATION |
教练档案维护、教练分配/结束分配、学习进度维护、考试报名安排 |
ROLE_EXAMINER |
考试成绩录入、缺考/未通过记录、成绩查询 |
ROLE_COACH |
查看本人带教学员和训练进度,在授权范围内维护进度 |
ROLE_STUDENT |
查看本人报名进度、材料状态、教练分配、学习进度、考试安排和成绩 |
- 报名材料和生成文档当前保存元数据和本地文件路径,尚未接入对象存储。
- 文档生成使用内置模板版本
v1,已覆盖报名表、体检表、报名回执、档案表等基础 PDF 输出。 ddl-auto: update适合开发与演示环境,生产环境建议引入 Flyway 或 Liquibase 管理数据库变更。- 生产化部署前建议启用 HTTPS、CSRF 防护、操作审计、数据备份和安全密钥管理。
本项目采用 MIT License。
Copyright (c) 2026 Steel-Yao




