This commit is contained in:
zlwu committed 2025-06-26 18:30:03 +08:00
commit 1ab9f9c458
1319 files changed
+137505

No files matched your search

+201
View File
@@ -0,0 +1,201 @@
# RuoYi-Vue-Plus 项目文档中心
## 文档概述
本文档中心包含了 RuoYi-Vue-Plus 项目的完整技术文档,涵盖需求分析、系统设计、开发指南、测试规范、部署运维等各个方面。
## 📚 文档目录结构
### 🎯 [需求文档](requirements/)
存放项目的需求相关文档,明确项目功能和业务规则。
**主要内容**:
- 功能需求文档
- 业务流程文档
- 原型设计文档
- 业务规则文档
**已有文档**:
- [后勤满意度调查系统需求说明](../需求文件夹/后勤满意度调查需求/高校后勤满意度调查系统需求说明.md)
- [简化版报告厅预约系统设计说明](../需求文件夹/后勤报告厅预约需求/简化版报告厅预约系统设计说明.md)
### 🏗️ [设计文档](design/)
存放项目的设计相关文档,包括系统架构、数据库设计、接口设计等。
**主要内容**:
- 系统架构设计
- 数据库设计文档
- API 接口设计
- 安全设计文档
- 性能设计文档
### 💻 [开发文档](development/)
存放项目的开发相关文档,为开发人员提供详细的开发指南。
**主要内容**:
- 开发环境搭建
- 开发规范和指南
- 代码样例和模板
- 功能开发指南
- 问题记录和解决方案
### 🧪 [测试文档](testing/)
存放项目的测试相关文档,确保项目质量和稳定性。
**主要内容**:
- 测试计划文档
- 测试用例文档
- 测试报告
- 自动化测试
- 性能测试
### 🚀 [部署文档](deployment/)
存放项目的部署相关文档,指导项目的部署和运维。
**主要内容**:
- 环境配置文档
- 容器化部署
- 自动化部署
- 监控和告警
- 运维手册
### ⚙️ [中间件配置](middleware/)
存放项目使用的各种中间件配置文档和最佳实践。
**主要内容**:
- 数据库配置(MySQL、Redis 等)
- 消息中间件配置
- 反向代理和负载均衡
- 监控组件配置
- 存储服务配置
## 🔧 技术栈概览
### 后端技术栈
- **框架**: Spring Boot 3.4.6
- **Java**: JDK 17/21
- **ORM**: MyBatis-Plus 3.5.12
- **权限**: Sa-Token 1.42.0 + JWT
- **缓存**: Redis + Redisson 3.45.1
- **数据库**: MySQL/Oracle/PostgreSQL/SQLServer
- **任务调度**: SnailJob 1.5.0
- **工作流**: Warm-Flow 1.7.3
### 前端技术栈
- **框架**: Vue 3 + TypeScript
- **UI 组件**: Element Plus
- **构建工具**: Vite
- **状态管理**: Pinia
### 部署技术栈
- **容器化**: Docker + Docker Compose
- **编排**: Kubernetes
- **反向代理**: Nginx
- **监控**: Prometheus + Grafana
- **日志**: ELK Stack
## 📖 快速导航
### 🚀 新手入门
1. **环境搭建**: [开发环境搭建指南](development/README.md#开发环境搭建)
2. **项目启动**: [快速开始](development/README.md#快速开始)
3. **开发规范**: [开发规范和指南](development/README.md#开发规范和指南)
### 💼 业务开发
1. **需求分析**: [需求文档](requirements/README.md)
2. **数据库设计**: [数据库设计文档](design/README.md#数据库设计文档)
3. **接口开发**: [API 接口设计](design/README.md#接口设计文档)
4. **前端开发**: [前端开发指南](development/README.md#功能开发指南)
### 🔧 运维部署
1. **部署方案**: [部署文档](deployment/README.md)
2. **环境配置**: [中间件配置](middleware/README.md)
3. **监控告警**: [监控配置](deployment/README.md#监控和告警)
### 🧪 质量保证
1. **测试规范**: [测试文档](testing/README.md)
2. **代码质量**: [开发规范](development/README.md#开发规范和指南)
3. **性能优化**: [性能优化指南](development/README.md#性能优化指南)
## 📋 重要规范
### 🔒 安全规范
- 所有接口必须进行权限校验
- 敏感数据必须加密存储
- 生产环境密码定期更换
- API 接口启用加解密传输
### 📊 数据库规范
- 使用雪花 ID 作为主键
- 所有业务表包含基础字段(id、tenant_id、create_by 等)
- 多租户字段必须建索引
- 遵循命名规范(下划线命名法)
### 🌐 接口规范
- 遵循 RESTful API 设计原则
- 统一响应格式(code、msg、data)
- 使用 SpringDoc 自动生成文档
- 完整的参数校验和异常处理
### 🔄 代码变更规则
**每次代码调整必须同步更新以下文档**:
- API 文档:接口变更时更新 OpenAPI 文档
- 数据库文档:表结构变更时更新 DDL 和文档
- 配置文档:配置项变更时更新配置说明
- 部署文档:部署流程变更时更新部署手册
## 📞 技术支持
### 🔗 官方资源
- **官方文档**: https://plus-doc.dromara.org
- **源码仓库**: https://gitee.com/dromara/RuoYi-Vue-Plus
- **问题反馈**: https://gitee.com/dromara/RuoYi-Vue-Plus/issues
### 📝 文档贡献
- 发现文档错误或缺失,请及时更新
- 新功能开发完成后,必须更新相关文档
- 重要经验和最佳实践,建议添加到相应文档中
### 📈 文档维护
- 文档版本与代码版本保持同步
- 定期 review 文档内容的准确性
- 过期文档及时标记或删除
## 🎯 版本信息
- **项目版本**: RuoYi-Vue-Plus 5.4.0
- **文档版本**: v1.0
- **最后更新**: 2025 年 1 月
- **维护团队**: 技术开发团队
---
**注意**: 本文档中心会随着项目的发展持续更新,请及时关注最新版本。如有任何问题或建议,欢迎通过 Issue 或技术群进行反馈。
+574
View File
@@ -0,0 +1,574 @@
# 代码调整记录
> 本文件用于记录所有前端代码的调整历史,确保变更的可追溯性和团队协作的透明度。
## 📋 记录规范说明
### 记录格式模板
每次调整后请按以下格式记录:
```markdown
## 调整记录 - YYYY-MM-DD HH:mm:ss
**调整时间**: YYYY-MM-DD HH:mm:ss
**调整人**: [开发者姓名/Cursor AI 辅助]
**调整目的**: [简述调整原因和目标]
**涉及文件**:
- src/views/[module]/[file].vue
- src/api/[module]/[file].ts
- src/components/[ComponentName]/index.vue
**调整内容详述**:
1. 具体调整了哪些代码
2. 修改了哪些功能
3. 优化了哪些性能
4. 修复了哪些问题
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- CSS 变量使用: --art-\*变量系统
- 其他重要技术决策
**测试验证**:
- [ ] 功能测试通过
- [ ] 样式规范检查通过
- [ ] TypeScript 类型检查通过
- [ ] 响应式布局测试通过
- [ ] 暗色主题兼容性测试通过
**备注**: 其他需要说明的内容
---
```
### 📝 记录要求
- **及时性**: 每次代码调整完成后立即记录
- **完整性**: 包含所有必要信息字段
- **准确性**: 详细描述实际的调整内容
- **可追溯性**: 便于后续查看和维护
---
## 📅 调整记录历史
### 示例记录
## 调整记录 - 2024-01-20 14:30:00
**调整时间**: 2024-01-20 14:30:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 建立代码调整记录管理制度,确保项目变更的可追溯性
**涉及文件**:
- docs/code-adjust-record.md (新建)
- .cursorrules (更新)
**调整内容详述**:
1. 创建了代码调整记录的标准模板
2. 在.cursorrules 中添加了强制记录要求
3. 建立了记录格式规范和管理制度
4. 为后续的代码变更管理提供标准化流程
**技术细节**:
- 文件格式: Markdown
- 遵循的规范: Plus UI 项目开发规范
- 管理方式: 版本控制与文档管理结合
- 强制性要求: 所有 Cursor AI 代码调整都必须记录
**测试验证**:
- [x] 模板格式检查通过
- [x] 文档结构清晰易读
- [x] 符合团队协作要求
- [x] .cursorrules 规范更新完成
**备注**: 这是第一条记录,用作模板示例。后续所有通过 Cursor AI 进行的代码调整都必须在此文件中留下记录。
---
<!--
以下为实际的代码调整记录,请按照上述模板格式添加新的记录
新记录请添加在此行下方,保持时间倒序排列(最新的在前)
-->
## 调整记录 - 2025-01-26 20:30:00
**调整时间**: 2025-01-26 20:30:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 优化问卷答题页面操作按钮的显示方式,统一使用图标显示并添加 tooltip 提示
**涉及文件**:
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. **移除按钮文字,统一使用图标**
- 答题按钮:移除"答题"文字,只保留 Edit 图标
- 查看结果按钮:移除"查看结果"文字,只保留 Document 图标
- 查看详情按钮:移除"查看详情"文字,只保留 View 图标
2. **添加 tooltip 提示系统**
- 为每个操作按钮添加 el-tooltip 组件
- 鼠标悬停显示对应功能名称:"答题"、"查看结果"、"查看详情"
- 设置 tooltip 位置为 top,确保最佳显示效果
3. **统一按钮尺寸和样式**
- 设置所有操作按钮为固定尺寸:32px × 32px
- 移除按钮内边距,使用 flex 布局居中图标
- 调整操作列宽度从 200px 缩减为 140px
4. **保持按钮功能和状态逻辑**
- 进行中状态(1):显示答题按钮(warning 类型)
- 已结束状态(2):显示查看结果按钮(info 类型)
- 所有状态:显示查看详情按钮(primary 类型)
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- Tooltip 组件: 使用 Element Plus 的 el-tooltip 组件,placement="top"
- CSS 优化: 使用!important 确保按钮尺寸统一,防止样式被覆盖
- 图标系统: 保持原有的 Edit、Document、View 图标
**测试验证**:
- [x] 功能测试通过 - 所有按钮点击功能正常
- [x] 样式规范检查通过 - 按钮尺寸统一,图标居中
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 响应式布局测试通过 - 操作列宽度适配
- [x] 用户体验提升 - 界面更简洁,tooltip 提示清晰
**备注**: 这次调整显著提升了表格的视觉效果,通过纯图标按钮减少了视觉噪音,同时通过 tooltip 保持了功能的可识别性。操作列宽度的缩减也为表格内容提供了更多空间。
---
## 调整记录 - 2025-01-26 16:40:00
**调整时间**: 2025-01-26 16:40:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 优化答题按钮的视觉优先级,让答题功能更加突出
**涉及文件**:
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. 将答题按钮类型从 `success` 改为 `warning`,使用更醒目的橙色
2. 将答题按钮位置调整到第一位,优先于查看按钮显示
3. 保持查看按钮为 `primary` 类型,作为次要操作按钮
4. 通过颜色和位置的调整,突出答题的重要性和优先级
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- 颜色调整: `type="warning"` 提供更醒目的橙色背景
- 布局调整: 将答题按钮放在第一位,符合操作优先级
**测试验证**:
- [x] 功能测试通过 - 按钮点击功能正常
- [x] 样式规范检查通过 - 按钮颜色醒目突出
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 用户体验测试通过 - 答题按钮更容易识别
- [x] 视觉优先级测试通过 - 主要操作更加突出
**备注**: 这次调整明确了操作按钮的优先级,答题作为核心功能使用醒目的橙色并放在首位,而查看作为辅助功能使用蓝色并放在次位,提升了用户的操作体验和效率。
---
## 调整记录 - 2025-01-26 16:35:00
**调整时间**: 2025-01-26 16:35:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 优化问卷列表操作按钮布局和文本,提升用户体验
**涉及文件**:
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. 修改操作列按钮文本:"查看题目" 改为 "查看","开始答题" 改为 "答题"
2. 添加 `action-buttons` 容器包裹操作按钮,使用 Flexbox 布局确保按钮在一行显示
3. 调整操作列宽度从 200px 减少到 160px,更好地适应缩短后的按钮文本
4. 添加 CSS 样式 `.action-buttons`,设置 `display: flex`、`gap: 8px` 等属性
5. 设置按钮居中对齐和禁止换行,确保界面整洁美观
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- 布局优化: 使用 Flexbox 确保按钮水平排列
- 样式调整: `gap: 8px` 按钮间距,`white-space: nowrap` 禁止换行
**测试验证**:
- [x] 功能测试通过 - 按钮点击功能正常
- [x] 样式规范检查通过 - 按钮保持在一行显示
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 响应式布局测试通过 - 表格列宽度适配
- [x] 用户体验提升 - 按钮文本简洁,布局紧凑
**备注**: 这次调整简化了按钮文本并优化了布局,使操作列更加紧凑,提升了表格的整体视觉效果和用户操作体验。
---
## 调整记录 - 2025-01-26 16:30:00
**调整时间**: 2025-01-26 16:30:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 统一问卷弹窗中开始时间和结束时间字段的宽度,与其他表单字段保持一致
**涉及文件**:
- web/src/views/hq/satSurvey/index.vue
**调整内容详述**:
1. 为问卷编辑弹窗中的开始时间日期选择器添加 `style="width: 100%"` 属性
2. 为问卷编辑弹窗中的结束时间日期选择器添加 `style="width: 100%"` 属性
3. 同时优化了代码格式,将单行属性改为多行格式,提高代码可读性
4. 确保所有表单字段在视觉上保持统一的宽度和对齐
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- 样式调整: 使用 `style="width: 100%"` 确保日期选择器占满容器宽度
- 代码优化: 多行属性格式提高可维护性
**测试验证**:
- [x] 功能测试通过 - 日期选择器正常工作
- [x] 样式规范检查通过 - 字段宽度统一一致
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 响应式布局测试通过 - 弹窗内字段对齐美观
- [x] 用户体验提升 - 表单字段视觉统一
**备注**: 这个调整解决了表单字段宽度不一致的视觉问题,提升了用户界面的专业性和一致性。日期选择器现在与其他输入字段保持相同的宽度。
---
## 调整记录 - 2025-01-26 16:25:00
**调整时间**: 2025-01-26 16:25:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 在.cursorrules 文件中加入代码与文档同步更新的强制规则
**涉及文件**:
- .cursorrules (添加新规则)
**调整内容详述**:
1. 在"项目文档管理规范"部分添加了"核心原则:代码与文档同步更新"
2. 明确了强制规则:每次代码调整完成后,必须同步更新相应的项目文档
3. 扩充了强制更新规则列表,新增功能文档和设计文档的更新要求
4. 添加了详细的"文档同步更新清单",分别针对前端、后端、移动端的不同更新要求
5. 建立了完整的"文档更新工作流程",确保文档更新的系统性和完整性
**技术细节**:
- 规则强化: 将文档同步更新上升为强制性要求
- 分类管理: 按照前端、后端、移动端分别制定文档更新清单
- 流程规范: 建立 5 步文档更新工作流程
- 检查机制: 提供 checkbox 清单确保文档更新的完整性
**测试验证**:
- [x] 新规则添加完成
- [x] 文档更新清单完整
- [x] 工作流程清晰明确
- [x] 涵盖所有开发场景
- [x] 确保文档永远保持最新状态
**备注**: 这个新规则确保了项目文档与代码的高度同步,避免了文档滞后的问题,为项目的长期维护提供了重要保障。
---
## 调整记录 - 2025-01-26 16:15:00
**调整时间**: 2025-01-26 16:15:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 重新组织.cursorrules 文件结构,按照项目实际情况分为四个主要部分
**涉及文件**:
- .cursorrules (重新组织)
- docs/代码调整记录.md (重命名为 docs/code-adjust-record.md)
**调整内容详述**:
1. 重新组织.cursorrules 文件,分为四个主要部分:
- 第一部分:项目文档管理规范 (docs 中的文件) 及代码调整记录管理
- 第二部分:Web 前端开发规范 (web/)
- 第三部分:后端开发规范 (backend/)
- 第四部分:移动端开发规范 (mobile/)
2. 将"代码调整记录.md"重命名为"code-adjust-record.md"
3. 更新项目结构说明,明确指出各目录的用途
4. 强化代码调整记录的管理要求,确保每次代码变更都有记录
5. 为移动端添加了完整的开发规范
**技术细节**:
- 文档组织: 按照实际项目结构(backend/, web/, mobile/, docs/)进行重新组织
- 规范分类: 将前端、后端、移动端规范独立管理,便于维护
- 记录管理: 统一代码调整记录文件命名和格式
- 强制要求: 所有代码调整都必须在 docs/code-adjust-record.md 中记录
**测试验证**:
- [x] .cursorrules 文件结构调整完成
- [x] 代码调整记录文件重命名成功
- [x] 四个部分的规范内容完整
- [x] 文档结构清晰易读
- [x] 符合项目实际开发需求
**备注**: 这次调整让.cursorrules 文件更加符合项目的实际结构,便于不同技术栈的开发人员快速找到对应的规范。同时统一了代码调整记录的管理方式。
---
## 调整记录 - 2025-01-26 10:15:00
**调整时间**: 2025-01-26 10:15:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 创建根目录统一的 .gitignore 文件,融合前端和后端的忽略规则
**涉及文件**:
- .gitignore (新建/重写)
- web/.gitignore (参考)
- backend/.gitignore (参考)
**调整内容详述**:
1. 分析了 web 和 backend 目录下现有的 .gitignore 文件内容
2. 创建了一个统一的根目录 .gitignore 文件,包含以下分类:
- 操作系统相关文件 (.DS_Store, Thumbs.db 等)
- IDE 和编辑器配置文件 (.idea/, .vscode/ 等)
- 前端相关忽略 (node_modules/, dist/, 锁定文件等)
- 后端相关忽略 (target/, .gradle/, Maven 相关文件)
- 环境配置文件 (.env 系列, 数据库配置)
- 其他常见忽略项 (压缩包, 备份文件, 证书等)
3. 使用路径前缀区分不同模块的特定忽略项 (web/, backend/, mobile/)
4. 添加了详细的注释说明每个分类的用途
5. 保持了原有 .gitignore 文件的核心规则,避免遗漏重要忽略项
**技术细节**:
- 文件格式: Git ignore 规则文件
- 覆盖范围: 整个项目的前端、后端、移动端和文档
- 路径策略: 使用相对路径前缀确保规则准确性
- 安全考虑: 包含敏感配置文件的忽略规则
- 兼容性: 支持 Vue 3 + TypeScript 前端和 Spring Boot 后端
**测试验证**:
- [x] 文件创建成功
- [x] Git ignore 语法正确
- [x] 涵盖前端所有必要忽略项
- [x] 涵盖后端所有必要忽略项
- [x] 包含安全相关配置的忽略规则
- [x] 注释清晰,便于维护
**备注**: 这个统一的 .gitignore 文件整合了前端 Vue 项目、后端 Spring Boot 项目以及移动端项目的所有忽略需求,提供了完整的版本控制支持。原有的 web/.gitignore 和 backend/.gitignore 文件仍然保留,但根目录的这个文件会作为主要的忽略规则文件。
---
## 调整记录 - 2024-12-28 16:50:00
**调整时间**: 2024-12-28 16:50:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 优化问卷弹窗中的按钮布局,让确定和取消按钮相邻排列
**涉及文件**:
- src/views/hq/satSurvey/index.vue
**调整内容详述**:
1. 修改问卷编辑弹窗的 footer 布局,使用`dialog-footer-right`类替代`dialog-footer`
2. 修改题目管理弹窗的 footer 布局,统一使用右对齐样式
3. 新增 CSS 样式`.dialog-footer-right`,实现按钮右对齐且相邻排列
4. 移除题目管理弹窗 footer 的冗余样式,简化 CSS 结构
5. 保持题目选择器弹窗的原有布局(因其有特殊的左右分栏需求)
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- CSS 布局优化: 使用`justify-content: flex-end`实现右对齐
- 按钮间距: 统一使用`gap: 12px`保证合理间距
- 布局兼容性: 保持不同弹窗的布局需求
**测试验证**:
- [x] 功能测试通过 - 问卷编辑弹窗按钮布局优化
- [x] 样式规范检查通过 - 按钮靠右且相邻排列
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 响应式布局测试通过 - 不同屏幕尺寸下表现正常
- [x] 用户体验提升 - 操作按钮更加紧凑易用
**备注**: 此次调整解决了原有按钮分别靠左右两端导致距离过远的问题,提升了用户操作的便利性。题目选择器弹窗保持原有布局,因为其左侧需要显示统计信息。
---
## 调整记录 - 2024-12-28 16:45:00
**调整时间**: 2024-12-28 16:45:00
**调整人**: 开发者/Cursor AI 辅助
**调整目的**: 简化问卷编辑弹窗表单,隐藏不必要的状态相关字段
**涉及文件**:
- src/views/hq/satSurvey/index.vue
**调整内容详述**:
1. 隐藏问卷编辑弹窗中的"是否匿名"表单项
2. 隐藏问卷编辑弹窗中的"是否发布"表单项
3. 隐藏问卷编辑弹窗中的"状态"表单项
4. 使用 HTML 注释方式隐藏这些字段,便于后续恢复
5. 简化用户操作流程,将状态控制逻辑交由系统自动管理
**技术细节**:
- 使用的技术栈: Vue 3.5.13 + TypeScript 5.8.3 + Element Plus 2.9.8
- 遵循的设计规范: Art Design Pro 轮廓式按钮系统
- 表单简化: 移除业务状态相关的用户输入字段
- 保留字段的数据绑定: form.isAnonymous, form.isPublished, form.status 仍可在代码中使用
**测试验证**:
- [x] 功能测试通过 - 弹窗正常打开且表单简化
- [x] 样式规范检查通过 - 布局保持美观
- [x] TypeScript 类型检查通过 - 无类型错误
- [x] 表单提交测试通过 - 隐藏字段不影响提交逻辑
- [x] 用户体验优化 - 表单更加简洁易用
**备注**: 隐藏的字段可以在后续需要时通过取消注释快速恢复。这样的调整使得问卷创建流程更加简洁,状态管理逻辑由系统后台自动处理,减少用户的操作复杂度。
---
## 调整记录 - 2025-01-10 16:35:00
**调整时间**: 2025-01-10 16:35:00
**调整人**: Cursor AI 辅助
**调整目的**: 优化问卷答题页面的数据权限控制和状态处理,实现按用户角色显示不同问卷和根据问卷状态显示不同操作
**涉及文件**:
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. 修改数据权限控制逻辑
- 超级管理员可查看所有已发布问卷
- 学生角色可查看目标群体为学生(1)和全体(3)的已发布问卷
- 教师角色可查看目标群体为教职工(2)和全体(3)的已发布问卷
2. 扩展问卷状态支持
- 修改查询条件支持显示进行中(1)和已结束(2)状态的问卷
- 移除对单一状态的硬编码限制
3. 优化操作按钮显示
- 进行中状态问卷显示"答题"按钮
- 已结束状态问卷显示"查看结果"按钮
- 所有状态都显示"查看详情"按钮
4. 新增功能函数
- 添加 handleViewResult 函数处理已结束问卷的结果查看
- 调整表格操作列宽度以适应新的按钮布局
5. **权限控制 bug 修复**
- 发现后端 API 不支持 targetGroupIn 和 statusIn 参数过滤
- 实现前端临时权限过滤方案,在获取数据后进行客户端过滤
- 添加详细的调试日志输出,便于排查权限问题
**技术细节**:
- 使用的技术栈: Vue 3 + TypeScript + Element Plus
- 遵循的设计规范: Art Design Pro UI 规范
- 前端临时权限过滤:通过数组 filter 方法实现目标群体和状态过滤
- 响应式按钮显示通过 v-if 指令根据问卷状态控制
- 添加全面的调试日志系统,便于问题定位
**测试验证**:
- [x] 功能测试通过 - 学生角色无法看到教职工问卷
- [ ] 代码规范检查通过
- [ ] 类型检查通过
- [ ] 兼容性测试通过
**备注**:
- 角色权限映射:student 对应学生角色,teacher 对应教师角色
- 状态码映射:0=草稿,1=进行中,2=已结束
- 目标群体码映射:1=学生,2=教职工,3=全体
- **⚠️ 重要**:当前使用前端临时权限过滤方案,后续需要修改后端 API 支持 targetGroupIn 和 statusIn 参数
- TODO: 需要实现具体的答题页面路由(/hq/survey-answer/{id})和结果查看页面路由(/hq/survey-result/{id})
- TODO: 后端需要在 HqSatSurveyController 中添加对 targetGroupIn 和 statusIn 参数的支持
---
## 调整记录 - 2025-01-10 17:15:00
**调整时间**: 2025-01-10 17:15:00
**调整人**: Cursor AI 辅助
**调整目的**: 实现后端数据权限过滤功能,替换前端临时过滤方案,提升性能和安全性
**涉及文件**:
- backend/ruoyi-admin/src/main/java/org/dromara/zhxy/domain/bo/HqSatSurveyBo.java
- backend/ruoyi-admin/src/main/java/org/dromara/zhxy/controller/HqSatSurveyController.java
- backend/ruoyi-admin/src/main/java/org/dromara/zhxy/service/impl/HqSatSurveyServiceImpl.java
- web/src/views/hq/answerSurvey/index.vue
**调整内容详述**:
1. **后端 Bo 类扩展**
- 在 HqSatSurveyBo 中添加 targetGroupIn 和 statusIn 字段
- 支持 List<String>类型的 IN 查询参数
2. **Controller 层参数处理**
- 在 list 方法中添加 params 参数解析逻辑
- 将前端传递的 targetGroupIn 和 statusIn 参数设置到 Bo 对象
3. **Service 层查询优化**
- 在 buildQueryWrapper 方法中添加 IN 查询条件
- 使用 CollUtil.isNotEmpty 进行空值检查
- 通过 LambdaQueryWrapper.in()实现数据库级过滤
4. **前端代码重构**
- 移除前端临时权限过滤逻辑
- 恢复使用 params 参数传递过滤条件
- 保留调试日志系统便于问题排查
**技术细节**:
- 使用 MyBatis-Plus 的 LambdaQueryWrapper.in()方法实现数据库级 IN 查询
- 通过 params 参数传递复杂查询条件,避免 URL 参数限制
- 权限过滤在 SQL 层面执行,支持大数据量场景
- 分页功能正常工作,只对符合权限的数据进行分页
**性能优化效果**:
- **数据库级过滤**: 减少无效数据传输,提升查询性能
- **内存使用优化**: 避免前端加载大量无权限数据
- **网络传输优化**: 只传输用户有权限查看的数据
- **分页精确性**: 分页基于过滤后的真实数据量
**测试验证**:
- [x] 功能测试通过 - 学生角色只能查看学生和全体问卷
- [x] 性能测试通过 - 数据库级过滤,无前端性能问题
- [x] 权限测试通过 - 教师角色只能查看教职工和全体问卷
- [x] 分页测试通过 - 分页基于过滤后数据正常工作
**备注**:
- 已完全替换前端临时过滤方案,提升了系统性能和安全性
- 后端权限过滤支持大数据量场景,无性能瓶颈
- 调试日志保留,便于后续问题排查和系统监控
- SQL 示例:`SELECT * FROM hq_sat_survey WHERE target_group IN ('1','3') AND status IN ('1','2')`
---
## 后端权限过滤参数支持 - ✅ 已完成
+316
View File
@@ -0,0 +1,316 @@
# 部署文档目录
## 目录说明
此目录用于存放项目的部署相关文档,包括环境配置、部署脚本、运维手册等。
## 1. 环境配置文档
### 开发环境
- **开发环境搭建指南.md**:本地开发环境搭建详细步骤
- **开发环境配置清单.md**:开发环境所需软件和版本
- **开发环境故障排查.md**:常见开发环境问题解决
### 测试环境
- **测试环境部署指南.md**:测试环境部署步骤
- **测试环境配置文件.md**:测试环境配置参数
- **测试数据初始化.md**:测试数据准备和初始化
### 生产环境
- **生产环境部署指南.md**:生产环境部署详细步骤
- **生产环境配置优化.md**:生产环境配置优化方案
- **生产环境安全配置.md**:生产环境安全配置要求
## 2. 容器化部署
### Docker 部署
- **Docker 镜像构建.md**:Docker 镜像构建指南
- **Docker Compose 部署.md**:使用 Docker Compose 部署
- **Docker 网络配置.md**:Docker 网络和存储配置
- **Docker 镜像优化.md**:Docker 镜像优化策略
### Kubernetes 部署
- **K8s 集群搭建.md**:Kubernetes 集群搭建
- **K8s 应用部署.md**:应用在 K8s 中的部署
- **K8s 配置管理.md**:ConfigMap 和 Secret 管理
- **K8s 监控配置.md**:K8s 集群监控配置
### 部署脚本示例:
```yaml
# docker-compose.yml 示例
version: "3.8"
services:
app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: ruoyi
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:7.0
command: redis-server --requirepass password
volumes:
mysql_data:
```
## 3. 自动化部署
### CI/CD 配置
- **Jenkins 部署流水线.md**:Jenkins 自动化部署配置
- **GitLab CI 部署.md**:GitLab CI/CD 配置
- **GitHub Actions 部署.md**:GitHub Actions 自动化部署
### 部署脚本
- **自动化部署脚本.md**:shell 脚本自动化部署
- **滚动更新脚本.md**:应用滚动更新脚本
- **回滚脚本.md**:快速回滚脚本
- **健康检查脚本.md**:部署后健康检查
### 流水线示例:
```yaml
# .gitlab-ci.yml 示例
stages:
- build
- test
- deploy
build:
stage: build
script:
- mvn clean package -DskipTests
artifacts:
paths:
- target/*.jar
test:
stage: test
script:
- mvn test
deploy:
stage: deploy
script:
- docker build -t app:$CI_COMMIT_SHA .
- docker push app:$CI_COMMIT_SHA
- kubectl set image deployment/app app=app:$CI_COMMIT_SHA
only:
- main
```
## 4. 数据库部署
### 数据库安装配置
- **MySQL 安装配置.md**:MySQL 数据库安装和配置
- **Redis 安装配置.md**:Redis 缓存安装和配置
- **数据库集群配置.md**:数据库集群配置
### 数据库迁移
- **数据库初始化.md**:数据库初始化脚本
- **数据迁移指南.md**:数据库迁移步骤
- **数据备份恢复.md**:数据备份和恢复策略
### 数据库优化
- **MySQL 性能优化.md**:MySQL 性能调优
- **Redis 优化配置.md**:Redis 性能优化
- **数据库监控.md**:数据库监控和告警
## 5. 负载均衡和反向代理
### Nginx 配置
- **Nginx 安装配置.md**:Nginx 安装和基础配置
- **负载均衡配置.md**:Nginx 负载均衡配置
- **SSL 证书配置.md**:HTTPS 证书配置
- **静态资源优化.md**:静态资源缓存和压缩
### 高可用配置
- **Keepalived 配置.md**:高可用负载均衡配置
- **HAProxy 配置.md**:HAProxy 负载均衡配置
- **故障转移配置.md**:自动故障转移配置
## 6. 监控和告警
### 监控系统
- **Prometheus 监控.md**:Prometheus 监控配置
- **Grafana 仪表板.md**:Grafana 监控仪表板
- **ELK 日志系统.md**:ELK 日志收集和分析
- **APM 监控.md**:应用性能监控
### 告警配置
- **告警规则配置.md**:监控告警规则配置
- **邮件告警配置.md**:邮件告警配置
- **钉钉告警配置.md**:钉钉群告警配置
- **告警处理流程.md**:告警处理流程和规范
## 7. 安全配置
### 安全加固
- **系统安全加固.md**:操作系统安全加固
- **应用安全配置.md**:应用层安全配置
- **网络安全配置.md**:网络安全和防火墙配置
- **数据安全配置.md**:数据加密和访问控制
### 证书管理
- **SSL 证书管理.md**:SSL 证书申请和管理
- **证书自动更新.md**:证书自动更新配置
- **证书监控告警.md**:证书过期监控告警
## 8. 备份和恢复
### 备份策略
- **数据备份策略.md**:数据库备份策略
- **文件备份策略.md**:应用文件备份策略
- **配置备份策略.md**:配置文件备份策略
- **备份验证流程.md**:备份有效性验证
### 灾难恢复
- **灾难恢复计划.md**:灾难恢复预案
- **数据恢复步骤.md**:数据恢复详细步骤
- **应用恢复步骤.md**:应用服务恢复步骤
- **恢复测试计划.md**:定期恢复测试计划
## 9. 性能调优
### 应用性能调优
- **JVM 参数调优.md**:Java 虚拟机参数调优
- **连接池优化.md**:数据库连接池优化
- **缓存优化.md**:Redis 缓存优化策略
- **GC 调优.md**:垃圾回收器调优
### 系统性能调优
- **操作系统调优.md**:Linux 系统性能调优
- **网络调优.md**:网络参数调优
- **存储调优.md**:磁盘 I/O 性能调优
## 10. 运维手册
### 日常运维
- **日常巡检清单.md**:系统日常巡检项目
- **性能监控指标.md**:关键性能指标监控
- **日志分析手册.md**:系统日志分析方法
- **故障排查手册.md**:常见故障排查步骤
### 应急处理
- **应急响应流程.md**:系统故障应急响应流程
- **故障处理预案.md**:各类故障处理预案
- **服务降级方案.md**:系统负载过高时的降级方案
- **数据恢复预案.md**:数据丢失或损坏恢复预案
### 变更管理
- **变更申请流程.md**:系统变更申请流程
- **变更风险评估.md**:变更风险评估标准
- **变更回滚计划.md**:变更失败回滚计划
- **变更后验证.md**:变更后系统验证清单
## 11. 环境清单
### 软件版本清单
```
操作系统: CentOS 7+ / Ubuntu 18.04+
Java: OpenJDK 17/21
Maven: 3.6+
Node.js: 16+
MySQL: 8.0+
Redis: 6.0+
Nginx: 1.18+
Docker: 20.10+
```
### 硬件配置建议
```
开发环境:
CPU: 4核+
内存: 8GB+
存储: 100GB+
测试环境:
CPU: 8核+
内存: 16GB+
存储: 500GB+
生产环境:
CPU: 16核+
内存: 32GB+
存储: 1TB+
网络: 1Gbps+
```
### 端口规划
```
应用服务: 8080
数据库: 3306
Redis: 6379
Nginx: 80, 443
监控: 9090, 3000
```
## 12. 部署检查清单
### 部署前检查
- [ ] 服务器资源充足
- [ ] 网络连通性正常
- [ ] 域名解析配置
- [ ] SSL 证书准备
- [ ] 数据库初始化
- [ ] 配置文件检查
- [ ] 备份计划确认
### 部署后验证
- [ ] 应用启动正常
- [ ] 健康检查通过
- [ ] 核心功能验证
- [ ] 性能指标正常
- [ ] 日志输出正常
- [ ] 监控告警正常
- [ ] 备份任务正常
## 注意事项
1. 所有密码和密钥必须加密存储
2. 生产环境配置需要经过安全审核
3. 部署过程需要详细记录和备份
4. 关键操作需要双人确认
5. 部署后需要进行全面的功能验证
6. 必须有完整的回滚方案
+113
View File
@@ -0,0 +1,113 @@
# 设计文档目录
## 目录说明
此目录用于存放项目的设计相关文档,包括系统设计、数据库设计、接口设计等。
## 1. 系统设计文档
`系统设计文档`:整体系统架构设计和模块设计
### 文档结构:
- **系统架构设计.md**:整体架构设计方案
- **模块设计文档.md**:各功能模块详细设计
- **技术选型说明.md**:技术栈选择和说明
- **部署架构设计.md**:部署架构和环境设计
## 2. 数据库设计文档
`数据库设计文档`:数据库结构设计和字段说明
### 设计文档:
- **数据库设计说明.md**:数据库整体设计说明
- **ER图设计文档.md**:实体关系图设计
- **表结构设计.md**:详细表结构和字段说明
- **数据字典.md**:数据字典和编码规范
### SQL脚本:
- DDL/ - 数据定义语言脚本
- create_tables.sql - 建表脚本
- alter_tables.sql - 修改表结构脚本
- indexes.sql - 索引创建脚本
- DML/ - 数据操作语言脚本
- init_data.sql - 初始化数据脚本
- dict_data.sql - 字典数据脚本
- test_data.sql - 测试数据脚本
## 3. 接口设计文档
`接口设计文档`:API接口设计和数据格式定义
### 设计文档:
- **API接口设计规范.md**:接口设计规范和约定
- **接口文档模板.md**:标准接口文档模板
- **数据格式规范.md**:请求响应数据格式规范
- **错误码定义.md**:统一错误码定义
### 模块接口:
- system/ - 系统管理模块接口
- auth/ - 认证授权模块接口
- tenant/ - 多租户模块接口
- workflow/ - 工作流模块接口
- custom/ - 自定义业务模块接口
## 4. 安全设计文档
`安全设计文档`:系统安全设计和防护方案
### 设计文档:
- **权限设计方案.md**:权限模型和访问控制
- **数据安全设计.md**:数据加密和脱敏方案
- **接口安全设计.md**:接口安全防护方案
- **审计日志设计.md**:操作审计和日志设计
## 5. 性能设计文档
`性能设计文档`:系统性能优化设计
### 设计文档:
- **缓存设计方案.md**:缓存策略和实现方案
- **数据库优化设计.md**:数据库性能优化设计
- **分布式设计方案.md**:分布式架构设计
- **监控设计方案.md**:性能监控和告警设计
## 文档管理规范
### 设计原则
- **可扩展性**:设计支持功能扩展和技术升级
- **可维护性**:清晰的模块划分和接口定义
- **可测试性**:支持单元测试和集成测试
- **安全性**:全面的安全防护设计
- **性能优化**:合理的性能优化策略
### 文档规范
- 统一使用Markdown格式
- 包含完整的设计说明和实现方案
- 提供清晰的图表和示例
- 定期更新和维护文档
### 版本控制
- 重大设计变更需要版本升级
- 保留设计变更历史记录
- 设计文档与代码版本同步
## 设计评审
### 评审流程
1. 设计文档编写完成
2. 技术团队内部评审
3. 架构师确认设计方案
4. 项目负责人最终审批
### 评审要点
- 设计方案的合理性和可行性
- 技术选型的适当性
- 性能和安全考虑
- 可扩展性和维护性
## 注意事项
1. 所有重要设计决策都需要文档记录
2. 设计变更需要评估影响范围
3. 设计文档需要与实际实现保持同步
4. 定期review设计文档的有效性
+125
View File
@@ -0,0 +1,125 @@
# 数据库设计目录
## 目录说明
此目录用于存放项目的数据库设计相关文档和脚本文件。
## 📁 目录结构
```
database/
├── README.md # 本说明文件
├── hzdyjs_xg.sql # 完整数据库模型 (当前系统的完整表结构)
├── database_msg.md # 数据库环境配置信息
├── 数据库设计说明.md # 整体数据库设计文档
├── ER图设计文档.md # 实体关系图设计
├── 表结构设计.md # 详细表结构和字段说明
├── 数据字典.md # 数据字典和编码规范
├── DDL/ # 数据定义语言脚本
│ ├── system/ # 系统核心表
│ │ ├── sys_tables.sql # 系统管理表
│ │ ├── auth_tables.sql # 权限认证表
│ │ └── tenant_tables.sql # 多租户表
│ ├── business/ # 业务模块表
│ │ ├── hq_tables.sql # 后勤管理相关表
│ │ └── custom_tables.sql # 自定义业务表
│ ├── indexes.sql # 索引创建脚本
│ └── constraints.sql # 约束创建脚本
├── DML/ # 数据操作语言脚本
│ ├── init_data.sql # 初始化数据脚本
│ ├── dict_data.sql # 字典数据脚本
│ ├── menu_data.sql # 菜单权限数据
│ └── test_data.sql # 测试数据脚本
├── models/ # 数据模型文件
│ ├── erd/ # ER图文件
│ │ ├── system_erd.drawio # 系统模块ER图
│ │ ├── business_erd.drawio # 业务模块ER图
│ │ └── complete_erd.png # 完整ER图导出
│ └── schema/ # 数据库schema文件
│ ├── mysql_schema.sql # MySQL数据库schema
│ ├── oracle_schema.sql # Oracle数据库schema
│ └── postgres_schema.sql # PostgreSQL数据库schema
└── migration/ # 数据库迁移脚本
├── v5.0_to_v5.1/ # 版本升级脚本
├── v5.1_to_v5.2/
└── rollback/ # 回滚脚本
```
## 🎯 不同类型数据模型的存放建议
### 0. **当前完整数据库模型**
- **主模型文件**: `docs/design/database/hzdyjs_xg.sql`
- **内容**: 当前系统的完整数据库表结构,包含所有业务表和系统表
- **说明**: 包含宿舍管理 (bed*\*, dormitory*\_)、工作流 (flow\_\_) 等业务模块
- **环境配置**: `docs/design/database/database_msg.md` 包含开发环境数据库连接信息
### 1. **系统核心数据模型**
- **位置**: `docs/design/database/DDL/system/`
- **内容**: 系统管理、权限认证、多租户等核心表结构
- **示例**: `sys_user`, `sys_role`, `sys_menu`, `sys_tenant`
### 2. **业务模块数据模型**
- **位置**: `docs/design/database/DDL/business/`
- **内容**: 具体业务功能相关的表结构
- **示例**: 后勤管理、报告厅预约、满意度调查等
### 3. **初始化和测试数据**
- **位置**: `docs/design/database/DML/`
- **内容**: 系统初始化数据、字典数据、测试数据等
### 4. **ER 图和设计文档**
- **位置**: `docs/design/database/models/`
- **内容**: 数据库设计图表、关系图、设计说明等
### 5. **版本升级脚本**
- **位置**: `docs/design/database/migration/`
- **内容**: 数据库版本升级脚本、数据迁移脚本等
## 🔄 与现有目录的关联
### 现有 SQL 脚本位置
- **当前完整模型**: `docs/design/database/hzdyjs_xg.sql` → 当前系统的完整数据库模型 (3638 行)
- **环境配置**: `docs/design/database/database_msg.md` → 开发环境数据库连接信息
- **框架主脚本**: `script/sql/ry_vue_5.X.sql` → 参考并拆分到对应模块
- **更新脚本**: `script/sql/update/` → 整理到 migration 目录
- **业务脚本**: `docs/requirements/*/` → 移动到 business 目录
### 同步规则
1. **新表设计**: 先在`docs/design/database/`中设计,再更新到`script/sql/`
2. **表结构变更**: 同时更新设计文档和升级脚本
- **必须同步更新**: `docs/design/database/hzdyjs_xg.sql` 中的表结构
- **环境配置变更**: 及时更新 `docs/design/database/database_msg.md`
3. **文档维护**: 每次数据库变更都要更新相关设计文档
## 📝 文件命名规范
### DDL 脚本命名
- **系统表**: `sys_*.sql` (如: sys_user.sql)
- **业务表**: `模块前缀_*.sql` (如: hq_survey.sql)
- **索引脚本**: `idx_表名.sql` (如: idx_sys_user.sql)
### 文档命名
- **设计文档**: 使用中文描述性名称
- **ER 图文件**: `模块名_erd.drawio`
- **导出图片**: `模块名_erd.png`
## ⚠️ 注意事项
1. **版本控制**: 所有 DDL 变更都要记录版本和变更原因
2. **多数据库支持**: 考虑 MySQL、Oracle、PostgreSQL 的兼容性
3. **命名规范**: 遵循框架统一的命名规范(下划线命名法)
4. **文档同步**: 表结构变更必须同时更新设计文档
- **关键文件**: `hzdyjs_xg.sql` 必须保持最新的完整表结构
- **环境安全**: `database_msg.md` 中的密码信息注意安全保护
5. **备份策略**: 重要脚本变更前要备份现有版本
6. **当前系统参考**: 新增表结构应参考 `hzdyjs_xg.sql` 中现有表的设计规范
+5
View File
@@ -0,0 +1,5 @@
# 研发环境的数据库信息
url: jdbc:mysql://47.99.164.66:3306/hzdyjs_xg
username: root
password: hn02le.34lkdLKD
File diff suppressed because it is too large. Load diff
+384
View File
@@ -0,0 +1,384 @@
# 开发文档目录
## 目录说明
此目录用于存放项目的开发相关文档,包括开发指南、代码样例、问题记录等。
## 1. 开发环境搭建
### 环境准备
- **开发环境搭建指南.md**:完整的开发环境搭建步骤
- **IDE 配置指南.md**:IntelliJ IDEA 开发环境配置
- **Maven 配置.md**:Maven 环境配置和私服配置
- **Git 配置.md**:Git 版本控制配置
### 工具安装
- **JDK 安装配置.md**:Java 开发环境安装
- **Node.js 安装配置.md**:前端开发环境安装
- **数据库安装.md**:MySQL 和 Redis 安装配置
- **开发工具推荐.md**:推荐的开发工具和插件
### 环境配置示例:
```bash
# 开发环境启动脚本示例
#!/bin/bash
# 启动MySQL
sudo systemctl start mysql
# 启动Redis
sudo systemctl start redis
# 启动后端应用
cd ruoyi-admin
mvn spring-boot:run -Dspring-boot.run.profiles=dev
# 启动前端应用
cd ../plus-ui
npm run dev
```
## 2. 开发规范和指南
### 代码规范
- **Java 代码规范.md**:Java 代码编写规范
- **前端代码规范.md**:Vue3+TypeScript 代码规范
- **数据库设计规范.md**:数据库表设计规范
- **API 接口规范.md**:RESTful API 设计规范
### 命名规范
- **包命名规范.md**:Java 包命名规范
- **类和方法命名.md**:类和方法命名规范
- **数据库命名规范.md**:表和字段命名规范
- **前端命名规范.md**:组件和方法命名规范
### Git 规范
- **Git 分支规范.md**:Git 分支管理规范
- **提交信息规范.md**:Git 提交信息格式规范
- **代码审查流程.md**:Code Review 流程和标准
## 3. 架构设计指南
### 系统架构
- **整体架构设计.md**:系统整体架构设计说明
- **模块化设计.md**:模块化架构设计原则
- **分层架构设计.md**:分层架构设计和职责划分
- **微服务架构.md**:微服务架构设计指南
### 设计模式
- **常用设计模式.md**:项目中使用的设计模式
- **Spring 设计模式.md**:Spring 框架中的设计模式
- **业务设计模式.md**:业务层常用设计模式
### 架构示例:
```java
// 标准Controller示例
@RestController
@RequestMapping("/api/v1/users")
@Tag(name = "用户管理", description = "用户管理相关接口")
public class UserController extends BaseController {
@Autowired
private IUserService userService;
@SaCheckPermission("system:user:list")
@GetMapping
@Operation(summary = "查询用户列表", description = "分页查询用户信息")
public R<PageResult<UserVO>> list(@Valid UserQueryDTO queryDTO) {
return R.ok(userService.queryPageList(queryDTO));
}
}
```
## 4. 功能开发指南
### 新功能开发流程
- **功能开发流程.md**:从需求到上线的完整流程
- **业务模块开发.md**:新业务模块开发步骤
- **接口开发指南.md**:API 接口开发步骤
- **前端页面开发.md**:前端页面开发步骤
### 数据库开发
- **数据库设计流程.md**:数据库表设计流程
- **SQL 编写规范.md**:SQL 语句编写规范
- **数据迁移指南.md**:数据库迁移指南
- **性能优化指南.md**:SQL 性能优化指南
### 缓存开发
- **Redis 使用指南.md**:Redis 缓存使用指南
- **缓存策略设计.md**:缓存策略设计原则
- **分布式锁使用.md**:分布式锁使用指南
## 5. 代码样例和模板
### 后端代码模板
- **Controller 模板.md**:标准 Controller 代码模板
- **Service 模板.md**:标准 Service 代码模板
- **Mapper 模板.md**:标准 Mapper 代码模板
- **Entity 模板.md**:标准实体类代码模板
### 前端代码模板
- **Vue 组件模板.md**:标准 Vue 组件模板
- **API 调用模板.md**:API 接口调用模板
- **表单组件模板.md**:表单组件开发模板
- **表格组件模板.md**:表格组件开发模板
### 配置文件模板
- **application.yml 模板.md**:应用配置模板
- **logback 配置模板.md**:日志配置模板
- **Dockerfile 模板.md**:Docker 镜像构建模板
### Service 层代码示例:
```java
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper userMapper;
@Override
@DataPermission(deptAlias = "d", userAlias = "u")
public PageResult<UserVO> queryPageList(UserQueryDTO queryDTO) {
LambdaQueryWrapper<SysUser> lqw = buildQueryWrapper(queryDTO);
Page<UserVO> result = userMapper.selectVoPage(queryDTO.toPage(), lqw);
return PageResult.build(result);
}
private LambdaQueryWrapper<SysUser> buildQueryWrapper(UserQueryDTO queryDTO) {
return Wrappers.<SysUser>lambdaQuery()
.like(StringUtils.isNotBlank(queryDTO.getUserName()),
SysUser::getUserName, queryDTO.getUserName())
.eq(StringUtils.isNotBlank(queryDTO.getStatus()),
SysUser::getStatus, queryDTO.getStatus())
.between(queryDTO.getCreateTime() != null && queryDTO.getCreateTime().length == 2,
SysUser::getCreateTime,
queryDTO.getCreateTime()[0], queryDTO.getCreateTime()[1]);
}
}
```
## 6. 第三方集成指南
### 权限认证集成
- **Sa-Token 集成.md**:Sa-Token 权限框架集成
- **JWT 配置.md**:JWT 令牌配置和使用
- **第三方登录.md**:第三方登录集成指南
- **单点登录.md**:SSO 单点登录配置
### 消息服务集成
- **短信服务集成.md**:短信服务集成指南
- **邮件服务集成.md**:邮件服务集成指南
- **消息中间件.md**:消息队列集成指南
### 存储服务集成
- **文件存储集成.md**:MinIO 文件存储集成
- **云存储集成.md**:阿里云 OSS 等云存储集成
- **图片处理.md**:图片上传和处理
## 7. 测试开发指南
### 单元测试
- **单元测试编写.md**:单元测试编写指南
- **Mock 测试.md**:Mock 对象使用指南
- **测试用例设计.md**:测试用例设计原则
- **测试覆盖率.md**:测试覆盖率要求和检查
### 集成测试
- **集成测试编写.md**:集成测试编写指南
- **数据库测试.md**:数据库操作测试
- **API 测试.md**:API 接口测试
### 测试示例:
```java
@SpringBootTest
@Transactional
@Rollback
class UserServiceTest {
@Autowired
private IUserService userService;
@Test
@DisplayName("测试用户查询功能")
void testQueryUser() {
// Given
UserQueryDTO queryDTO = new UserQueryDTO();
queryDTO.setUserName("admin");
// When
PageResult<UserVO> result = userService.queryPageList(queryDTO);
// Then
assertThat(result).isNotNull();
assertThat(result.getRecords()).isNotEmpty();
}
}
```
## 8. 性能优化指南
### 代码优化
- **算法优化.md**:常见算法优化技巧
- **集合框架优化.md**:Java 集合使用优化
- **字符串优化.md**:字符串操作优化
- **反射优化.md**:反射操作优化
### 数据库优化
- **查询优化.md**:SQL 查询优化指南
- **索引优化.md**:数据库索引优化
- **连接池优化.md**:数据库连接池优化
- **分页优化.md**:大数据量分页优化
### 缓存优化
- **缓存设计.md**:缓存设计最佳实践
- **缓存穿透.md**:缓存穿透问题解决
- **缓存雪崩.md**:缓存雪崩问题解决
- **缓存击穿.md**:缓存击穿问题解决
## 9. 问题记录和解决方案
### 常见问题
- **启动问题.md**:应用启动常见问题
- **配置问题.md**:配置相关常见问题
- **数据库问题.md**:数据库连接和操作问题
- **缓存问题.md**:Redis 缓存相关问题
### 框架问题
- **Spring Boot 问题.md**:Spring Boot 框架问题
- **MyBatis Plus 问题.md**:MyBatis Plus 相关问题
- **Sa-Token 问题.md**:Sa-Token 权限框架问题
- **前端框架问题.md**:Vue3 相关问题
### 部署问题
- **Docker 问题.md**:Docker 部署相关问题
- **Nginx 问题.md**:Nginx 配置相关问题
- **SSL 证书问题.md**:SSL 证书配置问题
## 10. 版本升级指南
### 框架升级
- **Spring Boot 升级.md**:Spring Boot 版本升级指南
- **Java 版本升级.md**:Java 版本升级指南
- **依赖升级.md**:第三方依赖升级指南
### 数据库升级
- **MySQL 升级.md**:MySQL 版本升级指南
- **Redis 升级.md**:Redis 版本升级指南
- **数据迁移.md**:数据库结构迁移指南
### 兼容性处理
- **向后兼容.md**:向后兼容性处理
- **接口兼容.md**:API 接口兼容性处理
- **数据兼容.md**:数据格式兼容性处理
## 11. 开发工具和插件
### IDEA 插件推荐
```
必装插件:
- Lombok
- MyBatis Plus
- Alibaba Java规约检查
- SonarLint
- GitToolBox
- Rainbow Brackets
- Translation
可选插件:
- JRebel (热部署)
- Sequence Diagram (时序图)
- RestfulTool (接口测试)
- Database Navigator (数据库)
```
### 开发工具推荐
- **数据库工具**: Navicat Premium / DataGrip
- **Redis 工具**: RedisDesktopManager / AnotherRedisDesktopManager
- **API 工具**: Postman / Insomnia
- **Git 工具**: SourceTree / GitKraken
- **文档工具**: Typora / Mark Text
### 代码质量工具
- **静态分析**: SonarQube
- **代码格式**: Google Java Format
- **依赖检查**: OWASP Dependency Check
- **测试覆盖**: JaCoCo
## 12. 快速开始
### 项目初始化
```bash
# 1. 克隆项目
git clone https://gitee.com/dromara/RuoYi-Vue-Plus.git
# 2. 导入数据库
mysql -u root -p < script/sql/ry_vue_5.X.sql
# 3. 修改配置
# 编辑 ruoyi-admin/src/main/resources/application-dev.yml
# 修改数据库连接信息
# 4. 启动后端
cd ruoyi-admin
mvn spring-boot:run
# 5. 启动前端
cd plus-ui
npm install
npm run dev
```
### 新模块开发步骤
1. **需求分析**: 明确功能需求和技术要求
2. **数据库设计**: 设计表结构和关系
3. **代码生成**: 使用代码生成器生成基础代码
4. **业务开发**: 实现具体业务逻辑
5. **前端开发**: 开发前端页面和交互
6. **测试验证**: 编写测试用例并验证
7. **文档更新**: 更新相关文档
## 注意事项
1. 开发前必须阅读框架文档和开发规范
2. 新功能开发需要编写对应的测试用例
3. 代码提交前需要通过代码规范检查
4. 重要功能变更需要进行 Code Review
5. 及时更新开发文档和接口文档
6. 遵循安全编码规范,避免安全漏洞
+220
View File
@@ -0,0 +1,220 @@
# 中间件配置文档
## 目录说明
此目录用于存放项目使用的各种中间件配置文档和最佳实践。
## 1. 数据库配置
### MySQL配置
- **mysql-config.md**:MySQL数据库配置和优化
- **mysql-cluster.md**:MySQL集群部署方案
- **mysql-backup.md**:MySQL备份和恢复策略
- **mysql-monitor.md**:MySQL监控和性能调优
### 多数据库支持
- **oracle-config.md**:Oracle数据库配置
- **postgresql-config.md**:PostgreSQL数据库配置
- **sqlserver-config.md**:SQL Server数据库配置
### 配置示例:
```yaml
# MySQL开发环境配置示例
spring:
datasource:
dynamic:
primary: master
datasource:
master:
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
```
## 2. Redis配置
### Redis部署
- **redis-standalone.md**:Redis单机部署配置
- **redis-cluster.md**:Redis集群部署配置
- **redis-sentinel.md**:Redis哨兵模式配置
- **redis-optimize.md**:Redis性能优化
### Redisson配置
- **redisson-config.md**:Redisson客户端配置
- **redisson-lock.md**:分布式锁配置
- **redisson-cache.md**:缓存配置
### 配置示例:
```yaml
# Redis配置示例
spring:
data:
redis:
host: localhost
port: 6379
database: 0
password: password
timeout: 10s
```
## 3. 消息中间件配置
### RabbitMQ配置
- **rabbitmq-install.md**:RabbitMQ安装和配置
- **rabbitmq-cluster.md**:RabbitMQ集群配置
- **rabbitmq-monitor.md**:RabbitMQ监控配置
### RocketMQ配置
- **rocketmq-install.md**:RocketMQ安装和配置
- **rocketmq-cluster.md**:RocketMQ集群配置
### Kafka配置
- **kafka-install.md**:Kafka安装和配置
- **kafka-cluster.md**:Kafka集群配置
## 4. 监控组件配置
### Spring Boot Admin
- **spring-boot-admin.md**:服务监控配置
- **admin-security.md**:监控安全配置
### Prometheus + Grafana
- **prometheus-config.md**:Prometheus监控配置
- **grafana-dashboard.md**:Grafana仪表板配置
### ELK Stack
- **elasticsearch-config.md**:Elasticsearch配置
- **logstash-config.md**:Logstash日志收集配置
- **kibana-config.md**:Kibana日志分析配置
## 5. 反向代理和负载均衡
### Nginx配置
- **nginx-install.md**:Nginx安装和基础配置
- **nginx-load-balance.md**:负载均衡配置
- **nginx-ssl.md**:SSL证书配置
- **nginx-cache.md**:静态资源缓存配置
### 配置示例:
```nginx
# Nginx负载均衡配置示例
upstream backend {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
## 6. 存储服务配置
### MinIO配置
- **minio-install.md**:MinIO安装和配置
- **minio-cluster.md**:MinIO集群配置
- **minio-backup.md**:MinIO备份策略
### 其他存储
- **aliyun-oss.md**:阿里云OSS配置
- **qiniu-cloud.md**:七牛云存储配置
- **tencent-cos.md**:腾讯云COS配置
## 7. 短信和邮件服务
### 短信服务配置
- **aliyun-sms.md**:阿里云短信服务配置
- **tencent-sms.md**:腾讯云短信服务配置
- **sms4j-config.md**:短信融合包配置
### 邮件服务配置
- **email-config.md**:邮件服务配置
- **email-template.md**:邮件模板配置
## 8. 安全组件配置
### Sa-Token配置
- **satoken-config.md**:Sa-Token权限配置
- **satoken-jwt.md**:JWT配置
- **satoken-sso.md**:单点登录配置
### 第三方认证
- **oauth2-config.md**:OAuth2认证配置
- **ldap-config.md**:LDAP认证配置
## 环境配置
### 开发环境
- **dev-environment.md**:开发环境搭建指南
- **docker-compose-dev.yml**:开发环境Docker配置
### 测试环境
- **test-environment.md**:测试环境配置
- **docker-compose-test.yml**:测试环境Docker配置
### 生产环境
- **prod-environment.md**:生产环境配置
- **docker-compose-prod.yml**:生产环境Docker配置
- **k8s-deployment.md**:Kubernetes部署配置
## 配置管理规范
### 配置原则
1. **环境隔离**:不同环境使用不同配置
2. **安全优先**:敏感信息加密存储
3. **版本控制**:配置变更进行版本管理
4. **监控告警**:关键配置项设置监控
### 配置规范
- 使用配置中心统一管理
- 敏感信息不直接写在配置文件中
- 配置变更需要审核流程
- 定期备份配置文件
### 密码管理
- 数据库密码定期更换
- Redis密码必须设置
- 中间件默认密码必须修改
- 生产环境密码复杂度要求
## 性能调优
### JVM调优
- **jvm-config.md**:JVM参数配置和调优
- **gc-config.md**:垃圾回收器配置
### 数据库调优
- 连接池参数优化
- SQL语句性能优化
- 索引设计优化
### 缓存调优
- Redis内存使用优化
- 缓存过期策略优化
- 缓存穿透防护
## 故障排查
### 常见问题
- **common-issues.md**:常见问题和解决方案
- **troubleshooting.md**:故障排查手册
- **performance-issues.md**:性能问题排查
### 日志分析
- **log-analysis.md**:日志分析方法
- **error-handling.md**:错误处理规范
## 注意事项
1. 所有中间件密码必须设置且定期更换
2. 生产环境配置需要经过安全审核
3. 配置变更需要备份和回滚方案
4. 关键中间件需要设置监控和告警
+557
View File
@@ -0,0 +1,557 @@
# MySQL 数据库配置指南
## 概述
本文档详细说明了 RuoYi-Vue-Plus 项目中 MySQL 数据库的安装、配置和优化方案。
## 1. MySQL 安装
### 1.1 Docker 安装(推荐)
```bash
# 拉取MySQL 8.0镜像
docker pull mysql:8.0
# 创建MySQL容器
docker run -d \
--name mysql-ruoyi \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
-e MYSQL_DATABASE=ruoyi \
-e MYSQL_USER=ruoyi \
-e MYSQL_PASSWORD=ruoyi_password \
-v mysql_data:/var/lib/mysql \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
```
### 1.2 传统安装
#### CentOS/RHEL 安装
```bash
# 下载MySQL官方Yum Repository
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL Yum Repository
sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL
sudo yum install mysql-community-server
# 启动MySQL服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
```
#### Ubuntu/Debian 安装
```bash
# 更新包索引
sudo apt update
# 安装MySQL服务器
sudo apt install mysql-server
# 启动MySQL服务
sudo systemctl start mysql
sudo systemctl enable mysql
```
## 2. 数据库配置
### 2.1 基础配置
#### 修改 root 密码
```sql
-- 登录MySQL
mysql -u root -p
-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
-- 刷新权限
FLUSH PRIVILEGES;
```
#### 创建业务数据库和用户
```sql
-- 创建数据库
CREATE DATABASE ruoyi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'ruoyi_password';
-- 授权
GRANT ALL PRIVILEGES ON ruoyi.* TO 'ruoyi'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
```
### 2.2 配置文件 (my.cnf)
#### 基础配置
```ini
[mysqld]
# 基本设置
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/mysql.pid
user = mysql
bind-address = 0.0.0.0
# 字符集设置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
# SQL模式设置
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 时区设置
default-time-zone = '+8:00'
# 表名大小写敏感
lower_case_table_names = 1
# 日志设置
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
# 连接设置
max_connections = 1000
max_connect_errors = 100000
max_allowed_packet = 64M
interactive_timeout = 600
wait_timeout = 600
# 缓冲区设置
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
# 其他优化
innodb_file_per_table = 1
innodb_open_files = 500
innodb_io_capacity = 1000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
```
## 3. 应用配置
### 3.1 开发环境配置
```yaml
# application-dev.yml
spring:
datasource:
dynamic:
primary: master
strict: true
datasource:
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: ruoyi
password: ruoyi_password
hikari:
maximum-pool-size: 20
minimum-idle: 10
connection-timeout: 30000
validation-timeout: 5000
idle-timeout: 600000
max-lifetime: 1800000
keepalive-time: 30000
```
### 3.2 生产环境配置
```yaml
# application-prod.yml
spring:
datasource:
dynamic:
primary: master
strict: true
datasource:
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql-server:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: ${DB_USERNAME:ruoyi}
password: ${DB_PASSWORD:encrypted_password}
hikari:
maximum-pool-size: 50
minimum-idle: 20
connection-timeout: 30000
validation-timeout: 5000
idle-timeout: 600000
max-lifetime: 1800000
keepalive-time: 30000
connection-test-query: SELECT 1
```
## 4. 性能优化
### 4.1 参数优化
#### 内存相关参数
```ini
# InnoDB缓冲池大小(建议设置为可用内存的70-80%)
innodb_buffer_pool_size = 4G
# 缓冲池实例数(建议设置为CPU核心数)
innodb_buffer_pool_instances = 8
# 查询缓存(MySQL 8.0已移除)
# query_cache_size = 0
# query_cache_type = 0
# 排序缓冲区
sort_buffer_size = 2M
# 连接缓冲区
read_buffer_size = 2M
read_rnd_buffer_size = 8M
# 临时表缓冲区
tmp_table_size = 128M
max_heap_table_size = 128M
```
#### I/O 相关参数
```ini
# InnoDB I/O容量
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
# InnoDB读写线程数
innodb_read_io_threads = 16
innodb_write_io_threads = 16
# InnoDB刷盘策略
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
# 并发插入
concurrent_insert = 2
```
### 4.2 索引优化
#### 索引设计原则
1. **主键索引**: 使用雪花 ID,保证唯一性和有序性
2. **外键索引**: 所有外键字段必须建立索引
3. **复合索引**: 根据查询条件建立复合索引
4. **覆盖索引**: 优先使用覆盖索引减少回表
#### 常用索引示例
```sql
-- 租户索引(必须)
CREATE INDEX idx_tenant_id ON sys_user(tenant_id);
-- 复合索引
CREATE INDEX idx_user_status_dept ON sys_user(status, dept_id, create_time);
-- 唯一索引
CREATE UNIQUE INDEX uk_user_name_tenant ON sys_user(user_name, tenant_id);
```
### 4.3 查询优化
#### SQL 优化建议
1. **避免 SELECT \***: 只查询需要的字段
2. **使用 LIMIT**: 大数据量查询使用 LIMIT 分页
3. **避免子查询**: 使用 JOIN 替代子查询
4. **使用 EXPLAIN**: 分析查询执行计划
#### 分页查询优化
```sql
-- 传统分页(性能差)
SELECT * FROM sys_user ORDER BY id LIMIT 10000, 10;
-- 优化分页(使用覆盖索引)
SELECT u.* FROM sys_user u
INNER JOIN (
SELECT id FROM sys_user ORDER BY id LIMIT 10000, 10
) tmp ON u.id = tmp.id;
-- 游标分页(推荐)
SELECT * FROM sys_user WHERE id > 10000 ORDER BY id LIMIT 10;
```
## 5. 监控和维护
### 5.1 性能监控
#### 关键监控指标
```sql
-- 连接数监控
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Max_used_connections';
-- 查询性能监控
SHOW STATUS LIKE 'Slow_queries';
SHOW STATUS LIKE 'Questions';
-- InnoDB监控
SHOW STATUS LIKE 'Innodb_buffer_pool_read_requests';
SHOW STATUS LIKE 'Innodb_buffer_pool_reads';
-- 锁监控
SHOW STATUS LIKE 'Table_locks_waited';
SHOW STATUS LIKE 'Innodb_deadlocks';
```
#### 慢查询分析
```bash
# 分析慢查询日志
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
# 实时监控慢查询
mysql -e "SHOW FULL PROCESSLIST" | grep -v "Sleep"
```
### 5.2 备份策略
#### 物理备份(推荐)
```bash
# 使用xtrabackup进行热备份
xtrabackup --backup --target-dir=/backup/mysql/$(date +%Y%m%d_%H%M%S)
# 备份脚本示例
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DIR/$DATE"
# 创建备份目录
mkdir -p $BACKUP_PATH
# 执行备份
xtrabackup --backup --target-dir=$BACKUP_PATH
# 压缩备份
tar -czf $BACKUP_PATH.tar.gz -C $BACKUP_DIR $DATE
# 删除原备份目录
rm -rf $BACKUP_PATH
# 删除7天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
```
#### 逻辑备份
```bash
# 使用mysqldump备份
mysqldump -u root -p --single-transaction --routines --triggers \
--events --databases ruoyi > ruoyi_$(date +%Y%m%d_%H%M%S).sql
# 恢复数据
mysql -u root -p ruoyi < ruoyi_20250101_120000.sql
```
## 6. 安全配置
### 6.1 用户权限管理
#### 最小权限原则
```sql
-- 应用用户只授予必要权限
CREATE USER 'app_user'@'%' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON ruoyi.* TO 'app_user'@'%';
-- 只读用户
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'readonly_password';
GRANT SELECT ON ruoyi.* TO 'readonly_user'@'%';
-- 备份用户
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'backup_password';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup_user'@'localhost';
```
### 6.2 网络安全
#### 防火墙配置
```bash
# 只允许特定IP访问MySQL
iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
```
#### SSL 配置
```ini
# my.cnf SSL配置
[mysqld]
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
require_secure_transport=ON
```
## 7. 故障排查
### 7.1 常见问题
#### 连接问题
```bash
# 检查MySQL服务状态
systemctl status mysql
# 检查端口监听
netstat -tlnp | grep 3306
# 检查连接数
mysql -e "SHOW STATUS LIKE 'Threads_connected'"
```
#### 性能问题
```sql
-- 查看当前运行的查询
SHOW FULL PROCESSLIST;
-- 查看锁等待
SHOW ENGINE INNODB STATUS;
-- 查看表锁
SHOW OPEN TABLES WHERE In_use > 0;
```
### 7.2 日志分析
#### 错误日志分析
```bash
# 查看错误日志
tail -f /var/log/mysql/error.log
# 检查常见错误
grep -i "error\|warning" /var/log/mysql/error.log
```
#### 慢查询日志分析
```bash
# 启用慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
# 分析慢查询
pt-query-digest /var/log/mysql/slow.log
```
## 8. 高可用配置
### 8.1 主从复制
#### 主库配置
```ini
# my.cnf 主库配置
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
expire_logs_days = 7
```
#### 从库配置
```ini
# my.cnf 从库配置
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
read-only = 1
```
### 8.2 集群方案
#### MySQL Group Replication
```sql
-- 安装Group Replication插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
-- 配置Group Replication
SET GLOBAL group_replication_group_name="550fa9ee-a1f8-4b6d-9bfe-c03c12cd1c72";
SET GLOBAL group_replication_start_on_boot=off;
SET GLOBAL group_replication_local_address="node1:33061";
SET GLOBAL group_replication_group_seeds="node1:33061,node2:33061,node3:33061";
```
## 9. 版本升级
### 9.1 升级准备
1. **备份数据**: 升级前完整备份
2. **测试环境验证**: 在测试环境先进行升级测试
3. **应用兼容性**: 检查应用与新版本的兼容性
4. **回滚计划**: 准备回滚方案
### 9.2 升级步骤
```bash
# 1. 停止应用服务
systemctl stop app-service
# 2. 备份数据
mysqldump --all-databases > backup_before_upgrade.sql
# 3. 升级MySQL
yum update mysql-community-server
# 4. 启动MySQL
systemctl start mysqld
# 5. 运行升级脚本
mysql_upgrade -u root -p
# 6. 启动应用服务
systemctl start app-service
```
## 注意事项
1. **密码安全**: 生产环境使用强密码,定期更换
2. **权限控制**: 遵循最小权限原则,不要使用 root 用户连接应用
3. **定期备份**: 建立完善的备份策略,定期测试恢复
4. **监控告警**: 设置关键指标监控和告警
5. **性能调优**: 根据实际业务负载调整参数
6. **安全更新**: 及时安装安全补丁和更新
+73
View File
@@ -0,0 +1,73 @@
# 需求文档目录
## 目录说明
此目录用于存放项目的需求相关文档,包括:
## 1. 功能需求文档
`功能需求文档`:详细的功能需求描述,明确系统应该具备的功能
### 已有需求文档:
- **后勤满意度调查系统需求说明.md**:完整的满意度调查系统需求描述
- **简化版报告厅预约系统设计说明.md**:报告厅预约系统的简化设计方案
## 2. 业务流程文档
`业务流程文档`:描述系统的业务流程和操作规范
### 待添加文档:
- 用户管理业务流程
- 权限管理业务流程
- 多租户管理业务流程
- 工作流业务流程
## 3. 原型设计文档
`原型设计文档`:UI 原型和交互设计文档
### 目录结构:
- mockups/ - 原型设计文件
- wireframes/ - 线框图
- user-stories/ - 用户故事
## 4. 业务规则文档
`业务规则文档`:详细的业务规则和约束条件
### 待添加文档:
- 数据权限规则
- 多租户规则
- 审核流程规则
## 文档管理规范
### 文档命名规范
- 使用中文描述性名称
- 按模块分组存放
- 版本控制格式:v1.0、v1.1 等
### 文档内容规范
- 明确的需求描述
- 详细的业务流程
- 清晰的验收标准
- 完整的用例描述
### 更新维护
- 需求变更时及时更新文档
- 保留历史版本记录
- 定期 review 文档内容
## 注意事项
1. 所有需求变更必须更新相关文档
2. 新功能开发前必须先编写需求文档
3. 需求文档需要经过需求方确认
4. 文档格式统一使用 Markdown
@@ -0,0 +1,54 @@
-- =============================================
-- 简化版报告厅预约系统数据库表设计
-- =============================================
-- =============================================
-- 简化版报告厅预约系统数据库表设计
-- =============================================
-- 1. 报告厅信息表
DROP TABLE IF EXISTS `hq_hall_info`;
CREATE TABLE `hq_hall_info` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`hall_name` varchar(100) NOT NULL COMMENT '报告厅名称',
`hall_image` text DEFAULT NULL COMMENT '报告厅图片url',
`hall_status` char(1) NOT NULL DEFAULT '1' COMMENT '报告厅状态:0-不可用,1-正常',
`hall_description` text COMMENT '报告厅描述',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_hall_status` (`hall_status`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='报告厅信息表';
-- 2. 报告厅预约表
DROP TABLE IF EXISTS `hq_hall_reservation`;
CREATE TABLE `hq_hall_reservation` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`hall_id` bigint(20) NOT NULL COMMENT '报告厅ID',
`hall_name` varchar(100) NOT NULL COMMENT '报告厅名称',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`reservation_purpose` varchar(200) NOT NULL COMMENT '预约用途',
`applicant_id` bigint(20) NOT NULL COMMENT '申请人id',
`applicant_name` varchar(50) NOT NULL COMMENT '申请人姓名',
`applicant_phone` varchar(20) DEFAULT NULL COMMENT '申请人电话',
`status` char(1) NOT NULL DEFAULT '0' COMMENT '预约状态:0-待审核,1-预约成功,2-预约失败',
`audit_by` bigint(20) DEFAULT NULL COMMENT '审核人id',
`audit_name` varchar(50) DEFAULT NULL COMMENT '审核人姓名',
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
`audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_hall_id` (`hall_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='报告厅预约表';
@@ -0,0 +1,94 @@
# 简化版报告厅预约系统数据模型设计
## 设计目标
根据您的需求,设计一个简单实用的报告厅预约系统,包含报告厅管理、预约申请和审核功能。
## 数据表设计
### 1. 报告厅信息表 (`hall_info`)
**主要功能**: 管理报告厅基本信息
**字段说明**:
- **标准字段**: 按要求包含 `id`、`tenant_id`、`create_dept`、`create_by`、`create_time`、`update_by`、`update_time`
- **业务字段**:
- `hall_name`: 报告厅名称
- `hall_image`: 报告厅图片 URL(多个图片用逗号分隔)
- `hall_status`: 报告厅状态(0-不可用,1-可用)
- `hall_description`: 报告厅描述
### 2. 报告厅预约表 (`hall_reservation`)
**主要功能**: 管理预约申请和审核流程
**字段说明**:
- **标准字段**: 按要求包含 `id`、`tenant_id`、`create_dept`、`create_by`、`create_time`、`update_by`、`update_time`
- **预约信息**:
- `hall_id`: 关联报告厅 ID
- `reservation_date`: 预约日期
- `start_time`、`end_time`: 预约时间段
- `reservation_purpose`: 预约用途
- `applicant_name`、`applicant_phone`: 申请人信息
- **审核信息**:
- `status`: 预约状态(0-待审核,1-预约成功,2-预约失败)
- `audit_by`: 审核人 id
- `audit_name`: 审核人
- `audit_time`: 审核时间
- `audit_remark`: 审核备注
## 核心功能流程
### 1. 报告厅管理
- 添加/编辑报告厅信息(名称、图片、描述)
- 设置报告厅状态(可用/不可用)
- 查看报告厅列表
### 2. 预约申请
- 用户选择可用的报告厅
- 填写预约信息(日期、时间、用途、联系方式)
- 提交后状态为"待审核"
### 3. 预约审核
- 管理员查看待审核的预约申请
- 点击通过:状态改为"预约成功"
- 点击驳回:状态改为"预约失败",可填写审核备注
## 设计特点
### 简化原则
- 只包含核心必需字段,避免复杂功能
- 一个预约对应一次审核,不支持多级审核
- 状态简单明确,便于业务理解
### 扩展性考虑
- 预留了租户字段,支持多租户
- 审核备注字段支持记录审核原因
- 外键约束保证数据完整性
### 数据完整性
- 主键自增,保证唯一性
- 外键约束确保预约表与报告厅表的关联
- 必填字段设置 NOT NULL 约束
- 合理的索引设计提高查询效率
## 示例数据
文件中包含了示例数据,展示了:
- 3 个不同状态的报告厅
- 3 个不同审核状态的预约记录
## 使用说明
1. 执行 `simple_hall_reservation_schema.sql` 创建数据表
2. 示例数据会自动插入,便于测试
3. 可根据实际需求调整字段长度和约束
@@ -0,0 +1,244 @@
-- ==========================================================================
-- 高校后勤满意度调查系统数据库表结构
-- 创建时间:2025年1月
-- 说明:基于需求文档设计的完整数据模型
-- ==========================================================================
-- 1. 题目分类表
DROP TABLE IF EXISTS `hq_sat_category`;
CREATE TABLE `hq_sat_category` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`category_code` varchar(50) NOT NULL COMMENT '分类编码',
`category_name` varchar(100) NOT NULL COMMENT '分类名称',
`category_desc` varchar(500) DEFAULT NULL COMMENT '分类描述',
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_category_code` (`category_code`, `tenant_id`, `deleted`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题目分类表';
-- 2. 评分选项表
DROP TABLE IF EXISTS `hq_sat_option`;
CREATE TABLE `hq_sat_option` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`option_text` varchar(50) NOT NULL COMMENT '选项文本',
`option_value` int(11) NOT NULL COMMENT '选项分值',
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_status` (`status`),
KEY `idx_sort_order` (`sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评分选项表';
-- 3. 题库表
DROP TABLE IF EXISTS `hq_sat_question`;
CREATE TABLE `hq_sat_question` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`question_title` varchar(200) NOT NULL COMMENT '题目标题',
`question_content` text COMMENT '题目内容(支持富文本)',
`category_id` bigint(20) NOT NULL COMMENT '所属分类ID',
`question_type` char(1) DEFAULT '1' COMMENT '题目类型(1单选题 2多选题 3问答题)',
`is_required` tinyint(1) DEFAULT '1' COMMENT '是否必填(0否 1是)',
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题库表';
-- 4. 问卷表
DROP TABLE IF EXISTS `hq_sat_survey`;
CREATE TABLE `hq_sat_survey` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`survey_code` varchar(50) NOT NULL COMMENT '问卷编号',
`survey_title` varchar(200) NOT NULL COMMENT '问卷标题',
`survey_desc` varchar(1000) DEFAULT NULL COMMENT '问卷描述',
`survey_instruction` text COMMENT '填写说明',
`target_group` varchar(100) NOT NULL COMMENT '目标群体(1学生 2教职工 3全体)',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`max_submit_times` int(11) DEFAULT '1' COMMENT '最大提交次数(0不限制)',
`is_anonymous` tinyint(1) DEFAULT '0' COMMENT '是否匿名(0否 1是)',
`is_published` tinyint(1) DEFAULT '0' COMMENT '是否发布(0否 1是)',
`status` char(1) DEFAULT '0' COMMENT '状态(0草稿 1进行中 2已结束)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_survey_code` (`survey_code`, `tenant_id`, `deleted`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_target_group` (`target_group`),
KEY `idx_time_range` (`start_time`, `end_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='问卷表';
-- 5. 问卷题目关联表
DROP TABLE IF EXISTS `hq_sat_survey_question`;
CREATE TABLE `hq_sat_survey_question` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`survey_id` bigint(20) NOT NULL COMMENT '问卷ID',
`question_id` bigint(20) NOT NULL COMMENT '题目ID',
`sort_order` int(11) DEFAULT '0' COMMENT '题目顺序',
`weight` decimal(5,2) DEFAULT '1.00' COMMENT '题目权重',
`is_required` tinyint(1) DEFAULT '1' COMMENT '是否必填(0否 1是)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_survey_question` (`survey_id`, `question_id`, `deleted`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_survey_id` (`survey_id`),
KEY `idx_question_id` (`question_id`),
KEY `idx_sort_order` (`sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='问卷题目关联表';
-- 6. 答题记录表
DROP TABLE IF EXISTS `hq_sat_record`;
CREATE TABLE `hq_sat_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`survey_id` bigint(20) NOT NULL COMMENT '问卷ID',
`user_id` bigint(20) DEFAULT NULL COMMENT '答题用户ID(匿名时为NULL)',
`user_type` char(1) NOT NULL COMMENT '用户类型(1学生 2教职工)',
`user_dept` varchar(100) DEFAULT NULL COMMENT '用户部门(匿名时为NULL)',
`submit_time` datetime NOT NULL COMMENT '提交时间',
`total_score` decimal(10,2) DEFAULT '0.00' COMMENT '总分',
`avg_score` decimal(5,2) DEFAULT '0.00' COMMENT '平均分',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_survey_id` (`survey_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_user_type` (`user_type`),
KEY `idx_submit_time` (`submit_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题记录表';
-- 7. 答题详情表
DROP TABLE IF EXISTS `hq_sat_detail`;
CREATE TABLE `hq_sat_detail` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`record_id` bigint(20) NOT NULL COMMENT '答题记录ID',
`question_id` bigint(20) NOT NULL COMMENT '题目ID',
`answer_score` int(11) DEFAULT '0' COMMENT '答案分数',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_record_question` (`record_id`, `question_id`, `deleted`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_record_id` (`record_id`),
KEY `idx_question_id` (`question_id`),
KEY `idx_answer_score` (`answer_score`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题详情表';
-- ==========================================================================
-- 初始化数据
-- ==========================================================================
-- 初始化题目分类数据
INSERT INTO `hq_sat_category` (`tenant_id`, `category_code`, `category_name`, `category_desc`, `sort_order`, `status`, `create_time`) VALUES
('000000', 'BEDROOM', '寝室服务', '宿舍设施、卫生清洁、安全管理等相关服务', 1, '0', NOW()),
('000000', 'CANTEEN', '食堂服务', '菜品质量、价格、卫生环境等相关服务', 2, '0', NOW()),
('000000', 'ENVIRONMENT', '环境服务', '校园绿化、道路维护、垃圾处理等相关服务', 3, '0', NOW()),
('000000', 'MAINTENANCE', '维修服务', '设备维修、响应时间、服务态度等相关服务', 4, '0', NOW()),
('000000', 'SECURITY', '保安服务', '校园安全、门禁管理、巡逻质量等相关服务', 5, '0', NOW()),
('000000', 'OTHER', '其他服务', '其他后勤相关服务', 6, '0', NOW());
-- 初始化评分选项数据
INSERT INTO `hq_sat_option` (`tenant_id`, `option_text`, `option_value`, `sort_order`, `status`, `create_time`) VALUES
('000000', '非常满意', 5, 1, '0', NOW()),
('000000', '满意', 3, 2, '0', NOW()),
('000000', '一般', 1, 3, '0', NOW()),
('000000', '不满意', 0, 4, '0', NOW());
-- ==========================================================================
-- 索引优化建议
-- ==========================================================================
-- 为提高查询性能,建议根据实际使用情况添加以下组合索引:
-- 问卷查询相关
-- ALTER TABLE hq_sat_survey ADD INDEX idx_time_status (start_time, end_time, status);
-- ALTER TABLE hq_sat_survey ADD INDEX idx_target_published (target_group, is_published);
-- 答题记录查询相关
-- ALTER TABLE hq_sat_record ADD INDEX idx_survey_user (survey_id, user_id, status);
-- ALTER TABLE hq_sat_record ADD INDEX idx_survey_time (survey_id, submit_time);
-- 统计分析相关
-- ALTER TABLE hq_sat_detail ADD INDEX idx_question_score (question_id, answer_score);
-- ALTER TABLE hq_sat_statistics ADD INDEX idx_survey_category (survey_id, category_id, user_type);
-- ==========================================================================
-- 视图创建建议
-- ==========================================================================
-- 创建问卷概览视图
-- CREATE VIEW v_hq_sat_survey_overview AS
-- SELECT
-- s.id, s.survey_title, s.target_group, s.start_time, s.end_time, s.status,
-- s.total_questions, s.total_participants, s.total_submissions,
-- ROUND(s.total_submissions * 100.0 / NULLIF(s.total_participants, 0), 2) AS completion_rate
-- FROM hq_sat_survey s
-- WHERE s.deleted = 0;
-- 创建分类满意度统计视图
-- CREATE VIEW v_hq_sat_category_satisfaction AS
-- SELECT
-- st.survey_id, c.category_name, st.user_type,
-- st.total_count, st.avg_score,
-- ROUND(st.score_5_count * 100.0 / NULLIF(st.total_count, 0), 2) AS very_satisfied_rate,
-- ROUND((st.score_5_count + st.score_3_count) * 100.0 / NULLIF(st.total_count, 0), 2) AS satisfied_rate
-- FROM hq_sat_statistics st
-- LEFT JOIN hq_sat_category c ON st.category_id = c.id
-- WHERE st.deleted = 0 AND st.category_id IS NOT NULL;
@@ -0,0 +1,327 @@
# 高校后勤满意度调查系统需求说明
## 1. 项目概述
### 1.1 项目背景
为了持续改善高校后勤服务质量,提升师生满意度,需要建立一套完整的后勤满意度调查系统。该系统能够对各类后勤服务进行科学、规范的满意度调查,并为后勤管理决策提供数据支撑。
### 1.2 项目目标
- 建立统一的后勤满意度调查平台
- 实现问题题库的标准化管理
- 支持灵活的问卷组合和分发机制
- 提供完整的调查数据分析和报告功能
## 2. 系统功能需求
### 2.1 题库管理功能
#### 2.1.1 题目分类管理
- **功能描述**:对满意度调查题目进行分类管理
- **分类维度**:
- 寝室服务(宿舍设施、卫生清洁、安全管理等)
- 食堂服务(菜品质量、价格、卫生环境等)
- 环境服务(校园绿化、道路维护、垃圾处理等)
- 维修服务(设备维修、响应时间、服务态度等)
- 保安服务(校园安全、门禁管理、巡逻质量等)
- 其他服务(可扩展分类)
#### 2.1.2 题目内容管理
- **功能描述**:统一管理调查题目的内容和选项
- **题目结构**:
- 题目编号(自动生成)
- 题目内容(必填,支持富文本)
- 所属分类(必选)
- 题目状态(启用/禁用)
- 创建时间和创建人
- 修改时间和修改人
#### 2.1.3 评分标准管理
- **统一评分标准**:
- 非常满意:5 分
- 满意:3 分
- 一般:1 分
- 不满意:0 分
- **功能要求**:
- 系统统一使用该评分标准
- 支持评分标准的配置和修改
- 历史数据保持评分标准的一致性
### 2.2 问卷管理功能
#### 2.2.1 问卷创建
- **功能描述**:从题库中自由选择题目组合成调查问卷
- **创建流程**:
1. 填写问卷基本信息(名称、描述、目标群体等)
2. 从题库中按分类选择题目
3. 设置题目顺序和权重
4. 配置问卷有效期
5. 预览问卷效果
6. 保存问卷
#### 2.2.2 问卷配置
- **基本信息配置**:
- 问卷名称(必填)
- 问卷描述(可选)
- 调查说明(可选)
- 创建人信息
- 创建时间
- **目标群体配置**:
- 学生群体(本科生、研究生、博士生等)
- 教职工群体(教师、行政人员、工勤人员等)
- 支持多群体同时选择
- **有效期配置**:
- 开始时间(必填)
- 结束时间(必填)
- 超过有效期自动停止收集
#### 2.2.3 问卷分发管理
- **分发方式**:
- 按用户群体推送
- 生成问卷链接分享
- 系统内消息通知
- 邮件推送(可选)
- **分发控制**:
- 设置参与人员范围
- 控制填写次数(一人一次/允许多次)
- 匿名填写设置
- 实时监控填写进度
### 2.3 调查填写功能
#### 2.3.1 用户身份验证
- **登录验证**:通过统一身份认证系统登录
- **身份识别**:自动识别用户类型(学生/教职工)
- **权限控制**:仅允许目标群体填写对应问卷
#### 2.3.2 问卷填写界面
- **界面要求**:
- 简洁清晰的用户界面
- 响应式设计,支持移动端
- 题目分页显示,避免页面过长
- 实时保存,防止数据丢失
- **填写体验**:
- 显示填写进度
- 支持暂存和继续填写
- 必填题目验证
- 提交前确认机制
#### 2.3.3 有效期控制
- **时间检查**:
- 填写前检查问卷有效期
- 填写过程中实时监控有效期
- 超时自动提示并禁止提交
- **用户提示**:
- 清晰显示问卷有效期信息
- 临近截止时间提醒
- 超时后显示相应提示信息
### 2.4 数据统计分析功能
#### 2.4.1 基础统计
- **参与情况统计**:
- 问卷发放数量
- 实际填写数量
- 填写完成率
- 各群体参与情况
- **分数统计**:
- 总体满意度得分
- 各分类满意度得分
- 各题目满意度得分
- 满意度排名分析
- **问题类别统计分析**:
- 按寝室服务类别统计平均分值
- 按食堂服务类别统计平均分值
- 按环境服务类别统计平均分值
- 按维修服务类别统计平均分值
- 按保安服务类别统计平均分值
- 按其他服务类别统计平均分值
- 各类别满意度排行榜
- 类别间满意度对比分析
#### 2.4.2 数据分析
- **趋势分析**:
- 满意度变化趋势
- 同期对比分析
- 各服务类别对比分析
- **群体分析**:
- 学生群体满意度分析
- 教职工群体满意度分析
- 不同群体满意度对比
- **问题类别深度分析**:
- 各类别满意度分值分布图
- 类别满意度变化趋势对比
- 不同群体对各类别的满意度差异
- 问题类别的改进优先级排序
- 各类别内部题目满意度排名
#### 2.4.3 报告生成
- **统计报告**:
- 自动生成调查统计报告
- 支持多种图表展示
- 导出 Word/PDF 格式报告
- **问题分析**:
- 低满意度问题识别
- 改进建议生成
- 问题追踪记录
- **类别专项报告**:
- 生成各问题类别的专项分析报告
- 类别满意度排行榜报告
- 各类别改进建议和行动计划
- 类别间对比分析报告
- 支持按类别导出专项报告
## 3. 系统非功能需求
### 3.1 性能要求
- **响应时间**:页面加载时间不超过 3 秒
- **并发处理**:支持 1000 人同时在线填写
- **数据处理**:大量问卷数据的快速统计分析
### 3.2 安全要求
- **数据安全**:调查数据加密存储
- **访问控制**:基于角色的权限管理
- **隐私保护**:支持匿名调查模式
### 3.3 可用性要求
- **系统可用性**:7×24 小时稳定运行
- **界面友好**:简洁直观的操作界面
- **多端适配**:支持 PC 端和移动端访问
### 3.4 扩展性要求
- **题目扩展**:支持新增题目分类和评分标准
- **功能扩展**:预留其他调查类型的扩展接口
- **数据扩展**:支持大数据量的存储和处理
## 4. 系统架构设计
### 4.1 技术架构
- **前端技术**:Vue 3 + Element Plus + TypeScript
- **后端技术**:Spring Boot + MyBatis Plus + MySQL
- **缓存技术**:Redis
- **认证授权**:Sa-Token
### 4.2 数据库设计要点
#### 4.2.1 核心表结构
- **题库表(hq_question)**:存储调查题目信息
- **分类表(hq_category)**:存储题目分类信息
- **问卷表(hq_survey)**:存储问卷基本信息
- **问卷题目关联表(hq_survey_question)**:问卷与题目的关联关系
- **答题记录表(hq_answer_record)**:存储用户答题记录
- **答题详情表(hq_answer_detail)**:存储具体答题内容
#### 4.2.2 字段设计规范
- 所有表包含基础字段:id、create_time、update_time、create_by、update_by
- 支持逻辑删除:deleted 字段
- 关键字段添加索引,提升查询性能
### 4.3 接口设计规范
- 遵循 RESTful API 设计规范
- 统一的响应格式和错误码
- 完整的接口文档(Swagger)
- 接口权限控制和参数校验
## 5. 开发计划
### 5.1 开发阶段
1. **第一阶段**:题库管理和问卷管理功能开发
2. **第二阶段**:调查填写和有效期控制功能开发
3. **第三阶段**:数据统计分析和报告生成功能开发
4. **第四阶段**:系统测试和优化
### 5.2 预期时间
- **开发周期**:预计 4-6 周
- **测试周期**:预计 1-2 周
- **部署上线**:预计 1 周
## 6. 验收标准
### 6.1 功能验收
- 所有功能模块正常运行
- 用户操作流程完整顺畅
- 数据统计分析准确无误
### 6.2 性能验收
- 满足性能要求指标
- 并发测试通过
- 稳定性测试通过
### 6.3 安全验收
- 权限控制有效
- 数据安全可靠
- 隐私保护到位
## 7. 后期维护
### 7.1 功能优化
- 根据使用反馈持续优化用户体验
- 扩展更多调查类型和分析维度
- 增加移动端专属功能
### 7.2 数据管理
- 定期备份调查数据
- 历史数据归档管理
- 数据清理和优化
### 7.3 系统升级
- 定期更新系统版本
- 修复安全漏洞
- 优化系统性能
---
**文档版本**:v1.0
**创建日期**:2025 年 1 月
**更新日期**:2025 年 1 月
+277
View File
@@ -0,0 +1,277 @@
# 测试文档目录
## 目录说明
此目录用于存放项目的测试相关文档,包括测试计划、测试用例、测试报告等。
## 1. 测试计划文档
`测试计划文档`:整体测试策略和计划安排
### 测试计划:
- **总体测试计划.md**:项目整体测试策略和计划
- **单元测试计划.md**:单元测试计划和覆盖率要求
- **集成测试计划.md**:模块集成测试计划
- **系统测试计划.md**:系统功能测试计划
- **性能测试计划.md**:系统性能测试计划
- **安全测试计划.md**:安全性测试计划
## 2. 测试用例文档
`测试用例文档`:详细的测试用例设计和执行步骤
### 功能测试用例:
- **用户管理测试用例.md**:用户管理模块测试用例
- **权限管理测试用例.md**:权限管理模块测试用例
- **多租户测试用例.md**:多租户功能测试用例
- **工作流测试用例.md**:工作流模块测试用例
- **系统管理测试用例.md**:系统管理模块测试用例
### 接口测试用例:
- **API 接口测试用例.md**:REST API 接口测试
- **认证授权接口测试.md**:认证授权接口测试
- **数据权限接口测试.md**:数据权限接口测试
- **文件上传接口测试.md**:文件操作接口测试
### 性能测试用例:
- **并发测试用例.md**:并发访问测试用例
- **压力测试用例.md**:系统压力测试用例
- **稳定性测试用例.md**:长期稳定性测试
## 3. 自动化测试
### 单元测试
- **单元测试规范.md**:单元测试编写规范
- **测试覆盖率要求.md**:代码覆盖率要求和标准
- **Mock 测试指南.md**:Mock 对象使用指南
### 集成测试
- **集成测试框架.md**:集成测试框架和工具
- **数据库测试.md**:数据库操作测试
- **Redis 测试.md**:缓存功能测试
### 接口自动化测试
- **Postman 测试.md**:Postman 自动化测试
- **接口测试脚本.md**:自动化测试脚本
- **持续集成测试.md**:CI/CD 中的自动化测试
## 4. 测试环境
### 测试环境配置
- **测试环境搭建.md**:测试环境搭建指南
- **测试数据准备.md**:测试数据准备和管理
- **环境重置脚本.md**:测试环境重置脚本
### 测试工具
- **测试工具清单.md**:测试工具和版本清单
- **工具配置指南.md**:测试工具配置说明
- **工具使用手册.md**:测试工具使用手册
## 5. 测试报告
### 测试执行报告
- **单元测试报告.md**:单元测试执行结果
- **集成测试报告.md**:集成测试执行结果
- **系统测试报告.md**:系统测试执行结果
- **性能测试报告.md**:性能测试结果分析
### 缺陷管理
- **缺陷报告模板.md**:标准缺陷报告模板
- **缺陷分类标准.md**:缺陷严重程度分类
- **缺陷修复流程.md**:缺陷修复和验证流程
### 测试总结
- **测试总结报告.md**:测试阶段总结报告
- **质量评估报告.md**:软件质量评估报告
- **改进建议.md**:测试过程改进建议
## 6. 专项测试
### 安全测试
- **安全测试清单.md**:安全测试检查清单
- **漏洞扫描报告.md**:安全漏洞扫描结果
- **渗透测试报告.md**:渗透测试结果
### 兼容性测试
- **浏览器兼容性.md**:前端浏览器兼容性测试
- **数据库兼容性.md**:多数据库兼容性测试
- **操作系统兼容性.md**:操作系统兼容性测试
### 可用性测试
- **用户体验测试.md**:用户界面和体验测试
- **可访问性测试.md**:系统可访问性测试
- **响应式测试.md**:移动端响应式测试
## 7. 测试指标和标准
### 质量指标
```
代码覆盖率: ≥ 80%
接口测试覆盖率: 100%
关键业务功能测试覆盖率: 100%
缺陷修复率: ≥ 95%
回归测试通过率: 100%
```
### 性能指标
```
响应时间:
- 页面加载时间 ≤ 3秒
- API接口响应时间 ≤ 1秒
- 数据库查询响应时间 ≤ 500ms
并发性能:
- 支持1000用户同时在线
- 支持100用户并发操作
- 系统资源使用率 ≤ 80%
```
### 稳定性指标
```
系统可用性: ≥ 99.5%
故障恢复时间: ≤ 30分钟
内存泄漏: 无
长期运行稳定性: 7×24小时无故障
```
## 8. 测试最佳实践
### 测试原则
1. **早期测试**:在开发初期就开始测试活动
2. **全面覆盖**:功能、性能、安全全方位测试
3. **自动化优先**:优先使用自动化测试工具
4. **持续改进**:根据测试结果持续改进
### 测试流程
1. **需求分析**:分析测试需求和测试范围
2. **测试设计**:设计测试用例和测试数据
3. **测试执行**:按计划执行测试用例
4. **缺陷管理**:记录、跟踪、验证缺陷
5. **测试报告**:生成测试报告和总结
### 代码质量
- 所有新功能必须编写单元测试
- 关键业务逻辑必须有集成测试
- 接口变更必须更新接口测试
- 定期进行代码质量扫描
## 9. 测试用例模板
### 功能测试用例模板
```markdown
## 测试用例 ID: TC_001
**测试模块**: 用户管理
**测试功能**: 用户登录
**测试级别**: 系统测试
**优先级**: 高
### 前置条件
- 系统已部署
- 测试用户已创建
### 测试步骤
1. 打开登录页面
2. 输入用户名和密码
3. 点击登录按钮
### 预期结果
- 登录成功,跳转到主页
- 显示用户信息
### 实际结果
[执行时填写]
### 测试状态
[ ] 通过 [ ] 失败 [ ] 阻塞
```
### 接口测试用例模板
````markdown
## 接口测试用例 ID: API_001
**接口名称**: 用户列表查询
**请求方法**: GET
**请求 URL**: /system/user/list
### 请求参数
```json
{
"pageNum": 1,
"pageSize": 10,
"userName": "admin"
}
```
````
### 预期响应
```json
{
"code": 200,
"msg": "查询成功",
"data": {
"records": [],
"total": 0
}
}
```
### 测试检查点
- 响应状态码为 200
- 返回数据格式正确
- 分页参数生效
```
## 10. 持续集成测试
### CI/CD集成
- **Jenkins测试.md**:Jenkins集成测试配置
- **GitLab CI测试.md**:GitLab CI测试配置
- **自动化部署测试.md**:自动化部署测试
### 测试报告集成
- 单元测试报告自动生成
- 集成测试结果自动收集
- 测试覆盖率自动统计
- 测试结果自动通知
## 注意事项
1. 所有测试用例必须可重复执行
2. 测试数据不能影响生产环境
3. 测试环境需要定期重置和维护
4. 关键功能必须有自动化测试覆盖
5. 测试报告需要及时更新和归档
```