20 KiB
20 KiB
心理测评系统技术架构设计
系统架构概述
┌─────────────────────────────────────────────────────────────┐
│ 用户层 │
├─────────────────────────────────────────────────────────────┤
│ 桌面浏览器 │ 移动浏览器 │ 微信小程序 │ 第三方系统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 (危机预警表)
- 预警记录
- 预警因子、得分
- 预警状态(未处理/已处理)
核心业务流程
测评流程
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: 展示测评报告
预警流程
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} |
响应格式
{
"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 最后更新: 待定