511 lines
16 KiB
Markdown
511 lines
16 KiB
Markdown
# 国语教育平台 - 架构文档
|
||
|
||
## 📐 整体架构
|
||
|
||
### 系统架构图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 客户端层 │
|
||
├──────────────────┬──────────────────┬──────────────────────┤
|
||
│ Web管理端 │ 移动端App │ 微信小程序(规划) │
|
||
│ (Vue.js) │ (uni-app) │ │
|
||
└──────────────────┴──────────────────┴──────────────────────┘
|
||
↓ HTTP/HTTPS
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 网关层 │
|
||
│ Nginx (反向代理) │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 应用服务层 │
|
||
│ Spring Boot (端口: 30091) │
|
||
├──────────────────┬──────────────────┬──────────────────────┤
|
||
│ 系统管理模块 │ 学习管理模块 │ 语音评测模块 │
|
||
│ - 用户管理 │ - 课程管理 │ - 语音识别 │
|
||
│ - 权限管理 │ - 考试管理 │ - 发音评测 │
|
||
│ - 角色管理 │ - 题库管理 │ - 评测记录 │
|
||
│ - 菜单管理 │ - 学习记录 │ │
|
||
└──────────────────┴──────────────────┴──────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 数据访问层 │
|
||
│ MyBatis + Druid │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
↓
|
||
┌──────────────────┬──────────────────┬──────────────────────┐
|
||
│ MySQL数据库 │ Redis缓存 │ 文件存储 │
|
||
│ (业务数据) │ (会话/缓存) │ (课件/录音) │
|
||
└──────────────────┴──────────────────┴──────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🏗️ 技术架构
|
||
|
||
### 后端技术栈
|
||
|
||
#### 核心框架
|
||
- **Spring Boot 2.5.15**: 应用框架
|
||
- **Spring Security 5.7.14**: 安全框架
|
||
- **Spring Framework 5.3.39**: 基础框架
|
||
- **MyBatis**: ORM框架
|
||
- **Druid 1.2.23**: 数据库连接池
|
||
|
||
#### 中间件
|
||
- **Redis**: 缓存、会话管理
|
||
- **MySQL**: 关系型数据库
|
||
- **Nginx**: 反向代理、负载均衡
|
||
|
||
#### 工具库
|
||
- **JWT (jjwt 0.9.1)**: Token认证
|
||
- **FastJSON 2.0.58**: JSON处理
|
||
- **Apache POI 4.1.2**: Excel导入导出
|
||
- **PageHelper 1.4.7**: 分页插件
|
||
- **Swagger 3.0.0**: API文档
|
||
- **Kaptcha 2.3.3**: 验证码生成
|
||
- **Velocity 2.3**: 代码生成模板
|
||
|
||
### 前端技术栈
|
||
|
||
#### Web管理端
|
||
- **Vue.js 2.x**: 前端框架
|
||
- **Element UI**: UI组件库
|
||
- **Axios**: HTTP客户端
|
||
- **Vuex**: 状态管理
|
||
- **Vue Router**: 路由管理
|
||
- **Webpack**: 构建工具
|
||
|
||
#### 移动端App
|
||
- **uni-app**: 跨平台开发框架
|
||
- **Vue.js 3.2.47**: 前端框架
|
||
- **uView Plus 3.6.15**: UI组件库
|
||
- **Vuex 4.1.0**: 状态管理
|
||
- **Vite 5.2.8**: 构建工具
|
||
|
||
---
|
||
|
||
## 📦 模块架构
|
||
|
||
### 后端模块结构
|
||
|
||
```
|
||
ry-study (父工程)
|
||
├── ry-study-admin # 主应用模块(启动入口)
|
||
│ ├── controller # 控制器层
|
||
│ │ ├── system # 系统管理控制器
|
||
│ │ ├── study # 学习管理控制器
|
||
│ │ └── voice # 语音评测控制器
|
||
│ └── RyStudyApplication # 启动类
|
||
│
|
||
├── ry-study-framework # 框架核心模块
|
||
│ ├── config # 配置类
|
||
│ ├── security # 安全配置
|
||
│ ├── interceptor # 拦截器
|
||
│ └── aspectj # AOP切面
|
||
│
|
||
├── ry-study-system # 系统业务模块
|
||
│ ├── domain # 实体类
|
||
│ │ ├── study # 学习相关实体
|
||
│ │ └── vo # 视图对象
|
||
│ ├── mapper # 数据访问层
|
||
│ │ └── study # 学习相关Mapper
|
||
│ └── service # 业务逻辑层
|
||
│ ├── impl # 业务实现
|
||
│ ├── study # 学习业务
|
||
│ └── voice # 语音业务
|
||
│
|
||
├── ry-study-common # 通用工具模块
|
||
│ ├── annotation # 自定义注解
|
||
│ ├── constant # 常量定义
|
||
│ ├── core # 核心工具
|
||
│ ├── enums # 枚举类
|
||
│ ├── exception # 异常处理
|
||
│ └── utils # 工具类
|
||
│
|
||
├── ry-study-quartz # 定时任务模块
|
||
│ ├── domain # 任务实体
|
||
│ ├── service # 任务服务
|
||
│ └── util # 任务工具
|
||
│
|
||
└── ry-study-generator # 代码生成模块
|
||
├── domain # 生成配置
|
||
├── service # 生成服务
|
||
└── util # 生成工具
|
||
```
|
||
|
||
### 前端模块结构
|
||
|
||
#### Web管理端 (ry-study-ui)
|
||
```
|
||
ry-study-ui
|
||
├── public # 静态资源
|
||
├── src
|
||
│ ├── api # API接口
|
||
│ │ ├── system # 系统接口
|
||
│ │ ├── study # 学习接口
|
||
│ │ └── monitor # 监控接口
|
||
│ ├── assets # 资源文件
|
||
│ ├── components # 公共组件
|
||
│ ├── directive # 自定义指令
|
||
│ ├── layout # 布局组件
|
||
│ ├── router # 路由配置
|
||
│ ├── store # Vuex状态
|
||
│ ├── utils # 工具函数
|
||
│ └── views # 页面视图
|
||
│ ├── system # 系统管理页面
|
||
│ ├── study # 学习管理页面
|
||
│ └── monitor # 监控页面
|
||
└── vue.config.js # Vue配置
|
||
```
|
||
|
||
#### 移动端App (fronted_uniapp)
|
||
```
|
||
fronted_uniapp
|
||
├── api # API接口
|
||
│ └── study # 学习相关接口
|
||
├── components # 公共组件
|
||
│ ├── custom-navbar # 自定义导航栏
|
||
│ └── custom-tabbar # 自定义标签栏
|
||
├── config # 配置文件
|
||
├── pages # 页面
|
||
│ ├── login # 登录页
|
||
│ ├── index # 首页
|
||
│ ├── course # 课程页面
|
||
│ ├── exam # 考试页面
|
||
│ ├── voice # 语音评测页面
|
||
│ ├── learning # 学习记录页面
|
||
│ ├── score # 成绩页面
|
||
│ └── profile # 个人中心
|
||
├── static # 静态资源
|
||
├── store # Vuex状态
|
||
│ └── modules # 状态模块
|
||
├── utils # 工具函数
|
||
├── App.vue # 应用入口
|
||
├── main.js # 主入口文件
|
||
├── manifest.json # 应用配置
|
||
└── pages.json # 页面配置
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 数据流架构
|
||
|
||
### 请求处理流程
|
||
|
||
```
|
||
客户端请求
|
||
↓
|
||
Nginx (反向代理)
|
||
↓
|
||
Spring Security (认证/授权)
|
||
↓
|
||
Controller (控制器)
|
||
↓
|
||
Service (业务逻辑)
|
||
↓
|
||
Mapper (数据访问)
|
||
↓
|
||
MySQL/Redis (数据存储)
|
||
↓
|
||
返回响应
|
||
```
|
||
|
||
### 认证授权流程
|
||
|
||
```
|
||
1. 用户登录
|
||
↓
|
||
2. 验证用户名密码
|
||
↓
|
||
3. 生成JWT Token
|
||
↓
|
||
4. 返回Token给客户端
|
||
↓
|
||
5. 客户端携带Token请求
|
||
↓
|
||
6. 验证Token有效性
|
||
↓
|
||
7. 解析用户权限
|
||
↓
|
||
8. 执行业务逻辑
|
||
```
|
||
|
||
---
|
||
|
||
## 💾 数据库设计
|
||
|
||
### 核心数据表
|
||
|
||
#### 系统管理
|
||
- `sys_user`: 用户表
|
||
- `sys_role`: 角色表
|
||
- `sys_menu`: 菜单表
|
||
- `sys_dept`: 部门表
|
||
- `sys_dict_type`: 字典类型表
|
||
- `sys_dict_data`: 字典数据表
|
||
- `sys_config`: 系统配置表
|
||
- `sys_oper_log`: 操作日志表
|
||
- `sys_logininfor`: 登录日志表
|
||
|
||
#### 学习管理
|
||
- `study_class`: 班级表
|
||
- `study_class_user`: 班级学生关联表
|
||
- `study_course`: 课程表
|
||
- `study_courseware`: 课件表
|
||
- `study_course_assignment`: 课程分配表
|
||
- `study_learning_record`: 学习记录表
|
||
- `study_subject`: 学科表
|
||
|
||
#### 考试管理
|
||
- `study_question_bank`: 题库表
|
||
- `study_question_bank_item`: 题目表
|
||
- `study_exam`: 考试表
|
||
- `study_question`: 试题表
|
||
- `study_student_answer`: 学生答题表
|
||
- `study_score`: 成绩表
|
||
|
||
#### 语音评测
|
||
- `study_voice_evaluation`: 语音评测表
|
||
- `study_voice_evaluation_content`: 评测内容表
|
||
|
||
#### 监控管理
|
||
- `study_screen_monitor`: 屏幕监控表
|
||
- `study_student_change_log`: 学生变更日志表
|
||
|
||
---
|
||
|
||
## 🔌 接口设计
|
||
|
||
### RESTful API规范
|
||
|
||
#### 请求格式
|
||
```
|
||
GET /api/resource # 查询列表
|
||
GET /api/resource/{id} # 查询详情
|
||
POST /api/resource # 新增
|
||
PUT /api/resource # 修改
|
||
DELETE /api/resource/{id} # 删除
|
||
```
|
||
|
||
#### 响应格式
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {}
|
||
}
|
||
```
|
||
|
||
### 主要接口模块
|
||
|
||
#### 系统管理接口
|
||
- `/system/user/*`: 用户管理
|
||
- `/system/role/*`: 角色管理
|
||
- `/system/menu/*`: 菜单管理
|
||
- `/system/dept/*`: 部门管理
|
||
- `/system/dict/*`: 字典管理
|
||
|
||
#### 学习管理接口
|
||
- `/study/class/*`: 班级管理
|
||
- `/study/course/*`: 课程管理
|
||
- `/study/courseware/*`: 课件管理
|
||
- `/study/learning/*`: 学习记录
|
||
- `/study/subject/*`: 学科管理
|
||
|
||
#### 考试管理接口
|
||
- `/study/questionBank/*`: 题库管理
|
||
- `/study/exam/*`: 考试管理
|
||
- `/study/score/*`: 成绩管理
|
||
|
||
#### 语音评测接口
|
||
- `/voice/evaluate`: 语音评测
|
||
- `/voice/record/*`: 评测记录
|
||
|
||
---
|
||
|
||
## 🔒 安全架构
|
||
|
||
### 安全机制
|
||
|
||
1. **认证机制**
|
||
- JWT Token认证
|
||
- Token自动刷新
|
||
- 单点登录支持
|
||
|
||
2. **授权机制**
|
||
- RBAC权限模型
|
||
- 数据权限控制
|
||
- 接口权限控制
|
||
|
||
3. **数据安全**
|
||
- 密码加密存储(BCrypt)
|
||
- 敏感数据加密
|
||
- SQL注入防护
|
||
|
||
4. **传输安全**
|
||
- HTTPS加密传输
|
||
- Token签名验证
|
||
- 请求防重放
|
||
|
||
5. **日志审计**
|
||
- 操作日志记录
|
||
- 登录日志记录
|
||
- 异常日志记录
|
||
|
||
---
|
||
|
||
## 🚀 部署架构
|
||
|
||
### 单机部署
|
||
```
|
||
┌─────────────────────────────┐
|
||
│ 服务器 (192.168.0.106) │
|
||
├─────────────────────────────┤
|
||
│ Nginx (80/443) │
|
||
│ Spring Boot (30091) │
|
||
│ MySQL (3306) │
|
||
│ Redis (6379) │
|
||
│ 文件存储 (/profile/upload) │
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
### 集群部署(推荐)
|
||
```
|
||
┌──────────────┐
|
||
│ 负载均衡器 │
|
||
│ (Nginx) │
|
||
└──────────────┘
|
||
↓
|
||
┌──────────────┬──────────────┬──────────────┐
|
||
│ 应用服务器1 │ 应用服务器2 │ 应用服务器3 │
|
||
│ Spring Boot │ Spring Boot │ Spring Boot │
|
||
└──────────────┴──────────────┴──────────────┘
|
||
↓ ↓ ↓
|
||
┌──────────────┬──────────────┬──────────────┐
|
||
│ MySQL主库 │ MySQL从库 │ Redis集群 │
|
||
└──────────────┴──────────────┴──────────────┘
|
||
↓
|
||
┌──────────────┐
|
||
│ 文件存储 │
|
||
│ (NFS/OSS) │
|
||
└──────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 性能优化
|
||
|
||
### 缓存策略
|
||
- **Redis缓存**: 用户信息、权限数据、字典数据
|
||
- **本地缓存**: 配置信息、静态数据
|
||
- **浏览器缓存**: 静态资源、图片
|
||
|
||
### 数据库优化
|
||
- **索引优化**: 关键字段建立索引
|
||
- **查询优化**: 避免全表扫描
|
||
- **连接池**: Druid连接池配置
|
||
- **读写分离**: 主从复制
|
||
|
||
### 前端优化
|
||
- **代码分割**: 按需加载
|
||
- **资源压缩**: Gzip压缩
|
||
- **图片优化**: 懒加载、WebP格式
|
||
- **CDN加速**: 静态资源CDN
|
||
|
||
---
|
||
|
||
## 🔧 扩展性设计
|
||
|
||
### 模块化设计
|
||
- 各模块独立开发
|
||
- 低耦合高内聚
|
||
- 易于维护和扩展
|
||
|
||
### 插件化架构
|
||
- 语音识别引擎可替换
|
||
- 支持自定义插件
|
||
- 灵活的配置机制
|
||
|
||
### 微服务演进
|
||
- 当前为单体应用
|
||
- 可按模块拆分为微服务
|
||
- 支持Spring Cloud改造
|
||
|
||
---
|
||
|
||
## 📈 监控运维
|
||
|
||
### 系统监控
|
||
- **应用监控**: Spring Boot Actuator
|
||
- **性能监控**: JVM监控、线程监控
|
||
- **日志监控**: 日志收集、分析
|
||
- **告警机制**: 异常告警、性能告警
|
||
|
||
### 运维工具
|
||
- **部署工具**: Shell脚本、Docker
|
||
- **备份工具**: 数据库备份、文件备份
|
||
- **监控工具**: Prometheus、Grafana(可选)
|
||
|
||
---
|
||
|
||
## 🎯 技术选型理由
|
||
|
||
### 为什么选择Spring Boot?
|
||
- 快速开发、约定优于配置
|
||
- 生态完善、社区活跃
|
||
- 易于部署、运维简单
|
||
|
||
### 为什么选择uni-app?
|
||
- 一次开发、多端运行
|
||
- Vue语法、学习成本低
|
||
- 性能优秀、生态丰富
|
||
|
||
### 为什么选择MySQL?
|
||
- 开源免费、成熟稳定
|
||
- 性能优秀、易于维护
|
||
- 支持事务、数据安全
|
||
|
||
### 为什么选择Redis?
|
||
- 高性能、低延迟
|
||
- 数据结构丰富
|
||
- 支持持久化
|
||
|
||
---
|
||
|
||
## 📝 开发规范
|
||
|
||
### 代码规范
|
||
- 遵循阿里巴巴Java开发手册
|
||
- 统一的命名规范
|
||
- 完善的注释文档
|
||
|
||
### Git规范
|
||
- 分支管理策略
|
||
- 提交信息规范
|
||
- Code Review流程
|
||
|
||
### 接口规范
|
||
- RESTful API设计
|
||
- 统一的响应格式
|
||
- 完善的接口文档
|
||
|
||
---
|
||
|
||
## 🔮 技术演进路线
|
||
|
||
### 短期(3-6个月)
|
||
- 性能优化
|
||
- 功能完善
|
||
- Bug修复
|
||
|
||
### 中期(6-12个月)
|
||
- 微服务改造
|
||
- 容器化部署
|
||
- 自动化运维
|
||
|
||
### 长期(1-2年)
|
||
- AI智能化
|
||
- 大数据分析
|
||
- 云原生架构
|