xinli/z_Project change/进度汇总/3-技术架构设计.md

562 lines
20 KiB
Markdown
Raw Normal View History

2025-11-03 18:21:32 +08:00
# 心理测评系统技术架构设计
## 系统架构概述
```
┌─────────────────────────────────────────────────────────────┐
│ 用户层 │
├─────────────────────────────────────────────────────────────┤
│ 桌面浏览器 │ 移动浏览器 │ 微信小程序 │ 第三方系统API │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 前端应用层 │
├─────────────────────────────────────────────────────────────┤
│ Vue 2.6 + Element UI + Vuex + Router │
│ ┌────────────┬──────────────┬──────────────┬────────────┐ │
│ │量表管理模块│ 测评执行模块 │ 统计报表模块 │ 系统配置 │ │
│ └────────────┴──────────────┴──────────────┴────────────┘ │
└─────────────────────────────────────────────────────────────┘
↕ (HTTP/RESTful API)
┌─────────────────────────────────────────────────────────────┐
│ 网关/负载均衡 │
├─────────────────────────────────────────────────────────────┤
│ Nginx / 反向代理 │
│ ┌────────────┬──────────────┬──────────────┐ │
│ │静态资源 │ 请求转发 │ SSL/TLS │ │
│ └────────────┴──────────────┴──────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 应用服务层 │
├─────────────────────────────────────────────────────────────┤
│ Spring Boot 2.5 + Spring Security │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Controller层 │ │
│ │ ┌────────────┬──────────────┬──────────────┐ │ │
│ │ │量表管理Controller│测评Controller│报告Controller│ │ │
│ │ └────────────┴──────────────┴──────────────┘ │ │
│ ├──────────────────────────────────────────────────────┤ │
│ │ Service层 │ │
│ │ ┌────────────┬──────────────┬──────────────┐ │ │
│ │ │量表服务 │ 测评服务 │ 报告服务 │ │ │
│ │ └────────────┴──────────────┴──────────────┘ │ │
│ ├──────────────────────────────────────────────────────┤ │
│ │ Mapper层 (MyBatis) │ │
│ │ ┌────────────┬──────────────┬──────────────┐ │ │
│ │ │量表Mapper │ 测评Mapper │ 报告Mapper │ │ │
│ │ └────────────┴──────────────┴──────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 │
├─────────────────────────────────────────────────────────────┤
│ ┌──────────────┬──────────────┬──────────────┬─────────┐ │
│ │ MySQL │ Redis │ 文件存储 │ TTS │ │
│ │ (数据持久) │ (缓存/会话) │ (报告/音频) │ (语音) │ │
│ └──────────────┴──────────────┴──────────────┴─────────┘ │
└─────────────────────────────────────────────────────────────┘
```
---
## 模块划分
### 后端模块结构
```
ry-news (根模块)
├── ry-news-admin (启动模块)
│ ├── controller (控制器层)
│ │ ├── psychology (心理测评)
│ │ │ ├── PsyScaleController
│ │ │ ├── PsyAssessmentController
│ │ │ ├── PsyReportController
│ │ │ ├── PsyWarningController
│ │ │ └── ...
│ │ └── api (开放API)
│ │ └── ApiController
│ └── core (配置)
├── ry-news-system (系统模块)
│ └── psychology (心理测评业务逻辑)
│ ├── domain (实体类)
│ │ ├── PsyScale
│ │ ├── PsyAssessment
│ │ └── ...
│ ├── mapper (数据访问)
│ │ ├── PsyScaleMapper
│ │ ├── PsyAssessmentMapper
│ │ └── ...
│ ├── service (业务逻辑接口)
│ │ ├── IPsyScaleService
│ │ ├── IPsyAssessmentService
│ │ └── ...
│ └── service.impl (业务逻辑实现)
│ ├── PsyScaleServiceImpl
│ ├── PsyAssessmentServiceImpl
│ └── ...
├── ry-news-framework (框架模块)
│ ├── security (安全配置)
│ ├── config (系统配置)
│ └── web (通用组件)
├── ry-news-common (公共模块)
│ ├── core (核心类)
│ ├── utils (工具类)
│ └── constants (常量)
├── ry-news-generator (代码生成器)
└── ry-news-quartz (定时任务)
```
### 前端模块结构
```
ruoyi-ui
├── src
│ ├── views
│ │ ├── psychology (心理测评模块)
│ │ │ ├── scale (量表管理)
│ │ │ │ ├── index.vue (列表页)
│ │ │ │ └── form.vue (表单页)
│ │ │ ├── assessment (测评执行)
│ │ │ │ ├── index.vue (测评页面)
│ │ │ │ └── history.vue (历史记录)
│ │ │ ├── report (测评报告)
│ │ │ │ ├── list.vue (报告列表)
│ │ │ │ └── detail.vue (报告详情)
│ │ │ ├── statistics (统计分析)
│ │ │ │ ├── group.vue (团体统计)
│ │ │ │ └── individual.vue (个体统计)
│ │ │ ├── warning (危机预警)
│ │ │ │ └── index.vue (预警管理)
│ │ │ ├── questionnaire (自定义问卷)
│ │ │ │ └── ...
│ │ │ ├── website (心理网站)
│ │ │ │ └── ...
│ │ │ └── config (系统配置)
│ │ │ └── ...
│ │ └── system (现有系统模块)
│ │
│ ├── api
│ │ ├── psychology (测评API)
│ │ │ ├── scale.js
│ │ │ ├── assessment.js
│ │ │ └── ...
│ │ └── system (系统API)
│ │
│ ├── components
│ │ ├── Psychology (测评组件)
│ │ │ ├── ItemEditor (题目编辑器)
│ │ │ ├── AudioPlayer (语音播放器)
│ │ │ ├── ReportViewer (报告查看器)
│ │ │ └── QRCodeGenerator (二维码生成器)
│ │ └── RuoYi (现有组件)
│ │
│ └── assets
│ ├── audio (语音文件)
│ └── images (图片资源)
```
---
## 数据库设计
### 核心表关系
```
sys_user (用户表)
↓ (1:N)
psy_assessment (测评记录表)
↓ (1:N) ↓ (1:N)
psy_assessment_answer psy_assessment_report
↓ (N:1) ↓ (1:1)
psy_scale_item psy_result_interpretation
↓ (N:1) ↓ (1:1)
psy_scale (量表表) psy_factor (因子表)
↓ (1:N) ↓ (1:N)
psy_factor_rule psy_factor_score
↓ (N:1)
psy_scale_item
```
### 关键表说明
**1. psy_scale (量表表)**
- 存储量表基本信息
- 关联量表类型、作者、来源
- 支持版本管理
**2. psy_scale_item (题目表)**
- 量表题目内容
- 题目类型、是否必填、反向计分
- 与量表多对一关系
**3. psy_scale_option (选项表)**
- 题目选项内容
- 选项分值
- 与题目多对一关系
**4. psy_factor (因子表)**
- 量表因子/维度
- 因子描述、解释
- 与量表多对一关系
**5. psy_factor_rule (因子计分规则表)**
- 定义因子计算方法
- 题目与因子的关系
- 权重、计算方式
**6. psy_assessment (测评记录表)**
- 测评基本信息
- 开始/提交时间、状态
- 用户关联(支持匿名)
**7. psy_assessment_answer (测评答案表)**
- 答题记录
- 选项/文本答案
- 得分
**8. psy_factor_score (因子得分表)**
- 各因子得分
- 标准分、百分位
- 与测评记录关联
**9. psy_assessment_report (测评报告表)**
- 报告内容HTML
- 图表数据JSON
- PDF路径
**10. psy_warning (危机预警表)**
- 预警记录
- 预警因子、得分
- 预警状态(未处理/已处理)
---
## 核心业务流程
### 测评流程
```mermaid
sequenceDiagram
participant User as 用户
participant Frontend as 前端
participant Backend as 后端
participant DB as 数据库
participant Redis as Redis缓存
participant TTS as TTS服务
User->>Frontend: 选择量表
Frontend->>Backend: 创建测评记录
Backend->>DB: 插入assessment
Backend-->>Frontend: 返回assessmentId
loop 答题循环
Frontend->>Backend: 获取题目列表
Backend->>DB: 查询题目+选项
Backend-->>Frontend: 返回题目数据
Frontend->>Backend: 请求语音(TTS/缓存)
alt 缓存有语音
Backend->>Redis: 获取语音URL
else 需要生成语音
Backend->>TTS: 生成语音
Backend->>Redis: 缓存语音URL
end
Backend-->>Frontend: 返回语音URL
User->>Frontend: 选择答案
Frontend->>Backend: 保存答案(可暂停)
Backend->>DB: 保存answer
Backend-->>Frontend: 返回成功
alt 用户暂停
Backend->>DB: 更新状态为暂停
end
end
User->>Frontend: 提交测评
Frontend->>Backend: 提交评估
Backend->>Backend: 计算总分
Backend->>Backend: 计算因子分
Backend->>DB: 保存因子得分
Backend->>Backend: 检测危机预警
alt 触发预警
Backend->>DB: 插入预警记录
Backend->>Backend: 通知管理员
end
Backend->>Backend: 生成报告
Backend->>DB: 保存报告
Backend-->>Frontend: 返回报告ID
Frontend->>User: 展示测评报告
```
### 预警流程
```mermaid
sequenceDiagram
participant Assessment as 测评提交
participant Calculator as 计分服务
participant Warning as 预警服务
participant DB as 数据库
participant Admin as 管理员
Assessment->>Calculator: 提交测评数据
Calculator->>Calculator: 计算因子得分
Calculator->>DB: 保存因子得分
Calculator->>Warning: 触发预警检测
Warning->>DB: 查询预警规则
Warning->>Warning: 匹配预警条件
alt 触发预警
Warning->>DB: 插入预警记录
Warning->>Admin: 发送预警通知(邮件/短信)
Admin->>Warning: 查看预警详情
Admin->>Warning: 处理预警
Note over Admin,Warning: 用户接受干预后
Admin->>Assessment: 请求复查
Assessment->>Warning: 提交复查结果
Warning->>Warning: 判断是否解除预警
alt 解除预警
Warning->>DB: 更新预警状态为已解除
Warning->>Warning: 记录解除原因
end
end
```
---
## 技术选型
### 后端技术栈
| 技术 | 版本 | 用途 | 备注 |
|------|------|------|------|
| Spring Boot | 2.5.15 | 框架 | 稳定版本 |
| Spring Security | 5.7 | 安全认证 | JWT + 权限控制 |
| MyBatis | 3.x | ORM | 性能优良 |
| MySQL | 5.7+ | 数据库 | 主存储 |
| Redis | 6.x | 缓存 | 会话/数据缓存 |
| Druid | 1.2.23 | 连接池 | 监控支持 |
| JWT | 0.9.1 | 认证 | 无状态认证 |
| POI | 4.1.2 | Excel | 导入导出 |
| Swagger | 3.0.0 | API文档 | 接口文档 |
| TTS | - | 语音 | 阿里云/腾讯云 |
### 前端技术栈
| 技术 | 版本 | 用途 | 备注 |
|------|------|------|------|
| Vue | 2.6.12 | 框架 | 稳定版本 |
| Element UI | 2.15 | UI组件 | 丰富组件 |
| Vuex | 3.6.0 | 状态管理 | 全局状态 |
| Vue Router | 3.4.9 | 路由 | 单页应用 |
| Axios | 0.28.1 | HTTP请求 | 拦截器 |
| ECharts | 5.4.0 | 图表 | 数据可视化 |
| QRCode | - | 二维码 | 生成扫码 |
### 第三方服务
| 服务 | 用途 | 成本 |
|------|------|------|
| TTS (可选) | 语音合成 | 按量计费 |
| OSS (可选) | 对象存储 | 按量计费 |
| 短信服务 (可选) | 预警通知 | 按量计费 |
---
## 安全设计
### 1. 认证授权
- **JWT Token**:无状态认证
- **RBAC**:基于角色的权限控制
- **API Key**开放API认证
- **会话管理**Redis存储
### 2. 数据安全
- **密码加密**BCrypt
- **SQL注入防护**MyBatis参数化
- **XSS防护**:输入过滤
- **CSRF防护**Token验证
### 3. 接口安全
- **限流**:防止恶意请求
- **签名验证**API请求签名
- **IP白名单**:第三方系统访问
- **HTTPS**:传输加密
### 4. 数据备份
- **定时备份**:每日自动备份
- **增量备份**:减少存储
- **异地备份**:容灾准备
- **恢复测试**:定期演练
---
## 性能优化策略
### 1. 缓存策略
- **Redis缓存**
- 量表信息缓存24h
- 题目列表缓存24h
- 会话信息缓存
- 语音URL缓存
- **本地缓存**
- 配置信息Caffeine
- 字典数据
### 2. 数据库优化
- **索引优化**:核心字段建索引
- **分页查询**:避免大查询
- **读写分离**:主从复制
- **连接池**:合理配置
### 3. 代码优化
- **异步处理**:报告生成
- **批量操作**:答案提交
- **懒加载**:关联查询
- **分库分表**:大数据量(后期)
### 4. 前端优化
- **CDN加速**:静态资源
- **懒加载**:路由组件
- **虚拟滚动**:长列表
- **图片压缩**:减少体积
---
## 部署架构
### 开发环境
```
单机部署
├── MySQL (3306)
├── Redis (6379)
├── Spring Boot (8080)
└── Vue (80)
```
### 生产环境
```
负载均衡 (Nginx)
├── 应用服务器1 (Spring Boot :8080)
├── 应用服务器2 (Spring Boot :8080)
├── 静态文件服务器
│ └── Nginx (80/443)
├── 数据库集群
│ ├── MySQL Master
│ └── MySQL Slave (读写分离)
├── Redis集群 (主从+哨兵)
└── 文件存储
├── 本地存储
└── OSS (可选)
```
---
## API设计规范
### RESTful规范
| 方法 | 用途 | 示例 |
|------|------|------|
| GET | 查询 | `/psychology/scale/list` |
| POST | 新增 | `/psychology/scale/add` |
| PUT | 修改 | `/psychology/scale/edit` |
| DELETE | 删除 | `/psychology/scale/remove/{id}` |
### 响应格式
```json
{
"code": 200,
"msg": "操作成功",
"data": {}
}
```
### 错误码设计
| 错误码 | 说明 |
|--------|------|
| 200 | 成功 |
| 401 | 未授权 |
| 403 | 无权限 |
| 404 | 资源不存在 |
| 500 | 服务器错误 |
| 1001 | 业务错误(自定义) |
---
## 日志与监控
### 日志
- **操作日志**sys_oper_log
- **登录日志**sys_logininfor
- **应用日志**Logback
- **日志分级**DEBUG/INFO/WARN/ERROR
### 监控
- **系统监控**CPU/内存/磁盘
- **接口监控**:响应时间/成功率
- **慢查询监控**SQL性能
- **预警通知**:邮件/短信
---
## 开发规范
### 命名规范
- **包名**:小写,单词用点分隔
- **类名**大驼峰PascalCase
- **方法/变量**小驼峰camelCase
- **常量**:全大写,下划线分隔
- **数据库表**下划线分隔snake_case
### 代码规范
- **注释**:类/方法必须注释
- **异常处理**:捕获并记录
- **事务管理**:必要时加@Transactional
- **参数校验**:使用@Valid注解
- **日志输出**:关键操作记录日志
### Git规范
- **分支策略**master/main开发feature/功能分支
- **提交信息**feat/fix/docs/refactor/perf
- **代码审查**合并前review
- **版本标签**v1.0.0格式
---
**文档版本**: v1.0
**创建日期**: 2025-11-01
**最后更新**: 待定