xinli/z_Project change/进度汇总/3-技术架构设计.md
2025-11-12 15:25:47 +08:00

20 KiB
Raw Blame History

心理测评系统技术架构设计

系统架构概述

┌─────────────────────────────────────────────────────────────┐
│                        用户层                                 │
├─────────────────────────────────────────────────────────────┤
│  桌面浏览器  │  移动浏览器  │  微信小程序  │  第三方系统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 最后更新: 待定