guoyu/项目介绍/架构文档.md
2026-01-30 15:08:32 +08:00

511 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 国语教育平台 - 架构文档
## 📐 整体架构
### 系统架构图
```
┌─────────────────────────────────────────────────────────────┐
│ 客户端层 │
├──────────────────┬──────────────────┬──────────────────────┤
│ 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智能化
- 大数据分析
- 云原生架构