# 心理测评系统技术架构设计 ## 系统架构概述 ``` ┌─────────────────────────────────────────────────────────────┐ │ 用户层 │ ├─────────────────────────────────────────────────────────────┤ │ 桌面浏览器 │ 移动浏览器 │ 微信小程序 │ 第三方系统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 **最后更新**: 待定