优化cursor使用形式,增加项目文档过程管理,方便cursor生成代码

This commit is contained in:
zlwu committed 2025-06-28 09:48:53 +08:00
1 parent 2f7e1a9c16
commit 65d2d71469
36 files changed
+8872 -1530

No files matched your search

+137 -82
View File
@@ -1,86 +1,112 @@
# RuoYi-Vue-Plus 项目文档中心
# 高校智慧校园管理系统文档中心
## 文档概述
## 📋 文档概述
本文档中心包含了 RuoYi-Vue-Plus 项目的完整技术文档,涵盖需求分析、系统设计、开发指南、测试规范、部署运维等各个方面。
本文档中心采用**混合组织方式**,既支持按项目阶段的全过程管理,又提供按业务模块的聚合视图,完整记录从项目需求到交付的全生命周期文档,同时为 Cursor AI 辅助开发提供完整的业务上下文。
## 📚 文档目录结构
## 🎯 文档组织理念
### 🎯 [需求文档](requirements/)
- **全过程管理**:涵盖需求分析、系统设计、开发指南、测试规范、部署运维等各个阶段
- **AI 辅助开发**:便于 Cursor AI 快速理解业务上下文和技术细节
- **模块化管理**:同一业务模块的文档聚合,便于查找和维护
- **变更追踪**:完善的变更记录和版本管理体系
存放项目的需求相关文档,明确项目功能和业务规则。
## 🏗️ 核心文档目录
**主要内容**:
### 📋 [项目总览](项目总览/)
- 功能需求文档
- 业务流程文档
- 原型设计文档
- 业务规则文档
**新增核心目录** - 项目整体信息一目了然
**已有文档**:
- 项目基本信息和技术架构
- 团队组织和开发分工
- 项目时间线和目标 KPI
- 开发工具链和协作规范
- [后勤满意度调查系统需求说明](../需求文件夹/后勤满意度调查需求/高校后勤满意度调查系统需求说明.md)
- [简化版报告厅预约系统设计说明](../需求文件夹/后勤报告厅预约需求/简化版报告厅预约系统设计说明.md)
### 📊 [业务模块文档](业务模块/)
### 🏗️ [设计文档](design/)
**新增核心目录** - 按业务模块聚合,为 AI 辅助开发提供完整上下文
存放项目的设计相关文档,包括系统架构、数据库设计、接口设计等。
- 🔐 [用户管理模块](业务模块/user-management/)
- 📊 [后勤满意度调查模块](业务模块/hq-satisfaction-survey/)
- 🏛️ [报告厅预约模块](业务模块/hall-reservation/)
- ⚙️ [系统管理模块](业务模块/system-management/)
**主要内容**:
**每个模块包含**:requirements.md、design.md、api.md、database.md、test-cases.md
- 系统架构设计
- 数据库设计文档
- API 接口设计
- 安全设计文档
- 性能设计文档
### 🎯 [需求文档](需求文档/)
### 💻 [开发文档](development/)
**保留并优化** - 项目需求相关文档,明确项目功能和业务规则
存放项目的开发相关文档,为开发人员提供详细的开发指南。
### 🏗️ [设计文档](设计文档/)
**主要内容**:
**保留并优化** - 系统架构、数据库设计、接口设计等
- 开发环境搭建
- 开发规范和指南
- 代码样例和模板
- 功能开发指南
- 问题记录和解决方案
- 系统架构设计和技术选型
- 数据库设计文档(含现有的 hzdyjs_xg.sql)
- API 接口设计规范
- UI 设计和安全设计文档
### 🧪 [测试文档](testing/)
### 💻 [开发文档](开发文档/)
存放项目的测试相关文档,确保项目质量和稳定性。
**保留并优化** - 为开发人员和 AI 辅助提供详细开发指南
**主要内容**:
- 开发环境搭建和 IDE 配置
- 编码规范和 Git 工作流
- 完整 API 文档(开发文档/API.md)
- 代码模板和集成指南
- 测试计划文档
- 测试用例文档
- 测试报告
- 自动化测试
- 性能测试
### 🧪 [测试文档](测试文档/)
### 🚀 [部署文档](deployment/)
**保留并优化** - 确保项目质量和稳定性
存放项目的部署相关文档,指导项目的部署和运维。
- 测试策略和测试计划
- 功能、性能、安全测试用例
- 测试数据和测试报告
- 自动化测试规范
**主要内容**:
### 🚀 [部署文档](部署文档/)
- 环境配置文档
- 容器化部署
- 自动化部署
- 监控和告警
- 运维手册
**保留并优化** - 指导项目的部署和运维
### ⚙️ [中间件配置](middleware/)
- 环境配置(开发、测试、生产)
- 容器化部署和 CI/CD 流水线
- 基础设施和监控配置
- 运维手册和故障排除
存放项目使用的各种中间件配置文档和最佳实践。
### ⚙️ [中间件配置](中间件配置/)
**主要内容**:
**保留并扩展** - 中间件配置文档和最佳实践
- 数据库配置(MySQL、Redis 等)
- 消息中间件配置
- 反向代理和负载均衡
- Web 服务器和消息队列配置
- 监控组件配置
- 存储服务配置
- SSL 证书和网络配置
### 📝 [变更管理](变更管理/)
**新增重要目录** - 完善的变更追踪体系
- 📝 [代码调整记录](变更管理/code-adjust-record.md)(已迁移)
- 📊 需求变更记录
- 🗄️ 数据库变更记录
- 🔌 API 变更记录
- 🚀 部署变更记录
### 📚 [知识库](知识库/)
**新增知识管理** - 积累项目经验和最佳实践
- 编码、安全、性能最佳实践
- 项目回顾和技术决策记录
- 外部资源和常见问题解答
### 📊 [报告文档](报告文档/)
**新增项目管理** - 定期的项目报告和质量报告
- 项目进度和里程碑报告
- 代码质量和测试覆盖率报告
- 发布说明和部署报告
## 🔧 技术栈概览
@@ -114,61 +140,90 @@
### 🚀 新手入门
1. **环境搭建**: [开发环境搭建指南](development/README.md#开发环境搭建)
2. **项目启动**: [快速开始](development/README.md#快速开始)
3. **开发规范**: [开发规范和指南](development/README.md#开发规范和指南)
1. **环境搭建**: [开发环境搭建指南](开发文档/README.md#开发环境搭建)
2. **项目启动**: [快速开始](开发文档/README.md#快速开始)
3. **开发规范**: [开发规范和指南](开发文档/README.md#开发规范和指南)
### 💼 业务开发
1. **需求分析**: [需求文档](requirements/README.md)
2. **数据库设计**: [数据库设计文档](design/README.md#数据库设计文档)
3. **接口开发**: [API 接口设计](design/README.md#接口设计文档)
4. **前端开发**: [前端开发指南](development/README.md#功能开发指南)
1. **需求分析**: [需求文档](需求文档/README.md)
2. **数据库设计**: [数据库设计文档](设计文档/README.md#数据库设计文档)
3. **接口开发**: [API 接口设计](设计文档/README.md#接口设计文档)
4. **前端开发**: [前端开发指南](开发文档/README.md#功能开发指南)
### 🎯 双重导航体系
### 📋 按项目阶段导航
**传统软件开发生命周期视图**
```
需求分析 → 系统设计 → 开发实施 → 测试验证 → 部署上线
需求文档 → 设计文档 → 开发文档 → 测试文档 → 部署文档
```
### 📊 按业务模块导航
**业务领域驱动视图,便于 AI 理解业务上下文**
```
用户管理 ← → 后勤满意度调查 ← → 报告厅预约 ← → 系统管理
完整的模块文档:需求+设计+API+数据库+测试
```
## 📖 快速导航指南
### 🚀 新手入门
1. **了解项目**:[项目总览](项目总览/README.md)
2. **环境搭建**:[开发环境搭建](开发文档/README.md#环境搭建)
3. **开发规范**:[编码规范](开发文档/README.md#编码规范)
### 💼 AI 辅助开发
1. **业务理解**:查看 [业务模块文档](业务模块/) 了解完整业务上下文
2. **接口开发**:参考 [API 文档](开发文档/API.md) 和模块 API 设计
3. **代码生成**:使用模块的 database.md 和 api.md 生成代码
4. **变更记录**:在 [变更管理](变更管理/) 中记录所有调整
### 🔧 运维部署
1. **部署方案**: [部署文档](deployment/README.md)
2. **环境配置**: [中间件配置](middleware/README.md)
3. **监控告警**: [监控配置](deployment/README.md#监控和告警)
1. **部署方案**:[部署文档](部署文档/README.md)
2. **环境配置**:[中间件配置](中间件配置/README.md)
3. **监控告警**:[监控配置](部署文档/README.md#监控配置)
### 🧪 质量保证
1. **测试规范**: [测试文档](testing/README.md)
2. **代码质量**: [开发规范](development/README.md#开发规范和指南)
3. **性能优化**: [性能优化指南](development/README.md#性能优化指南)
1. **测试规范**:[测试文档](测试文档/README.md)
2. **代码质量**:[开发规范](开发文档/README.md#编码规范)
3. **变更追踪**:[变更管理](变更管理/README.md)
## 📋 重要规范
## 📋 重要开发规范
### 🔴 强制性要求
- **API 变更必须同步更新文档**:任何 API 接口的新增、修改、删除都必须立即更新 `开发文档/API.md`
- **代码调整必须记录**:每次代码变更都必须在 `变更管理/code-adjust-record.md` 中记录
- **模块文档必须维护**:业务模块的变更必须同步更新对应模块文档
### 🔒 安全规范
- 所有接口必须进行权限校验
- 所有接口必须进行权限校验(Sa-Token)
- 敏感数据必须加密存储
- 生产环境密码定期更换
- API 接口启用加解密传输
- 遵循多租户数据隔离规范
### 📊 数据库规范
- 使用雪花 ID 作为主键
- 使用雪花 ID 作为主键(ASSIGN_ID)
- 所有业务表包含基础字段(id、tenant_id、create_by 等)
- 多租户字段必须建索引
- 遵循命名规范(下划线命名法)
- 遵循下划线命名法
### 🌐 接口规范
- 遵循 RESTful API 设计原则
- 统一响应格式(code、msg、data)
- 使用 SpringDoc 自动生成文档
- 完整的参数校验和异常处理
### 🔄 代码变更规则
**每次代码调整必须同步更新以下文档**:
- API 文档:接口变更时更新 OpenAPI 文档
- 数据库文档:表结构变更时更新 DDL 和文档
- 配置文档:配置项变更时更新配置说明
- 部署文档:部署流程变更时更新部署手册
## 📞 技术支持
### 🔗 官方资源
-113
View File
@@ -1,113 +0,0 @@
# 设计文档目录
## 目录说明
此目录用于存放项目的设计相关文档,包括系统设计、数据库设计、接口设计等。
## 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
@@ -1,125 +0,0 @@
# 数据库设计目录
## 目录说明
此目录用于存放项目的数据库设计相关文档和脚本文件。
## 📁 目录结构
```
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` 中现有表的设计规范
-384
View File
@@ -1,384 +0,0 @@
# 开发文档目录
## 目录说明
此目录用于存放项目的开发相关文档,包括开发指南、代码样例、问题记录等。
## 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. 遵循安全编码规范,避免安全漏洞
@@ -1,54 +0,0 @@
-- =============================================
-- 简化版报告厅预约系统数据库表设计
-- =============================================
-- =============================================
-- 简化版报告厅预约系统数据库表设计
-- =============================================
-- 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='报告厅预约表';
+252
View File
@@ -0,0 +1,252 @@
# docs 文件夹结构优化方案
## 📋 优化目标
1. **全过程管理**:从项目需求到项目交付的完整文档记录
2. **AI 辅助开发**:便于 Cursor AI 快速理解业务上下文和技术细节
3. **模块化管理**:同一业务模块的文档聚合,便于查找和维护
4. **版本追踪**:完善的变更记录和版本管理
## 🏗️ 新的目录结构设计
```
docs/
├── 📋 项目总览/ # 项目总览(新增)
│ ├── README.md # 项目整体介绍
│ ├── tech-stack.md # 技术栈说明
│ ├── project-timeline.md # 项目时间线
│ └── team-roles.md # 团队角色分工
│
├── 📊 业务模块/ # 业务模块文档(新增)
│ ├── README.md # 业务模块总览
│ ├── user-management/ # 用户管理模块
│ │ ├── requirements.md # 需求文档
│ │ ├── design.md # 设计文档
│ │ ├── api.md # API接口文档
│ │ ├── database.md # 数据库设计
│ │ └── test-cases.md # 测试用例
│ ├── hq-satisfaction-survey/ # 后勤满意度调查
│ │ ├── requirements.md
│ │ ├── design.md
│ │ ├── api.md
│ │ ├── database.md
│ │ └── workflow.md
│ ├── hall-reservation/ # 报告厅预约
│ │ ├── requirements.md
│ │ ├── design.md
│ │ ├── api.md
│ │ └── database.md
│ └── system-management/ # 系统管理模块
│ ├── requirements.md
│ ├── design.md
│ ├── api.md
│ └── database.md
│
├── 🎯 需求文档/ # 需求阶段文档(保留并优化)
│ ├── README.md # 需求管理总说明
│ ├── project-requirements.md # 项目整体需求
│ ├── functional-requirements/ # 功能需求
│ │ ├── README.md
│ │ └── [各模块功能需求].md
│ ├── non-functional-requirements/ # 非功能需求
│ │ ├── performance.md # 性能需求
│ │ ├── security.md # 安全需求
│ │ └── usability.md # 可用性需求
│ └── requirements-traceability.md # 需求追踪矩阵
│
├── 🏗️ 设计文档/ # 设计阶段文档(保留并优化)
│ ├── README.md # 设计文档总说明
│ ├── architecture/ # 系统架构设计
│ │ ├── system-architecture.md # 系统架构图
│ │ ├── technology-selection.md # 技术选型
│ │ └── deployment-architecture.md # 部署架构
│ ├── database/ # 数据库设计(保留现有)
│ │ ├── README.md
│ │ ├── hzdyjs_xg.sql # 完整数据库脚本
│ │ ├── database_msg.md # 环境配置信息
│ │ ├── er-diagram.md # ER图
│ │ └── data-dictionary.md # 数据字典
│ ├── api-design/ # API设计
│ │ ├── api-standards.md # API设计规范
│ │ ├── api-authentication.md # 认证设计
│ │ └── api-versioning.md # 版本管理
│ ├── ui-design/ # UI设计
│ │ ├── design-system.md # 设计系统
│ │ ├── prototypes/ # 原型文件
│ │ └── style-guide.md # 样式指南
│ └── security-design.md # 安全设计
│
├── 💻 开发文档/ # 开发阶段文档(保留并优化)
│ ├── README.md # 开发指南总说明
│ ├── environment-setup/ # 环境搭建
│ │ ├── local-development.md # 本地开发环境
│ │ ├── docker-setup.md # Docker环境
│ │ └── ide-configuration.md # IDE配置
│ ├── coding-standards/ # 编码规范
│ │ ├── java-standards.md # Java规范
│ │ ├── vue-standards.md # Vue规范
│ │ ├── database-standards.md # 数据库规范
│ │ └── git-workflow.md # Git工作流
│ ├── API.md # 完整API文档(保留)
│ ├── code-templates/ # 代码模板
│ │ ├── controller-template.md # Controller模板
│ │ ├── service-template.md # Service模板
│ │ └── vue-component-template.md # Vue组件模板
│ ├── integration-guides/ # 集成指南
│ │ ├── third-party-services.md # 第三方服务集成
│ │ ├── payment-integration.md # 支付集成
│ │ └── auth-integration.md # 认证集成
│ └── troubleshooting.md # 问题排查指南
│
├── 🧪 测试文档/ # 测试阶段文档(保留并优化)
│ ├── README.md # 测试文档总说明
│ ├── test-strategy.md # 测试策略
│ ├── test-plans/ # 测试计划
│ │ ├── unit-test-plan.md # 单元测试计划
│ │ ├── integration-test-plan.md # 集成测试计划
│ │ └── system-test-plan.md # 系统测试计划
│ ├── test-cases/ # 测试用例
│ │ ├── functional-test-cases.md # 功能测试用例
│ │ ├── performance-test-cases.md # 性能测试用例
│ │ └── security-test-cases.md # 安全测试用例
│ ├── test-data/ # 测试数据
│ │ ├── test-data-setup.md # 测试数据准备
│ │ └── sample-data.sql # 示例数据
│ └── test-reports/ # 测试报告
│ ├── test-execution-reports.md # 测试执行报告
│ └── bug-reports.md # 缺陷报告
│
├── 🚀 部署文档/ # 部署阶段文档(保留并优化)
│ ├── README.md # 部署指南总说明
│ ├── environments/ # 环境配置
│ │ ├── development.md # 开发环境
│ │ ├── staging.md # 测试环境
│ │ └── production.md # 生产环境
│ ├── infrastructure/ # 基础设施
│ │ ├── server-requirements.md # 服务器要求
│ │ ├── network-configuration.md # 网络配置
│ │ └── monitoring-setup.md # 监控配置
│ ├── deployment-guides/ # 部署指南
│ │ ├── manual-deployment.md # 手动部署
│ │ ├── docker-deployment.md # Docker部署
│ │ └── ci-cd-pipeline.md # CI/CD流水线
│ └── maintenance/ # 运维文档
│ ├── backup-restore.md # 备份恢复
│ ├── performance-tuning.md # 性能调优
│ └── troubleshooting.md # 故障排除
│
├── ⚙️ 中间件配置/ # 中间件配置(保留并扩展)
│ ├── README.md # 中间件配置总说明
│ ├── database/ # 数据库配置
│ │ ├── mysql-config.md # MySQL配置(保留)
│ │ ├── redis-config.md # Redis配置
│ │ └── connection-pool.md # 连接池配置
│ ├── web-server/ # Web服务器
│ │ ├── nginx-config.md # Nginx配置
│ │ └── ssl-certificate.md # SSL证书配置
│ ├── message-queue/ # 消息队列
│ │ ├── rabbitmq-config.md # RabbitMQ配置
│ │ └── kafka-config.md # Kafka配置
│ └── monitoring/ # 监控组件
│ ├── prometheus-config.md # Prometheus配置
│ └── grafana-config.md # Grafana配置
│
├── 📝 变更管理/ # 变更管理(新增,整合现有记录)
│ ├── README.md # 变更管理说明
│ ├── code-adjust-record.md # 代码调整记录(迁移)
│ ├── requirement-changes.md # 需求变更记录
│ ├── database-changes.md # 数据库变更记录
│ ├── api-changes.md # API变更记录
│ └── deployment-changes.md # 部署变更记录
│
├── 📚 知识库/ # 知识库(新增)
│ ├── README.md # 知识库说明
│ ├── best-practices/ # 最佳实践
│ │ ├── coding-best-practices.md # 编码最佳实践
│ │ ├── security-best-practices.md # 安全最佳实践
│ │ └── performance-best-practices.md # 性能最佳实践
│ ├── lessons-learned/ # 经验教训
│ │ ├── project-retrospectives.md # 项目回顾
│ │ └── technical-decisions.md # 技术决策记录
│ ├── external-resources/ # 外部资源
│ │ ├── useful-links.md # 有用链接
│ │ └── reference-materials.md # 参考资料
│ └── faq.md # 常见问题
│
└── 📊 报告文档/ # 报告文档(新增)
├── README.md # 报告说明
├── project-progress/ # 项目进度
│ ├── weekly-reports.md # 周报
│ └── milestone-reports.md # 里程碑报告
├── quality-reports/ # 质量报告
│ ├── code-quality.md # 代码质量报告
│ └── test-coverage.md # 测试覆盖率报告
└── delivery-reports/ # 交付报告
├── release-notes.md # 发布说明
└── deployment-reports.md # 部署报告
```
## 🎯 优化亮点
### 1. 双重导航体系
- **按阶段导航**:requirements → design → development → testing → deployment
- **按模块导航**:business-modules 下按业务模块组织,包含该模块的全生命周期文档
### 2. Cursor AI 友好设计
- **business-modules**:让 AI 快速理解各业务模块的完整上下文
- **code-templates**:提供标准代码模板,便于 AI 生成规范代码
- **API.md**:集中的 API 文档,便于 AI 理解接口设计
### 3. 全过程管理
- **project-overview**:项目整体信息一目了然
- **change-management**:完善的变更追踪体系
- **reports**:定期的项目报告和质量报告
### 4. 知识积累
- **knowledge-base**:积累项目经验和最佳实践
- **lessons-learned**:记录项目中的经验教训
## 🔄 迁移计划
### 第一阶段:保持现有结构运行
1. 不破坏现有文档结构
2. 在现有基础上补充新的目录
### 第二阶段:逐步迁移和整合
1. 创建新的目录结构
2. 将现有文档按业务模块重新组织
3. 建立文档间的交叉引用
### 第三阶段:优化和完善
1. 完善文档内容
2. 建立文档维护流程
3. 定期审查和更新
## 📋 实施建议
### 立即执行
1. 创建`业务模块`目录,按业务模块组织文档
2. 将`code-adjust-record.md`迁移到`变更管理`目录
3. 完善`API.md`文档的模块化组织
### 逐步完善
1. 补充`项目总览`相关文档
2. 建立`知识库`知识库
3. 完善各阶段文档的模块化组织
### 长期维护
1. 建立文档更新机制,与代码变更同步
2. 定期审查文档结构的合理性
3. 根据项目发展调整文档组织方式
这个优化方案既保持了项目全过程管理的清晰性,又便于 Cursor AI 理解具体业务上下文,同时为项目的长期发展提供了良好的文档基础。
+281
View File
@@ -0,0 +1,281 @@
# 业务模块管理
## 📋 业务模块总览
本文档管理所有业务模块的文档,为 **Cursor AI 辅助开发** 提供完整的业务上下文和技术实现参考。每个业务模块都包含从需求分析到部署运维的全生命周期文档。
## 🎯 文档管理目标
### 为 Cursor AI 提供的价值
- **🧠 业务理解**:完整的业务逻辑和流程说明,帮助 AI 理解业务需求
- **🔧 技术实现**:标准的代码结构和实现模式,指导 AI 生成高质量代码
- **🔗 上下文关联**:模块间的依赖关系和接口定义,确保集成一致性
- **📚 最佳实践**:经过验证的开发模式和代码规范,提升开发效率
### 文档维护原则
- **实时同步**:代码变更时立即更新对应文档
- **结构化**:使用统一的文档模板和格式
- **可追溯**:记录所有变更历史和决策过程
- **AI 友好**:使用清晰的结构和标准化的描述方式
## 📊 当前业务模块清单
### 🔥 核心业务模块
#### 1. 后勤满意度调查系统 (hq-satisfaction-survey)
- **状态**:🟢 已完成开发
- **负责人**:李四
- **技术栈**:Spring Boot + Vue3 + MyBatis-Plus
- **核心功能**:问卷设计、数据收集、统计分析、报告生成
- **API 数量**:18 个接口
- **文档完整度**:✅ 100%
#### 2. 报告厅预约管理系统 (hall-reservation)
- **状态**:🟡 开发中
- **负责人**:王五
- **技术栈**:Spring Boot + Vue3 + Warm-Flow
- **核心功能**:场地管理、预约申请、审批流程、冲突检测
- **API 数量**:15 个接口(规划中)
- **文档完整度**:🟡 80%
#### 3. 系统管理模块 (system-management)
- **状态**:🟢 基础框架完成
- **负责人**:张三
- **技术栈**:Spring Boot + Vue3 + Sa-Token
- **核心功能**:用户管理、权限控制、组织架构、系统配置
- **API 数量**:25 个接口
- **文档完整度**:✅ 95%
#### 4. 用户管理模块 (user-management)
- **状态**:🟢 已完成
- **负责人**:张三
- **技术栈**:Spring Boot + Vue3 + Sa-Token
- **核心功能**:用户注册、登录认证、个人信息、角色分配
- **API 数量**:12 个接口
- **文档完整度**:✅ 100%
### 🚀 计划中模块
#### 5. 后勤维修服务系统 (maintenance-service)
- **状态**:⭕ 待开发
- **计划开始**:2024 年 7 月
- **技术栈**:Spring Boot + Vue3 + Warm-Flow
- **核心功能**:报修申请、工单管理、维修派单、服务评价
#### 6. 餐饮服务管理系统 (catering-management)
- **状态**:⭕ 待开发
- **计划开始**:2024 年 8 月
- **技术栈**:Spring Boot + Vue3 + uniapp
- **核心功能**:菜品管理、订餐服务、营养配餐、食堂管理
## 📁 业务模块文档结构标准
每个业务模块都按照以下标准结构组织文档:
```
业务模块/
├── [模块名称]/
│ ├── README.md # 模块总览
│ ├── 需求分析/
│ │ ├── 业务需求说明.md # 业务需求详细说明
│ │ ├── 功能需求清单.md # 功能点清单
│ │ ├── 非功能需求.md # 性能、安全等要求
│ │ └── 用户故事.md # 用户使用场景
│ ├── 技术设计/
│ │ ├── 数据库设计.md # 表结构设计
│ │ ├── API接口设计.md # 接口定义
│ │ ├── 架构设计.md # 模块架构
│ │ └── 技术选型.md # 技术决策
│ ├── 实现文档/
│ │ ├── 后端实现说明.md # 后端代码结构
│ │ ├── 前端实现说明.md # 前端代码结构
│ │ ├── 关键业务逻辑.md # 核心算法
│ │ └── 代码规范.md # 编码规范
│ ├── 测试文档/
│ │ ├── 测试计划.md # 测试策略
│ │ ├── 测试用例.md # 具体测试用例
│ │ └── 测试报告.md # 测试结果
│ └── 运维文档/
│ ├── 部署指南.md # 部署步骤
│ ├── 监控配置.md # 监控指标
│ └── 故障处理.md # 常见问题
```
## 🔧 Cursor AI 辅助开发指南
### 如何使用业务模块文档
#### 1. 新功能开发
```markdown
📋 开发前准备清单:
1. 阅读模块的 README.md 了解整体架构
2. 查看 需求分析/ 目录了解业务逻辑
3. 参考 技术设计/ 目录了解设计模式
4. 查看 实现文档/ 目录了解代码结构
5. 使用 API 接口设计.md 了解接口规范
```
#### 2. 代码生成提示词模板
```
基于 [模块名称] 的业务需求文档和技术设计文档,生成以下功能的代码:
业务背景:[从需求分析文档中提取]
技术要求:[从技术设计文档中提取]
代码结构:[从实现文档中提取]
接口规范:[从API设计文档中提取]
请按照项目规范生成:
1. Controller 层代码
2. Service 层代码
3. Mapper 层代码
4. DTO/VO 类
5. 单元测试代码
```
#### 3. 文档更新提示词模板
```
根据刚才的代码变更,请更新以下业务模块文档:
变更内容:[具体变更说明]
影响模块:[模块名称]
需要更新的文档:
1. API接口设计.md - 新增/修改的接口
2. 数据库设计.md - 表结构变更
3. 实现文档/ - 代码结构变更
4. README.md - 模块概览更新
请保持文档格式一致,确保信息准确。
```
## 📈 模块开发生命周期管理
### 阶段 1:需求分析 📋
- **输入**:业务需求、用户反馈
- **输出**:需求分析文档
- **AI 角色**:需求梳理、用户故事生成
- **文档**:业务需求说明.md、功能需求清单.md
### 阶段 2:技术设计 🎨
- **输入**:需求分析结果
- **输出**:技术设计文档
- **AI 角色**:架构设计、接口设计
- **文档**:数据库设计.md、API 接口设计.md、架构设计.md
### 阶段 3:代码实现 💻
- **输入**:技术设计文档
- **输出**:功能代码、单元测试
- **AI 角色**:代码生成、测试用例生成
- **文档**:后端实现说明.md、前端实现说明.md
### 阶段 4:测试验证 🧪
- **输入**:实现代码
- **输出**:测试报告
- **AI 角色**:测试用例补充、问题分析
- **文档**:测试计划.md、测试用例.md、测试报告.md
### 阶段 5:部署运维 🚀
- **输入**:测试通过的代码
- **输出**:生产环境部署
- **AI 角色**:部署脚本生成、监控配置
- **文档**:部署指南.md、监控配置.md
## 🔄 文档维护工作流
### 日常维护流程
1. **代码变更** → 2. **识别影响的文档** → 3. **更新相关文档** → 4. **验证文档准确性** → 5. **提交变更**
### 文档质量检查清单
- [ ] 文档结构符合标准模板
- [ ] 内容与实际代码一致
- [ ] API 文档包含完整示例
- [ ] 业务逻辑描述清晰
- [ ] 技术实现有详细说明
- [ ] 变更历史有记录
### 文档版本管理
- **版本号规则**:主版本.次版本.修订版本 (如:1.2.3)
- **变更记录**:每次更新记录变更内容和原因
- **向后兼容**:重大变更需要保留历史版本说明
## 📚 模块间集成指南
### 模块依赖关系
```mermaid
graph TD
A[用户管理模块] --> B[系统管理模块]
A --> C[满意度调查模块]
A --> D[报告厅预约模块]
B --> C
B --> D
C --> E[数据分析模块]
D --> F[工作流引擎]
```
### 公共服务模块
- **用户认证服务**:所有模块的用户身份验证
- **权限控制服务**:统一的权限管理
- **通知服务**:跨模块的消息通知
- **文件服务**:文件上传和存储
- **数据字典服务**:系统配置和枚举值
### 接口调用规范
- **统一响应格式**:所有模块使用相同的响应结构
- **错误码标准**:统一的错误码定义和处理
- **接口版本管理**:API 版本兼容性处理
- **性能要求**:响应时间和并发量标准
## 🚀 下一步行动计划
### 近期任务(2 周内)
- [ ] 完善报告厅预约模块的技术设计文档
- [ ] 补充满意度调查模块的运维文档
- [ ] 建立模块间接口测试用例
- [ ] 优化文档模板,提升 AI 理解度
### 中期规划(1 个月内)
- [ ] 启动维修服务模块的需求分析
- [ ] 建立自动化文档生成流程
- [ ] 完善模块间集成测试
- [ ] 建立文档质量评估体系
### 长期愿景(3 个月内)
- [ ] 实现文档与代码的自动同步
- [ ] 建立智能化的模块推荐系统
- [ ] 完成所有计划模块的开发
- [ ] 建立模块复用和扩展机制
---
## 📖 相关文档
- **项目总览**:[项目总览](../项目总览/README.md)
- **开发指南**:[开发文档](../开发文档/README.md)
- **API 文档**:[开发文档/API.md](../开发文档/API.md)
- **变更管理**:[变更管理](../变更管理/README.md)
@@ -0,0 +1,575 @@
# 业务模块开发模板
> 🎯 **模板用途**:本模板用于创建新业务模块的文档结构,为 Cursor AI 提供标准的开发和文档生成参考
## 📋 模块基本信息
**模块名称**:[模块英文名称] / [模块中文名称]
**负责人**:[开发负责人]
**开发状态**:🟢 已完成 / 🟡 开发中 / ⭕ 待开始
**技术栈**:[具体技术栈]
**依赖模块**:[依赖的其他模块]
**开发周期**:[开始时间] - [结束时间]
## 🎯 模块概述
### 业务价值
[描述这个模块解决的业务问题和创造的价值]
### 核心功能
- **功能 1**:[功能描述]
- **功能 2**:[功能描述]
- **功能 3**:[功能描述]
- **功能 4**:[功能描述]
### 技术特点
- **特点 1**:[技术特色说明]
- **特点 2**:[性能特点说明]
- **特点 3**:[安全特点说明]
## 📁 文档结构
```
[模块名称]/
├── README.md # 本文件 - 模块总览
├── 需求分析/
│ ├── 业务需求说明.md # 详细业务需求
│ ├── 功能需求清单.md # 功能点清单
│ ├── 非功能需求.md # 性能、安全要求
│ └── 用户故事.md # 用户使用场景
├── 技术设计/
│ ├── 数据库设计.md # 表结构设计
│ ├── API接口设计.md # 接口定义
│ ├── 架构设计.md # 模块架构
│ └── 技术选型.md # 技术决策说明
├── 实现文档/
│ ├── 后端实现说明.md # 后端代码结构
│ ├── 前端实现说明.md # 前端代码结构
│ ├── 关键业务逻辑.md # 核心算法逻辑
│ └── 代码规范.md # 编码规范
├── 测试文档/
│ ├── 测试计划.md # 测试策略
│ ├── 测试用例.md # 具体测试用例
│ └── 测试报告.md # 测试结果
└── 运维文档/
├── 部署指南.md # 部署步骤
├── 监控配置.md # 监控指标
└── 故障处理.md # 常见问题
```
## 🏗️ 系统架构
### 模块架构图
```mermaid
graph TB
subgraph "前端层"
A1[页面组件<br/>[页面说明]]
A2[业务组件<br/>[组件说明]]
end
subgraph "接口层"
B1[Controller<br/>[接口说明]]
end
subgraph "业务层"
C1[Service<br/>[业务逻辑]]
C2[Manager<br/>[业务组装]]
end
subgraph "数据层"
D1[Mapper<br/>[数据访问]]
D2[Database<br/>[数据库表]]
end
A1 --> B1
A2 --> B1
B1 --> C1
C1 --> C2
C2 --> D1
D1 --> D2
```
### 数据流向
```mermaid
sequenceDiagram
participant U as 用户
participant F as 前端
participant C as Controller
participant S as Service
participant M as Mapper
participant D as Database
U->>F: 用户操作
F->>C: HTTP请求
C->>S: 业务调用
S->>M: 数据查询
M->>D: SQL执行
D-->>M: 返回结果
M-->>S: 返回数据
S-->>C: 返回结果
C-->>F: JSON响应
F-->>U: 界面更新
```
## 📊 核心功能模块
### 1. [功能模块 1]
#### 业务描述
[详细描述这个功能模块的业务逻辑]
#### 技术实现
- **前端实现**:[前端技术方案]
- **后端实现**:[后端技术方案]
- **数据存储**:[数据库设计]
#### 关键流程
1. [步骤 1]
2. [步骤 2]
3. [步骤 3]
### 2. [功能模块 2]
#### 业务描述
[详细描述这个功能模块的业务逻辑]
#### 技术实现
- **前端实现**:[前端技术方案]
- **后端实现**:[后端技术方案]
- **数据存储**:[数据库设计]
#### 关键流程
1. [步骤 1]
2. [步骤 2]
3. [步骤 3]
## 🔌 API 接口概览
### 接口分类
#### 基础 CRUD 接口
| 接口名称 | 请求方式 | 路径 | 功能描述 |
| -------------- | -------- | --------------------------- | ---------------------- |
| 创建[实体] | POST | /api/[module]/[entity] | 创建新的[实体] |
| 查询[实体]列表 | GET | /api/[module]/[entity]/list | 分页查询[实体]列表 |
| 查询[实体]详情 | GET | /api/[module]/[entity]/{id} | 根据 ID 查询[实体]详情 |
| 更新[实体] | PUT | /api/[module]/[entity]/{id} | 更新指定[实体] |
| 删除[实体] | DELETE | /api/[module]/[entity]/{id} | 删除指定[实体] |
#### 业务逻辑接口
| 接口名称 | 请求方式 | 路径 | 功能描述 |
| ------------ | -------- | ------ | ---------- |
| [业务接口 1] | [方式] | [路径] | [功能描述] |
| [业务接口 2] | [方式] | [路径] | [功能描述] |
| [业务接口 3] | [方式] | [路径] | [功能描述] |
### 接口规范
- **请求格式**:JSON
- **响应格式**:统一响应体结构
- **认证方式**:JWT Token
- **权限控制**:基于角色的权限验证
## 🗄️ 数据模型
### 核心实体
#### [实体 1]表 (table_name)
| 字段名 | 类型 | 长度 | 非空 | 默认值 | 说明 |
| ----------- | -------- | ------ | ----- | -------- | -------- |
| id | BIGINT | - | Y | - | 主键 ID |
| [字段 1] | [类型] | [长度] | [Y/N] | [默认值] | [说明] |
| [字段 2] | [类型] | [长度] | [Y/N] | [默认值] | [说明] |
| tenant_id | VARCHAR | 20 | Y | - | 租户 ID |
| create_by | BIGINT | - | Y | - | 创建人 |
| create_time | DATETIME | - | Y | - | 创建时间 |
| update_by | BIGINT | - | Y | - | 更新人 |
| update_time | DATETIME | - | Y | - | 更新时间 |
| deleted | TINYINT | - | Y | 0 | 删除标记 |
#### [实体 2]表 (table_name)
| 字段名 | 类型 | 长度 | 非空 | 默认值 | 说明 |
| ----------- | -------- | ------ | ----- | -------- | -------- |
| id | BIGINT | - | Y | - | 主键 ID |
| [字段 1] | [类型] | [长度] | [Y/N] | [默认值] | [说明] |
| [字段 2] | [类型] | [长度] | [Y/N] | [默认值] | [说明] |
| tenant_id | VARCHAR | 20 | Y | - | 租户 ID |
| create_by | BIGINT | - | Y | - | 创建人 |
| create_time | DATETIME | - | Y | - | 创建时间 |
| update_by | BIGINT | - | Y | - | 更新人 |
| update_time | DATETIME | - | Y | - | 更新时间 |
| deleted | TINYINT | - | Y | 0 | 删除标记 |
### 实体关系图
```mermaid
erDiagram
ENTITY1 ||--o{ ENTITY2 : "一对多关系"
ENTITY2 }o--|| ENTITY3 : "多对一关系"
ENTITY1 }o--o{ ENTITY3 : "多对多关系"
ENTITY1 {
bigint id PK
varchar name
datetime create_time
}
ENTITY2 {
bigint id PK
bigint entity1_id FK
varchar description
datetime create_time
}
ENTITY3 {
bigint id PK
varchar code
varchar name
datetime create_time
}
```
## 🔄 业务流程
### 主要业务流程
#### [流程 1 名称]
```mermaid
flowchart TD
A[开始] --> B{条件判断}
B -->|满足条件| C[执行操作1]
B -->|不满足条件| D[执行操作2]
C --> E[更新状态]
D --> F[记录日志]
E --> G[发送通知]
F --> G
G --> H[结束]
```
**流程说明**:
1. [步骤 1 说明]
2. [步骤 2 说明]
3. [步骤 3 说明]
#### [流程 2 名称]
```mermaid
flowchart TD
A[开始] --> B[数据验证]
B --> C{验证通过?}
C -->|是| D[业务处理]
C -->|否| E[返回错误]
D --> F[数据存储]
F --> G[返回结果]
E --> H[结束]
G --> H
```
**流程说明**:
1. [步骤 1 说明]
2. [步骤 2 说明]
3. [步骤 3 说明]
## 🎨 前端设计
### 页面结构
#### [页面 1 名称]
- **功能**:[页面功能说明]
- **组件**:[使用的组件列表]
- **交互**:[用户交互方式]
- **数据**:[页面数据来源]
#### [页面 2 名称]
- **功能**:[页面功能说明]
- **组件**:[使用的组件列表]
- **交互**:[用户交互方式]
- **数据**:[页面数据来源]
### 组件设计
#### [组件 1 名称]
```typescript
// 组件属性接口
interface [Component1]Props {
[prop1]: [type];
[prop2]: [type];
[prop3]: [type];
}
// 组件事件接口
interface [Component1]Emits {
[event1]: [params];
[event2]: [params];
}
```
#### [组件 2 名称]
```typescript
// 组件属性接口
interface [Component2]Props {
[prop1]: [type];
[prop2]: [type];
[prop3]: [type];
}
// 组件事件接口
interface [Component2]Emits {
[event1]: [params];
[event2]: [params];
}
```
## 📝 开发规范
### 代码结构
#### 后端代码结构
```
src/main/java/org/dromara/modules/[module]/
├── controller/ # 控制器层
│ ├── [Entity]Controller.java
│ └── [Module]Controller.java
├── domain/ # 领域对象层
│ ├── bo/ # 业务对象
│ │ ├── [Entity]Bo.java
│ │ └── [Entity]QueryBo.java
│ └── vo/ # 视图对象
│ ├── [Entity]Vo.java
│ └── [Entity]DetailVo.java
├── mapper/ # 数据访问层
│ ├── [Entity]Mapper.java
│ └── [Entity]Mapper.xml
├── service/ # 业务服务层
│ ├── I[Entity]Service.java
│ └── impl/
│ └── [Entity]ServiceImpl.java
└── utils/ # 工具类
└── [Module]Utils.java
```
#### 前端代码结构
```
src/views/[module]/
├── index.vue # 主页面
├── components/ # 页面组件
│ ├── [Component1].vue
│ └── [Component2].vue
├── types/ # 类型定义
│ └── index.ts
└── api/ # API接口
└── index.ts
```
### 命名规范
#### 后端命名规范
- **类名**:PascalCase (如: UserController, UserService)
- **方法名**:camelCase (如: getUserList, createUser)
- **常量**:UPPER_SNAKE_CASE (如: MAX_RETRY_COUNT)
- **包名**:全小写 (如: com.example.module)
#### 前端命名规范
- **组件名**:PascalCase (如: UserList, UserForm)
- **方法名**:camelCase (如: handleSubmit, getUserInfo)
- **变量名**:camelCase (如: userList, isLoading)
- **常量**:UPPER_SNAKE_CASE (如: API_BASE_URL)
#### 数据库命名规范
- **表名**:下划线命名 (如: sys_user, sys_role)
- **字段名**:下划线命名 (如: user_name, create_time)
- **索引名**:idx*表名*字段名 (如: idx_user_username)
## 🧪 测试策略
### 测试分类
#### 单元测试
- **覆盖范围**:Service 层业务逻辑
- **测试框架**:JUnit 5 + Mockito
- **覆盖率要求**:> 80%
#### 集成测试
- **覆盖范围**:Controller 层 API 接口
- **测试框架**:Spring Boot Test
- **测试数据**:测试数据库
#### 前端测试
- **覆盖范围**:组件功能测试
- **测试框架**:Vue Test Utils + Jest
- **测试类型**:组件渲染、用户交互、数据绑定
### 测试用例设计
#### 功能测试用例
- **正常流程测试**:验证正常业务流程
- **边界值测试**:验证边界条件处理
- **异常流程测试**:验证错误处理逻辑
#### 性能测试用例
- **响应时间测试**:验证接口响应时间
- **并发测试**:验证并发处理能力
- **压力测试**:验证系统承载能力
## 🚀 部署运维
### 部署环境
#### 开发环境
- **部署方式**:本地 Docker 容器
- **数据库**:MySQL 8.0
- **缓存**:Redis 7.0
- **配置**:application-dev.yml
#### 测试环境
- **部署方式**:Docker Compose
- **数据库**:MySQL 8.0(测试库)
- **缓存**:Redis 7.0
- **配置**:application-test.yml
#### 生产环境
- **部署方式**:Kubernetes
- **数据库**:MySQL 8.0(集群)
- **缓存**:Redis 7.0(集群)
- **配置**:application-prod.yml
### 监控指标
#### 业务指标
- **功能使用率**:各功能模块的使用频率
- **用户活跃度**:日活、月活用户数
- **业务成功率**:业务操作成功率
#### 技术指标
- **接口响应时间**:平均响应时间 < 200ms
- **系统可用性**:99.9%可用性
- **错误率**:错误率 < 0.1%
## 📅 开发计划
### 开发阶段
#### 第一阶段:基础框架([时间范围])
- [ ] 数据库表结构设计
- [ ] 基础 CRUD 接口开发
- [ ] 基础页面和组件开发
- [ ] 单元测试编写
#### 第二阶段:核心功能([时间范围])
- [ ] [核心功能 1]开发
- [ ] [核心功能 2]开发
- [ ] [核心功能 3]开发
- [ ] 集成测试
#### 第三阶段:完善优化([时间范围])
- [ ] 功能完善和优化
- [ ] 性能测试和优化
- [ ] 用户体验优化
- [ ] 文档完善
### 里程碑
- **里程碑 1**:基础框架完成 ([日期])
- **里程碑 2**:核心功能完成 ([日期])
- **里程碑 3**:测试完成,准备发布 ([日期])
- **里程碑 4**:正式发布上线 ([日期])
## 🔧 开发工具
### 后端开发工具
- **IDE**:IntelliJ IDEA
- **构建工具**:Maven
- **代码质量**:SonarQube
- **API 测试**:Postman
### 前端开发工具
- **IDE**:VSCode
- **构建工具**:Vite
- **代码规范**:ESLint + Prettier
- **组件预览**:Storybook
### 数据库工具
- **管理工具**:Navicat Premium
- **版本控制**:Flyway
- **性能监控**:MySQL Performance Schema
## 📖 相关文档
- **项目总览**:[项目总览](../项目总览/README.md)
- **开发规范**:[开发文档](../开发文档/README.md)
- **API 接口**:[开发文档/API.md](../开发文档/API.md)
- **数据库设计**:[设计文档/database](../设计文档/database/)
- **变更记录**:[变更管理](../变更管理/README.md)
---
## 📝 模板使用说明
### 适用场景
- 新业务模块开发启动时
- 现有模块重构时
- 为 AI 辅助开发提供上下文
### 填写指南
1. **基本信息**:确保模块基本信息准确完整
2. **架构设计**:使用 Mermaid 图表清晰展示架构
3. **API 设计**:提供完整的接口定义和示例
4. **数据模型**:详细设计数据库表结构
5. **业务流程**:用流程图展示关键业务逻辑
### 文档维护
- **实时更新**:代码变更时同步更新文档
- **版本控制**:重要变更记录版本历史
- **质量检查**:定期检查文档完整性和准确性
### AI 辅助开发
- **上下文提供**:为 Cursor AI 提供完整的业务和技术上下文
- **代码生成**:基于文档规范生成标准化代码
- **文档生成**:自动生成和更新相关文档
File renamed without changes.
File renamed without changes.
+452
View File
@@ -0,0 +1,452 @@
# 变更管理中心
## 📋 变更管理概述
变更管理中心负责记录、跟踪和管理项目开发过程中的所有变更,确保 **Cursor AI 辅助开发** 的每次代码调整都有完整的记录和追溯能力。
## 🎯 管理目标
### 核心价值
- **🔍 完整追溯**:记录每次代码变更的原因、内容和影响
- **📊 数据驱动**:通过变更数据分析项目进度和质量
- **🤖 AI 辅助**:为 Cursor AI 提供历史变更上下文,提升开发效率
- **👥 团队协作**:确保团队成员了解项目变更历史
### 管理原则
- **强制记录**:所有代码变更都必须记录
- **及时更新**:变更发生后立即记录
- **标准格式**:使用统一的记录格式
- **分类管理**:按变更类型和影响范围分类
## 📊 变更分类体系
### 按变更类型分类
#### 🆕 新功能开发 (Feature)
- **描述**:新增业务功能或模块
- **影响范围**:通常涉及多个文件和模块
- **文档要求**:需要更新 API 文档、用户手册
- **示例**:新增用户管理模块、新增报告厅预约功能
#### 🐛 Bug 修复 (Bugfix)
- **描述**:修复已知的功能缺陷或错误
- **影响范围**:通常限定在特定功能
- **文档要求**:更新已有文档,记录修复内容
- **示例**:修复登录验证 bug、修复数据查询错误
#### 🔧 重构优化 (Refactor)
- **描述**:改进代码结构,不改变外部行为
- **影响范围**:内部代码结构调整
- **文档要求**:更新技术文档和代码注释
- **示例**:优化数据库查询、重构 service 层逻辑
#### 📚 文档更新 (Documentation)
- **描述**:更新项目文档、API 文档、用户手册
- **影响范围**:文档文件
- **文档要求**:记录文档变更内容
- **示例**:更新 API 接口文档、完善开发指南
#### ⚙️ 配置调整 (Configuration)
- **描述**:修改系统配置、环境配置
- **影响范围**:配置文件
- **文档要求**:更新部署和配置文档
- **示例**:调整数据库连接配置、修改缓存策略
### 按影响范围分类
#### 🔴 重大变更 (Major)
- **定义**:影响系统架构或核心功能的变更
- **批准要求**:需要架构师或项目经理审核
- **测试要求**:需要完整的回归测试
- **通知范围**:全体团队成员
#### 🟡 中等变更 (Minor)
- **定义**:影响单个模块或功能的变更
- **批准要求**:模块负责人审核
- **测试要求**:模块相关功能测试
- **通知范围**:相关开发人员
#### 🟢 小变更 (Patch)
- **定义**:局部代码调整或小 bug 修复
- **批准要求**:开发人员自审
- **测试要求**:基本功能验证
- **通知范围**:直接相关人员
## 📝 变更记录标准格式
### 标准记录模板
```markdown
## 调整记录 - YYYY-MM-DD HH:mm:ss
**变更 ID**: CHG-YYYYMMDD-001
**变更时间**: YYYY-MM-DD HH:mm:ss
**变更人员**: [开发者姓名/Cursor AI 辅助]
**变更类型**: 🆕 新功能/🐛Bug 修复/🔧 重构优化/📚 文档更新/⚙️ 配置调整
**影响级别**: 🔴 重大变更/🟡 中等变更/🟢 小变更
### 📋 变更概述
**变更目的**: [简述变更原因和目标,1-2 句话]
**影响范围**: [列出受影响的模块、功能或文件]
### 📁 涉及文件
**后端文件**:
- backend/[具体文件路径 1]
- backend/[具体文件路径 2]
**前端文件**:
- web/[具体文件路径 1]
- web/[具体文件路径 2]
**配置文件**:
- [配置文件路径]
**文档文件**:
- docs/[文档文件路径]
### 🔧 变更内容详述
**业务逻辑变更**:
1. [具体业务逻辑的变更说明]
2. [新增或修改的业务规则]
**技术实现变更**:
1. [技术方案的调整说明]
2. [代码结构的优化内容]
**接口变更**:
- **新增接口**: [新增接口列表]
- **修改接口**: [修改的接口及变更内容]
- **废弃接口**: [废弃的接口及替代方案]
**数据库变更**:
- **新增表**: [新增表及字段说明]
- **修改表**: [表结构变更内容]
- **数据迁移**: [数据迁移脚本或说明]
### 🎯 技术决策
**技术选型**: [使用的技术栈和原因]
**设计模式**: [采用的设计模式和考虑]
**性能优化**: [性能优化措施]
**安全考虑**: [安全性相关的处理]
### 📖 文档同步更新
**API 文档**:
- [ ] 已更新 docs/开发文档/API.md
- [ ] 已更新模块 API 接口设计文档
**业务文档**:
- [ ] 已更新业务需求文档
- [ ] 已更新用户操作手册
**技术文档**:
- [ ] 已更新数据库设计文档
- [ ] 已更新架构设计文档
### 🧪 测试验证
**功能测试**:
- [ ] 单元测试通过
- [ ] 集成测试通过
- [ ] 功能验收测试通过
**质量检查**:
- [ ] 代码规范检查通过
- [ ] 代码 review 通过
- [ ] 安全扫描通过
**性能验证**:
- [ ] 响应时间满足要求
- [ ] 并发性能测试通过
- [ ] 内存使用正常
### 🚀 部署说明
**部署环境**: [开发/测试/生产环境]
**部署步骤**:
1. [部署步骤 1]
2. [部署步骤 2]
3. [部署步骤 3]
**回滚方案**: [如有问题的回滚方案]
**监控要点**: [需要重点监控的指标]
### 📝 备注
**已知问题**: [如有已知问题需要说明]
**后续计划**: [后续的改进或扩展计划]
**相关链接**: [相关的 Issue、PR 或文档链接]
---
```
## 🔄 变更管理流程
### 变更申请流程
```mermaid
flowchart TD
A[需求提出] --> B[变更评估]
B --> C{影响级别}
C -->|重大变更| D[架构师审核]
C -->|中等变更| E[模块负责人审核]
C -->|小变更| F[开发人员自审]
D --> G[制定变更计划]
E --> G
F --> G
G --> H[代码开发]
H --> I[代码审查]
I --> J[测试验证]
J --> K[文档更新]
K --> L[部署发布]
L --> M[变更记录]
M --> N[跟踪反馈]
```
### Cursor AI 辅助开发流程
```mermaid
flowchart TD
A[AI代码生成] --> B[代码审查]
B --> C[功能测试]
C --> D{测试通过?}
D -->|是| E[立即记录变更]
D -->|否| F[修复问题]
F --> C
E --> G[更新相关文档]
G --> H[提交代码变更]
H --> I[通知团队成员]
style E fill:#ff6b6b
style G fill:#ff6b6b
```
### 紧急变更流程
```mermaid
flowchart TD
A[紧急问题发现] --> B[快速评估]
B --> C[紧急修复]
C --> D[最小化测试]
D --> E[紧急部署]
E --> F[事后补充记录]
F --> G[完整测试验证]
G --> H[文档完善]
```
## 📊 变更统计分析
### 变更统计指标
#### 数量统计
- **总变更数量**:记录期间的总变更次数
- **类型分布**:各类型变更的数量分布
- **影响级别分布**:不同影响级别的变更比例
- **模块分布**:各模块的变更频率
#### 质量指标
- **Bug 修复率**:Bug 修复变更占总变更的比例
- **回滚率**:需要回滚的变更比例
- **测试通过率**:一次测试通过的变更比例
- **文档同步率**:变更后文档同步更新的比例
#### 效率指标
- **平均处理时间**:从变更申请到完成的平均时间
- **审核效率**:变更审核的平均时间
- **AI 辅助比例**:Cursor AI 参与的变更比例
- **自动化程度**:自动化处理的变更比例
### 月度变更报告模板
```markdown
# YYYY 年 MM 月变更管理报告
## 📊 变更概览
- **总变更数**: XXX 次
- **新功能**: XX 次 (XX%)
- **Bug 修复**: XX 次 (XX%)
- **重构优化**: XX 次 (XX%)
- **文档更新**: XX 次 (XX%)
- **配置调整**: XX 次 (XX%)
## 🎯 关键指标
- **平均处理时间**: X.X 小时
- **测试通过率**: XX%
- **文档同步率**: XX%
- **AI 辅助比例**: XX%
## 📈 趋势分析
[变更趋势的分析和总结]
## 🔍 问题发现
[发现的问题和改进建议]
## 📋 下月计划
[下月的变更管理改进计划]
```
## 🔧 变更管理工具
### Cursor AI 集成工具
#### 1. 变更记录助手
```bash
# Cursor AI 提示词模板
请根据刚才的代码变更,生成标准的变更记录:
变更类型:[新功能/Bug修复/重构优化/文档更新/配置调整]
变更文件:[具体文件列表]
变更内容:[具体变更说明]
请按照项目的变更记录模板格式生成完整记录。
```
#### 2. 文档同步检查
```bash
# 文档同步检查提示
检查以下变更是否需要更新相关文档:
1. API接口变更 → 更新API.md
2. 数据库变更 → 更新数据库设计文档
3. 业务逻辑变更 → 更新业务需求文档
4. 配置变更 → 更新部署文档
请确认需要更新的文档列表。
```
### 自动化工具
#### Git Hook 集成
```bash
#!/bin/bash
# pre-commit hook - 提交前检查
echo "检查变更记录..."
if [[ -z $(git diff --cached --name-only | grep "docs/变更管理/code-adjust-record.md") ]]; then
echo "⚠️ 警告:代码变更未更新变更记录!"
echo "请在 docs/变更管理/code-adjust-record.md 中记录本次变更"
exit 1
fi
```
#### 变更通知脚本
```bash
#!/bin/bash
# 变更通知脚本
send_change_notification() {
local change_type=$1
local change_files=$2
local change_author=$3
echo "🔔 变更通知"
echo "类型:$change_type"
echo "文件:$change_files"
echo "作者:$change_author"
# 发送到团队通知渠道
}
```
## 📋 质量控制检查清单
### 变更前检查
- [ ] 变更需求明确,目标清晰
- [ ] 影响范围评估完成
- [ ] 技术方案确定
- [ ] 测试计划制定
- [ ] 回滚方案准备
### 变更中检查
- [ ] 代码规范符合标准
- [ ] 单元测试编写完成
- [ ] 代码审查通过
- [ ] 集成测试通过
- [ ] 文档同步更新
### 变更后检查
- [ ] 功能验收通过
- [ ] 性能指标满足要求
- [ ] 无明显副作用
- [ ] 变更记录完整
- [ ] 团队成员已通知
## 🚀 持续改进计划
### 短期目标(1 个月内)
- [ ] 完善变更记录模板
- [ ] 建立自动化检查机制
- [ ] 优化 Cursor AI 集成流程
- [ ] 提升团队变更管理意识
### 中期目标(3 个月内)
- [ ] 建立变更影响分析工具
- [ ] 实现变更数据可视化
- [ ] 建立变更质量评估体系
- [ ] 优化变更审核流程
### 长期目标(6 个月内)
- [ ] 实现智能变更建议
- [ ] 建立变更风险预警机制
- [ ] 完善变更知识库
- [ ] 实现变更管理全自动化
---
## 📖 相关文档
- **代码调整记录**:[code-adjust-record.md](./code-adjust-record.md)
- **项目总览**:[项目总览](../项目总览/README.md)
- **开发文档**:[开发文档](../开发文档/README.md)
- **测试文档**:[测试文档](../测试文档/README.md)
---
**🎯 目标**:通过标准化的变更管理,确保项目开发过程可控、可追溯,为 Cursor AI 提供完整的变更上下文,提升开发效率和质量。
@@ -100,6 +100,576 @@
新记录请添加在此行下方,保持时间倒序排列(最新的在前)
-->
## 调整记录 - 2025-01-08 16:45:00
**变更 ID**: CHG-20250108-004
**变更时间**: 2025-01-08 16:45:00
**变更人员**: Cursor AI 辅助
**变更类型**: ⚙️ 配置调整/📚 文档更新
**影响级别**: 🟡 中等变更
### 📋 变更概述
**变更目的**: 根据实际项目状态调整.cursorrules 文件中的文档结构管理章节,并新增 docs 文档变更时的强制同步更新规则
**影响范围**: 优化项目开发规范,确保文档与规范的一致性
### 📁 涉及文件
**配置文件**:
- .cursorrules (重大更新)
### 🔧 变更内容详述
**文档结构管理更新**:
1. **文档目录组织同步**:根据实际 docs 目录结构更新.cursorrules 中的文档组织图
2. **新增文件说明**:补充 SQL 模块文件、数据库建设规范、文档结构优化方案等新增文件
3. **技术要求更新**:
- Node.js 版本:16.x → 20.15.x+
- npm 版本:8.x → 10.7.x+
- 前端访问地址:localhost:3000 → localhost
- 数据库环境:支持本地安装或阿里云测试环境
**新增强制同步更新规则**:
1. **docs 文档变更时的强制同步规则**:
- 文档结构变更必须同步更新.cursorrules
- 重要文档变更需要同步调整规范要求
- 技术环境变更要求更新技术栈规范
- 业务模块变更需要同步模块管理规范
2. **工作流程优化**:
- 在文档更新流程中增加.cursorrules 检查步骤
- 添加规范文件一致性验证
- 强化变更记录的规范文件更新检查
3. **检查清单完善**:
- 增加.cursorrules 文件同步检查项
- 添加文档结构一致性验证
- 建立规范文件更新的强制检查机制
**规范要求强化**:
- 明确 docs 文档变更必须立即同步更新.cursorrules 文件
- 建立文档结构与规范文件的一致性保障机制
- 强化项目规范的实时性和准确性
### 📖 文档同步更新记录
**规范文件**:
- [x] ✅ 已更新.cursorrules 文档结构管理章节
- [x] ✅ 已新增 docs 变更强制同步规则
- [x] ✅ 已更新前端技术栈要求
- [x] ✅ 已优化文档更新工作流程
**变更管理**:
- [x] ✅ 已在变更记录中添加本次更新
- [x] ✅ 已确认规范文件与实际项目状态一致
### 🧪 测试验证
**规范验证**:
- [x] .cursorrules 中的文档目录结构与实际 docs 目录完全一致
- [x] 技术要求与项目实际配置保持同步
- [x] 新增的强制同步规则清晰明确
- [x] 工作流程更新合理可操作
**文档验证**:
- [x] 变更记录格式符合标准模板
- [x] 所有路径引用准确无误
- [x] 规范要求具体可执行
### 📝 备注
**重要改进**:
1. **建立了 docs 文档与.cursorrules 文件的强制同步机制**,确保项目规范始终与实际状态保持一致
2. **优化了文档更新工作流程**,将规范文件检查纳入强制步骤
3. **更新了技术要求**,与最新的项目配置保持同步
4. **强化了规范执行的可操作性**,提供了具体的检查清单
**后续效果**:
- 提高项目规范的实时性和准确性
- 减少文档与规范不一致的情况
- 提升团队协作效率和开发体验
- 为 AI 辅助开发提供更准确的规范指导
**相关链接**: .cursorrules
---
## 调整记录 - 2025-01-08 16:20:00
**变更 ID**: CHG-20250108-003
**变更时间**: 2025-01-08 16:20:00
**变更人员**: Cursor AI 辅助
**变更类型**: 📚 文档新增
**影响级别**: 🟢 小变更
### 📋 变更概述
**变更目的**: 创建工程本地启动指导文档,为开发人员提供完整的环境配置和项目启动指南
**影响范围**: 新增项目根目录启动指导文档,提升开发体验
### 📁 涉及文件
**新增文档**:
- 工程本地启动指导.md(项目根目录)
### 🔧 变更内容详述
**文档内容**:
1. **环境要求说明**:JDK 17、Maven 3.8.8、Node.js、MySQL、Redis 等必需环境
2. **详细安装指导**:
- macOS 环境完整安装步骤(使用 Homebrew)
- Windows 环境详细安装指导
- 环境变量配置方法
3. **数据库配置**:MySQL 和 Redis 的配置启动方法
4. **后端启动流程**:按顺序启动 start-monitor.sh → start-job.sh → start-main.sh
5. **前端启动说明**:首次需 npm install,后续 npm run dev
6. **常见问题解答**:Java、Node.js、数据库、服务启动相关问题
7. **快速启动检查清单**:便于开发者快速核对环境
**文档特色**:
- 结构清晰,包含完整目录导航
- 支持 macOS 和 Windows 双平台
- 提供详细的命令行操作示例
- 包含问题排查和解决方案
- 设置了启动检查清单
### 📖 文档同步更新记录
**项目文档**:
- [x] ✅ 已创建工程本地启动指导.md
- [x] ✅ 已配置 VS Code settings.json 支持 markdown 预览
**技术文档**:
- [x] ✅ 已包含环境配置要求
- [x] ✅ 已说明服务启动顺序
- [x] ✅ 已提供常见问题解决方案
### 🧪 测试验证
**文档验证**:
- [x] 文档结构清晰完整
- [x] 安装指导步骤准确
- [x] 启动流程符合实际需求
- [x] Markdown 格式正确,预览效果良好
### 📝 备注
**后续改进**:
1. 可根据实际使用反馈优化安装步骤
2. 可添加更多常见问题的解决方案
3. 可结合实际部署情况调整服务端口配置
**相关链接**: 工程本地启动指导.md
---
## 调整记录 - 2025-01-08 15:45:00
**变更 ID**: CHG-20250108-002
**变更时间**: 2025-01-08 15:45:00
**变更人员**: Cursor AI 辅助
**变更类型**: 📚 文档更新/⚙️ 配置调整
**影响级别**: 🟡 中等变更
### 📋 变更概述
**变更目的**: 根据业务域方式拆分 hzdyjs_xg.sql 数据库文件,将单一大文件拆分为 6 个模块化 SQL 文件,便于数据库管理和维护
**影响范围**: 数据库文档结构优化,不影响现有数据库功能
### 📁 涉及文件
**新增 SQL 文件**:
- docs/设计文档/database/01-workflow-module.sql
- docs/设计文档/database/02-code-generator-module.sql
- docs/设计文档/database/03-logistics-module.sql
- docs/设计文档/database/04-job-scheduler-module.sql
- docs/设计文档/database/05-system-management-module.sql
- docs/设计文档/database/06-test-module.sql
**新增说明文档**:
- docs/设计文档/database/SQL 文件说明.md
**保留文件**:
- docs/设计文档/database/hzdyjs_xg.sql(完整数据库文件,保持不变)
### 🔧 变更内容详述
**业务逻辑变更**:
1. 按业务域将数据库表进行逻辑分组
2. 每个模块包含相关的表结构和初始数据
3. 保持与原始数据库文件的完全一致性
**技术实现变更**:
1. **工作流模块**:包含 8 张 flow\_\*表,支持业务流程管理
2. **代码生成模块**:包含 2 张 gen\_\*表,支持代码自动生成
3. **后勤管理模块**:包含 10 张 hq\_\*表,支持校园后勤服务
4. **任务调度模块**:包含 12 张 sj\_\*表,支持分布式任务调度
5. **系统管理模块**:包含 21 张 sys\_\*表,提供系统核心功能
6. **测试模块**:包含 1 张 test\_\*表,用于功能测试
**数据库变更**:
- 无数据库结构变更
- 保持所有表结构、索引、约束的一致性
- 遵循不使用外键约束的设计规范
### 📖 文档同步更新记录
**数据库文档**:
- [x] ✅ 已创建 6 个模块化 SQL 文件
- [x] ✅ 已创建 SQL 文件说明文档
**业务文档**:
- [x] ✅ 已更新数据库设计说明文档结构
- [x] ✅ 已说明模块间依赖关系
**技术文档**:
- [x] ✅ 已保持数据库设计规范一致性
- [x] ✅ 已维护索引设计标准
### 🧪 测试验证
**功能测试**:
- [x] 验证拆分后文件的 SQL 语法正确性
- [x] 确认表结构与原文件完全一致
- [x] 检查所有索引和约束的正确性
**文档验证**:
- [x] 文档内容与数据库实现一致
- [x] 模块说明准确完整
- [x] 使用指南可正常执行
### 📝 备注
**优势说明**:
1. 提高数据库维护效率,支持按模块部署
2. 便于不同环境的差异化配置
3. 降低数据库变更的复杂度
4. 支持模块化的备份和恢复策略
**使用建议**:
1. 开发环境可按需部署特定模块
2. 生产环境建议使用完整 SQL 文件
3. 任何表结构变更需同步更新对应模块文件
**相关链接**: docs/设计文档/database/SQL 文件说明.md
---
## 调整记录 - 2025-01-08 14:30:00
**调整时间**: 2025-01-08 14:30:00
**调整人**: Cursor AI 辅助
**调整目的**: 完善数据库建设规范,明确禁止使用数据库外键约束的规范要求,确保项目数据库设计的一致性和性能优化
**涉及文件**:
- docs/设计文档/database/mysql-database-standard.md
- .cursorrules
**调整内容详述**:
1. **核心规范新增**
- 在强制性要求中增加第 6 条:禁止使用数据库外键约束
- 明确所有表关联关系通过应用层维护
- 统一项目数据库设计理念
2. **专门章节建立**
- 新增"外键约束规范"专门章节
- 详细说明禁用外键约束的 3 大原因:性能考虑、灵活性要求、维护便利性
- 提供完整的替代方案:应用层数据一致性、命名约定标识、数据校验注解
3. **关联字段设计规范化**
- 明确关联字段命名规范(必须以\_id 结尾)
- 规范关联字段注释格式(必须标明关联的表和字段)
- 制定关联字段索引设计标准
4. **建表模板更新**
- 更新标准业务表模板,移除外键约束相关内容
- 在模板中明确标注"不使用外键约束"
- 增加关联字段示例和索引设计示例
- 更新关联关系表模板,强调不创建外键约束
5. **数据一致性保障机制**
- 提供业务层校验方案
- 建立定期数据校验脚本
- 制定监控和报警机制
6. **检查清单完善**
- 在新建表检查清单中增加"未使用外键约束"检查项
- 增加关联字段命名规范检查
- 增加关联字段注释明确性检查
**技术细节**:
- 规范文档格式: Markdown
- 遵循的设计原则: 性能优先、灵活扩展、应用层维护
- 替代技术方案:
- 应用层事务管理 (@Transactional)
- 数据校验注解 (@ExistReference)
- 命名约定标识关联关系
- 定期数据一致性检查脚本
**性能优化效果**:
- **提升性能**: 消除外键约束对数据操作的性能影响
- **支持扩展**: 便于数据库分库分表和横向扩展
- **简化维护**: 减少数据库结构变更的复杂度
- **提高灵活性**: 支持业务逻辑的灵活调整
**应用层数据一致性示例**:
```java
// 删除操作前检查关联数据
@Transactional
public void deleteUser(Long userId) {
if (hasRelatedData(userId)) {
throw new BusinessException("用户存在关联数据,无法删除");
}
userService.deleteById(userId);
}
```
**关联字段规范示例**:
```sql
-- 正确的关联字段设计
`user_id` bigint(20) NOT NULL COMMENT '用户ID,关联sys_user.id',
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID,关联sys_dept.id',
-- 对应的索引设计(不使用外键约束)
KEY `idx_user_id` (`user_id`),
KEY `idx_dept_id` (`dept_id`)
```
**测试验证**:
- [x] 数据库规范文档更新完成
- [x] .cursorrules 中的规范同步更新
- [x] 建表模板移除外键约束内容
- [x] 检查清单增加相关检查项
- [x] 替代方案详细说明完整
- [x] 文档结构清晰,易于理解和执行
**备注**:
此次规范完善是基于项目实际需求和性能考虑做出的重要决策。通过禁用数据库外键约束,项目能够:
1. 获得更好的数据库性能表现
2. 支持未来的分库分表扩展需求
3. 简化数据库结构变更和维护工作
4. 通过应用层逻辑确保数据一致性
这一规范将作为后续所有数据库设计的强制性要求,确保项目数据库架构的一致性和可扩展性。
---
## 调整记录 - 2025-01-27 00:05:00
**调整时间**: 2025-01-27 00:05:00
**调整人**: Cursor AI 辅助
**调整目的**: 将 docs 文档中的文件夹名称改为中文,提高用户理解和查看的便利性
**涉及文件**:
- docs/ 目录下所有英文文件夹名
- docs/README.md
- docs/structure-optimization-plan.md
**调整内容详述**:
1. **文件夹重命名**
- project-overview → 项目总览
- business-modules → 业务模块
- requirements → 需求文档
- design → 设计文档
- development → 开发文档
- testing → 测试文档
- deployment → 部署文档
- middleware → 中间件配置
- change-management → 变更管理
- knowledge-base → 知识库
- reports → 报告文档
2. **文档链接更新**
- 更新 docs/README.md 中所有目录的链接引用
- 更新按项目阶段导航的路径显示
- 更新快速导航指南中的链接
- 更新重要开发规范中的文档路径引用
3. **结构优化方案同步**
- 更新 docs/structure-optimization-plan.md 中的目录结构图
- 同步更新实施建议中的目录名称
**技术细节**:
- 使用的命令:`mv [英文名] [中文名]`
- 更新格式:Markdown 链接格式
- 保持一致性:所有相关引用同步更新
- 中文命名规范:使用简洁明了的中文名称
**优化效果**:
- **用户友好性**:中文目录名更直观,降低理解成本
- **本土化支持**:符合中文用户的使用习惯
- **可读性提升**:目录结构一目了然,便于快速定位
- **团队协作**:中文名称减少沟通成本
- **文档管理**:更符合中文项目的文档管理习惯
**命名对照表**:
| 英文名称 | 中文名称 | 用途说明 |
| ----------------- | ---------- | ---------------- |
| project-overview | 项目总览 | 项目整体信息 |
| business-modules | 业务模块 | 业务模块聚合文档 |
| requirements | 需求文档 | 项目需求管理 |
| design | 设计文档 | 系统设计文档 |
| development | 开发文档 | 开发指南和规范 |
| testing | 测试文档 | 测试计划和用例 |
| deployment | 部署文档 | 部署和运维指南 |
| middleware | 中间件配置 | 中间件配置文档 |
| change-management | 变更管理 | 项目变更追踪 |
| knowledge-base | 知识库 | 经验和最佳实践 |
| reports | 报告文档 | 项目报告管理 |
**测试验证**:
- [x] 所有文件夹重命名成功
- [x] docs/README.md 中的链接全部更新
- [x] structure-optimization-plan.md 中的目录结构图更新
- [x] 所有相关文档引用路径同步更新
- [x] 文档结构保持完整,功能正常
- [x] 中文路径在各操作系统下兼容性良好
**备注**: 此次调整将 docs 文档体系的可读性和用户体验提升到了新的高度,中文目录名称使项目文档更加符合中文用户的使用习惯,显著降低了文档导航和理解的门槛。这一改进将有助于团队成员更高效地使用和维护项目文档。
---
## 调整记录 - 2025-01-26 23:55:00
**调整时间**: 2025-01-26 23:55:00
**调整人**: Cursor AI 辅助
**调整目的**: 优化 docs 文件夹目录结构,建立混合组织方式,既支持项目阶段的全过程管理,又提供业务模块的聚合视图,为 AI 辅助开发提供更好的文档基础
**涉及文件**:
- docs/structure-optimization-plan.md (新建)
- docs/project-overview/README.md (新建)
- docs/business-modules/README.md (新建)
- docs/change-management/README.md (新建)
- docs/change-management/code-adjust-record.md (迁移)
- docs/README.md (重大更新)
**调整内容详述**:
1. **新增核心目录结构**
- 创建 `project-overview/` 目录:项目总览,包含项目基本信息、技术架构、团队组织等
- 创建 `business-modules/` 目录:按业务模块组织文档,便于 AI 理解业务上下文
- 创建 `change-management/` 目录:统一管理各类变更记录
- 创建 `knowledge-base/` 和 `reports/` 目录:知识积累和项目报告
2. **建立双重导航体系**
- **按项目阶段导航**:requirements → design → development → testing → deployment
- **按业务模块导航**:用户管理、满意度调查、报告厅预约、系统管理等模块
3. **优化文档组织理念**
- 保持软件开发生命周期的清晰结构
- 在每个业务模块下聚合该模块的完整文档(需求+设计+API+数据库+测试)
- 为 Cursor AI 提供完整的业务上下文理解
4. **迁移和整合现有内容**
- 将 `code-adjust-record.md` 迁移到 `change-management/` 目录
- 重新编写主 README 文档,体现新的组织理念
- 创建详细的文档结构优化方案
5. **建立标准化的模块文档结构**
- 每个业务模块包含:requirements.md、design.md、api.md、database.md、test-cases.md
- 统一的文档模板和维护规范
- 模块间依赖关系的清晰定义
**技术细节**:
- 文档格式:Markdown
- 组织方式:混合组织(项目阶段 + 业务模块)
- 版本控制:Git 版本管理
- AI 友好设计:业务上下文聚合、标准化模板、清晰的依赖关系
**优化效果**:
- **Cursor AI 辅助**:通过业务模块聚合提供完整业务上下文
- **全过程管理**:保持项目全生命周期的文档管理体系
- **查找效率**:双重导航体系,支持多种查找方式
- **知识积累**:建立知识库和经验沉淀机制
- **变更追踪**:完善的变更管理和记录体系
**业务模块文档规划**:
1. **用户管理模块**:用户注册、登录、权限管理
2. **后勤满意度调查模块**:问卷创建、数据收集、统计分析
3. **报告厅预约模块**:资源管理、预约申请、审批流程
4. **系统管理模块**:系统配置、日志管理、监控告警
**文档维护规范建立**:
- 代码变更必须同步更新相关模块文档
- API 变更必须立即更新 API.md 文档
- 建立文档版本与代码版本的同步机制
- 定期审查文档完整性和准确性
**测试验证**:
- [x] 新目录结构创建完成
- [x] 核心文档编写完成(project-overview、business-modules、change-management)
- [x] 主 README 文档更新完成
- [x] 代码调整记录迁移完成
- [x] 文档结构优化方案编写完成
- [x] 文档间交叉引用检查通过
**备注**:
此次文档结构优化是项目文档管理的重要升级,建立了既符合软件开发全过程管理需要,又便于 AI 辅助开发的混合文档组织体系。通过业务模块的聚合视图,Cursor AI 可以更好地理解项目的业务上下文,提供更精准的代码生成和开发辅助。同时,完善的变更管理体系确保了项目文档与代码的同步更新,为项目的长期维护和发展奠定了良好基础。
---
## 调整记录 - 2025-01-26 23:40:00
**调整时间**: 2025-01-26 23:40:00
File renamed without changes.
+641
View File
@@ -0,0 +1,641 @@
# API 文档模板
> 🎯 **模板用途**:本模板用于创建标准化的 API 接口文档,为 Cursor AI 提供 API 文档编写和维护的参考格式
## 📋 文档说明
### 适用场景
- 新增 API 接口时创建文档
- 现有 API 接口修改时更新文档
- 为 Cursor AI 提供接口开发上下文
### 使用方法
1. 复制本模板内容
2. 替换所有 `[占位符]` 为实际内容
3. 根据实际接口情况调整结构
4. 确保示例代码可以正常运行
---
## 🔌 [模块名称] API 接口文档
### 模块概述
**模块名称**:[模块英文名] / [模块中文名]
**基础路径**:`/api/[module]`
**版本**:v1.0
**负责人**:[开发负责人]
**更新时间**:[最后更新时间]
### 模块功能
[模块的主要功能描述,包括业务价值和技术特点]
### 权限说明
- **权限前缀**:`[module]:`
- **权限列表**:
- `[module]:list` - 查询权限
- `[module]:add` - 新增权限
- `[module]:edit` - 编辑权限
- `[module]:remove` - 删除权限
---
## 📊 接口概览
### 接口分类
#### 基础 CRUD 接口
| 接口名称 | HTTP 方法 | 路径 | 权限要求 | 功能描述 |
| -------------- | --------- | --------------------- | ----------------- | ---------------------- |
| 查询[实体]列表 | GET | `/api/[module]/list` | `[module]:list` | 分页查询[实体]列表 |
| 查询[实体]详情 | GET | `/api/[module]/{id}` | `[module]:list` | 根据 ID 查询[实体]详情 |
| 新增[实体] | POST | `/api/[module]` | `[module]:add` | 创建新的[实体] |
| 修改[实体] | PUT | `/api/[module]` | `[module]:edit` | 更新[实体]信息 |
| 删除[实体] | DELETE | `/api/[module]/{ids}` | `[module]:remove` | 批量删除[实体] |
#### 业务逻辑接口
| 接口名称 | HTTP 方法 | 路径 | 权限要求 | 功能描述 |
| ------------ | --------- | ------------------------- | -------- | ---------- |
| [业务接口 1] | [方法] | `/api/[module]/[action1]` | `[权限]` | [功能描述] |
| [业务接口 2] | [方法] | `/api/[module]/[action2]` | `[权限]` | [功能描述] |
| [业务接口 3] | [方法] | `/api/[module]/[action3]` | `[权限]` | [功能描述] |
### 通用响应格式
#### 成功响应
```json
{
"code": 200,
"msg": "操作成功",
"data": {
// 响应数据
}
}
```
#### 分页响应
```json
{
"code": 200,
"msg": "查询成功",
"rows": [
// 数据列表
],
"total": 100
}
```
#### 错误响应
```json
{
"code": 400001,
"msg": "参数错误",
"data": null
}
```
---
## 🔍 接口详细说明
### 1. 查询[实体]列表
#### 接口信息
**接口地址**: `GET /api/[module]/list`
**接口描述**: 分页查询[实体]列表,支持多条件筛选
**权限要求**: `[module]:list`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| --------- | ------- | ---- | -------------------- | ------------ |
| pageNum | Integer | N | 页码,默认 1 | 1 |
| pageSize | Integer | N | 每页大小,默认 10 | 10 |
| [field1] | String | N | [字段 1 说明] | "示例值" |
| [field2] | Integer | N | [字段 2 说明] | 1 |
| status | Integer | N | 状态:1 启用,0 禁用 | 1 |
| beginTime | String | N | 开始时间 | "2024-01-01" |
| endTime | String | N | 结束时间 | "2024-01-31" |
#### 请求示例
```bash
curl -X GET "http://localhost:8080/api/[module]/list?pageNum=1&pageSize=10&status=1" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "查询成功",
"rows": [
{
"id": 1,
"[field1]": "示例值1",
"[field2]": 1,
"status": 1,
"createBy": 1,
"createTime": "2024-01-01 10:00:00",
"updateBy": 1,
"updateTime": "2024-01-01 10:00:00"
},
{
"id": 2,
"[field1]": "示例值2",
"[field2]": 2,
"status": 1,
"createBy": 1,
"createTime": "2024-01-01 11:00:00",
"updateBy": 1,
"updateTime": "2024-01-01 11:00:00"
}
],
"total": 100
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | -------- | -------------------- |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
| 400001 | 参数错误 | 检查请求参数格式 |
---
### 2. 查询[实体]详情
#### 接口信息
**接口地址**: `GET /api/[module]/{id}`
**接口描述**: 根据 ID 查询[实体]的详细信息
**权限要求**: `[module]:list`
#### 路径参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| ------ | ---- | ---- | -------- | ------ |
| id | Long | Y | [实体]ID | 1 |
#### 请求示例
```bash
curl -X GET "http://localhost:8080/api/[module]/1" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "查询成功",
"data": {
"id": 1,
"[field1]": "示例值",
"[field2]": 1,
"status": 1,
"remark": "备注信息",
"createBy": 1,
"createTime": "2024-01-01 10:00:00",
"updateBy": 1,
"updateTime": "2024-01-01 10:00:00"
}
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | ---------- | -------------------- |
| 404001 | 数据不存在 | 检查 ID 是否正确 |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
---
### 3. 新增[实体]
#### 接口信息
**接口地址**: `POST /api/[module]`
**接口描述**: 创建新的[实体]记录
**权限要求**: `[module]:add`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| -------- | ------- | ---- | ---------------------------- | ---------- |
| [field1] | String | Y | [字段 1 说明] | "示例值" |
| [field2] | Integer | Y | [字段 2 说明] | 1 |
| status | Integer | N | 状态:1 启用,0 禁用,默认 1 | 1 |
| remark | String | N | 备注信息 | "备注内容" |
#### 请求体
```json
{
"[field1]": "示例值",
"[field2]": 1,
"status": 1,
"remark": "备注信息"
}
```
#### 请求示例
```bash
curl -X POST "http://localhost:8080/api/[module]" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"[field1]": "示例值",
"[field2]": 1,
"status": 1,
"remark": "备注信息"
}'
```
#### 响应示例
```json
{
"code": 200,
"msg": "新增成功",
"data": {
"id": 3
}
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | ---------- | -------------------- |
| 400001 | 参数错误 | 检查必填参数是否缺失 |
| 400002 | 数据已存在 | 检查唯一字段是否重复 |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
#### 参数验证规则
- `[field1]`: 长度 2-50 字符,不能为空
- `[field2]`: 必须为正整数
- `status`: 只能为 0 或 1
- `remark`: 最大长度 500 字符
---
### 4. 修改[实体]
#### 接口信息
**接口地址**: `PUT /api/[module]`
**接口描述**: 更新[实体]信息
**权限要求**: `[module]:edit`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| -------- | ------- | ---- | -------------------- | ---------- |
| id | Long | Y | [实体]ID | 1 |
| [field1] | String | Y | [字段 1 说明] | "示例值" |
| [field2] | Integer | Y | [字段 2 说明] | 1 |
| status | Integer | N | 状态:1 启用,0 禁用 | 1 |
| remark | String | N | 备注信息 | "备注内容" |
#### 请求体
```json
{
"id": 1,
"[field1]": "修改后的值",
"[field2]": 2,
"status": 1,
"remark": "修改后的备注"
}
```
#### 请求示例
```bash
curl -X PUT "http://localhost:8080/api/[module]" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"id": 1,
"[field1]": "修改后的值",
"[field2]": 2,
"status": 1,
"remark": "修改后的备注"
}'
```
#### 响应示例
```json
{
"code": 200,
"msg": "修改成功",
"data": null
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | ---------- | -------------------- |
| 404001 | 数据不存在 | 检查 ID 是否正确 |
| 400001 | 参数错误 | 检查参数格式是否正确 |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
---
### 5. 删除[实体]
#### 接口信息
**接口地址**: `DELETE /api/[module]/{ids}`
**接口描述**: 批量删除[实体],支持逻辑删除
**权限要求**: `[module]:remove`
#### 路径参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| ------ | ------ | ---- | ----------------------------- | ------- |
| ids | String | Y | [实体]ID 列表,多个用逗号分隔 | "1,2,3" |
#### 请求示例
```bash
curl -X DELETE "http://localhost:8080/api/[module]/1,2,3" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "删除成功",
"data": {
"successCount": 2,
"failCount": 1,
"failIds": [3]
}
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | ---------- | -------------------- |
| 400001 | 参数错误 | 检查 ID 格式是否正确 |
| 400003 | 数据被引用 | 请先删除关联数据 |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
---
## 🎯 业务逻辑接口
### 1. [业务接口 1 名称]
#### 接口信息
**接口地址**: `[HTTP方法] /api/[module]/[action]`
**接口描述**: [详细的业务功能描述]
**权限要求**: `[权限代码]`
#### 业务流程
1. [业务步骤 1]
2. [业务步骤 2]
3. [业务步骤 3]
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| -------- | ------ | ----- | ---------- | -------- |
| [param1] | [类型] | [Y/N] | [参数说明] | [示例值] |
| [param2] | [类型] | [Y/N] | [参数说明] | [示例值] |
#### 请求示例
```bash
curl -X [方法] "http://localhost:8080/api/[module]/[action]" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"[param1]": "[值1]",
"[param2]": "[值2]"
}'
```
#### 响应示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"[result1]": "[结果值1]",
"[result2]": "[结果值2]"
}
}
```
#### 业务规则
- [业务规则 1]
- [业务规则 2]
- [业务规则 3]
#### 注意事项
- [注意事项 1]
- [注意事项 2]
---
## 📋 数据字典
### [实体名称] 状态枚举
| 值 | 名称 | 说明 |
| --- | ---- | -------- |
| 0 | 禁用 | 不可使用 |
| 1 | 启用 | 正常使用 |
### [其他枚举名称]
| 值 | 名称 | 说明 |
| ------ | -------- | -------- |
| [值 1] | [名称 1] | [说明 1] |
| [值 2] | [名称 2] | [说明 2] |
---
## 🔧 SDK 使用示例
### Java SDK
```java
// 查询列表
[Module]QueryBo queryBo = new [Module]QueryBo();
queryBo.setStatus(1);
PageQuery pageQuery = new PageQuery(1, 10);
Result<PageResult<[Module]Vo>> result = [module]Api.list(queryBo, pageQuery);
// 新增记录
[Module]Bo [module]Bo = new [Module]Bo();
[module]Bo.set[Field1]("示例值");
[module]Bo.set[Field2](1);
Result<Long> addResult = [module]Api.add([module]Bo);
// 修改记录
[module]Bo.setId(1L);
[module]Bo.set[Field1]("修改后的值");
Result<Void> updateResult = [module]Api.update([module]Bo);
```
### JavaScript SDK
```javascript
// 查询列表
const queryParams = {
pageNum: 1,
pageSize: 10,
status: 1
};
const listResult = await [module]Api.list(queryParams);
// 新增记录
const [module]Data = {
[field1]: "示例值",
[field2]: 1,
status: 1
};
const addResult = await [module]Api.add([module]Data);
// 修改记录
[module]Data.id = 1;
[module]Data.[field1] = "修改后的值";
const updateResult = await [module]Api.update([module]Data);
```
---
## 🧪 测试用例
### 接口测试
```javascript
// Jest 测试示例
describe('[Module] API Tests', () => {
test('查询列表接口', async () => {
const response = await request(app)
.get('/api/[module]/list')
.set('Authorization', `Bearer ${token}`)
.expect(200);
expect(response.body.code).toBe(200);
expect(response.body.rows).toBeDefined();
expect(response.body.total).toBeGreaterThanOrEqual(0);
});
test('新增接口', async () => {
const [module]Data = {
[field1]: "测试值",
[field2]: 1
};
const response = await request(app)
.post('/api/[module]')
.set('Authorization', `Bearer ${token}`)
.send([module]Data)
.expect(200);
expect(response.body.code).toBe(200);
expect(response.body.data.id).toBeDefined();
});
});
```
---
## 🔄 版本历史
### v1.0.0 - 2024-01-01
- ✅ 初始版本发布
- ✅ 完成基础 CRUD 接口
- ✅ 完成核心业务接口
### v1.0.1 - 2024-01-15
- 🔧 优化查询接口性能
- 🐛 修复删除接口的权限检查问题
- 📚 补充接口文档和示例
### v1.1.0 - 2024-02-01
- ✨ 新增[新功能 1]接口
- ✨ 新增[新功能 2]接口
- 🔧 优化错误处理机制
---
## 📖 相关文档
- **数据库设计**:[数据库设计文档](../设计文档/database/)
- **业务需求**:[业务需求文档](../需求文档/)
- **技术架构**:[技术架构文档](./技术架构/)
- **开发规范**:[开发规范文档](./开发规范/)
---
## 📞 联系方式
**开发团队**:[团队名称]
**负责人**:[负责人姓名]
**邮箱**:[联系邮箱]
**文档维护**:实时更新,如有问题请及时反馈
---
**📌 重要提醒**:
1. 所有接口都需要先登录获取 token
2. 请求头必须包含 `Authorization: Bearer {token}`
3. 参数验证失败会返回详细的错误信息
4. 生产环境请使用 HTTPS 协议
+649
View File
@@ -0,0 +1,649 @@
# 开发文档中心
## 📋 开发文档概述
开发文档中心提供项目开发所需的所有技术文档和规范,为 **Cursor AI 辅助开发** 提供完整的技术上下文和开发指南。
## 🎯 文档目标
### 为 Cursor AI 提供的价值
- **🔧 技术规范**:统一的编码规范和开发标准
- **📚 API 文档**:完整的接口定义和使用说明
- **⚙️ 架构指南**:系统架构和技术选型说明
- **🛠️ 工具配置**:开发工具和环境配置指南
### 文档维护原则
- **实时同步**:API 变更时立即更新文档
- **详细准确**:提供完整的技术细节和示例
- **版本管理**:记录文档版本和变更历史
- **易于理解**:清晰的结构和标准化描述
## 📁 文档结构
```
开发文档/
├── README.md # 本文件 - 开发文档总览
├── API.md # API接口完整文档
├── 开发规范/
│ ├── 后端开发规范.md # Java/Spring Boot开发规范
│ ├── 前端开发规范.md # Vue3/TypeScript开发规范
│ ├── 数据库规范.md # 数据库设计和操作规范
│ ├── 代码审查规范.md # 代码审查流程和标准
│ └── Git使用规范.md # Git分支和提交规范
├── 技术架构/
│ ├── 系统架构设计.md # 整体系统架构
│ ├── 技术选型说明.md # 技术栈选择理由
│ ├── 安全架构设计.md # 安全体系设计
│ └── 性能优化指南.md # 性能优化策略
├── 环境配置/
│ ├── 开发环境搭建.md # 本地开发环境配置
│ ├── 测试环境配置.md # 测试环境搭建
│ ├── 生产环境部署.md # 生产环境部署指南
│ └── 工具配置指南.md # IDE和工具配置
├── 最佳实践/
│ ├── 代码结构设计.md # 代码组织和结构设计
│ ├── 异常处理规范.md # 异常处理最佳实践
│ ├── 日志记录规范.md # 日志记录标准
│ └── 测试策略指南.md # 测试策略和方法
└── 第三方集成/
├── 中间件集成.md # Redis、MQ等中间件集成
├── 第三方服务.md # 第三方API和服务集成
└── 工具库使用.md # 常用工具库使用指南
```
## 🔌 API 文档管理
### API 文档结构
#### 1. 完整性要求
- **接口地址**:完整的请求路径和 HTTP 方法
- **参数说明**:详细的请求参数和数据类型
- **响应格式**:标准的响应体结构和示例
- **错误码**:完整的错误码定义和处理
#### 2. 实时性要求
- **同步更新**:代码变更时立即更新 API 文档
- **版本管理**:记录 API 版本变更历史
- **兼容性说明**:重大变更的向后兼容性说明
#### 3. 标准格式
````markdown
#### 接口名称
**接口地址**: `HTTP方法 /api/路径`
**接口描述**: 接口功能的详细描述
**权限要求**: 权限代码或"需要登录"
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|--------|------|------|------|--------|
| param1 | String | Y | 参数说明 | "example" |
| param2 | Integer | N | 参数说明 | 100 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": 1,
"name": "示例"
}
}
```
````
**错误码**:
| 错误码 | 说明 | 解决方案 |
|--------|------|----------|
| 400001 | 参数错误 | 检查请求参数 |
| 401001 | 未登录 | 请先登录 |
````
### API 文档自动生成
#### Swagger/OpenAPI 集成
```java
@RestController
@RequestMapping("/api/user")
@Api(tags = "用户管理")
public class UserController {
@ApiOperation(value = "获取用户列表", notes = "分页查询用户列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页码", defaultValue = "1"),
@ApiImplicitParam(name = "pageSize", value = "每页大小", defaultValue = "10")
})
@GetMapping("/list")
public Result<PageInfo<UserVo>> list(UserQueryBo queryBo, PageQuery pageQuery) {
// 实现逻辑
}
}
````
#### 文档生成脚本
```bash
#!/bin/bash
# API文档生成脚本
generate_api_docs() {
echo "生成API文档..."
mvn clean compile
mvn swagger2markup:convertSwagger2markup
echo "API文档生成完成:docs/开发文档/API.md"
}
```
## 💻 开发规范体系
### 后端开发规范
#### 1. Java 编码规范
- **命名规范**:遵循 Java 命名约定
- **代码结构**:标准的 MVC 分层架构
- **注释规范**:完整的 JavaDoc 注释
- **异常处理**:统一的异常处理机制
#### 2. Spring Boot 规范
```java
// 标准Controller结构
@RestController
@RequestMapping("/api/module")
@Slf4j
public class ModuleController extends BaseController {
@Autowired
private IModuleService moduleService;
@SaCheckPermission("module:list")
@GetMapping("/list")
@Operation(summary = "查询列表")
public TableDataInfo<ModuleVo> list(ModuleBo bo, PageQuery pageQuery) {
return moduleService.queryPageList(bo, pageQuery);
}
}
```
#### 3. 数据库规范
```sql
-- 标准表结构
CREATE TABLE `module_table` (
`id` BIGINT(20) NOT NULL COMMENT '主键ID',
`name` VARCHAR(100) NOT NULL COMMENT '名称',
`status` TINYINT(1) DEFAULT 1 COMMENT '状态:1启用,0禁用',
`tenant_id` VARCHAR(20) NOT NULL COMMENT '租户ID',
`create_by` BIGINT(20) NOT NULL COMMENT '创建人',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`update_by` BIGINT(20) DEFAULT NULL COMMENT '更新人',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
`deleted` TINYINT(1) DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模块表';
```
### 前端开发规范
#### 1. Vue3 组件规范
```vue
<template>
<div class="module-container">
<el-form ref="formRef" :model="formData" :rules="rules">
<!-- 表单内容 -->
</el-form>
</div>
</template>
<script setup lang="ts" name="ModuleForm">
import { ref, reactive } from 'vue';
import type { FormRules } from 'element-plus';
// 响应式数据
const formRef = ref();
const formData = reactive({
name: '',
status: 1,
});
// 表单验证规则
const rules: FormRules = {
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
};
// 方法定义
const handleSubmit = () => {
// 提交逻辑
};
</script>
<style lang="scss" scoped>
.module-container {
padding: 20px;
}
</style>
```
#### 2. TypeScript 类型定义
```typescript
// api/types.ts
export interface ModuleVo {
id: number;
name: string;
status: number;
createTime: string;
}
export interface ModuleBo {
name?: string;
status?: number;
}
export interface ModuleForm {
id?: number;
name: string;
status: number;
}
```
#### 3. API 调用规范
```typescript
// api/module.ts
import request from '@/utils/request';
import type { AxiosPromise } from 'axios';
export const listModule = (query?: ModuleBo): AxiosPromise<ModuleVo[]> => {
return request({
url: '/api/module/list',
method: 'get',
params: query,
});
};
export const createModule = (data: ModuleForm): AxiosPromise<void> => {
return request({
url: '/api/module',
method: 'post',
data: data,
});
};
```
## 🏗️ 技术架构指南
### 系统整体架构
```mermaid
graph TB
subgraph "前端层"
A1[Web管理端<br/>Vue3 + Element Plus]
A2[移动端<br/>UniApp + uView UI]
end
subgraph "网关层"
B1[API Gateway<br/>Spring Cloud Gateway]
B2[负载均衡<br/>Nginx]
end
subgraph "应用层"
C1[用户服务<br/>Spring Boot]
C2[业务服务<br/>Spring Boot]
C3[文件服务<br/>Spring Boot]
end
subgraph "数据层"
D1[MySQL<br/>主数据库]
D2[Redis<br/>缓存/会话]
D3[MinIO<br/>文件存储]
end
subgraph "基础设施"
E1[Docker<br/>容器化]
E2[Jenkins<br/>CI/CD]
E3[ELK<br/>日志监控]
end
A1 --> B2
A2 --> B2
B2 --> B1
B1 --> C1
B1 --> C2
B1 --> C3
C1 --> D1
C2 --> D1
C3 --> D1
C1 --> D2
C2 --> D2
C3 --> D3
```
### 技术选型说明
#### 后端技术栈
- **Spring Boot 3.4.6**:主框架,提供依赖注入和自动配置
- **Spring Cloud 2023.0.x**:微服务架构支持
- **MyBatis-Plus 3.5.12**:ORM 框架,简化数据库操作
- **Sa-Token 1.42.0**:权限认证框架
- **Redis 7.0**:缓存和会话存储
- **MySQL 8.0**:主数据库
#### 前端技术栈
- **Vue 3.5.13**:渐进式 JavaScript 框架
- **TypeScript 5.8.3**:静态类型检查
- **Element Plus 2.9.8**:UI 组件库
- **Vite 7.0.9**:构建工具
- **Pinia**:状态管理
## 🛠️ 开发工具配置
### IDE 配置
#### IntelliJ IDEA 配置
```xml
<!-- .idea/codeStyles/Project.xml -->
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="LINE_SEPARATOR" value="&#10;" />
<option name="RIGHT_MARGIN" value="120" />
<JavaCodeStyleSettings>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="false" />
</value>
</option>
</JavaCodeStyleSettings>
</code_scheme>
</component>
```
#### VSCode 配置
```json
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"typescript.preferences.importModuleSpecifier": "relative",
"emmet.includeLanguages": {
"vue": "html"
}
}
```
### Git 配置
#### .gitignore 模板
```bash
# 编译输出
target/
dist/
build/
# 依赖目录
node_modules/
# IDE文件
.idea/
.vscode/
*.iml
# 日志文件
logs/
*.log
# 配置文件
application-local.yml
.env.local
```
#### Git Hooks
```bash
#!/bin/bash
# pre-commit hook
echo "运行代码检查..."
# Java代码检查
mvn checkstyle:check
if [ $? -ne 0 ]; then
echo "Java代码规范检查失败!"
exit 1
fi
# 前端代码检查
cd web && npm run lint
if [ $? -ne 0 ]; then
echo "前端代码规范检查失败!"
exit 1
fi
echo "代码检查通过!"
```
## 🔧 Cursor AI 开发指南
### AI 辅助开发流程
#### 1. 需求理解阶段
```
请根据以下需求文档和技术规范,为我开发[功能名称]:
业务需求:docs/需求文档/[具体需求文档]
技术规范:docs/开发文档/[相关规范文档]
API设计:docs/开发文档/API.md
请确保代码符合项目规范,包括:
1. 遵循编码规范
2. 添加完整注释
3. 包含单元测试
4. 更新API文档
```
#### 2. 代码生成阶段
```
基于以下技术架构生成代码:
后端:Spring Boot + MyBatis-Plus + Sa-Token
前端:Vue3 + TypeScript + Element Plus
数据库:MySQL 8.0
请生成以下文件:
1. Controller层 - REST API接口
2. Service层 - 业务逻辑
3. Mapper层 - 数据访问
4. DTO/VO类 - 数据传输对象
5. 前端页面 - Vue3组件
6. API调用 - TypeScript接口
```
#### 3. 文档更新阶段
```
根据刚才生成的代码,请更新以下文档:
1. API文档:docs/开发文档/API.md
- 新增的接口定义
- 请求参数说明
- 响应示例
2. 数据库文档:docs/设计文档/database/
- 新增的表结构
- 字段说明
3. 变更记录:docs/变更管理/code-adjust-record.md
- 本次变更的详细记录
请保持文档格式一致。
```
### 提示词模板库
#### 后端开发模板
```
# 生成Spring Boot Controller
请为[实体名称]生成标准的Spring Boot Controller,要求:
1. 包含CRUD操作接口
2. 使用Sa-Token权限控制
3. 参数验证和异常处理
4. 完整的Swagger注解
5. 统一响应格式
实体字段:[字段列表]
权限前缀:[权限代码]
```
#### 前端开发模板
```
# 生成Vue3组件
请为[功能名称]生成Vue3组件,要求:
1. 使用TypeScript
2. Element Plus组件
3. 响应式设计
4. 表单验证
5. API调用集成
页面类型:[列表页/表单页/详情页]
功能要求:[具体功能说明]
```
#### 数据库设计模板
```
# 生成数据库表
请为[业务实体]设计MySQL表结构,要求:
1. 符合项目命名规范
2. 包含标准基础字段
3. 合理的索引设计
4. 外键关系定义
5. 注释完整
业务字段:[字段需求]
关联表:[关联关系]
```
## 📋 质量控制标准
### 代码质量检查
#### 自动化检查
- **代码规范**:Checkstyle + ESLint
- **代码覆盖率**:JaCoCo > 80%
- **安全扫描**:SonarQube
- **依赖检查**:OWASP Dependency Check
#### 人工审查
- **架构合理性**:是否符合系统架构
- **业务逻辑正确性**:是否满足业务需求
- **代码可读性**:注释完整,命名规范
- **性能考虑**:是否有性能优化
### 文档质量标准
#### 完整性检查
- [ ] API 文档覆盖所有接口
- [ ] 参数说明详细准确
- [ ] 响应示例真实有效
- [ ] 错误码定义完整
#### 准确性检查
- [ ] 文档与代码实现一致
- [ ] 示例可以正常运行
- [ ] 版本信息正确
- [ ] 链接地址有效
### 版本管理
#### 文档版本规则
- **主版本**:重大架构变更
- **次版本**:新增功能模块
- **修订版本**:Bug 修复和文档更新
#### 变更记录
```markdown
## 版本 1.2.3 - 2024-01-15
### 新增
- 新增用户管理 API 文档
- 添加前端开发规范
### 修改
- 更新数据库设计规范
- 优化 API 响应格式
### 修复
- 修正示例代码错误
- 更新过期链接
```
## 🚀 持续改进计划
### 短期目标(1 个月内)
- [ ] 完善 API 文档自动生成
- [ ] 建立代码质量检查流程
- [ ] 优化开发环境配置
- [ ] 提升团队规范执行
### 中期目标(3 个月内)
- [ ] 建立文档质量评估体系
- [ ] 实现开发流程自动化
- [ ] 完善性能监控机制
- [ ] 建立知识库体系
### 长期目标(6 个月内)
- [ ] 实现智能化代码审查
- [ ] 建立自动化测试体系
- [ ] 完善 DevOps 流程
- [ ] 建立技术标准库
---
## 📖 相关文档
- **API 接口文档**:[API.md](./API.md)
- **项目总览**:[项目总览](../项目总览/README.md)
- **业务模块**:[业务模块](../业务模块/README.md)
- **变更管理**:[变更管理](../变更管理/README.md)
- **测试文档**:[测试文档](../测试文档/README.md)
---
**🎯 目标**:通过完善的开发文档体系,为团队提供统一的技术标准,为 Cursor AI 提供准确的开发上下文,提升开发效率和代码质量。
File renamed without changes.
@@ -0,0 +1,237 @@
/*
工作流模块数据库结构
业务域:工作流引擎相关表
包含表:flow_category, flow_definition, flow_his_task, flow_instance,
flow_node, flow_skip, flow_task, flow_user
创建时间:2025-01-08
维护人员:项目开发团队
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for flow_category
-- ----------------------------
DROP TABLE IF EXISTS `flow_category`;
CREATE TABLE `flow_category` (
`category_id` bigint(20) NOT NULL COMMENT '流程分类ID',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`parent_id` bigint(20) DEFAULT '0' COMMENT '父流程分类id',
`ancestors` varchar(500) DEFAULT '' COMMENT '祖级列表',
`category_name` varchar(30) NOT NULL COMMENT '流程分类名称',
`order_num` int(4) DEFAULT '0' COMMENT '显示顺序',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`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 '更新时间',
PRIMARY KEY (`category_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程分类';
-- ----------------------------
-- Table structure for flow_definition
-- ----------------------------
DROP TABLE IF EXISTS `flow_definition`;
CREATE TABLE `flow_definition` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`flow_code` varchar(40) NOT NULL COMMENT '流程编码',
`flow_name` varchar(100) NOT NULL COMMENT '流程名称',
`category` varchar(100) DEFAULT NULL COMMENT '流程类别',
`version` varchar(20) NOT NULL COMMENT '流程版本',
`is_publish` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否发布(0未发布 1已发布 9失效)',
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
`activity_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '流程激活状态(0挂起 1激活)',
`listener_type` varchar(100) DEFAULT NULL COMMENT '监听器类型',
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
`ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_flow_code_version` (`flow_code`, `version`, `tenant_id`, `del_flag`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_del_flag` (`del_flag`),
KEY `idx_flow_code` (`flow_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程定义表';
-- ----------------------------
-- Table structure for flow_his_task
-- ----------------------------
DROP TABLE IF EXISTS `flow_his_task`;
CREATE TABLE `flow_his_task` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`definition_id` bigint(20) NOT NULL COMMENT '对应flow_definition表的id',
`instance_id` bigint(20) NOT NULL COMMENT '对应flow_instance表的id',
`task_id` bigint(20) NOT NULL COMMENT '对应flow_task表的id',
`node_code` varchar(100) DEFAULT NULL COMMENT '开始节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '开始节点名称',
`node_type` tinyint(1) DEFAULT NULL COMMENT '开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
`target_node_code` varchar(200) DEFAULT NULL COMMENT '目标节点编码',
`target_node_name` varchar(200) DEFAULT NULL COMMENT '结束节点名称',
`approver` varchar(40) DEFAULT NULL COMMENT '审批者',
`cooperate_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)',
`collaborator` varchar(40) DEFAULT NULL COMMENT '协作人',
`skip_type` varchar(10) NOT NULL COMMENT '流转类型(PASS通过 REJECT退回 NONE无动作)',
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
`message` varchar(500) DEFAULT NULL COMMENT '审批意见',
`variable` text COMMENT '任务变量',
`ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
`create_time` datetime DEFAULT NULL COMMENT '任务开始时间',
`update_time` datetime DEFAULT NULL COMMENT '审批完成时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_definition_id` (`definition_id`),
KEY `idx_instance_id` (`instance_id`),
KEY `idx_task_id` (`task_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='历史任务记录表';
-- ----------------------------
-- Table structure for flow_instance
-- ----------------------------
DROP TABLE IF EXISTS `flow_instance`;
CREATE TABLE `flow_instance` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`definition_id` bigint(20) NOT NULL COMMENT '对应flow_definition表的id',
`business_id` varchar(40) NOT NULL COMMENT '业务id',
`node_type` tinyint(1) NOT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
`node_code` varchar(40) NOT NULL COMMENT '流程节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '流程节点名称',
`variable` text COMMENT '任务变量',
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
`activity_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '流程激活状态(0挂起 1激活)',
`def_json` text COMMENT '流程定义json',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`ext` varchar(500) DEFAULT NULL COMMENT '扩展字段,预留给业务系统使用',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_definition_id` (`definition_id`),
KEY `idx_business_id` (`business_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程实例表';
-- ----------------------------
-- Table structure for flow_node
-- ----------------------------
DROP TABLE IF EXISTS `flow_node`;
CREATE TABLE `flow_node` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`node_type` tinyint(1) NOT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
`definition_id` bigint(20) NOT NULL COMMENT '流程定义id',
`node_code` varchar(100) NOT NULL COMMENT '流程节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '流程节点名称',
`permission_flag` varchar(200) DEFAULT NULL COMMENT '权限标识(权限类型:权限标识,可以多个,用逗号隔开)',
`node_ratio` decimal(6,3) DEFAULT NULL COMMENT '流程签署比例值',
`coordinate` varchar(100) DEFAULT NULL COMMENT '坐标',
`any_node_skip` varchar(100) DEFAULT NULL COMMENT '任意结点跳转',
`listener_type` varchar(100) DEFAULT NULL COMMENT '监听器类型',
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
`handler_type` varchar(100) DEFAULT NULL COMMENT '处理器类型',
`handler_path` varchar(400) DEFAULT NULL COMMENT '处理器路径',
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
`version` varchar(20) NOT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`ext` text COMMENT '扩展属性',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_definition_id` (`definition_id`),
KEY `idx_node_code` (`node_code`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程节点表';
-- ----------------------------
-- Table structure for flow_skip
-- ----------------------------
DROP TABLE IF EXISTS `flow_skip`;
CREATE TABLE `flow_skip` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`definition_id` bigint(20) NOT NULL COMMENT '流程定义id',
`now_node_code` varchar(100) NOT NULL COMMENT '当前流程节点的编码',
`now_node_type` tinyint(1) DEFAULT NULL COMMENT '当前节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
`next_node_code` varchar(100) NOT NULL COMMENT '下一个流程节点的编码',
`next_node_type` tinyint(1) DEFAULT NULL COMMENT '下一个节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
`skip_name` varchar(100) DEFAULT NULL COMMENT '跳转名称',
`skip_type` varchar(40) DEFAULT NULL COMMENT '跳转类型(PASS审批通过 REJECT退回)',
`skip_condition` varchar(200) DEFAULT NULL COMMENT '跳转条件',
`coordinate` varchar(100) DEFAULT NULL COMMENT '坐标',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_definition_id` (`definition_id`),
KEY `idx_now_node_code` (`now_node_code`),
KEY `idx_next_node_code` (`next_node_code`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节点跳转关联表';
-- ----------------------------
-- Table structure for flow_task
-- ----------------------------
DROP TABLE IF EXISTS `flow_task`;
CREATE TABLE `flow_task` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`definition_id` bigint(20) NOT NULL COMMENT '对应flow_definition表的id',
`instance_id` bigint(20) NOT NULL COMMENT '对应flow_instance表的id',
`node_code` varchar(100) NOT NULL COMMENT '节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '节点名称',
`node_type` tinyint(1) NOT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
`flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_definition_id` (`definition_id`),
KEY `idx_instance_id` (`instance_id`),
KEY `idx_node_code` (`node_code`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='待办任务表';
-- ----------------------------
-- Table structure for flow_user
-- ----------------------------
DROP TABLE IF EXISTS `flow_user`;
CREATE TABLE `flow_user` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`type` char(1) NOT NULL COMMENT '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限)',
`processed_by` varchar(80) DEFAULT NULL COMMENT '权限人',
`associated` bigint(20) NOT NULL COMMENT '任务表id',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(80) DEFAULT NULL COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_processed_type` (`processed_by`,`type`),
KEY `idx_associated` (`associated`) USING BTREE,
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程用户表';
SET FOREIGN_KEY_CHECKS = 1;
@@ -0,0 +1,81 @@
/*
代码生成模块数据库结构
业务域:代码生成器相关表
包含表:gen_table, gen_table_column
创建时间:2025-01-08
维护人员:项目开发团队
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for gen_table
-- ----------------------------
DROP TABLE IF EXISTS `gen_table`;
CREATE TABLE `gen_table` (
`table_id` bigint(20) NOT NULL COMMENT '编号',
`data_name` varchar(200) DEFAULT '' COMMENT '数据源名称',
`table_name` varchar(200) DEFAULT '' COMMENT '表名称',
`table_comment` varchar(500) DEFAULT '' COMMENT '表描述',
`sub_table_name` varchar(64) DEFAULT NULL COMMENT '关联子表的表名',
`sub_table_fk_name` varchar(64) DEFAULT NULL COMMENT '子表关联字段名',
`class_name` varchar(100) DEFAULT '' COMMENT '实体类名称',
`tpl_category` varchar(200) DEFAULT 'crud' COMMENT '使用的模板(crud单表操作 tree树表操作)',
`package_name` varchar(100) DEFAULT NULL COMMENT '生成包路径',
`module_name` varchar(30) DEFAULT NULL COMMENT '生成模块名',
`business_name` varchar(30) DEFAULT NULL COMMENT '生成业务名',
`function_name` varchar(50) DEFAULT NULL COMMENT '生成功能名',
`function_author` varchar(50) DEFAULT NULL COMMENT '生成功能作者',
`gen_type` char(1) DEFAULT '0' COMMENT '生成代码方式(0zip压缩包 1自定义路径)',
`gen_path` varchar(200) DEFAULT '/' COMMENT '生成路径(不填默认项目路径)',
`options` varchar(1000) DEFAULT 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 '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`table_id`),
KEY `idx_table_name` (`table_name`),
KEY `idx_data_name` (`data_name`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成业务表';
-- ----------------------------
-- Table structure for gen_table_column
-- ----------------------------
DROP TABLE IF EXISTS `gen_table_column`;
CREATE TABLE `gen_table_column` (
`column_id` bigint(20) NOT NULL COMMENT '编号',
`table_id` bigint(20) DEFAULT NULL COMMENT '归属表编号',
`column_name` varchar(200) DEFAULT NULL COMMENT '列名称',
`column_comment` varchar(500) DEFAULT NULL COMMENT '列描述',
`column_type` varchar(100) DEFAULT NULL COMMENT '列类型',
`java_type` varchar(500) DEFAULT NULL COMMENT 'JAVA类型',
`java_field` varchar(200) DEFAULT NULL COMMENT 'JAVA字段名',
`is_pk` char(1) DEFAULT NULL COMMENT '是否主键(1是)',
`is_increment` char(1) DEFAULT NULL COMMENT '是否自增(1是)',
`is_required` char(1) DEFAULT NULL COMMENT '是否必填(1是)',
`is_insert` char(1) DEFAULT NULL COMMENT '是否为插入字段(1是)',
`is_edit` char(1) DEFAULT NULL COMMENT '是否编辑字段(1是)',
`is_list` char(1) DEFAULT NULL COMMENT '是否列表字段(1是)',
`is_query` char(1) DEFAULT NULL COMMENT '是否查询字段(1是)',
`query_type` varchar(200) DEFAULT 'EQ' COMMENT '查询方式(等于、不等于、大于、小于、范围)',
`html_type` varchar(200) DEFAULT NULL COMMENT '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
`dict_type` varchar(200) DEFAULT '' COMMENT '字典类型',
`sort` int(11) DEFAULT 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 '更新时间',
PRIMARY KEY (`column_id`),
KEY `idx_table_id` (`table_id`),
KEY `idx_column_name` (`column_name`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成业务表字段';
SET FOREIGN_KEY_CHECKS = 1;
@@ -1,14 +1,122 @@
-- ==========================================================================
-- 高校后勤满意度调查系统数据库表结构
-- 创建时间:2025年1月
-- 说明:基于需求文档设计的完整数据模型
-- ==========================================================================
/*
后勤管理模块数据库结构
业务域:后勤管理相关表
包含表:hq_hall_info, hq_hall_reservation, hq_sat_answer, hq_sat_category,
hq_sat_detail, hq_sat_option, hq_sat_question, hq_sat_record,
hq_sat_survey, hq_sat_survey_question
模块说明:
- 报告厅预约管理:hq_hall_info, hq_hall_reservation
- 满意度调查系统:hq_sat_* 相关表
创建时间:2025-01-08
维护人员:项目开发团队
*/
-- 1. 题目分类表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for hq_hall_info
-- ----------------------------
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 DEFAULT '000000' 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代表删除)',
`hall_name` varchar(100) NOT NULL COMMENT '报告厅名称',
`hall_image` text 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`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报告厅信息表';
-- ----------------------------
-- Table structure for hq_hall_reservation
-- ----------------------------
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 DEFAULT '000000' 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代表删除)',
`hall_id` bigint(20) NOT NULL COMMENT '报告厅ID,关联hq_hall_info.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,关联sys_user.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,关联sys_user.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`),
KEY `idx_applicant_id` (`applicant_id`),
KEY `idx_time_range` (`start_time`,`end_time`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报告厅预约表';
-- ----------------------------
-- Table structure for hq_sat_answer
-- ----------------------------
DROP TABLE IF EXISTS `hq_sat_answer`;
CREATE TABLE `hq_sat_answer` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' 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,关联hq_sat_record.id',
`question_id` bigint(20) NOT NULL COMMENT '题目ID,关联hq_sat_question.id',
`question_type` char(1) NOT NULL COMMENT '题目类型(1单选题 2多选题 3问答题)',
`option_id` bigint(20) DEFAULT NULL COMMENT '选项ID,关联hq_sat_option.id(单选题、多选题用,问答题为NULL)',
`option_value` varchar(50) DEFAULT NULL COMMENT '选项值(A、B、C、D等)',
`option_text` varchar(500) DEFAULT NULL COMMENT '选项文本内容',
`answer_value` text COMMENT '答案值(单选题存选项值,多选题存逗号分隔选项值,问答题存文本内容)',
`answer_score` int(11) DEFAULT '0' COMMENT '该答案得分',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_record_id` (`record_id`),
KEY `idx_question_id` (`question_id`),
KEY `idx_question_type` (`question_type`),
KEY `idx_option_id` (`option_id`),
KEY `idx_record_question` (`record_id`,`question_id`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题答案表';
-- ----------------------------
-- Table structure for hq_sat_category
-- ----------------------------
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 '租户编号',
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
@@ -22,16 +130,48 @@ CREATE TABLE `hq_sat_category` (
`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`),
UNIQUE KEY `uk_category_code` (`category_code`,`tenant_id`,`deleted`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_status` (`status`)
KEY `idx_status` (`status`),
KEY `idx_sort_order` (`sort_order`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题目分类表';
-- 2. 评分选项表
-- ----------------------------
-- Table structure for hq_sat_detail
-- ----------------------------
DROP TABLE IF EXISTS `hq_sat_detail`;
CREATE TABLE `hq_sat_detail` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' 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,关联hq_sat_record.id',
`question_id` bigint(20) NOT NULL COMMENT '题目ID,关联hq_sat_question.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`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题详情表';
-- ----------------------------
-- Table structure for hq_sat_option
-- ----------------------------
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 '租户编号',
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
@@ -46,14 +186,18 @@ CREATE TABLE `hq_sat_option` (
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_status` (`status`),
KEY `idx_sort_order` (`sort_order`)
KEY `idx_sort_order` (`sort_order`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评分选项表';
-- 3. 题库表
-- ----------------------------
-- Table structure for hq_sat_question
-- ----------------------------
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 '租户编号',
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
@@ -62,7 +206,7 @@ CREATE TABLE `hq_sat_question` (
`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',
`category_id` bigint(20) NOT NULL COMMENT '所属分类ID,关联hq_sat_category.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 '排序',
@@ -71,14 +215,51 @@ CREATE TABLE `hq_sat_question` (
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_category_id` (`category_id`),
KEY `idx_status` (`status`)
KEY `idx_status` (`status`),
KEY `idx_question_type` (`question_type`),
KEY `idx_sort_order` (`sort_order`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题库表';
-- 4. 问卷表
-- ----------------------------
-- Table structure for hq_sat_record
-- ----------------------------
DROP TABLE IF EXISTS `hq_sat_record`;
CREATE TABLE `hq_sat_record` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' 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,关联hq_sat_survey.id',
`user_id` bigint(20) DEFAULT NULL COMMENT '答题用户ID,关联sys_user.id(匿名时为NULL)',
`user_type` char(1) NOT NULL COMMENT '用户类型(1学生 2教职工 3超级管理员)',
`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`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题记录表';
-- ----------------------------
-- Table structure for hq_sat_survey
-- ----------------------------
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 '租户编号',
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
@@ -98,214 +279,42 @@ CREATE TABLE `hq_sat_survey` (
`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`),
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`)
KEY `idx_time_range` (`start_time`,`end_time`),
KEY `idx_status` (`status`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='问卷表';
-- 5. 问卷题目关联表
-- ----------------------------
-- Table structure for hq_sat_survey_question
-- ----------------------------
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 '租户编号',
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' 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',
`survey_id` bigint(20) NOT NULL COMMENT '问卷ID,关联hq_sat_survey.id',
`question_id` bigint(20) NOT NULL COMMENT '题目ID,关联hq_sat_question.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`),
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`)
KEY `idx_sort_order` (`sort_order`),
KEY `idx_deleted` (`deleted`),
KEY `idx_create_time` (`create_time`)
) 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教职工 3超级管理员)',
`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='答题详情表';
-- ==========================================
-- 答题答案表(新增)
-- ==========================================
DROP TABLE IF EXISTS `hq_sat_answer`;
CREATE TABLE `hq_sat_answer` (
`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',
`question_type` char(1) NOT NULL COMMENT '题目类型(1单选题 2多选题 3问答题)',
`option_id` bigint(20) DEFAULT NULL COMMENT '选项ID(单选题、多选题用,问答题为NULL)',
`option_value` varchar(50) DEFAULT NULL COMMENT '选项值(A、B、C、D等)',
`option_text` varchar(500) DEFAULT NULL COMMENT '选项文本内容',
`answer_value` text COMMENT '答案值(单选题存选项值,多选题存逗号分隔选项值,问答题存文本内容)',
`answer_score` int(11) DEFAULT '0' COMMENT '该答案得分',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_record_id` (`record_id`),
KEY `idx_question_id` (`question_id`),
KEY `idx_question_type` (`question_type`),
KEY `idx_option_id` (`option_id`),
KEY `idx_record_question` (`record_id`, `question_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题答案表';
-- ==========================================
-- 数据表索引和约束说明
-- ==========================================
/*
hq_sat_answer 表设计说明:
1. 表用途:
- 记录用户答题的具体答案内容
- 支持单选题、多选题、问答题三种题型
- 与 hq_sat_detail 表配合使用,detail表记录总体信息,answer表记录具体答案
2. 字段说明:
- question_type:题目类型,便于按类型统计分析
- option_id:选项ID,单选题和多选题需要关联到具体选项
- option_value:选项值(如A、B、C、D),便于统计
- option_text:选项文本,冗余存储便于查询
- answer_value:核心字段,存储实际答案:
* 单选题:存储选中的选项值,如 "A"
* 多选题:存储多个选项值,如 "A,C,D"
* 问答题:存储用户输入的文本内容
- answer_score:该答案的得分
3. 数据存储示例:
- 单选题:question_type='1', option_id=123, option_value='A', option_text='非常满意', answer_value='A', answer_score=5
- 多选题:每个选中选项一条记录,或合并为一条记录存储 "A,C,D"
- 问答题:question_type='3', option_id=NULL, answer_value='用户输入的文本内容', answer_score=0
4. 与其他表的关系:
- record_id 关联 hq_sat_record.id
- question_id 关联 hq_sat_question.id
- option_id 关联 hq_sat_option.id(问答题为NULL)
5. 查询优化:
- 建立复合索引 (record_id, question_id) 提高关联查询效率
- 按题目类型、选项等建立索引便于统计分析
*/
-- ==========================================================================
-- 初始化数据
-- ==========================================================================
-- 初始化题目分类数据
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;
SET FOREIGN_KEY_CHECKS = 1;
@@ -0,0 +1,286 @@
/*
任务调度模块数据库结构
业务域:SnailJob任务调度相关表
包含表:sj_distributed_lock, sj_group_config, sj_namespace_config,
sj_notify_config, sj_retry_dead_letter, sj_retry_summary,
sj_retry_task, sj_retry_task_log, sj_server_node,
sj_system_user_permission, sj_workflow_node, sj_workflow_task_batch
创建时间:2025-01-08
维护人员:项目开发团队
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sj_distributed_lock
-- ----------------------------
DROP TABLE IF EXISTS `sj_distributed_lock`;
CREATE TABLE `sj_distributed_lock` (
`name` varchar(64) NOT NULL COMMENT '锁名称',
`lock_until` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '锁定时长',
`locked_at` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '锁定时间',
`locked_by` varchar(255) NOT NULL COMMENT '锁定者',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='锁定表';
-- ----------------------------
-- Table structure for sj_group_config
-- ----------------------------
DROP TABLE IF EXISTS `sj_group_config`;
CREATE TABLE `sj_group_config` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`group_name` varchar(64) NOT NULL COMMENT '组名称',
`description` varchar(256) DEFAULT NULL COMMENT '描述',
`group_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '组状态 0、关闭 1、开启',
`version` int(11) NOT NULL DEFAULT '1' COMMENT '版本号',
`group_partition` int(11) DEFAULT '0' COMMENT '分区',
`init_scene` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否初始化场景 0、关闭 1、开启',
`bucket_index` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'bucket索引',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_namespace_group_partition` (`namespace_id`,`group_name`,`group_partition`),
KEY `idx_namespace_id` (`namespace_id`),
KEY `idx_group_name` (`group_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组配置';
-- ----------------------------
-- Table structure for sj_namespace_config
-- ----------------------------
DROP TABLE IF EXISTS `sj_namespace_config`;
CREATE TABLE `sj_namespace_config` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(64) NOT NULL COMMENT '命名空间名称',
`unique_id` varchar(64) NOT NULL COMMENT '唯一id',
`description` varchar(256) DEFAULT NULL COMMENT '描述',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_unique_id` (`unique_id`),
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='命名空间';
-- ----------------------------
-- Table structure for sj_notify_config
-- ----------------------------
DROP TABLE IF EXISTS `sj_notify_config`;
CREATE TABLE `sj_notify_config` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL DEFAULT '' COMMENT '命名空间id',
`group_name` varchar(64) NOT NULL DEFAULT '' COMMENT '组名称',
`business_id` varchar(64) NOT NULL COMMENT '业务id',
`notify_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '通知状态 0、关闭 1、开启',
`notify_type` tinyint(4) NOT NULL COMMENT '通知类型',
`notify_attribute` text NOT NULL COMMENT '配置属性',
`notify_threshold` int(11) DEFAULT '100' COMMENT '通知阈值',
`notify_scene` tinyint(4) NOT NULL COMMENT '通知场景',
`rate_limiter_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '限流状态 0、关闭 1、开启',
`rate_limiter_threshold` int(11) NOT NULL DEFAULT '20' COMMENT '限流阈值',
`description` varchar(256) DEFAULT '' COMMENT '描述',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_namespace_group_business_type_scene` (`namespace_id`,`group_name`,`business_id`,`notify_type`,`notify_scene`),
KEY `idx_namespace_id` (`namespace_id`),
KEY `idx_group_name` (`group_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知配置';
-- ----------------------------
-- Table structure for sj_retry_dead_letter
-- ----------------------------
DROP TABLE IF EXISTS `sj_retry_dead_letter`;
CREATE TABLE `sj_retry_dead_letter` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一',
`group_name` varchar(64) NOT NULL COMMENT '组名称',
`scene_name` varchar(64) NOT NULL COMMENT '场景名称',
`idempotent_id` varchar(64) NOT NULL COMMENT '幂等id',
`biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号',
`executor_name` varchar(512) NOT NULL COMMENT '执行器名称',
`args_str` text COMMENT '执行方法参数',
`ext_attrs` varchar(256) DEFAULT '' COMMENT '扩展字段',
`task_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '任务类型 1、重试数据 2、回调数据',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_namespace_group_scene_idempotent` (`namespace_id`,`group_name`,`scene_name`,`idempotent_id`),
KEY `idx_namespace_id` (`namespace_id`),
KEY `idx_group_name` (`group_name`),
KEY `idx_scene_name` (`scene_name`),
KEY `idx_create_dt` (`create_dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='死信队列';
-- ----------------------------
-- Table structure for sj_retry_summary
-- ----------------------------
DROP TABLE IF EXISTS `sj_retry_summary`;
CREATE TABLE `sj_retry_summary` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`group_name` varchar(64) NOT NULL COMMENT '组名称',
`scene_name` varchar(64) NOT NULL COMMENT '场景名称',
`trigger_date` date NOT NULL COMMENT '统计日期',
`running_num` int(11) NOT NULL DEFAULT '0' COMMENT '重试中',
`finish_num` int(11) NOT NULL DEFAULT '0' COMMENT '重试完成数量',
`max_count_num` int(11) NOT NULL DEFAULT '0' COMMENT '重试到达最大次数',
`suspend_num` int(11) NOT NULL DEFAULT '0' COMMENT '暂停数量',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_namespace_group_scene_date` (`namespace_id`,`group_name`,`scene_name`,`trigger_date`),
KEY `idx_namespace_id` (`namespace_id`),
KEY `idx_group_name` (`group_name`),
KEY `idx_scene_name` (`scene_name`),
KEY `idx_trigger_date` (`trigger_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务重试汇总统计表';
-- ----------------------------
-- Table structure for sj_retry_task
-- ----------------------------
DROP TABLE IF EXISTS `sj_retry_task`;
CREATE TABLE `sj_retry_task` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一',
`group_name` varchar(64) NOT NULL COMMENT '组名称',
`scene_name` varchar(64) NOT NULL COMMENT '场景名称',
`idempotent_id` varchar(64) NOT NULL COMMENT '幂等id',
`biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号',
`executor_name` varchar(512) NOT NULL COMMENT '执行器名称',
`args_str` text COMMENT '执行方法参数',
`ext_attrs` varchar(256) DEFAULT '' COMMENT '扩展字段',
`next_trigger_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下次触发时间',
`retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '重试次数',
`retry_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '重试状态 0、重试中 1、成功 2、最大次数',
`task_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '任务类型 1、重试数据 2、回调数据',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_namespace_group_scene_idempotent` (`namespace_id`,`group_name`,`scene_name`,`idempotent_id`),
KEY `idx_namespace_id` (`namespace_id`),
KEY `idx_group_name` (`group_name`),
KEY `idx_scene_name` (`scene_name`),
KEY `idx_next_trigger_at` (`next_trigger_at`),
KEY `idx_retry_status` (`retry_status`),
KEY `idx_create_dt` (`create_dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务信息';
-- ----------------------------
-- Table structure for sj_retry_task_log
-- ----------------------------
DROP TABLE IF EXISTS `sj_retry_task_log`;
CREATE TABLE `sj_retry_task_log` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一',
`group_name` varchar(64) NOT NULL COMMENT '组名称',
`scene_name` varchar(64) NOT NULL COMMENT '场景名称',
`idempotent_id` varchar(64) NOT NULL COMMENT '幂等id',
`biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号',
`executor_name` varchar(512) NOT NULL COMMENT '执行器名称',
`args_str` text COMMENT '执行方法参数',
`ext_attrs` varchar(256) DEFAULT '' COMMENT '扩展字段',
`retry_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '重试状态 0、重试中 1、成功 2、最大次数',
`task_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '任务类型 1、重试数据 2、回调数据',
`real_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '真实触发时间',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `idx_namespace_id` (`namespace_id`),
KEY `idx_group_name` (`group_name`),
KEY `idx_scene_name` (`scene_name`),
KEY `idx_idempotent_id` (`idempotent_id`),
KEY `idx_create_dt` (`create_dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='重试日志';
-- ----------------------------
-- Table structure for sj_server_node
-- ----------------------------
DROP TABLE IF EXISTS `sj_server_node`;
CREATE TABLE `sj_server_node` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`group_name` varchar(64) NOT NULL COMMENT '组名称',
`host_id` varchar(64) NOT NULL COMMENT '主机id',
`host_ip` varchar(64) NOT NULL COMMENT '主机ip',
`host_port` int(11) NOT NULL COMMENT '主机端口',
`expire_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
`node_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '节点类型 1、客户端 2、服务端',
`ext_attrs` varchar(256) DEFAULT '' COMMENT '扩展字段',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_namespace_group_host` (`namespace_id`,`group_name`,`host_id`),
KEY `idx_namespace_id` (`namespace_id`),
KEY `idx_group_name` (`group_name`),
KEY `idx_expire_at` (`expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务器节点';
-- ----------------------------
-- Table structure for sj_system_user_permission
-- ----------------------------
DROP TABLE IF EXISTS `sj_system_user_permission`;
CREATE TABLE `sj_system_user_permission` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`group_name` varchar(64) NOT NULL COMMENT '组名称',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `idx_group_name` (`group_name`),
KEY `idx_namespace_id` (`namespace_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户权限表';
-- ----------------------------
-- Table structure for sj_workflow_node
-- ----------------------------
DROP TABLE IF EXISTS `sj_workflow_node`;
CREATE TABLE `sj_workflow_node` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`workflow_id` bigint(20) unsigned NOT NULL COMMENT '工作流id',
`node_name` varchar(64) NOT NULL COMMENT '节点名称',
`node_type` tinyint(4) NOT NULL COMMENT '节点类型 1、任务节点 2、条件节点 3、回调节点',
`job_id` bigint(20) unsigned DEFAULT NULL COMMENT '关联的任务id',
`expression_type` tinyint(4) DEFAULT NULL COMMENT '表达式类型 1、SpEL 2、Aviator 3、QL',
`expression` varchar(256) DEFAULT NULL COMMENT '条件节点的表达式',
`fail_strategy` tinyint(4) NOT NULL DEFAULT '1' COMMENT '失败策略 1、跳过 2、阻塞',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `idx_workflow_id` (`workflow_id`),
KEY `idx_namespace_id` (`namespace_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作流节点';
-- ----------------------------
-- Table structure for sj_workflow_task_batch
-- ----------------------------
DROP TABLE IF EXISTS `sj_workflow_task_batch`;
CREATE TABLE `sj_workflow_task_batch` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`namespace_id` varchar(64) NOT NULL COMMENT '命名空间id',
`workflow_id` bigint(20) unsigned NOT NULL COMMENT '工作流id',
`task_batch_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '任务批次状态 0、运行中 1、成功 2、失败 3、取消 4、暂停',
`operation_reason` tinyint(4) NOT NULL DEFAULT '0' COMMENT '操作原因 0、系统触发 1、人工操作',
`workflow_task_batch_id` bigint(20) unsigned NOT NULL COMMENT '工作流任务批次id',
`execution_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '执行时间',
`flow_info` text COMMENT '流程信息',
`ext_attrs` varchar(256) DEFAULT NULL COMMENT '扩展字段',
`create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1、删除',
PRIMARY KEY (`id`),
KEY `idx_workflow_id` (`workflow_id`),
KEY `idx_namespace_id` (`namespace_id`),
KEY `idx_execution_at` (`execution_at`),
KEY `idx_task_batch_status` (`task_batch_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作流任务批次';
SET FOREIGN_KEY_CHECKS = 1;
@@ -0,0 +1,539 @@
/*
系统管理模块数据库结构
业务域:系统管理相关表
包含表:sys_client, sys_config, sys_dept, sys_dict_data, sys_dict_type,
sys_logininfor, sys_menu, sys_notice, sys_oper_log, sys_oss,
sys_oss_config, sys_post, sys_role, sys_role_dept, sys_role_menu,
sys_social, sys_tenant, sys_tenant_package, sys_user, sys_user_post,
sys_user_role
创建时间:2025-01-08
维护人员:项目开发团队
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_client
-- ----------------------------
DROP TABLE IF EXISTS `sys_client`;
CREATE TABLE `sys_client` (
`id` bigint(20) NOT NULL COMMENT 'id',
`client_id` varchar(64) DEFAULT NULL COMMENT '客户端id',
`client_key` varchar(32) DEFAULT NULL COMMENT '客户端key',
`client_secret` varchar(255) DEFAULT NULL COMMENT '客户端秘钥',
`grant_type` varchar(255) DEFAULT NULL COMMENT '授权类型',
`device_type` varchar(32) DEFAULT NULL COMMENT '设备类型',
`active_timeout` int(11) DEFAULT '1800' COMMENT 'token活跃超时时间',
`timeout` int(11) DEFAULT '604800' COMMENT 'token固定超时',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`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 '更新时间',
PRIMARY KEY (`id`),
KEY `idx_client_id` (`client_id`),
KEY `idx_client_key` (`client_key`),
KEY `idx_status` (`status`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统授权表';
-- ----------------------------
-- Table structure for sys_config
-- ----------------------------
DROP TABLE IF EXISTS `sys_config`;
CREATE TABLE `sys_config` (
`config_id` bigint(20) NOT NULL COMMENT '参数主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`config_name` varchar(100) DEFAULT '' COMMENT '参数名称',
`config_key` varchar(100) DEFAULT '' COMMENT '参数键名',
`config_value` varchar(500) DEFAULT '' COMMENT '参数键值',
`config_type` char(1) DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
`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 '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`config_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_config_key` (`config_key`),
KEY `idx_config_type` (`config_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参数配置表';
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
`dept_id` bigint(20) NOT NULL COMMENT '部门id',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`parent_id` bigint(20) DEFAULT '0' COMMENT '父部门id',
`ancestors` varchar(500) DEFAULT '' COMMENT '祖级列表',
`dept_name` varchar(30) DEFAULT '' COMMENT '部门名称',
`dept_category` varchar(100) DEFAULT NULL COMMENT '部门类别编码',
`order_num` int(4) DEFAULT '0' COMMENT '显示顺序',
`leader` bigint(20) DEFAULT NULL COMMENT '负责人,关联sys_user.user_id',
`phone` varchar(11) DEFAULT NULL COMMENT '联系电话',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`status` char(1) DEFAULT '0' COMMENT '部门状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`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 '更新时间',
PRIMARY KEY (`dept_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_status` (`status`),
KEY `idx_del_flag` (`del_flag`),
KEY `idx_leader` (`leader`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
-- ----------------------------
-- Table structure for sys_dict_data
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_data`;
CREATE TABLE `sys_dict_data` (
`dict_code` bigint(20) NOT NULL COMMENT '字典编码',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`dict_sort` int(4) DEFAULT '0' COMMENT '字典排序',
`dict_label` varchar(100) DEFAULT '' COMMENT '字典标签',
`dict_value` varchar(100) DEFAULT '' COMMENT '字典键值',
`dict_type` varchar(100) DEFAULT '' COMMENT '字典类型',
`css_class` varchar(100) DEFAULT NULL COMMENT '样式属性(其他样式扩展)',
`list_class` varchar(100) DEFAULT NULL COMMENT '表格回显样式',
`is_default` char(1) DEFAULT 'N' COMMENT '是否默认(Y是 N否)',
`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 '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`dict_code`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_dict_type` (`dict_type`),
KEY `idx_dict_value` (`dict_value`),
KEY `idx_dict_sort` (`dict_sort`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典数据表';
-- ----------------------------
-- Table structure for sys_dict_type
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_type`;
CREATE TABLE `sys_dict_type` (
`dict_id` bigint(20) NOT NULL COMMENT '字典主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`dict_name` varchar(100) DEFAULT '' COMMENT '字典名称',
`dict_type` varchar(100) DEFAULT '' 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 '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`dict_id`),
UNIQUE KEY `tenant_id` (`tenant_id`,`dict_type`),
KEY `idx_dict_type` (`dict_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';
-- ----------------------------
-- Table structure for sys_logininfor
-- ----------------------------
DROP TABLE IF EXISTS `sys_logininfor`;
CREATE TABLE `sys_logininfor` (
`info_id` bigint(20) NOT NULL COMMENT '访问ID',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`user_name` varchar(50) DEFAULT '' COMMENT '用户账号',
`client_key` varchar(32) DEFAULT '' COMMENT '客户端',
`device_type` varchar(32) DEFAULT '' COMMENT '设备类型',
`ipaddr` varchar(128) DEFAULT '' COMMENT '登录IP地址',
`login_location` varchar(255) DEFAULT '' COMMENT '登录地点',
`browser` varchar(50) DEFAULT '' COMMENT '浏览器类型',
`os` varchar(50) DEFAULT '' COMMENT '操作系统',
`status` char(1) DEFAULT '0' COMMENT '登录状态(0成功 1失败)',
`msg` varchar(255) DEFAULT '' COMMENT '提示消息',
`login_time` datetime DEFAULT NULL COMMENT '访问时间',
PRIMARY KEY (`info_id`),
KEY `idx_sys_logininfor_s` (`status`),
KEY `idx_sys_logininfor_lt` (`login_time`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_user_name` (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录';
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
`menu_name` varchar(50) NOT NULL COMMENT '菜单名称',
`parent_id` bigint(20) DEFAULT '0' COMMENT '父菜单ID',
`order_num` int(4) DEFAULT '0' COMMENT '显示顺序',
`path` varchar(200) DEFAULT '' COMMENT '路由地址',
`component` varchar(255) DEFAULT NULL COMMENT '组件路径',
`query_param` varchar(255) DEFAULT NULL COMMENT '路由参数',
`is_frame` int(1) DEFAULT '1' COMMENT '是否为外链(0是 1否)',
`is_cache` int(1) DEFAULT '0' COMMENT '是否缓存(0缓存 1不缓存)',
`menu_type` char(1) DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
`visible` char(1) DEFAULT '0' COMMENT '显示状态(0显示 1隐藏)',
`status` char(1) DEFAULT '0' COMMENT '菜单状态(0正常 1停用)',
`perms` varchar(100) DEFAULT NULL COMMENT '权限标识',
`icon` varchar(100) DEFAULT '#' 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 '更新时间',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
PRIMARY KEY (`menu_id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_menu_type` (`menu_type`),
KEY `idx_status` (`status`),
KEY `idx_visible` (`visible`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单权限表';
-- ----------------------------
-- Table structure for sys_notice
-- ----------------------------
DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice` (
`notice_id` bigint(20) NOT NULL COMMENT '公告ID',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`notice_title` varchar(50) NOT NULL COMMENT '公告标题',
`notice_type` char(1) NOT NULL COMMENT '公告类型(1通知 2公告)',
`notice_content` longblob COMMENT '公告内容',
`status` char(1) DEFAULT '0' COMMENT '公告状态(0正常 1关闭)',
`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 '更新时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`notice_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_notice_type` (`notice_type`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知公告表';
-- ----------------------------
-- Table structure for sys_oper_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_oper_log`;
CREATE TABLE `sys_oper_log` (
`oper_id` bigint(20) NOT NULL COMMENT '日志主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`title` varchar(50) DEFAULT '' COMMENT '模块标题',
`business_type` int(2) DEFAULT '0' COMMENT '业务类型(0其它 1新增 2修改 3删除)',
`method` varchar(200) DEFAULT '' COMMENT '方法名称',
`request_method` varchar(10) DEFAULT '' COMMENT '请求方式',
`operator_type` int(1) DEFAULT '0' COMMENT '操作类别(0其它 1后台用户 2手机端用户)',
`oper_name` varchar(50) DEFAULT '' COMMENT '操作人员',
`dept_name` varchar(50) DEFAULT '' COMMENT '部门名称',
`oper_url` varchar(255) DEFAULT '' COMMENT '请求URL',
`oper_ip` varchar(128) DEFAULT '' COMMENT '主机地址',
`oper_location` varchar(255) DEFAULT '' COMMENT '操作地点',
`oper_param` varchar(2000) DEFAULT '' COMMENT '请求参数',
`json_result` varchar(2000) DEFAULT '' COMMENT '返回参数',
`status` int(1) DEFAULT '0' COMMENT '操作状态(0正常 1异常)',
`error_msg` varchar(2000) DEFAULT '' COMMENT '错误消息',
`oper_time` datetime DEFAULT NULL COMMENT '操作时间',
`cost_time` bigint(20) DEFAULT '0' COMMENT '消耗时间',
PRIMARY KEY (`oper_id`),
KEY `idx_sys_oper_log_bt` (`business_type`),
KEY `idx_sys_oper_log_s` (`status`),
KEY `idx_sys_oper_log_ot` (`oper_time`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志记录';
-- ----------------------------
-- Table structure for sys_oss
-- ----------------------------
DROP TABLE IF EXISTS `sys_oss`;
CREATE TABLE `sys_oss` (
`oss_id` bigint(20) NOT NULL COMMENT '对象存储主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`file_name` varchar(255) NOT NULL DEFAULT '' COMMENT '文件名',
`original_name` varchar(255) NOT NULL DEFAULT '' COMMENT '原名',
`file_suffix` varchar(10) NOT NULL DEFAULT '' COMMENT '文件后缀名',
`url` varchar(500) NOT NULL COMMENT 'URL地址',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` bigint(20) DEFAULT NULL COMMENT '上传人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新人',
`service` varchar(20) NOT NULL DEFAULT 'minio' COMMENT '服务商',
PRIMARY KEY (`oss_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_file_name` (`file_name`),
KEY `idx_create_time` (`create_time`),
KEY `idx_service` (`service`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OSS对象存储表';
-- ----------------------------
-- Table structure for sys_oss_config
-- ----------------------------
DROP TABLE IF EXISTS `sys_oss_config`;
CREATE TABLE `sys_oss_config` (
`oss_config_id` bigint(20) NOT NULL COMMENT '主建',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`config_key` varchar(20) NOT NULL DEFAULT '' COMMENT '配置key',
`access_key` varchar(255) DEFAULT '' COMMENT 'accessKey',
`secret_key` varchar(255) DEFAULT '' COMMENT '秘钥',
`bucket_name` varchar(255) DEFAULT '' COMMENT '桶名称',
`prefix` varchar(255) DEFAULT '' COMMENT '前缀',
`endpoint` varchar(255) DEFAULT '' COMMENT '访问站点',
`domain` varchar(255) DEFAULT '' COMMENT '自定义域名',
`is_https` char(1) DEFAULT 'N' COMMENT '是否https(Y=是,N=否)',
`region` varchar(255) DEFAULT '' COMMENT '域',
`access_policy` char(1) NOT NULL DEFAULT '1' COMMENT '桶权限类型(0=private 1=public 2=custom)',
`status` char(1) DEFAULT '1' COMMENT '是否默认(0=是,1=否)',
`ext1` varchar(255) DEFAULT '' 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 '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`oss_config_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_config_key` (`config_key`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='对象存储配置表';
-- ----------------------------
-- Table structure for sys_post
-- ----------------------------
DROP TABLE IF EXISTS `sys_post`;
CREATE TABLE `sys_post` (
`post_id` bigint(20) NOT NULL COMMENT '岗位ID',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`post_code` varchar(64) NOT NULL COMMENT '岗位编码',
`post_name` varchar(50) NOT NULL COMMENT '岗位名称',
`post_sort` int(4) NOT NULL COMMENT '显示顺序',
`status` char(1) NOT NULL COMMENT '状态(0正常 1停用)',
`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 '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`post_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_post_code` (`post_code`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='岗位信息表';
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`role_name` varchar(30) NOT NULL COMMENT '角色名称',
`role_key` varchar(100) NOT NULL COMMENT '角色权限字符串',
`role_sort` int(4) NOT NULL COMMENT '显示顺序',
`data_scope` char(1) DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
`menu_check_strictly` tinyint(1) DEFAULT '1' COMMENT '菜单树选择项是否关联显示',
`dept_check_strictly` tinyint(1) DEFAULT '1' COMMENT '部门树选择项是否关联显示',
`status` char(1) NOT NULL COMMENT '角色状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`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 '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`role_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_role_key` (`role_key`),
KEY `idx_status` (`status`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色信息表';
-- ----------------------------
-- Table structure for sys_role_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_dept`;
CREATE TABLE `sys_role_dept` (
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
`dept_id` bigint(20) NOT NULL COMMENT '部门ID',
PRIMARY KEY (`role_id`,`dept_id`),
KEY `idx_role_id` (`role_id`),
KEY `idx_dept_id` (`dept_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色和部门关联表';
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu` (
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
PRIMARY KEY (`role_id`,`menu_id`),
KEY `idx_role_id` (`role_id`),
KEY `idx_menu_id` (`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色和菜单关联表';
-- ----------------------------
-- Table structure for sys_social
-- ----------------------------
DROP TABLE IF EXISTS `sys_social`;
CREATE TABLE `sys_social` (
`id` bigint(20) NOT NULL COMMENT '主键',
`user_id` bigint(20) NOT NULL COMMENT '用户ID,关联sys_user.user_id',
`tenant_id` varchar(20) DEFAULT NULL COMMENT '租户id',
`auth_id` varchar(255) NOT NULL COMMENT '平台+平台唯一id',
`source` varchar(255) NOT NULL COMMENT '用户来源',
`open_id` varchar(255) DEFAULT NULL COMMENT '平台编号唯一id',
`user_name` varchar(30) NOT NULL COMMENT '登录账号',
`nick_name` varchar(30) DEFAULT '' COMMENT '用户昵称',
`email` varchar(255) DEFAULT '' COMMENT '用户邮箱',
`avatar` varchar(500) DEFAULT '' COMMENT '头像地址',
`access_token` varchar(255) DEFAULT NULL COMMENT '用户的授权令牌',
`expire_in` bigint(20) DEFAULT NULL COMMENT '用户的授权令牌的有效期,部分平台可能没有',
`refresh_token` varchar(255) DEFAULT NULL COMMENT '刷新令牌,部分平台可能没有',
`access_code` varchar(255) DEFAULT NULL COMMENT '平台的授权信息,部分平台可能没有',
`union_id` varchar(255) DEFAULT NULL COMMENT '用户的 unionId',
`scope` varchar(255) DEFAULT NULL COMMENT '授予的权限,部分平台可能没有',
`token_type` varchar(255) DEFAULT NULL COMMENT '个别平台的授权信息,部分平台可能没有',
`id_token` varchar(255) DEFAULT NULL COMMENT 'id token,部分平台可能没有',
`mac_algorithm` varchar(255) DEFAULT NULL COMMENT '小米平台用户的附带属性,部分平台可能没有',
`mac_key` varchar(255) DEFAULT NULL COMMENT '小米平台用户的附带属性,部分平台可能没有',
`code` varchar(255) DEFAULT NULL COMMENT '用户的授权code,部分平台可能没有',
`oauth_token` varchar(255) DEFAULT NULL COMMENT 'Twitter平台用户的附带属性,部分平台可能没有',
`oauth_token_secret` varchar(255) DEFAULT NULL COMMENT 'Twitter平台用户的附带属性,部分平台可能没有',
`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 '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_auth_id` (`auth_id`),
KEY `idx_source` (`source`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='社会化关系表';
-- ----------------------------
-- Table structure for sys_tenant
-- ----------------------------
DROP TABLE IF EXISTS `sys_tenant`;
CREATE TABLE `sys_tenant` (
`id` bigint(20) NOT NULL COMMENT 'id',
`tenant_id` varchar(20) NOT NULL COMMENT '租户编号',
`contact_user_name` varchar(20) DEFAULT '' COMMENT '联系人',
`contact_phone` varchar(20) DEFAULT '' COMMENT '联系电话',
`company_name` varchar(50) DEFAULT '' COMMENT '企业名称',
`license_number` varchar(30) DEFAULT '' COMMENT '统一社会信用代码',
`address` varchar(200) DEFAULT '' COMMENT '地址',
`intro` varchar(500) DEFAULT '' COMMENT '企业简介',
`domain` varchar(200) DEFAULT '' COMMENT '域名',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
`package_id` bigint(20) DEFAULT NULL COMMENT '租户套餐编号,关联sys_tenant_package.package_id',
`expire_time` datetime DEFAULT NULL COMMENT '过期时间',
`account_count` int(11) DEFAULT '-1' COMMENT '用户数量(-1不限制)',
`status` char(1) DEFAULT '0' COMMENT '租户状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`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 '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_id` (`tenant_id`),
KEY `idx_package_id` (`package_id`),
KEY `idx_status` (`status`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户表';
-- ----------------------------
-- Table structure for sys_tenant_package
-- ----------------------------
DROP TABLE IF EXISTS `sys_tenant_package`;
CREATE TABLE `sys_tenant_package` (
`package_id` bigint(20) NOT NULL COMMENT '租户套餐id',
`package_name` varchar(20) DEFAULT '' COMMENT '套餐名称',
`menu_ids` varchar(3000) DEFAULT '' COMMENT '关联菜单id',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
`menu_check_strictly` tinyint(1) DEFAULT '1' COMMENT '菜单树选择项是否关联显示',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`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 '更新时间',
PRIMARY KEY (`package_id`),
KEY `idx_status` (`status`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户套餐表';
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID,关联sys_dept.dept_id',
`user_name` varchar(30) NOT NULL COMMENT '用户账号',
`nick_name` varchar(30) NOT NULL COMMENT '用户昵称',
`user_type` varchar(10) DEFAULT 'sys_user' COMMENT '用户类型(sys_user系统用户)',
`email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
`phonenumber` varchar(11) DEFAULT '' COMMENT '手机号码',
`sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
`avatar` varchar(100) DEFAULT '' COMMENT '头像地址',
`password` varchar(100) DEFAULT '' COMMENT '密码',
`status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
`login_ip` varchar(128) DEFAULT '' COMMENT '最后登录IP',
`login_date` datetime DEFAULT 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 '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`user_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_dept_id` (`dept_id`),
KEY `idx_user_name` (`user_name`),
KEY `idx_status` (`status`),
KEY `idx_del_flag` (`del_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
-- ----------------------------
-- Table structure for sys_user_post
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_post`;
CREATE TABLE `sys_user_post` (
`user_id` bigint(20) NOT NULL COMMENT '用户ID,关联sys_user.user_id',
`post_id` bigint(20) NOT NULL COMMENT '岗位ID,关联sys_post.post_id',
PRIMARY KEY (`user_id`,`post_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_post_id` (`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户与岗位关联表';
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`user_id` bigint(20) NOT NULL COMMENT '用户ID,关联sys_user.user_id',
`role_id` bigint(20) NOT NULL COMMENT '角色ID,关联sys_role.role_id',
PRIMARY KEY (`user_id`,`role_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户和角色关联表';
SET FOREIGN_KEY_CHECKS = 1;
@@ -0,0 +1,62 @@
/*
测试模块数据库结构
业务域:测试和演示相关表
包含表:test_tree
说明:此模块用于系统测试和功能演示,包含树形结构测试数据
创建时间:2025-01-08
维护人员:项目开发团队
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for test_tree
-- ----------------------------
DROP TABLE IF EXISTS `test_tree`;
CREATE TABLE `test_tree` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
`parent_id` bigint(20) DEFAULT '0' COMMENT '父节点ID',
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID,关联sys_dept.dept_id',
`user_id` bigint(20) DEFAULT NULL COMMENT '用户ID,关联sys_user.user_id',
`tree_name` varchar(30) DEFAULT '' COMMENT '节点名称',
`version` int(11) DEFAULT '0' COMMENT '版本号',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_dept_id` (`dept_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_del_flag` (`del_flag`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试树表';
-- ----------------------------
-- Records of test_tree
-- ----------------------------
BEGIN;
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (1, '000000', 0, 102, 4, '测试数据权限', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (2, '000000', 1, 102, 3, '子节点1', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (3, '000000', 2, 102, 3, '子节点2', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (4, '000000', 0, 108, 4, '测试树1', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (5, '000000', 4, 108, 3, '子节点11', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (6, '000000', 4, 108, 3, '子节点22', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (7, '000000', 4, 108, 3, '子节点33', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (8, '000000', 5, 108, 3, '子节点44', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (9, '000000', 6, 108, 3, '子节点55', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (10, '000000', 7, 108, 3, '子节点66', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (11, '000000', 7, 108, 3, '子节点77', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (12, '000000', 10, 108, 3, '子节点88', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (13, '000000', 10, 108, 3, '子节点99', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, '0');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
+422
View File
@@ -0,0 +1,422 @@
# 数据库设计目录
## 目录说明
此目录用于存放项目的数据库设计相关文档和脚本文件。
## 📁 目录结构
```
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` 中现有表的设计规范
# 数据库设计说明
## 📋 文档结构
本目录包含项目数据库设计的核心文档:
- **📊 mysql-database-standard.md** - MySQL 数据库建设规范(**强制性**)
- **🗄️ hzdyjs_xg.sql** - 完整数据库模型文件
- **🔧 database_msg.md** - 数据库环境配置信息
---
## 🔴 强制性要求
### ⚠️ 超级重要:数据库建设强制规范
**所有数据库相关的开发工作都必须严格遵循 `mysql-database-standard.md` 中的规范!**
#### 核心强制规范:
1. **✅ 所有业务表必须包含标准基础字段**
2. **✅ 统一使用雪花 ID 作为主键**
3. **✅ 强制使用逻辑删除,禁止物理删除**
4. **✅ 所有表必须支持多租户**
5. **✅ 完整的中文注释是必须的**
#### 违规后果:
- **不符合规范的表结构将被要求重新设计**
- **所有数据库变更都需要经过 Code Review**
- **必须与现有数据库模型保持高度一致性**
---
## 🤖 Cursor AI 开发要求
### 使用 Cursor AI 进行数据库开发时的强制要求:
#### 1. 必须参考规范文档
在进行任何数据库相关开发前,必须:
- 仔细阅读 `mysql-database-standard.md` 规范
- 参考 `hzdyjs_xg.sql` 中的现有表结构
- 遵循完全一致的设计模式
#### 2. 强制使用标准模板
- 使用规范文档中提供的建表 SQL 模板
- 所有表必须包含完整的基础字段
- 索引设计必须符合规范要求
#### 3. AI 开发提示词模板
```
请根据 docs/设计文档/database/mysql-database-standard.md 中的规范,
参考 docs/设计文档/database/hzdyjs_xg.sql 中现有表结构的设计模式,
为 [模块名称] 创建 [表名称] 表。
要求:
1. 严格遵循标准基础字段规范
2. 使用bigint(20)作为主键类型
3. 包含完整的租户支持和逻辑删除
4. 添加完整的中文注释
5. 创建必要的基础索引
6. 使用标准的字段命名规范
请确保生成的SQL与现有表结构风格完全一致。
```
---
## 📊 数据库概览
### 基本信息
- **数据库名称**: hzdyjs_xg
- **MySQL 版本**: 5.7.36+
- **字符集**: utf8mb4
- **存储引擎**: InnoDB
- **环境配置**: 详见 `database_msg.md`
### 表数量统计
根据 `hzdyjs_xg.sql` 统计,数据库包含约 **48 个核心表**:
#### 核心业务模块
- **工作流模块** (flow\_\*): 8 个表
- **系统管理模块** (sys\_\*): 18 个表
- **后勤管理模块** (hq\_\*): 11 个表
- **代码生成模块** (gen\_\*): 2 个表
- **任务调度模块** (sj\_\*): 19 个表
- **测试模块** (test\_\*): 3 个表
### 表结构设计模式
#### 标准基础字段(每个业务表必须包含)
```sql
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' 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代表删除)'
```
#### 关键设计特征
- **主键策略**: 雪花 ID (bigint(20))
- **多租户支持**: tenant_id 字段
- **逻辑删除**: deleted 字段
- **审计追踪**: 完整的创建和更新信息
- **索引设计**: 租户、状态、时间等关键字段
#### 命名规范
- **表名**: 模块前缀 + 下划线 + 业务含义 (如: hq_hall_info)
- **字段名**: 下划线命名法 (如: user_name, create_time)
- **索引名**: idx*字段名 或 uk*字段名
---
## 🔧 开发使用指南
### 建表操作流程
#### 1. 设计前准备
- [ ] 阅读 `mysql-database-standard.md` 规范
- [ ] 分析 `hzdyjs_xg.sql` 中类似表的设计
- [ ] 确定表名和字段设计
#### 2. 使用标准模板
- [ ] 复制规范文档中的标准模板
- [ ] 添加业务字段,保持基础字段不变
- [ ] 设计合理的索引结构
#### 3. 代码审查
- [ ] 对照检查清单验证表结构
- [ ] 确保与现有表风格一致
- [ ] 提交前进行团队 Review
### 表结构修改流程
#### 1. 变更评估
- [ ] 评估变更影响范围
- [ ] 确保向前兼容性
- [ ] 准备数据迁移方案
#### 2. 执行变更
- [ ] 使用标准的 ALTER 语句
- [ ] 新增字段必须有默认值
- [ ] 更新相关文档
#### 3. 验证和部署
- [ ] 在测试环境验证
- [ ] 准备回滚预案
- [ ] 记录变更日志
### 数据查询规范
#### 必须包含的条件
```sql
-- 多租户隔离(必须)
WHERE tenant_id = '当前租户ID'
-- 逻辑删除过滤(建议)
AND deleted = 0
-- 分页查询(大数据量)
ORDER BY create_time DESC
LIMIT 20 OFFSET 0
```
#### 索引优化查询
```sql
-- 利用组合索引
WHERE tenant_id = '000000'
AND status = '0'
AND create_time >= '2025-01-01'
```
---
## ⚠️ 注意事项
### 🔴 强制性要求
1. **新建表必须使用标准模板**
2. **所有字段必须有中文注释**
3. **必须创建租户和删除标志索引**
4. **外键字段必须创建索引**
5. **禁止使用物理删除**
### 🚫 禁止事项
1. **禁止修改基础字段的类型和含义**
2. **禁止删除租户支持相关字段**
3. **禁止使用 timestamp 类型**
4. **禁止使用 enum 和 set 类型**
5. **禁止创建没有注释的字段**
### ✅ 最佳实践
1. **字段长度要合理设置**
2. **状态字段统一使用 char(1)**
3. **时间字段统一使用 datetime**
4. **金额字段使用 decimal 类型**
5. **大文本使用 text 类型**
---
## 🔍 快速检查
### 表结构自检清单
在创建或修改表时,请对照以下清单:
#### 基础字段检查
- [ ] id 字段: bigint(20) NOT NULL
- [ ] tenant_id 字段: varchar(20) NOT NULL DEFAULT '000000'
- [ ] create\_\*字段: 完整的创建审计字段
- [ ] update\_\*字段: 完整的更新审计字段
- [ ] deleted 字段: tinyint(1) DEFAULT 0
#### 业务字段检查
- [ ] 字段命名: 下划线命名法
- [ ] 数据类型: 符合规范要求
- [ ] 默认值: 合理设置
- [ ] 注释: 完整的中文说明
#### 索引检查
- [ ] 基础索引: tenant_id, deleted, create_time
- [ ] 业务索引: 状态、外键、查询字段
- [ ] 唯一约束: 包含租户隔离
#### 表定义检查
- [ ] 表注释: 清晰的中文说明
- [ ] 引擎: InnoDB
- [ ] 字符集: utf8mb4
- [ ] 命名: 符合模块前缀规范
---
## 📚 相关资源
### 📖 核心文档
- [MySQL 数据库建设规范](./mysql-database-standard.md) - **必读规范**
- [数据库配置信息](./database_msg.md) - 环境配置
- [完整数据库模型](./hzdyjs_xg.sql) - 参考示例
### 🔗 外部资源
- [MySQL 8.0 官方文档](https://dev.mysql.com/doc/refman/8.0/en/)
- [阿里巴巴 Java 开发手册-数据库规约](https://github.com/alibaba/p3c)
### 📝 变更记录
所有数据库变更必须记录在:`docs/变更管理/code-adjust-record.md`
---
## 🎯 目标和愿景
通过严格的数据库设计规范,我们致力于:
1. **🎯 保证数据一致性**: 统一的表结构设计
2. **⚡ 提升查询性能**: 合理的索引策略
3. **🔒 确保数据安全**: 多租户隔离和逻辑删除
4. **📈 支持业务发展**: 可扩展的架构设计
5. **🛠️ 降低维护成本**: 标准化的开发流程
---
**🚨 重要提醒**: 数据库是系统的核心,任何不规范的设计都可能对系统造成长期的负面影响。请务必严格遵循规范,确保系统的稳定性和可维护性!
---
**最后更新**: 2025-01-08
**文档维护**: 项目技术团队
@@ -0,0 +1,235 @@
# 数据库 SQL 文件目录说明
## 📁 文件结构概览
基于业务域的数据库文件拆分,将原始的 `hzdyjs_xg.sql` 按业务模块进行分类,便于管理和维护。
```
docs/设计文档/database/
├── hzdyjs_xg.sql # 完整数据库文件(保留)
├── 01-workflow-module.sql # 工作流模块
├── 02-code-generator-module.sql # 代码生成模块
├── 03-logistics-module.sql # 后勤管理模块
├── 04-job-scheduler-module.sql # 任务调度模块
├── 05-system-management-module.sql # 系统管理模块
├── 06-test-module.sql # 测试模块
├── README.md # 数据库设计说明
├── mysql-database-standard.md # MySQL数据库建设规范
├── database_msg.md # 数据库环境配置
└── SQL文件说明.md # 本文件
```
---
## 📊 业务域拆分详情
### 01. 工作流模块 (01-workflow-module.sql)
**业务域**: 工作流引擎相关功能
**包含表**: 8 张表
- `flow_category` - 流程分类表
- `flow_definition` - 流程定义表
- `flow_his_task` - 历史任务表
- `flow_instance` - 流程实例表
- `flow_node` - 流程节点表
- `flow_skip` - 流程跳转表
- `flow_task` - 流程任务表
- `flow_user` - 流程用户表
**主要功能**: 支持业务流程的定义、执行、跟踪和管理
### 02. 代码生成模块 (02-code-generator-module.sql)
**业务域**: 代码生成器相关功能
**包含表**: 2 张表
- `gen_table` - 代码生成业务表
- `gen_table_column` - 代码生成业务字段表
**主要功能**: 支持基于数据库表结构自动生成代码
### 03. 后勤管理模块 (03-logistics-module.sql)
**业务域**: 后勤服务管理相关功能
**包含表**: 10 张表
#### 报告厅预约管理子模块
- `hq_hall_info` - 报告厅信息表
- `hq_hall_reservation` - 报告厅预约表
#### 满意度调查子模块
- `hq_sat_answer` - 答题答案表
- `hq_sat_category` - 题目分类表
- `hq_sat_detail` - 答题详情表
- `hq_sat_option` - 评分选项表
- `hq_sat_question` - 题库表
- `hq_sat_record` - 答题记录表
- `hq_sat_survey` - 问卷表
- `hq_sat_survey_question` - 问卷题目关联表
**主要功能**: 校园后勤服务管理,包括场地预约和满意度调查
### 04. 任务调度模块 (04-job-scheduler-module.sql)
**业务域**: SnailJob 任务调度相关功能
**包含表**: 12 张表
- `sj_distributed_lock` - 分布式锁表
- `sj_group_config` - 组配置表
- `sj_namespace_config` - 命名空间配置表
- `sj_notify_config` - 通知配置表
- `sj_retry_dead_letter` - 死信队列表
- `sj_retry_summary` - 任务重试汇总统计表
- `sj_retry_task` - 任务信息表
- `sj_retry_task_log` - 重试日志表
- `sj_server_node` - 服务器节点表
- `sj_system_user_permission` - 系统用户权限表
- `sj_workflow_node` - 工作流节点表
- `sj_workflow_task_batch` - 工作流任务批次表
**主要功能**: 分布式任务调度、重试机制、工作流编排
### 05. 系统管理模块 (05-system-management-module.sql)
**业务域**: 系统核心管理功能
**包含表**: 21 张表
#### 用户与权限管理
- `sys_user` - 用户信息表
- `sys_role` - 角色信息表
- `sys_menu` - 菜单权限表
- `sys_dept` - 部门表
- `sys_post` - 岗位信息表
- `sys_user_role` - 用户角色关联表
- `sys_user_post` - 用户岗位关联表
- `sys_role_menu` - 角色菜单关联表
- `sys_role_dept` - 角色部门关联表
#### 系统配置与日志
- `sys_config` - 参数配置表
- `sys_dict_type` - 字典类型表
- `sys_dict_data` - 字典数据表
- `sys_notice` - 通知公告表
- `sys_oper_log` - 操作日志表
- `sys_logininfor` - 系统访问记录表
#### 文件与租户管理
- `sys_oss` - OSS 对象存储表
- `sys_oss_config` - 对象存储配置表
- `sys_client` - 系统授权表
- `sys_tenant` - 租户表
- `sys_tenant_package` - 租户套餐表
- `sys_social` - 社会化关系表
**主要功能**: 系统用户管理、权限控制、配置管理、日志记录等核心功能
### 06. 测试模块 (06-test-module.sql)
**业务域**: 测试和演示相关功能
**包含表**: 1 张表
- `test_tree` - 测试树表
**主要功能**: 系统功能测试和演示,包含树形结构数据
---
## 🔧 使用指南
### 完整数据库部署
```sql
-- 执行完整数据库文件
SOURCE docs/设计文档/database/hzdyjs_xg.sql;
```
### 按模块部署
```sql
-- 按需执行指定模块
SOURCE docs/设计文档/database/01-workflow-module.sql;
SOURCE docs/设计文档/database/02-code-generator-module.sql;
SOURCE docs/设计文档/database/03-logistics-module.sql;
SOURCE docs/设计文档/database/04-job-scheduler-module.sql;
SOURCE docs/设计文档/database/05-system-management-module.sql;
SOURCE docs/设计文档/database/06-test-module.sql;
```
### 开发环境部署建议
1. **必须模块**: 01-工作流模块, 05-系统管理模块
2. **按需模块**: 其他模块根据具体业务需求选择性部署
3. **测试模块**: 仅在开发和测试环境中部署
---
## 📈 统计信息
| 模块 | 表数量 | 主要功能 | 依赖关系 |
| ------------ | ------ | ------------ | ---------------- |
| 工作流模块 | 8 | 流程管理 | 依赖系统管理模块 |
| 代码生成模块 | 2 | 代码生成 | 无特殊依赖 |
| 后勤管理模块 | 10 | 后勤服务 | 依赖系统管理模块 |
| 任务调度模块 | 12 | 任务调度 | 独立模块 |
| 系统管理模块 | 21 | 核心系统 | 核心基础模块 |
| 测试模块 | 1 | 测试演示 | 依赖系统管理模块 |
| **总计** | **54** | **完整系统** | **完整依赖链** |
---
## ⚠️ 注意事项
### 1. 模块依赖关系
- **系统管理模块**是其他模块的基础依赖,必须优先部署
- **工作流模块**和**后勤管理模块**依赖系统管理模块的用户和部门数据
- **任务调度模块**相对独立,可单独部署
### 2. 数据一致性
- 所有模块都遵循统一的数据库设计规范
- 使用逻辑删除,不进行物理删除
- 统一的基础字段结构和索引设计
- **不使用数据库外键约束**,关联关系通过应用层维护
### 3. 版本管理
- 拆分后的 SQL 文件保持与 `hzdyjs_xg.sql` 的内容一致性
- 任何表结构变更都应同步更新对应的模块文件
- 建议使用版本控制跟踪 SQL 文件的变更历史
### 4. 性能考虑
- 每个模块都包含合理的索引设计
- 支持分模块的数据库备份和恢复
- 便于数据库性能调优和问题排查
---
## 🔄 维护说明
### 更新流程
1. 修改 `hzdyjs_xg.sql` 主文件
2. 同步更新对应的模块 SQL 文件
3. 更新本说明文档的变更记录
4. 在 `docs/变更管理/code-adjust-record.md` 中记录变更
### 文件命名规则
- 使用两位数字前缀进行排序
- 使用英文短横线分隔词语
- 以 `-module.sql` 结尾表示模块文件
### 拆分原则
- 按业务域进行逻辑分组
- 保持模块的相对独立性
- 考虑实际部署和维护需求
- 遵循数据库设计规范
@@ -1,7 +1,7 @@
/*
Navicat Premium Data Transfer
Navicat Premium Dump SQL
Source Server : 47.99.164.66 hn02le.34lkdLKD
Source Server : 47.99.164.66 hn02le.34lkdLKD
Source Server Type : MySQL
Source Server Version : 50736 (5.7.36)
Source Host : 47.99.164.66:3306
@@ -11,162 +11,12 @@
Target Server Version : 50736 (5.7.36)
File Encoding : 65001
Date: 26/06/2025 14:38:57
Date: 28/06/2025 08:21:01
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for bed_allocation
-- ----------------------------
DROP TABLE IF EXISTS `bed_allocation`;
CREATE TABLE `bed_allocation` (
`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 '更新时间',
`bed_id` bigint(20) NOT NULL COMMENT '床位ID',
`student_id` bigint(20) NOT NULL COMMENT '学生ID',
`allocation_type` tinyint(4) DEFAULT '1' COMMENT '分配类型:1新分配,2调换,3重新分配',
`allocation_date` date NOT NULL COMMENT '分配日期',
`start_date` date NOT NULL COMMENT '入住日期',
`end_date` date DEFAULT NULL COMMENT '退宿日期',
`rent_fee` decimal(8,2) DEFAULT NULL COMMENT '住宿费',
`deposit` decimal(8,2) DEFAULT NULL COMMENT '押金',
`allocator_id` bigint(20) DEFAULT NULL COMMENT '分配人ID',
`remark` text COMMENT '备注',
`status` tinyint(4) DEFAULT '1' COMMENT '状态:1已分配,2已退宿,3已调换',
`is_deleted` tinyint(4) DEFAULT '0' COMMENT '删除标记:0未删除,1已删除',
PRIMARY KEY (`id`),
KEY `idx_bed_id` (`bed_id`),
KEY `idx_student_id` (`student_id`),
KEY `idx_allocation_date` (`allocation_date`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='床位分配表';
-- ----------------------------
-- Records of bed_allocation
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for bed_info
-- ----------------------------
DROP TABLE IF EXISTS `bed_info`;
CREATE TABLE `bed_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 '更新时间',
`room_id` bigint(20) NOT NULL COMMENT '房间ID',
`bed_no` varchar(10) NOT NULL COMMENT '床位号',
`bed_type` tinyint(4) DEFAULT '1' COMMENT '床位类型:1上铺,2下铺',
`bed_position` varchar(20) DEFAULT NULL COMMENT '床位位置',
`facilities` text COMMENT '床位设施',
`status` tinyint(4) DEFAULT '1' COMMENT '床位状态:1空闲,2已分配,3维修',
`is_deleted` tinyint(4) DEFAULT '0' COMMENT '删除标记:0未删除,1已删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_room_bed` (`room_id`,`bed_no`),
KEY `idx_room_id` (`room_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='床位信息表';
-- ----------------------------
-- Records of bed_info
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for dormitory_building
-- ----------------------------
DROP TABLE IF EXISTS `dormitory_building`;
CREATE TABLE `dormitory_building` (
`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 '更新时间',
`building_name` varchar(50) NOT NULL COMMENT '楼栋名称',
`building_code` varchar(20) NOT NULL COMMENT '楼栋编码',
`building_type` tinyint(4) DEFAULT '1' COMMENT '楼栋类型:1男生宿舍,2女生宿舍,3混合宿舍',
`floors` int(11) NOT NULL COMMENT '楼层数',
`rooms_per_floor` int(11) DEFAULT NULL COMMENT '每层房间数',
`total_rooms` int(11) DEFAULT NULL COMMENT '总房间数',
`total_beds` int(11) DEFAULT NULL COMMENT '总床位数',
`manager_id` bigint(20) DEFAULT NULL COMMENT '管理员ID',
`manager_name` varchar(50) DEFAULT NULL COMMENT '管理员姓名',
`manager_phone` varchar(20) DEFAULT NULL COMMENT '管理员电话',
`address` varchar(200) DEFAULT NULL COMMENT '地址',
`facilities` text COMMENT '设施配置',
`rules` text COMMENT '管理规定',
`location_lat` decimal(10,6) DEFAULT NULL COMMENT '纬度',
`location_lng` decimal(10,6) DEFAULT NULL COMMENT '经度',
`status` tinyint(4) DEFAULT '1' COMMENT '状态:1正常,0停用',
`is_deleted` tinyint(4) DEFAULT '0' COMMENT '删除标记:0未删除,1已删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_building_code` (`building_code`),
KEY `idx_building_type` (`building_type`),
KEY `idx_manager_id` (`manager_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍楼表';
-- ----------------------------
-- Records of dormitory_building
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for dormitory_room
-- ----------------------------
DROP TABLE IF EXISTS `dormitory_room`;
CREATE TABLE `dormitory_room` (
`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 '更新时间',
`building_id` bigint(20) NOT NULL COMMENT '楼栋ID',
`room_no` varchar(20) NOT NULL COMMENT '房间号',
`floor` int(11) NOT NULL COMMENT '楼层',
`room_type` tinyint(4) DEFAULT '1' COMMENT '房间类型:1普通间,2标准间,3豪华间',
`bed_count` int(11) DEFAULT '4' COMMENT '床位数',
`area` decimal(6,2) DEFAULT NULL COMMENT '面积(平方米)',
`orientation` varchar(20) DEFAULT NULL COMMENT '朝向',
`facilities` text COMMENT '房间设施',
`rent_fee` decimal(8,2) DEFAULT NULL COMMENT '住宿费',
`deposit` decimal(8,2) DEFAULT NULL COMMENT '押金',
`water_fee` decimal(8,2) DEFAULT '0.00' COMMENT '水费',
`electric_fee` decimal(8,2) DEFAULT '0.00' COMMENT '电费',
`status` tinyint(4) DEFAULT '1' COMMENT '房间状态:1可用,2满员,3维修,4停用',
`is_deleted` tinyint(4) DEFAULT '0' COMMENT '删除标记:0未删除,1已删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_building_room` (`building_id`,`room_no`),
KEY `idx_building_id` (`building_id`),
KEY `idx_floor` (`floor`),
KEY `idx_room_type` (`room_type`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宿舍房间表';
-- ----------------------------
-- Records of dormitory_room
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for flow_category
-- ----------------------------
@@ -819,6 +669,69 @@ INSERT INTO `hq_hall_reservation` (`id`, `tenant_id`, `create_dept`, `create_by`
INSERT INTO `hq_hall_reservation` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `hall_id`, `hall_name`, `start_time`, `end_time`, `reservation_purpose`, `applicant_id`, `applicant_name`, `applicant_phone`, `status`, `audit_by`, `audit_name`, `audit_time`, `audit_remark`) VALUES (1937692170568011777, '000000', 103, 1, '2025-06-25 09:59:49', 1, '2025-06-25 09:59:49', 1937429766526951426, '小报告厅B', '2025-06-02 00:00:00', '2025-06-26 00:00:00', '123123123', 1, '疯狂的狮子Li', '15888888888', '0', NULL, NULL, NULL, NULL);
COMMIT;
-- ----------------------------
-- Table structure for hq_sat_answer
-- ----------------------------
DROP TABLE IF EXISTS `hq_sat_answer`;
CREATE TABLE `hq_sat_answer` (
`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',
`question_type` char(1) NOT NULL COMMENT '题目类型(1单选题 2多选题 3问答题)',
`option_id` bigint(20) DEFAULT NULL COMMENT '选项ID(单选题、多选题用,问答题为NULL)',
`option_value` varchar(50) DEFAULT NULL COMMENT '选项值(A、B、C、D等)',
`option_text` varchar(500) DEFAULT NULL COMMENT '选项文本内容',
`answer_value` text COMMENT '答案值(单选题存选项值,多选题存逗号分隔选项值,问答题存文本内容)',
`answer_score` int(11) DEFAULT '0' COMMENT '该答案得分',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_record_id` (`record_id`),
KEY `idx_question_id` (`question_id`),
KEY `idx_question_type` (`question_type`),
KEY `idx_option_id` (`option_id`),
KEY `idx_record_question` (`record_id`,`question_id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8mb4 COMMENT='答题答案表';
-- ----------------------------
-- Records of hq_sat_answer
-- ----------------------------
BEGIN;
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (1, '000000', NULL, 1, '2025-06-27 08:59:12', 1, '2025-06-27 09:29:34', 1, 1938401694286499842, 1937751675921375241, '3', NULL, NULL, NULL, '您对宿舍服务提出具体的意见和建议您对宿舍服务提出具体的意见和建议您对宿舍服务提出具体的意见和建议', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (2, '000000', NULL, 1, '2025-06-27 08:59:12', 1, '2025-06-27 09:29:34', 1, 1938401694286499842, 1937751675921375250, '3', NULL, NULL, NULL, '堂服务提出具体的意见堂服务提出具体的意见堂服务提出具体的意见堂服务提出具体的意见', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (3, '000000', NULL, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751489358733313, '1', 1, 'A', '非常满意', 'A', 5, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (4, '000000', NULL, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751520555966465, '1', 2, 'B', '满意', 'B', 3, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (5, '000000', NULL, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375239, '2', 1, 'A', '非常满意', 'A,C', 5, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (6, '000000', NULL, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375239, '2', 3, 'C', '一般', 'A,C', 1, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (7, '000000', NULL, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375240, '2', 1, 'A', '非常满意', 'C,A', 5, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (8, '000000', NULL, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375240, '2', 3, 'C', '一般', 'C,A', 1, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (9, '000000', NULL, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375241, '3', NULL, NULL, NULL, '请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (10, '000000', NULL, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375250, '3', NULL, NULL, NULL, '请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (11, '000000', NULL, 1, '2025-06-27 10:44:25', NULL, NULL, 0, 1938428174148263938, 1937751489358733313, '1', 4, 'D', '不满意', 'D', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (12, '000000', NULL, 1, '2025-06-27 10:44:26', NULL, NULL, 0, 1938428174148263938, 1937751520555966465, '1', 3, 'C', '一般', 'C', 1, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (13, '000000', NULL, 1, '2025-06-27 10:44:26', NULL, NULL, 0, 1938428174148263938, 1937751675921375239, '2', 2, 'B', '满意', 'B,D', 3, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (14, '000000', NULL, 1, '2025-06-27 10:44:26', NULL, NULL, 0, 1938428174148263938, 1937751675921375239, '2', 4, 'D', '不满意', 'B,D', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (15, '000000', NULL, 1, '2025-06-27 10:44:26', NULL, NULL, 0, 1938428174148263938, 1937751675921375240, '2', 1, 'A', '非常满意', 'C,A', 5, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (16, '000000', NULL, 1, '2025-06-27 10:44:26', NULL, NULL, 0, 1938428174148263938, 1937751675921375240, '2', 3, 'C', '一般', 'C,A', 1, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (17, '000000', NULL, 1, '2025-06-27 10:44:26', NULL, NULL, 0, 1938428174148263938, 1937751675921375241, '3', NULL, NULL, NULL, '请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议111', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (18, '000000', NULL, 1, '2025-06-27 10:44:26', NULL, NULL, 0, 1938428174148263938, 1937751675921375250, '3', NULL, NULL, NULL, '请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的1111意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (19, '000000', NULL, 1937383272285396994, '2025-06-27 11:17:19', NULL, NULL, 0, 1938436452395737089, 1937751489358733313, '1', 1, 'A', '非常满意', 'A', 5, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (20, '000000', NULL, 1937383272285396994, '2025-06-27 11:17:19', NULL, NULL, 0, 1938436452395737089, 1937751520555966465, '1', 2, 'B', '满意', 'B', 3, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (21, '000000', NULL, 1937383272285396994, '2025-06-27 11:17:19', NULL, NULL, 0, 1938436452395737089, 1937751675921375239, '2', 1, 'A', '非常满意', 'B,A', 5, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (22, '000000', NULL, 1937383272285396994, '2025-06-27 11:17:19', NULL, NULL, 0, 1938436452395737089, 1937751675921375239, '2', 2, 'B', '满意', 'B,A', 3, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (23, '000000', NULL, 1937383272285396994, '2025-06-27 11:17:19', NULL, NULL, 0, 1938436452395737089, 1937751675921375240, '2', 3, 'C', '一般', 'C,D', 1, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (24, '000000', NULL, 1937383272285396994, '2025-06-27 11:17:20', NULL, NULL, 0, 1938436452395737089, 1937751675921375240, '2', 4, 'D', '不满意', 'C,D', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (25, '000000', NULL, 1937383272285396994, '2025-06-27 11:17:20', NULL, NULL, 0, 1938436452395737089, 1937751675921375241, '3', NULL, NULL, NULL, '的意见和建议1231231', 0, NULL);
INSERT INTO `hq_sat_answer` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `question_type`, `option_id`, `option_value`, `option_text`, `answer_value`, `answer_score`, `remark`) VALUES (26, '000000', NULL, 1937383272285396994, '2025-06-27 11:17:20', NULL, NULL, 0, 1938436452395737089, 1937751675921375250, '3', NULL, NULL, NULL, '具体的意见和建议131231312', 0, NULL);
COMMIT;
-- ----------------------------
-- Table structure for hq_sat_category
-- ----------------------------
@@ -880,12 +793,42 @@ CREATE TABLE `hq_sat_detail` (
KEY `idx_record_id` (`record_id`),
KEY `idx_question_id` (`question_id`),
KEY `idx_answer_score` (`answer_score`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题详情表';
) ENGINE=InnoDB AUTO_INCREMENT=1938436455646322691 DEFAULT CHARSET=utf8mb4 COMMENT='答题详情表';
-- ----------------------------
-- Records of hq_sat_detail
-- ----------------------------
BEGIN;
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938208005513785345, '000000', 103, 1937383272285396994, '2025-06-26 20:09:33', 1937383272285396994, '2025-06-27 11:17:19', 1, 1938208005199212546, 1937751489358733313, 0, '题目类型:1;答案值:1;选项详情:1(一般),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938208005757054977, '000000', 103, 1937383272285396994, '2025-06-26 20:09:33', 1937383272285396994, '2025-06-27 11:17:19', 1, 1938208005199212546, 1937751520555966465, 0, '题目类型:1;答案值:3;选项详情:3(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938208006038073346, '000000', 103, 1937383272285396994, '2025-06-26 20:09:33', 1937383272285396994, '2025-06-27 11:17:19', 1, 1938208005199212546, 1937751675921375239, 0, '题目类型:2;答案值:3,5;选项详情:5(非常满意),3(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938208006331674625, '000000', 103, 1937383272285396994, '2025-06-26 20:09:34', 1937383272285396994, '2025-06-27 11:17:19', 1, 1938208005199212546, 1937751675921375240, 0, '题目类型:2;答案值:3,5;选项详情:5(非常满意),3(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938208006570749954, '000000', 103, 1937383272285396994, '2025-06-26 20:09:34', 1937383272285396994, '2025-06-27 11:17:19', 1, 1938208005199212546, 1937751675921375241, 0, '题目类型:3;答案值:123;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938208006847574017, '000000', 103, 1937383272285396994, '2025-06-26 20:09:34', 1937383272285396994, '2025-06-27 11:17:19', 1, 1938208005199212546, 1937751675921375250, 0, '题目类型:3;答案值:123213;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938401694605266945, '000000', 103, 1, '2025-06-27 08:59:12', 1, '2025-06-27 09:29:34', 1, 1938401694286499842, 1937751489358733313, 0, '题目类型:1;答案值:1;选项详情:1(一般),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938401695226023938, '000000', 103, 1, '2025-06-27 08:59:13', 1, '2025-06-27 09:29:34', 1, 1938401694286499842, 1937751520555966465, 0, '题目类型:1;答案值:3;选项详情:3(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938401695507042305, '000000', 103, 1, '2025-06-27 08:59:13', 1, '2025-06-27 09:29:34', 1, 1938401694286499842, 1937751675921375239, 0, '题目类型:2;答案值:3,5;选项详情:5(非常满意),3(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938401695750311938, '000000', 103, 1, '2025-06-27 08:59:13', 1, '2025-06-27 09:29:34', 1, 1938401694286499842, 1937751675921375240, 0, '题目类型:2;答案值:5,3;选项详情:5(非常满意),3(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938401695972610050, '000000', 103, 1, '2025-06-27 08:59:13', 1, '2025-06-27 09:29:34', 1, 1938401694286499842, 1937751675921375241, 0, '题目类型:3;答案值:您对宿舍服务提出具体的意见和建议您对宿舍服务提出具体的意见和建议您对宿舍服务提出具体的意见和建议;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938401696282988545, '000000', 103, 1, '2025-06-27 08:59:13', 1, '2025-06-27 09:29:34', 1, 1938401694286499842, 1937751675921375250, 0, '题目类型:3;答案值:堂服务提出具体的意见堂服务提出具体的意见堂服务提出具体的意见堂服务提出具体的意见;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938409339269591041, '000000', 103, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751489358733313, 0, '题目类型:1;答案值:A;选项详情:A(非常满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938409339819044865, '000000', 103, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751520555966465, 0, '题目类型:1;答案值:B;选项详情:B(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938409340192337921, '000000', 103, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375239, 0, '题目类型:2;答案值:A,C;选项详情:A(非常满意),C(一般),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938409340674682881, '000000', 103, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375240, 0, '题目类型:2;答案值:C,A;选项详情:A(非常满意),C(一般),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938409341278662657, '000000', 103, 1, '2025-06-27 09:29:36', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375241, 0, '题目类型:3;答案值:请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938409341526126594, '000000', 103, 1, '2025-06-27 09:29:36', 1, '2025-06-27 10:44:25', 1, 1938409338980184066, 1937751675921375250, 0, '题目类型:3;答案值:请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938428174613831681, '000000', 103, 1, '2025-06-27 10:44:26', 1, '2025-06-27 10:44:26', 0, 1938428174148263938, 1937751489358733313, 0, '题目类型:1;答案值:D;选项详情:D(不满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938428175318474753, '000000', 103, 1, '2025-06-27 10:44:26', 1, '2025-06-27 10:44:26', 0, 1938428174148263938, 1937751520555966465, 0, '题目类型:1;答案值:C;选项详情:C(一般),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938428175863734274, '000000', 103, 1, '2025-06-27 10:44:26', 1, '2025-06-27 10:44:26', 0, 1938428174148263938, 1937751675921375239, 0, '题目类型:2;答案值:B,D;选项详情:B(满意),D(不满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938428176484491266, '000000', 103, 1, '2025-06-27 10:44:26', 1, '2025-06-27 10:44:26', 0, 1938428174148263938, 1937751675921375240, 0, '题目类型:2;答案值:C,A;选项详情:A(非常满意),C(一般),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938428177075888129, '000000', 103, 1, '2025-06-27 10:44:26', 1, '2025-06-27 10:44:26', 0, 1938428174148263938, 1937751675921375241, 0, '题目类型:3;答案值:请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议111;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938428177419821057, '000000', 103, 1, '2025-06-27 10:44:26', 1, '2025-06-27 10:44:26', 0, 1938428174148263938, 1937751675921375250, 0, '题目类型:3;答案值:请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的1111意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938436452676755457, '000000', 103, 1937383272285396994, '2025-06-27 11:17:19', 1937383272285396994, '2025-06-27 11:17:19', 0, 1938436452395737089, 1937751489358733313, 0, '题目类型:1;答案值:A;选项详情:A(非常满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938436453104574466, '000000', 103, 1937383272285396994, '2025-06-27 11:17:19', 1937383272285396994, '2025-06-27 11:17:19', 0, 1938436452395737089, 1937751520555966465, 0, '题目类型:1;答案值:B;选项详情:B(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938436454006349825, '000000', 103, 1937383272285396994, '2025-06-27 11:17:20', 1937383272285396994, '2025-06-27 11:17:20', 0, 1938436452395737089, 1937751675921375239, 0, '题目类型:2;答案值:B,A;选项详情:A(非常满意),B(满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938436454677438466, '000000', 103, 1937383272285396994, '2025-06-27 11:17:20', 1937383272285396994, '2025-06-27 11:17:20', 0, 1938436452395737089, 1937751675921375240, 0, '题目类型:2;答案值:C,D;选项详情:C(一般),D(不满意),');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938436455331749890, '000000', 103, 1937383272285396994, '2025-06-27 11:17:20', 1937383272285396994, '2025-06-27 11:17:20', 0, 1938436452395737089, 1937751675921375241, 0, '题目类型:3;答案值:的意见和建议1231231;');
INSERT INTO `hq_sat_detail` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `record_id`, `question_id`, `answer_score`, `remark`) VALUES (1938436455646322690, '000000', 103, 1937383272285396994, '2025-06-27 11:17:20', 1937383272285396994, '2025-06-27 11:17:20', 0, 1938436452395737089, 1937751675921375250, 0, '题目类型:3;答案值:具体的意见和建议131231312;');
COMMIT;
-- ----------------------------
@@ -1023,7 +966,7 @@ CREATE TABLE `hq_sat_record` (
`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_type` char(1) NOT NULL COMMENT '用户类型(1学生 2教职工 3超级管理员)',
`user_dept` varchar(100) DEFAULT NULL COMMENT '用户部门(匿名时为NULL)',
`submit_time` datetime NOT NULL COMMENT '提交时间',
`total_score` decimal(10,2) DEFAULT '0.00' COMMENT '总分',
@@ -1035,12 +978,17 @@ CREATE TABLE `hq_sat_record` (
KEY `idx_user_id` (`user_id`),
KEY `idx_user_type` (`user_type`),
KEY `idx_submit_time` (`submit_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='答题记录表';
) ENGINE=InnoDB AUTO_INCREMENT=1938436452395737090 DEFAULT CHARSET=utf8mb4 COMMENT='答题记录表';
-- ----------------------------
-- Records of hq_sat_record
-- ----------------------------
BEGIN;
INSERT INTO `hq_sat_record` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `user_id`, `user_type`, `user_dept`, `submit_time`, `total_score`, `avg_score`, `remark`) VALUES (1938208005199212546, '000000', 103, 1937383272285396994, '2025-06-26 20:09:33', 1937383272285396994, '2025-06-27 11:17:19', 1, 1938162557168005122, 1937383272285396994, '1', NULL, '2025-06-26 20:09:33', 0.00, 0.00, '');
INSERT INTO `hq_sat_record` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `user_id`, `user_type`, `user_dept`, `submit_time`, `total_score`, `avg_score`, `remark`) VALUES (1938401694286499842, '000000', 103, 1, '2025-06-27 08:59:12', 1, '2025-06-27 09:29:34', 1, 1938162557168005122, 1, '1', NULL, '2025-06-27 08:59:12', 0.00, 0.00, '');
INSERT INTO `hq_sat_record` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `user_id`, `user_type`, `user_dept`, `submit_time`, `total_score`, `avg_score`, `remark`) VALUES (1938409338980184066, '000000', 103, 1, '2025-06-27 09:29:35', 1, '2025-06-27 10:44:25', 1, 1938162557168005122, 1, '1', NULL, '2025-06-27 09:29:35', 0.00, 0.00, '');
INSERT INTO `hq_sat_record` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `user_id`, `user_type`, `user_dept`, `submit_time`, `total_score`, `avg_score`, `remark`) VALUES (1938428174148263938, '000000', 103, 1, '2025-06-27 10:44:26', 1, '2025-06-27 10:44:26', 0, 1938162557168005122, 1, '1', NULL, '2025-06-27 10:44:26', 0.00, 0.00, '');
INSERT INTO `hq_sat_record` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `user_id`, `user_type`, `user_dept`, `submit_time`, `total_score`, `avg_score`, `remark`) VALUES (1938436452395737089, '000000', 103, 1937383272285396994, '2025-06-27 11:17:19', 1937383272285396994, '2025-06-27 11:17:19', 0, 1938162557168005122, 1937383272285396994, '1', NULL, '2025-06-27 11:17:19', 0.00, 0.00, '');
COMMIT;
-- ----------------------------
@@ -1074,13 +1022,14 @@ CREATE TABLE `hq_sat_survey` (
KEY `idx_target_group` (`target_group`),
KEY `idx_time_range` (`start_time`,`end_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB AUTO_INCREMENT=1937757151220342786 DEFAULT CHARSET=utf8mb4 COMMENT='问卷表';
) ENGINE=InnoDB AUTO_INCREMENT=1938162557168005123 DEFAULT CHARSET=utf8mb4 COMMENT='问卷表';
-- ----------------------------
-- Records of hq_sat_survey
-- ----------------------------
BEGIN;
INSERT INTO `hq_sat_survey` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_code`, `survey_title`, `survey_desc`, `survey_instruction`, `target_group`, `start_time`, `end_time`, `max_submit_times`, `is_anonymous`, `is_published`, `status`, `remark`) VALUES (1937757151220342785, '000000', 103, 1, '2025-06-25 14:18:01', 1, '2025-06-26 14:32:21', 0, '001', '2025后勤问卷', '问卷描述', '填写说明', '2', '2025-06-19 00:00:00', '2025-06-25 14:17:52', 1, 1, 0, '1', NULL);
INSERT INTO `hq_sat_survey` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_code`, `survey_title`, `survey_desc`, `survey_instruction`, `target_group`, `start_time`, `end_time`, `max_submit_times`, `is_anonymous`, `is_published`, `status`, `remark`) VALUES (1937757151220342785, '000000', 103, 1, '2025-06-25 14:18:01', 1, '2025-06-26 17:04:26', 0, '001', '2025后勤问卷', '问卷描述', '填写说明', '2', '2025-06-19 00:00:00', '2025-06-25 14:17:52', 10, 1, 1, '2', NULL);
INSERT INTO `hq_sat_survey` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_code`, `survey_title`, `survey_desc`, `survey_instruction`, `target_group`, `start_time`, `end_time`, `max_submit_times`, `is_anonymous`, `is_published`, `status`, `remark`) VALUES (1938162557168005122, '000000', 103, 1, '2025-06-26 17:08:58', 1, '2025-06-26 19:32:57', 0, '问卷编号-000123123', '测试问卷标题', '问卷详细描述阿萨德发 问卷详细描述阿萨德发 问卷详细描述阿萨德发 ', '问卷填写说明', '3', '2025-06-26 00:00:00', '2025-06-26 00:00:00', 10, 0, 1, '2', NULL);
COMMIT;
-- ----------------------------
@@ -1108,7 +1057,7 @@ CREATE TABLE `hq_sat_survey_question` (
KEY `idx_survey_id` (`survey_id`),
KEY `idx_question_id` (`question_id`),
KEY `idx_sort_order` (`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=1937858959930499075 DEFAULT CHARSET=utf8mb4 COMMENT='问卷题目关联表';
) ENGINE=InnoDB AUTO_INCREMENT=1938198579117494274 DEFAULT CHARSET=utf8mb4 COMMENT='问卷题目关联表';
-- ----------------------------
-- Records of hq_sat_survey_question
@@ -1117,150 +1066,12 @@ BEGIN;
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1937858959557206017, '000000', 103, 1, '2025-06-25 21:02:34', 1, '2025-06-25 21:02:34', 0, 1937757151220342785, 1937751489358733313, 1, 1.00, 1, NULL);
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1937858959762726914, '000000', 103, 1, '2025-06-25 21:02:34', 1, '2025-06-25 21:02:34', 0, 1937757151220342785, 1937751520555966465, 2, 1.00, 1, NULL);
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1937858959930499074, '000000', 103, 1, '2025-06-25 21:02:34', 1, '2025-06-25 21:02:34', 0, 1937757151220342785, 1937751560775147522, 3, 1.00, 1, NULL);
COMMIT;
-- ----------------------------
-- Table structure for leave_application
-- ----------------------------
DROP TABLE IF EXISTS `leave_application`;
CREATE TABLE `leave_application` (
`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 '更新时间',
`student_id` bigint(20) NOT NULL COMMENT '学生ID',
`leave_type_id` bigint(20) NOT NULL COMMENT '请假类型ID',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`days` decimal(3,1) NOT NULL COMMENT '请假天数',
`reason` text NOT NULL COMMENT '请假原因',
`destination` varchar(200) DEFAULT NULL COMMENT '目的地',
`location_lat` decimal(10,6) DEFAULT NULL COMMENT '纬度',
`location_lng` decimal(10,6) DEFAULT NULL COMMENT '经度',
`location_address` varchar(200) DEFAULT NULL COMMENT '详细地址',
`emergency_contact` varchar(50) DEFAULT NULL COMMENT '紧急联系人',
`emergency_phone` varchar(20) DEFAULT NULL COMMENT '紧急联系电话',
`emergency_relation` varchar(20) DEFAULT NULL COMMENT '紧急联系人关系',
`need_leave_school` tinyint(4) DEFAULT '0' COMMENT '是否需要离校:1是,0否',
`status` tinyint(4) DEFAULT '0' COMMENT '状态:0待审批,1已通过,2已拒绝,3已撤销,4已销假',
`workflow_instance_id` bigint(20) DEFAULT NULL COMMENT '工作流实例ID',
`submit_time` datetime DEFAULT NULL COMMENT '提交时间',
`approve_time` datetime DEFAULT NULL COMMENT '审批时间',
`return_time` datetime DEFAULT NULL COMMENT '销假时间',
`auto_return` tinyint(4) DEFAULT '0' COMMENT '自动销假:1是,0否',
`overdue_remind` tinyint(4) DEFAULT '0' COMMENT '逾期提醒:1已提醒,0未提醒',
`is_deleted` tinyint(4) DEFAULT '0' COMMENT '删除标记:0未删除,1已删除',
PRIMARY KEY (`id`),
KEY `idx_student_id` (`student_id`),
KEY `idx_leave_type_id` (`leave_type_id`),
KEY `idx_status` (`status`),
KEY `idx_start_time` (`start_time`),
KEY `idx_workflow_instance_id` (`workflow_instance_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='请假申请表';
-- ----------------------------
-- Records of leave_application
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for leave_approval
-- ----------------------------
DROP TABLE IF EXISTS `leave_approval`;
CREATE TABLE `leave_approval` (
`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 '更新时间',
`leave_id` bigint(20) NOT NULL COMMENT '请假申请ID',
`approver_id` bigint(20) NOT NULL COMMENT '审批人ID',
`approval_level` int(11) NOT NULL COMMENT '审批层级',
`status` tinyint(4) NOT NULL COMMENT '审批状态:1通过,2拒绝',
`approval_time` datetime NOT NULL COMMENT '审批时间',
`remark` text COMMENT '审批意见',
`phone_verified` tinyint(4) DEFAULT '0' COMMENT '电话核实:1已核实,0未核实',
`verify_phone` varchar(20) DEFAULT NULL COMMENT '核实电话',
PRIMARY KEY (`id`),
KEY `idx_leave_id` (`leave_id`),
KEY `idx_approver_id` (`approver_id`),
KEY `idx_approval_time` (`approval_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='请假审批表';
-- ----------------------------
-- Records of leave_approval
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for leave_cc
-- ----------------------------
DROP TABLE IF EXISTS `leave_cc`;
CREATE TABLE `leave_cc` (
`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 '更新时间',
`leave_id` bigint(20) NOT NULL COMMENT '请假申请ID',
`cc_user_id` bigint(20) NOT NULL COMMENT '抄送用户ID',
`cc_type` tinyint(4) DEFAULT '1' COMMENT '抄送类型:1必须抄送,2可选抄送',
`read_status` tinyint(4) DEFAULT '0' COMMENT '阅读状态:1已读,0未读',
`read_time` datetime DEFAULT NULL COMMENT '阅读时间',
PRIMARY KEY (`id`),
KEY `idx_leave_id` (`leave_id`),
KEY `idx_cc_user_id` (`cc_user_id`),
KEY `idx_read_status` (`read_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='请假抄送表';
-- ----------------------------
-- Records of leave_cc
-- ----------------------------
BEGIN;
COMMIT;
-- ----------------------------
-- Table structure for leave_type
-- ----------------------------
DROP TABLE IF EXISTS `leave_type`;
CREATE TABLE `leave_type` (
`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 '更新时间',
`type_name` varchar(50) NOT NULL COMMENT '请假类型名称',
`type_code` varchar(20) NOT NULL COMMENT '请假类型编码',
`max_days` int(11) DEFAULT '0' COMMENT '最大天数(0表示不限制)',
`need_approval` tinyint(4) DEFAULT '1' COMMENT '是否需要审批:1需要,0不需要',
`approval_level` int(11) DEFAULT '1' COMMENT '审批层级',
`need_leave_school` tinyint(4) DEFAULT '0' COMMENT '是否需要离校:1需要,0不需要',
`need_location` tinyint(4) DEFAULT '0' COMMENT '是否需要位置:1需要,0不需要',
`need_attachment` tinyint(4) DEFAULT '0' COMMENT '是否需要附件:1需要,0不需要',
`description` text COMMENT '描述',
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
`status` tinyint(4) DEFAULT '1' COMMENT '状态:1启用,0禁用',
`is_deleted` tinyint(4) DEFAULT '0' COMMENT '删除标记:0未删除,1已删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_type_code` (`type_code`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='请假类型表';
-- ----------------------------
-- Records of leave_type
-- ----------------------------
BEGIN;
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1938198578056335361, '000000', 103, 1, '2025-06-26 19:32:06', 1, '2025-06-26 19:32:06', 0, 1938162557168005122, 1937751489358733313, 1, 1.00, 1, NULL);
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1938198578303799298, '000000', 103, 1, '2025-06-26 19:32:06', 1, '2025-06-26 19:32:06', 0, 1938162557168005122, 1937751520555966465, 2, 1.00, 1, NULL);
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1938198578517708802, '000000', 103, 1, '2025-06-26 19:32:06', 1, '2025-06-26 19:32:06', 0, 1938162557168005122, 1937751675921375239, 3, 1.00, 1, NULL);
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1938198578719035394, '000000', 103, 1, '2025-06-26 19:32:06', 1, '2025-06-26 19:32:06', 0, 1938162557168005122, 1937751675921375240, 4, 1.00, 1, NULL);
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1938198578916167682, '000000', 103, 1, '2025-06-26 19:32:06', 1, '2025-06-26 19:32:06', 0, 1938162557168005122, 1937751675921375241, 5, 1.00, 1, NULL);
INSERT INTO `hq_sat_survey_question` (`id`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `deleted`, `survey_id`, `question_id`, `sort_order`, `weight`, `is_required`, `remark`) VALUES (1938198579117494273, '000000', 103, 1, '2025-06-26 19:32:06', 1, '2025-06-26 19:32:06', 0, 1938162557168005122, 1937751675921375250, 6, 1.00, 1, NULL);
COMMIT;
-- ----------------------------
@@ -1281,17 +1092,6 @@ CREATE TABLE `sj_distributed_lock` (
-- Records of sj_distributed_lock
-- ----------------------------
BEGIN;
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('clearLog', '2025-06-26 14:06:08.740', '2025-06-26 14:05:08.740', '1938116279890599936', '2025-06-26 11:55:32', '2025-06-26 14:05:09');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('clearOfflineNode', '2025-06-26 14:39:02.020', '2025-06-26 14:38:57.020', '1938113914192936960', '2025-06-26 11:55:31', '2025-06-26 14:38:57');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('jobClearLog', '2025-06-26 14:06:07.375', '2025-06-26 14:05:07.375', '1938116279890599936', '2025-06-26 11:55:31', '2025-06-26 14:05:09');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('jobLogMerge', '2025-06-26 14:39:42.211', '2025-06-26 14:38:42.211', '1938113914192936960', '2025-06-26 14:05:07', '2025-06-26 14:38:42');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('jobSummaryDashboard', '2025-06-26 14:39:02.205', '2025-06-26 14:38:42.205', '1938113914192936960', '2025-06-26 14:03:42', '2025-06-26 14:38:42');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('registerNode', '2025-06-26 14:39:01.304', '2025-06-26 14:38:56.304', '1938113914192936960', '2025-06-26 11:55:31', '2025-06-26 14:38:56');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('retryErrorMoreThreshold', '2025-06-26 14:36:09.112', '2025-06-26 14:35:09.112', '1938116279890599936', '2025-06-26 14:05:09', '2025-06-26 14:35:09');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('retryLogMerge', '2025-06-26 14:06:08.904', '2025-06-26 14:05:08.904', '1938116279890599936', '2025-06-26 14:05:09', '2025-06-26 14:05:09');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('retrySummaryDashboard', '2025-06-26 14:39:02.204', '2025-06-26 14:38:42.204', '1938113914192936960', '2025-06-26 14:03:42', '2025-06-26 14:38:42');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('retryTaskMoreThreshold', '2025-06-26 14:36:09.269', '2025-06-26 14:35:09.269', '1938116279890599936', '2025-06-26 14:05:09', '2025-06-26 14:35:09');
INSERT INTO `sj_distributed_lock` (`name`, `lock_until`, `locked_at`, `locked_by`, `create_dt`, `update_dt`) VALUES ('workflowJobSummarySchedule', '2025-06-26 14:39:02.205', '2025-06-26 14:38:42.205', '1938113914192936960', '2025-06-26 14:03:42', '2025-06-26 14:38:42');
COMMIT;
-- ----------------------------
@@ -1810,16 +1610,13 @@ CREATE TABLE `sj_server_node` (
UNIQUE KEY `uk_host_id_host_ip` (`host_id`,`host_ip`),
KEY `idx_namespace_id_group_name` (`namespace_id`,`group_name`),
KEY `idx_expire_at_node_type` (`expire_at`,`node_type`)
) ENGINE=InnoDB AUTO_INCREMENT=196 DEFAULT CHARSET=utf8mb4 COMMENT='服务器节点';
) ENGINE=InnoDB AUTO_INCREMENT=286 DEFAULT CHARSET=utf8mb4 COMMENT='服务器节点';
-- ----------------------------
-- Records of sj_server_node
-- ----------------------------
BEGIN;
INSERT INTO `sj_server_node` (`id`, `namespace_id`, `group_name`, `host_id`, `host_ip`, `host_port`, `expire_at`, `node_type`, `ext_attrs`, `create_dt`, `update_dt`) VALUES (192, 'DEFAULT_SERVER_NAMESPACE_ID', 'DEFAULT_SERVER', '1938113914192936960', '10.241.40.29', 17888, '2025-06-26 14:39:12', 2, '{\"webPort\":8800}', '2025-06-26 13:55:42', '2025-06-26 14:38:42');
INSERT INTO `sj_server_node` (`id`, `namespace_id`, `group_name`, `host_id`, `host_ip`, `host_port`, `expire_at`, `node_type`, `ext_attrs`, `create_dt`, `update_dt`) VALUES (193, 'dev', 'ruoyi_group', '1938114195383263232', '10.241.40.29', 28080, '2025-06-26 14:39:32', 1, NULL, '2025-06-26 13:56:48', '2025-06-26 14:39:01');
INSERT INTO `sj_server_node` (`id`, `namespace_id`, `group_name`, `host_id`, `host_ip`, `host_port`, `expire_at`, `node_type`, `ext_attrs`, `create_dt`, `update_dt`) VALUES (194, 'DEFAULT_SERVER_NAMESPACE_ID', 'DEFAULT_SERVER', '1938116279890599936', '10.241.38.13', 17888, '2025-06-26 14:39:17', 2, '{\"webPort\":8800}', '2025-06-26 14:05:07', '2025-06-26 14:38:47');
INSERT INTO `sj_server_node` (`id`, `namespace_id`, `group_name`, `host_id`, `host_ip`, `host_port`, `expire_at`, `node_type`, `ext_attrs`, `create_dt`, `update_dt`) VALUES (195, 'dev', 'ruoyi_group', '1938116621772390400', '10.241.38.13', 28080, '2025-06-26 14:39:32', 1, NULL, '2025-06-26 14:06:27', '2025-06-26 14:39:01');
INSERT INTO `sj_server_node` (`id`, `namespace_id`, `group_name`, `host_id`, `host_ip`, `host_port`, `expire_at`, `node_type`, `ext_attrs`, `create_dt`, `update_dt`) VALUES (285, 'dev', 'ruoyi_group', '1938509437950607360', '169.254.107.16', 28080, '2025-06-27 16:12:22', 1, NULL, '2025-06-27 16:07:21', '2025-06-27 16:11:52');
COMMIT;
-- ----------------------------
@@ -2056,16 +1853,29 @@ CREATE TABLE `sys_dept` (
-- Records of sys_dept
-- ----------------------------
BEGIN;
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (100, '000000', 0, '0', 'XXX科技', NULL, 0, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (101, '000000', 100, '0,100', '深圳总公司', NULL, 1, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (102, '000000', 100, '0,100', '长沙分公司', NULL, 2, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (103, '000000', 101, '0,100,101', '研发部门', NULL, 1, 1, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (104, '000000', 101, '0,100,101', '市场部门', NULL, 2, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (105, '000000', 101, '0,100,101', '测试部门', NULL, 3, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (106, '000000', 101, '0,100,101', '财务部门', NULL, 4, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (107, '000000', 101, '0,100,101', '运维部门', NULL, 5, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (108, '000000', 102, '0,100,102', '市场部门', NULL, 1, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (109, '000000', 102, '0,100,102', '财务部门', NULL, 2, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (100, '000000', 0, '0', '杭州第一技师学院', NULL, 0, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-27 14:24:09');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (101, '000000', 100, '0,100', '二级学院', NULL, 1, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-27 14:24:50');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (102, '000000', 100, '0,100', '行政单位', NULL, 0, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-16 14:58:45', 1, '2025-06-27 14:27:58');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (103, '000000', 101, '0,100,101', '智能控制学院', NULL, 1, 1, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-16 14:58:45', 1, '2025-06-27 14:25:04');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (104, '000000', 101, '0,100,101', '智能制造学院', NULL, 2, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-27 14:25:18');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (105, '000000', 101, '0,100,101', '医药健康学院', NULL, 3, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-27 14:25:28');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (106, '000000', 101, '0,100,101', '餐饮休闲学院', NULL, 4, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-27 14:25:40');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (107, '000000', 101, '0,100,101', '数字信息学院', NULL, 5, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-27 14:25:50');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (108, '000000', 102, '0,100,102', '院领导', NULL, 0, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-16 14:58:45', 1, '2025-06-27 14:27:51');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (109, '000000', 102, '0,100,102', '办公室', NULL, 2, NULL, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-27 14:28:06');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938483954134245378, '000000', 101, '0,100,101', '人文学院', NULL, 7, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:26:05', 1, '2025-06-27 14:26:05');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484049621770242, '000000', 101, '0,100,101', '生态园林学院', NULL, 0, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:26:27', 1, '2025-06-27 14:26:27');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484510047297538, '000000', 102, '0,100,102', '人事处', NULL, 3, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:28:17', 1, '2025-06-27 14:28:17');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484570826956801, '000000', 102, '0,100,102', '教务处', NULL, 4, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:28:32', 1, '2025-06-27 14:28:32');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484606247854081, '000000', 102, '0,100,102', '科研处', NULL, 5, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:28:40', 1, '2025-06-27 14:28:40');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484642188845057, '000000', 102, '0,100,102', '学生处', NULL, 6, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:28:49', 1, '2025-06-27 14:28:49');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484683662123010, '000000', 102, '0,100,102', '计划财务处', NULL, 7, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:28:59', 1, '2025-06-27 14:28:59');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484727379353601, '000000', 102, '0,100,102', '招生就业处', NULL, 8, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:29:09', 1, '2025-06-27 14:29:09');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484762884136961, '000000', 102, '0,100,102', '培训处', NULL, 9, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:29:17', 1, '2025-06-27 14:29:17');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484793632579586, '000000', 102, '0,100,102', '总务处', NULL, 10, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:29:25', 1, '2025-06-27 14:29:25');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484834736758786, '000000', 102, '0,100,102', '保卫处', NULL, 11, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:29:35', 1, '2025-06-27 14:29:35');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484865401315330, '000000', 102, '0,100,102', '基建处', NULL, 12, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:29:42', 1, '2025-06-27 14:29:42');
INSERT INTO `sys_dept` (`dept_id`, `tenant_id`, `parent_id`, `ancestors`, `dept_name`, `dept_category`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1938484923752472578, '000000', 102, '0,100,102', '临安校区综合办', NULL, 13, NULL, NULL, NULL, '0', '0', 103, 1, '2025-06-27 14:29:56', 1, '2025-06-27 14:29:56');
COMMIT;
-- ----------------------------
@@ -2299,6 +2109,57 @@ INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`,
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938086898462806017, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 12:08:19');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938114273363763202, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 13:57:06');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938117093010833410, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 14:08:18');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938148670439895041, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 16:13:47');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938163610793947138, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '1', '密码输入错误1次', '2025-06-26 17:13:09');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938163632134565889, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '1', '验证码错误', '2025-06-26 17:13:14');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938163645698945026, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '0', '登录成功', '2025-06-26 17:13:17');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938164222822592514, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '1', '验证码错误', '2025-06-26 17:15:35');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938164274571915265, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '1', '验证码错误', '2025-06-26 17:15:47');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938164289516220417, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '0', '登录成功', '2025-06-26 17:15:51');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938169043600420866, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-26 17:34:44');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938169079503663105, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 17:34:53');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938186735774527490, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 18:45:02');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938187792084824066, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-26 18:49:14');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938187830479482882, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 18:49:23');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938188071823929346, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-26 18:50:21');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938188093076467713, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 18:50:26');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938188478767886337, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-26 18:51:58');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938188505254916097, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 18:52:04');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938191072529674241, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '1', '验证码错误', '2025-06-26 19:02:16');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938191088728076290, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '0', '登录成功', '2025-06-26 19:02:20');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938192209999753217, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 19:06:47');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938192366002696193, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-26 19:07:25');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938192390354825217, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-26 19:07:30');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938399875460124674, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '1', '验证码错误', '2025-06-27 08:51:59');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938399895387262977, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 08:52:03');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938419293711937537, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '1', '验证码已失效', '2025-06-27 10:09:08');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938419329132834817, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 10:09:17');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938436324658208770, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 11:16:49');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938436357407334401, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 11:16:57');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938436528245530625, '000000', 'wuzilong', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 11:17:37');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938436546104877058, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 11:17:42');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938469982953758722, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 13:30:34');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938470237577371650, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 13:31:34');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938470252848832513, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 13:31:38');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938470378866696193, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 13:32:08');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938470409673859073, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 13:32:15');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938471428591935489, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 13:36:18');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938481111918665729, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 14:14:47');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938485271477051394, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 14:31:19');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938485292129804290, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 14:31:24');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938485311620734978, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 14:31:28');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938485341551288321, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 14:31:35');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938486189551476737, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 14:34:58');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938490405598748673, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 14:51:43');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938490576235618305, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Safari', 'OSX', '0', '登录成功', '2025-06-27 14:52:23');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938490742590103553, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 14:53:03');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938491885848322050, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 14:57:36');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938493614211948545, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 15:04:28');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938493823318974465, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 15:05:18');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938494205164216321, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 15:06:49');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938494229377933314, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 15:06:54');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938501099934208002, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '退出成功', '2025-06-27 15:34:12');
INSERT INTO `sys_logininfor` (`info_id`, `tenant_id`, `user_name`, `client_key`, `device_type`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (1938501125330718722, '000000', 'admin', 'pc', 'pc', '0:0:0:0:0:0:0:1', '内网IP', 'Chrome', 'OSX', '0', '登录成功', '2025-06-27 15:34:19');
COMMIT;
-- ----------------------------
@@ -2509,13 +2370,13 @@ INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482248804278275, '答题记录修改', 1937482248800083970, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:satRecord:edit', '#', 103, 1, '2025-06-24 20:09:41', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482248804278276, '答题记录删除', 1937482248800083970, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:satRecord:remove', '#', 103, 1, '2025-06-24 20:09:41', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482248804278277, '答题记录导出', 1937482248800083970, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:satRecord:export', '#', 103, 1, '2025-06-24 20:09:41', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044365, '回答问卷', 1937705497146040322, 5, 'answerSurvey', 'hq/answerSurvey/index', NULL, 1, 0, 'C', '0', '0', 'hq:answerSurvey:list', 'excel', 103, 1, '2025-06-25 17:51:49', 1, '2025-06-25 17:53:23', '问卷菜单');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044365, '调查问卷', 1937705497146040322, 5, 'answerSurvey', 'hq/answerSurvey/index', NULL, 1, 0, 'C', '0', '0', 'hq:answerSurvey:list', 'excel', 103, 1, '2025-06-25 17:51:49', 1, '2025-06-26 15:10:47', '问卷菜单');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044366, '回答问卷查询', 1937482251627044365, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:answerSurvey:query', '#', 103, 1, '2025-06-25 17:51:49', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044367, '回答问卷新增', 1937482251627044365, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:answerSurvey:add', '#', 103, 1, '2025-06-25 17:51:49', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044368, '回答问卷修改', 1937482251627044365, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:answerSurvey:edit', '#', 103, 1, '2025-06-25 17:51:49', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044369, '回答问卷删除', 1937482251627044365, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:answerSurvey:remove', '#', 103, 1, '2025-06-25 17:51:49', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044370, '回答问卷导出', 1937482251627044365, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:answerSurvey:export', '#', 103, 1, '2025-06-25 17:51:49', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044865, '问卷', 1937705497146040322, 4, 'satSurvey', 'hq/satSurvey/index', NULL, 1, 0, 'C', '0', '0', 'hq:satSurvey:list', 'form', 103, 1, '2025-06-24 20:09:47', 1, '2025-06-25 14:06:03', '问卷菜单');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044865, '问卷管理', 1937705497146040322, 4, 'satSurvey', 'hq/satSurvey/index', NULL, 1, 0, 'C', '0', '0', 'hq:satSurvey:list', 'form', 103, 1, '2025-06-24 20:09:47', 1, '2025-06-26 15:10:03', '问卷菜单');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044866, '问卷查询', 1937482251627044865, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:satSurvey:query', '#', 103, 1, '2025-06-24 20:09:47', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044867, '问卷新增', 1937482251627044865, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:satSurvey:add', '#', 103, 1, '2025-06-24 20:09:47', NULL, NULL, '');
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937482251627044868, '问卷修改', 1937482251627044865, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'hq:satSurvey:edit', '#', 103, 1, '2025-06-24 20:09:47', NULL, NULL, '');
@@ -2990,6 +2851,76 @@ INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `m
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938120324049936386, '000000', '角色管理', 1, 'org.dromara.system.controller.system.SysRoleController.add()', 'POST', 1, 'admin', '研发部门', '/system/role', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"roleId\":\"1938120323613728770\",\"roleName\":\"老师\",\"roleKey\":\"teacher\",\"roleSort\":4,\"dataScope\":\"1\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"remark\":\"\",\"menuIds\":[],\"deptIds\":[],\"superAdmin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 14:21:08', 234);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938120410511319041, '000000', '用户管理', 2, 'org.dromara.system.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/user', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-24 13:32:22\",\"updateBy\":null,\"updateTime\":null,\"userId\":\"1937383272285396994\",\"deptId\":103,\"userName\":\"wuzilong\",\"nickName\":\"wuzilong\",\"userType\":\"sys_user\",\"email\":\"\",\"phonenumber\":\"\",\"sex\":\"0\",\"status\":\"0\",\"remark\":\"\",\"roleIds\":[3,\"1938120227459309569\",\"1938120323613728770\"],\"postIds\":[1],\"roleId\":null,\"userIds\":null,\"excludeUserIds\":null,\"superAdmin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 14:21:29', 526);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938123146065747970, '000000', '问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.edit()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1937757151220342785\",\"deleted\":0,\"surveyCode\":\"001\",\"surveyTitle\":\"2025后勤问卷\",\"surveyDesc\":\"问卷描述\",\"surveyInstruction\":\"填写说明\",\"targetGroup\":\"2\",\"startTime\":\"2025-06-19 00:00:00\",\"endTime\":\"2025-06-25 14:17:52\",\"maxSubmitTimes\":1,\"isAnonymous\":1,\"isPublished\":0,\"status\":\"1\",\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 14:32:21', 145);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938126191482773506, '000000', '撤销发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.unpublishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1937757151220342785/unpublish', '0:0:0:0:0:0:0:1', '内网IP', '\"1937757151220342785\"', '{\"code\":500,\"msg\":\"操作失败\",\"data\":null}', 0, '', '2025-06-26 14:44:27', 166);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938126222805835777, '000000', '撤销发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.unpublishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1937757151220342785/unpublish', '0:0:0:0:0:0:0:1', '内网IP', '\"1937757151220342785\"', '{\"code\":500,\"msg\":\"操作失败\",\"data\":null}', 0, '', '2025-06-26 14:44:35', 73);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938126541065428993, '000000', '撤销发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.unpublishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1937757151220342785/unpublish', '0:0:0:0:0:0:0:1', '内网IP', '\"1937757151220342785\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 14:45:51', 140);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938126555036655618, '000000', '发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.publishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1937757151220342785/publish', '0:0:0:0:0:0:0:1', '内网IP', '\"1937757151220342785\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 14:45:54', 120);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938126568936579073, '000000', '撤销发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.unpublishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1937757151220342785/unpublish', '0:0:0:0:0:0:0:1', '内网IP', '\"1937757151220342785\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 14:45:57', 131);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938132634202152961, '000000', '菜单管理', 2, 'org.dromara.system.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":103,\"createBy\":null,\"createTime\":\"2025-06-24 20:09:47\",\"updateBy\":null,\"updateTime\":null,\"menuId\":\"1937482251627044865\",\"parentId\":\"1937705497146040322\",\"menuName\":\"问卷管理\",\"orderNum\":4,\"path\":\"satSurvey\",\"component\":\"hq/satSurvey/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"hq:satSurvey:list\",\"icon\":\"form\",\"remark\":\"问卷菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 15:10:03', 233);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938132818466316290, '000000', '菜单管理', 2, 'org.dromara.system.controller.system.SysMenuController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/menu', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":103,\"createBy\":null,\"createTime\":\"2025-06-25 17:51:49\",\"updateBy\":null,\"updateTime\":null,\"menuId\":\"1937482251627044365\",\"parentId\":\"1937705497146040322\",\"menuName\":\"调查问卷\",\"orderNum\":5,\"path\":\"answerSurvey\",\"component\":\"hq/answerSurvey/index\",\"queryParam\":null,\"isFrame\":\"1\",\"isCache\":\"0\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"hq:answerSurvey:list\",\"icon\":\"excel\",\"remark\":\"问卷菜单\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 15:10:47', 200);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938159601639108609, '000000', '发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.publishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1937757151220342785/publish', '0:0:0:0:0:0:0:1', '内网IP', '\"1937757151220342785\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 16:57:13', 253);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938159632303665153, '000000', '撤销发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.unpublishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1937757151220342785/unpublish', '0:0:0:0:0:0:0:1', '内网IP', '\"1937757151220342785\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 16:57:20', 145);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938161418494160897, '000000', '发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.publishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1937757151220342785/publish', '0:0:0:0:0:0:0:1', '内网IP', '\"1937757151220342785\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 17:04:26', 144);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938162558002671618, '000000', '问卷', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.add()', 'POST', 1, 'admin', '研发部门', '/hq/satSurvey', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1938162557168005122\",\"deleted\":null,\"surveyCode\":\"123\",\"surveyTitle\":\"123\",\"surveyDesc\":\"123\",\"surveyInstruction\":\"123\",\"targetGroup\":\"3\",\"startTime\":\"2025-06-26 00:00:00\",\"endTime\":\"2025-06-26 00:00:00\",\"maxSubmitTimes\":null,\"isAnonymous\":null,\"isPublished\":null,\"status\":null,\"remark\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 17:08:58', 228);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938163346800259074, '000000', '发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.publishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/publish', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 17:12:06', 127);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938163783691546625, '000000', '用户管理', 2, 'org.dromara.system.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/user', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-24 13:32:22\",\"updateBy\":null,\"updateTime\":null,\"userId\":\"1937383272285396994\",\"deptId\":103,\"userName\":\"wuzilong\",\"nickName\":\"wuzilong\",\"userType\":\"sys_user\",\"email\":\"\",\"phonenumber\":\"\",\"sex\":\"0\",\"status\":\"0\",\"remark\":\"\",\"roleIds\":[3,\"1938120227459309569\"],\"postIds\":[1],\"roleId\":null,\"userIds\":null,\"excludeUserIds\":null,\"superAdmin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 17:13:50', 479);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938163941082804226, '000000', '角色管理', 2, 'org.dromara.system.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/role', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"roleId\":3,\"roleName\":\"本部门及以下\",\"roleKey\":\"test1\",\"roleSort\":3,\"dataScope\":\"4\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"remark\":\"\",\"menuIds\":[1,100,1001,1002,1003,1004,1005,1006,1007,101,1008,1009,1010,1011,1012,102,1013,1014,1015,1016,103,1017,1018,1019,1020,104,1021,1022,1023,1024,1025,105,1026,1027,1028,1029,1030,106,1031,1032,1033,1034,1035,107,1036,1037,1038,1039,108,500,1040,1041,1042,501,1043,1044,1045,1050,118,1600,1601,1602,1603,1620,1621,1622,1623,123,1061,1062,1063,1064,1065,\"1937078443615322113\",\"1937705497146040322\",\"1937482254454005762\",\"1937482254454005763\",\"1937482254454005764\",\"1937482254454005765\",\"1937482254454005766\",\"1937482254454005767\",\"1937482253107634177\",\"1937482253107634178\",\"1937482253107634179\",\"1937482253107634180\",\"1937482253107634181\",\"1937482253107634182\",\"1937482253527064577\",\"1937482253527064578\",\"1937482253527064579\",\"1937482253527064580\",\"1937482253527064581\",\"1937482253527064582\",\"1937482251627044865\",\"1937482251627044866\",\"1937482251627044867\",\"1937482251627044868\",\"1937482251627044869\",\"1937482251627044870\",\"1937482251627044365\",\"1937482251627044366\",\"1937482251627044367\",\"1937482251627044368\",\"1937482251627044369\",\"1937482251627044370\",\"1937482252721758210\",\"1937482252721758211\",\"1937482252721758212\",\"1937482252721758213\",\"1937482252721758214\",\"1937482252721758215\",\"1937482248800083970\",\"1937482248804278273\",\"1937482248804278274\",\"1937482248804278275\",\"1937482248804278276\",\"1937482248804278277\",\"1937705241914253314\",\"1937079022693515266\",\"1937079022693515267\",\"1937079022693515268\",\"1937079022693515269\",\"1937079022693515270\",\"1937079022693515271\",\"1937079017668739074\",\"1937079017681321985\",\"1937079017681321986\",\"1937079017681321987\",\"1937079017681321988\",\"1937079017681321989\",\"1937133799553060166\",\"1937133799553060167\",\"1937133799553060168\",\"1937133799553060169\",\"1937133799553060170\",\"1937133799553060171\",5,11638,11639,11640,11641,11642,11643,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,11618,11629,11619,11632,11633],\"deptIds\":[],\"superAdmin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 17:14:28', 702);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938164005750583297, '000000', '用户管理', 2, 'org.dromara.system.controller.system.SysUserController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/user', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-24 13:32:22\",\"updateBy\":null,\"updateTime\":null,\"userId\":\"1937383272285396994\",\"deptId\":103,\"userName\":\"wuzilong\",\"nickName\":\"wuzilong\",\"userType\":\"sys_user\",\"email\":\"\",\"phonenumber\":\"\",\"sex\":\"0\",\"status\":\"0\",\"remark\":\"\",\"roleIds\":[3,\"1938120227459309569\"],\"postIds\":[1],\"roleId\":null,\"userIds\":null,\"excludeUserIds\":null,\"superAdmin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 17:14:43', 388);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938164052714205186, '000000', '用户管理', 4, 'org.dromara.system.controller.system.SysUserController.insertAuthRole()', 'PUT', 1, 'admin', '研发部门', '/system/user/authRole', '0:0:0:0:0:0:0:1', '内网IP', '{\"roleIds\":\"3,1938120227459309569\",\"userId\":\"4\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 17:14:54', 266);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938188025606893570, '000000', '用户头像', 2, 'org.dromara.system.controller.system.SysProfileController.avatar()', 'POST', 1, 'wuzilong', '研发部门', '/system/user/profile/avatar', '0:0:0:0:0:0:0:1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"imgUrl\":\"http://47.99.164.66:20004/ruoyi/2025/06/26/c88c097f331647d4bfffa87e17da1f3d.jpeg\"}}', 0, '', '2025-06-26 18:50:10', 1678);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938188231459139585, '000000', '用户头像', 2, 'org.dromara.system.controller.system.SysProfileController.avatar()', 'POST', 1, 'admin', '研发部门', '/system/user/profile/avatar', '0:0:0:0:0:0:0:1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"imgUrl\":\"http://47.99.164.66:20004/ruoyi/2025/06/26/2a24f30f55544c39a6e02c74137ca770.jpeg\"}}', 0, '', '2025-06-26 18:50:59', 433);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938188367643996162, '000000', '用户头像', 2, 'org.dromara.system.controller.system.SysProfileController.avatar()', 'POST', 1, 'admin', '研发部门', '/system/user/profile/avatar', '0:0:0:0:0:0:0:1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"imgUrl\":\"http://47.99.164.66:20004/ruoyi/2025/06/26/5876680ac2cf451dac5aaf1255fa41d7.jpeg\"}}', 0, '', '2025-06-26 18:51:31', 368);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938188582174257154, '000000', '用户头像', 2, 'org.dromara.system.controller.system.SysProfileController.avatar()', 'POST', 1, 'wuzilong', '研发部门', '/system/user/profile/avatar', '0:0:0:0:0:0:0:1', '内网IP', '', '{\"code\":500,\"msg\":\"文件格式不正确,请上传[bmp, gif, jpg, jpeg, png]格式\",\"data\":null}', 0, '', '2025-06-26 18:52:22', 30);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938188596527165441, '000000', '用户头像', 2, 'org.dromara.system.controller.system.SysProfileController.avatar()', 'POST', 1, 'wuzilong', '研发部门', '/system/user/profile/avatar', '0:0:0:0:0:0:0:1', '内网IP', '', '{\"code\":500,\"msg\":\"文件格式不正确,请上传[bmp, gif, jpg, jpeg, png]格式\",\"data\":null}', 0, '', '2025-06-26 18:52:26', 1);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938188609395290113, '000000', '用户头像', 2, 'org.dromara.system.controller.system.SysProfileController.avatar()', 'POST', 1, 'wuzilong', '研发部门', '/system/user/profile/avatar', '0:0:0:0:0:0:0:1', '内网IP', '', '{\"code\":500,\"msg\":\"文件格式不正确,请上传[bmp, gif, jpg, jpeg, png]格式\",\"data\":null}', 0, '', '2025-06-26 18:52:29', 22);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938188613589594113, '000000', '用户头像', 2, 'org.dromara.system.controller.system.SysProfileController.avatar()', 'POST', 1, 'wuzilong', '研发部门', '/system/user/profile/avatar', '0:0:0:0:0:0:0:1', '内网IP', '', '{\"code\":500,\"msg\":\"文件格式不正确,请上传[bmp, gif, jpg, jpeg, png]格式\",\"data\":null}', 0, '', '2025-06-26 18:52:30', 0);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938188651673874433, '000000', '用户头像', 2, 'org.dromara.system.controller.system.SysProfileController.avatar()', 'POST', 1, 'wuzilong', '研发部门', '/system/user/profile/avatar', '0:0:0:0:0:0:0:1', '内网IP', '', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"imgUrl\":\"http://47.99.164.66:20004/ruoyi/2025/06/26/b675346b357d4b4b8fb5fa0143ad11d6.jpeg\"}}', 0, '', '2025-06-26 18:52:39', 430);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938191196093870081, '000000', '撤销发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.unpublishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/unpublish', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:02:46', 255);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938191310573203458, '000000', '问卷题目管理', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.updateSurveyQuestions()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/questions', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\" [{\"questionId\":\"1937751489358733313\",\"questionTitle\":\"你觉得宿舍各项设施是否齐全?\",\"questionType\":\"1\",\"categoryId\":\"1937713488394067969\",\"sortOrder\":1,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751520555966465\",\"questionTitle\":\"你对宿舍管理人员的态度满意吗?\",\"questionType\":\"1\",\"categoryId\":\"1937713488394067969\",\"sortOrder\":2,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751560775147522\",\"questionTitle\":\"对宿舍维修服务是否满意?\",\"questionType\":\"1\",\"categoryId\":\"1937713488394067969\",\"sortOrder\":3,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751675921375233\",\"questionTitle\":\"图书馆后勤态度图书馆后勤态度图书馆后勤态度图书馆后勤态度图书馆后勤态度图?\",\"questionType\":\"1\",\"categoryId\":\"1937713488394067969\",\"sortOrder\":4,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751675921375234\",\"questionTitle\":\"您对宿舍楼整体环境的满意度如何?\",\"questionType\":\"1\",\"categoryId\":1,\"sortOrder\":5,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751675921375235\",\"questionTitle\":\"您对宿舍房间内设施(床铺、桌椅、柜子等)的满意度如何?\",\"questionType\":\"1\",\"categoryId\":1,\"sortOrder\":6,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751675921375236\",\"questionTitle\":\"您对宿舍楼公共区域卫生状况的满意度如何?\",\"questiLine truncated
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938191364046385154, '000000', '发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.publishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/publish', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:03:26', 139);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938192168740384769, '000000', '角色管理', 2, 'org.dromara.system.controller.system.SysRoleController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/role', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-26 14:20:45\",\"updateBy\":null,\"updateTime\":null,\"roleId\":\"1938120227459309569\",\"roleName\":\"学生\",\"roleKey\":\"student\",\"roleSort\":3,\"dataScope\":\"1\",\"menuCheckStrictly\":true,\"deptCheckStrictly\":true,\"status\":\"0\",\"remark\":\"\",\"menuIds\":[\"1937078443615322113\",\"1937705497146040322\",\"1937482254454005762\",\"1937482254454005763\",\"1937482254454005764\",\"1937482254454005765\",\"1937482254454005766\",\"1937482254454005767\",\"1937482253107634177\",\"1937482253107634178\",\"1937482253107634179\",\"1937482253107634180\",\"1937482253107634181\",\"1937482253107634182\",\"1937482253527064577\",\"1937482253527064578\",\"1937482253527064579\",\"1937482253527064580\",\"1937482253527064581\",\"1937482253527064582\",\"1937482251627044865\",\"1937482251627044866\",\"1937482251627044867\",\"1937482251627044868\",\"1937482251627044869\",\"1937482251627044870\",\"1937482251627044365\",\"1937482251627044366\",\"1937482251627044367\",\"1937482251627044368\",\"1937482251627044369\",\"1937482251627044370\",\"1937482252721758210\",\"1937482252721758211\",\"1937482252721758212\",\"1937482252721758213\",\"1937482252721758214\",\"1937482252721758215\",\"1937482248800083970\",\"1937482248804278273\",\"1937482248804278274\",\"1937482248804278275\",\"1937482248804278276\",\"1937482248804278277\",\"1937705241914253314\",\"1937079022693515266\",\"1937079022693515267\",\"1937079022693515268\",\"1937079022693515269\",\"1937079022693515270\",\"1937079022693515271\",\"1937079017668739074\",\"1937079017681321985\",\"1937079017681321986\",\"1937079017681321987\",\"1937079017681321988\",\"1937079017681321989\",\"1937133799553060166\",\"1937133799553060167\",\"1937133799553060168\",\"1937133799553060169\",\"1937133799553060170\",\"1937133799553060171\"],\"deptIds\":[],\"superAdmin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:06:38', 706);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938198463002382338, '000000', '撤销发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.unpublishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/unpublish', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:31:38', 211);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938198579348180993, '000000', '问卷题目管理', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.updateSurveyQuestions()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/questions', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\" [{\"questionId\":\"1937751489358733313\",\"questionTitle\":\"你觉得宿舍各项设施是否齐全?\",\"questionType\":\"1\",\"categoryId\":\"1937713488394067969\",\"sortOrder\":1,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751520555966465\",\"questionTitle\":\"你对宿舍管理人员的态度满意吗?\",\"questionType\":\"1\",\"categoryId\":\"1937713488394067969\",\"sortOrder\":2,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751675921375239\",\"questionTitle\":\"您认为宿舍楼还需要改善哪些方面?(可多选)\",\"questionType\":\"2\",\"categoryId\":1,\"sortOrder\":3,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751675921375240\",\"questionTitle\":\"您希望宿舍楼增加哪些便民设施?(可多选)\",\"questionType\":\"2\",\"categoryId\":1,\"sortOrder\":4,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751675921375241\",\"questionTitle\":\"请您对宿舍服务提出具体的意见和建议\",\"questionType\":\"3\",\"categoryId\":1,\"sortOrder\":5,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]},{\"questionId\":\"1937751675921375250\",\"questionTitle\":\"请您对食堂服务提出具体的意见和建议\",\"questionType\":\"3\",\"categoryId\":2,\"sortOrder\":6,\"weight\":1,\"isRequired\":1,\"options\":[{\"id\":1,\"deleted\":0,\"optionText\":\"非常满意\",\"optionValue\":5,\"sortOrder\":1,\"status\":\"0\",\"remark\":null},{\"id\":2,\"deleted\":0,\"optionText\":\"满意\",\"optionValue\":3,\"sortOrder\":2,\"status\":\"0\",\"remark\":null},{\"id\":3,\"deleted\":0,\"optionText\":\"一般\",\"optionValue\":1,\"sortOrder\":3,\"status\":\"0\",\"remark\":null},{\"id\":4,\"deleted\":0,\"optionText\":\"不满意\",\"optionValue\":0,\"sortOrder\":4,\"status\":\"0\",\"remark\":null}]}]', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:32:06', 510);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938198593394905089, '000000', '发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.publishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/publish', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:32:09', 113);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938198655760011265, '000000', '撤销发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.unpublishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/unpublish', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:32:24', 141);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938198781509439489, '000000', '问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.edit()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"id\":\"1938162557168005122\",\"deleted\":0,\"surveyCode\":\"问卷编号-000123123\",\"surveyTitle\":\"测试问卷标题\",\"surveyDesc\":\"问卷详细描述阿萨德发 问卷详细描述阿萨德发 问卷详细描述阿萨德发 \",\"surveyInstruction\":\"问卷填写说明\",\"targetGroup\":\"3\",\"startTime\":\"2025-06-26 00:00:00\",\"endTime\":\"2025-06-26 00:00:00\",\"maxSubmitTimes\":1,\"isAnonymous\":0,\"isPublished\":0,\"status\":\"0\",\"remark\":null,\"targetGroupIn\":null,\"statusIn\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:32:54', 125);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938198793534509058, '000000', '发布问卷', 2, 'org.dromara.zhxy.controller.HqSatSurveyController.publishSurvey()', 'PUT', 1, 'admin', '研发部门', '/hq/satSurvey/1938162557168005122/publish', '0:0:0:0:0:0:0:1', '内网IP', '\"1938162557168005122\"', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-26 19:32:57', 132);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938205153537998849, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'wuzilong', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-26T11:42:21.547Z\",\"endTime\":\"2025-06-26T11:58:11.369Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"3\",\"options\":[{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"3\",\"options\":[{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"3,5\",\"options\":[{\"optionId\":1,\"optionValue\":\"5\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"3,5\",\"options\":[{\"optionId\":1,\"optionValue\":\"5\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议\",\"options\":[]}],\"remark\":\"\"}', '', 1, '\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column \'user_type\' at row 1\n### The error may exist in org/dromara/zhxy/mapper/HqSatRecordMapper.java (best guess)\n### The error may involve org.dromara.zhxy.mapper.HqSatRecordMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO hq_sat_record (id, survey_id, user_id, user_type, submit_time, total_score, avg_score, remark, create_dept, create_by, create_time, update_by, update_time, tenant_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, \'000000\')\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column \'user_type\' at row 1\n; Data truncation: Data too long for column \'user_type\' at row 1', '2025-06-26 19:58:13', 646);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938205593109446658, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'wuzilong', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-26T11:42:21.547Z\",\"endTime\":\"2025-06-26T11:59:57.592Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"3\",\"options\":[{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"3\",\"options\":[{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"3,5\",\"options\":[{\"optionId\":1,\"optionValue\":\"5\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"3,5\",\"options\":[{\"optionId\":1,\"optionValue\":\"5\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议\",\"options\":[]}],\"remark\":\"\"}', '', 1, '\n### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column \'user_type\' at row 1\n### The error may exist in org/dromara/zhxy/mapper/HqSatRecordMapper.java (best guess)\n### The error may involve org.dromara.zhxy.mapper.HqSatRecordMapper.insert-Inline\n### The error occurred while setting parameters\n### SQL: INSERT INTO hq_sat_record (id, survey_id, user_id, user_type, submit_time, total_score, avg_score, remark, create_dept, create_by, create_time, update_by, update_time, tenant_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, \'000000\')\n### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column \'user_type\' at row 1\n; Data truncation: Data too long for column \'user_type\' at row 1', '2025-06-26 19:59:58', 264);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938208007468331009, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'wuzilong', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-26T12:09:01.757Z\",\"endTime\":\"2025-06-26T12:09:32.783Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"1\",\"options\":[{\"optionId\":3,\"optionValue\":\"1\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"3\",\"options\":[{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"3,5\",\"options\":[{\"optionId\":1,\"optionValue\":\"5\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"3,5\",\"options\":[{\"optionId\":1,\"optionValue\":\"5\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"123\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"123213\",\"options\":[]}],\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"id\":\"1938208005199212546\",\"deleted\":0,\"surveyId\":\"1938162557168005122\",\"userId\":\"1937383272285396994\",\"userType\":\"1\",\"userDept\":null,\"submitTime\":\"2025-06-26 20:09:33\",\"totalScore\":0,\"avgScore\":0,\"remark\":\"\"}}', 0, '', '2025-06-26 20:09:34', 724);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938212521126625282, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'wuzilong', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-26T12:27:17.831Z\",\"endTime\":\"2025-06-26T12:27:29.336Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"1\",\"options\":[{\"optionId\":3,\"optionValue\":\"1\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"1\",\"options\":[{\"optionId\":3,\"optionValue\":\"1\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"1\",\"options\":[{\"optionId\":3,\"optionValue\":\"1\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"1\",\"options\":[{\"optionId\":3,\"optionValue\":\"1\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"123123\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"123123\",\"options\":[]}],\"remark\":\"\"}', '', 1, '您已经答过这份问卷', '2025-06-26 20:27:30', 157);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938401697029574657, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'admin', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-27T00:58:48.193Z\",\"endTime\":\"2025-06-27T00:59:11.846Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"1\",\"options\":[{\"optionId\":3,\"optionValue\":\"1\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"3\",\"options\":[{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"3,5\",\"options\":[{\"optionId\":1,\"optionValue\":\"5\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"5,3\",\"options\":[{\"optionId\":1,\"optionValue\":\"5\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"3\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"您对宿舍服务提出具体的意见和建议您对宿舍服务提出具体的意见和建议您对宿舍服务提出具体的意见和建议\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"堂服务提出具体的意见堂服务提出具体的意见堂服务提出具体的意见堂服务提出具体的意见\",\"options\":[]}],\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"id\":\"1938401694286499842\",\"deleted\":0,\"surveyId\":\"1938162557168005122\",\"userId\":1,\"userType\":\"1\",\"userDept\":null,\"submitTime\":\"2025-06-27 08:59:12\",\"totalScore\":0,\"avgScore\":0,\"remark\":\"\"}}', 0, '', '2025-06-27 08:59:13', 810);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938405425338060802, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'admin', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-27T01:13:42.534Z\",\"endTime\":\"2025-06-27T01:14:01.161Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"C\",\"options\":[{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"C\",\"options\":[{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"B,A\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"B\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"B,C\",\"options\":[{\"optionId\":2,\"optionValue\":\"B\",\"optionText\":\"满意\",\"isSelected\":true},{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"请您对食堂服务提出具体的意见和建议 请您对食堂服务提出具体的意见和建议 请您对食堂服务提出具体的意见和建议 \",\"options\":[]}],\"remark\":\"\"}', '', 1, '您已经答过这份问卷', '2025-06-27 09:14:02', 241);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938409123413929986, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'admin', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-27T01:28:28.326Z\",\"endTime\":\"2025-06-27T01:28:42.470Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"C\",\"options\":[{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"B\",\"options\":[{\"optionId\":2,\"optionValue\":\"B\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"B,A\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"B\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"A,C\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"请您对宿舍服务提出具体的意见和建议 请您对宿舍服务提出具体的意见和建议 请您对宿舍服务提出具体的意见和建议 \",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议\",\"options\":[]}],\"remark\":\"\"}', '', 1, '您已达到该问卷的最大提交次数限制(1次)', '2025-06-27 09:28:44', 489);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938409342012665858, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'admin', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-27T01:29:20.589Z\",\"endTime\":\"2025-06-27T01:29:34.435Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"A\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"B\",\"options\":[{\"optionId\":2,\"optionValue\":\"B\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"A,C\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"C,A\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议\",\"options\":[]}],\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"id\":\"1938409338980184066\",\"deleted\":0,\"surveyId\":\"1938162557168005122\",\"userId\":1,\"userType\":\"1\",\"userDept\":null,\"submitTime\":\"2025-06-27 09:29:35\",\"totalScore\":0,\"avgScore\":0,\"remark\":\"\"}}', 0, '', '2025-06-27 09:29:36', 1082);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938428178283847682, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'admin', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-27T02:44:08.226Z\",\"endTime\":\"2025-06-27T02:44:24.772Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"D\",\"options\":[{\"optionId\":4,\"optionValue\":\"D\",\"optionText\":\"不满意\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"C\",\"options\":[{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"B,D\",\"options\":[{\"optionId\":2,\"optionValue\":\"B\",\"optionText\":\"满意\",\"isSelected\":true},{\"optionId\":4,\"optionValue\":\"D\",\"optionText\":\"不满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"C,A\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议请您对宿舍服务提出具体的意见和建议111\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的1111意见和建议请您对食堂服务提出具体的意见和建议请您对食堂服务提出具体的意见和建议\",\"options\":[]}],\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"id\":\"1938428174148263938\",\"deleted\":0,\"surveyId\":\"1938162557168005122\",\"userId\":1,\"userType\":\"1\",\"userDept\":null,\"submitTime\":\"2025-06-27 10:44:26\",\"totalScore\":0,\"avgScore\":0,\"remark\":\"\"}}', 0, '', '2025-06-27 10:44:27', 1235);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938436456199970817, '000000', '提交问卷答案', 1, 'org.dromara.zhxy.controller.HqSatSurveyController.submitSurveyAnswer()', 'POST', 1, 'wuzilong', '研发部门', '/hq/satSurvey/answer/submit', '0:0:0:0:0:0:0:1', '内网IP', '{\"surveyId\":\"1938162557168005122\",\"startTime\":\"2025-06-27T03:17:02.382Z\",\"endTime\":\"2025-06-27T03:17:18.662Z\",\"isAnonymous\":0,\"answers\":[{\"questionId\":\"1937751489358733313\",\"questionType\":\"1\",\"answerValue\":\"A\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true}]},{\"questionId\":\"1937751520555966465\",\"questionType\":\"1\",\"answerValue\":\"B\",\"options\":[{\"optionId\":2,\"optionValue\":\"B\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375239\",\"questionType\":\"2\",\"answerValue\":\"B,A\",\"options\":[{\"optionId\":1,\"optionValue\":\"A\",\"optionText\":\"非常满意\",\"isSelected\":true},{\"optionId\":2,\"optionValue\":\"B\",\"optionText\":\"满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375240\",\"questionType\":\"2\",\"answerValue\":\"C,D\",\"options\":[{\"optionId\":3,\"optionValue\":\"C\",\"optionText\":\"一般\",\"isSelected\":true},{\"optionId\":4,\"optionValue\":\"D\",\"optionText\":\"不满意\",\"isSelected\":true}]},{\"questionId\":\"1937751675921375241\",\"questionType\":\"3\",\"answerValue\":\"的意见和建议1231231\",\"options\":[]},{\"questionId\":\"1937751675921375250\",\"questionType\":\"3\",\"answerValue\":\"具体的意见和建议131231312\",\"options\":[]}],\"remark\":\"\"}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":{\"id\":\"1938436452395737089\",\"deleted\":0,\"surveyId\":\"1938162557168005122\",\"userId\":\"1937383272285396994\",\"userType\":\"1\",\"userDept\":null,\"submitTime\":\"2025-06-27 11:17:19\",\"totalScore\":0,\"avgScore\":0,\"remark\":\"\"}}', 0, '', '2025-06-27 11:17:20', 1162);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483472124829697, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"deptId\":100,\"parentId\":0,\"deptName\":\"杭州第一技师学院\",\"deptCategory\":null,\"orderNum\":0,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:24:10', 952);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483640752627713, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"deptId\":101,\"parentId\":100,\"deptName\":\"二级学院\",\"deptCategory\":null,\"orderNum\":1,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:24:50', 415);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483700710203393, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-16 14:58:45\",\"updateBy\":null,\"updateTime\":null,\"deptId\":103,\"parentId\":101,\"deptName\":\"智能控制学院\",\"deptCategory\":null,\"orderNum\":1,\"leader\":1,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:25:04', 319);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483746100961282, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"deptId\":104,\"parentId\":101,\"deptName\":\"智能制造学院\",\"deptCategory\":null,\"orderNum\":2,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:25:15', 377);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483760063799298, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"deptId\":104,\"parentId\":101,\"deptName\":\"智能制造学院\",\"deptCategory\":null,\"orderNum\":2,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:25:18', 287);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483802820534274, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"deptId\":105,\"parentId\":101,\"deptName\":\"医药健康学院\",\"deptCategory\":null,\"orderNum\":3,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:25:29', 355);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483851835170818, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"deptId\":106,\"parentId\":101,\"deptName\":\"餐饮休闲学院\",\"deptCategory\":null,\"orderNum\":4,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:25:40', 396);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483891794305026, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"deptId\":107,\"parentId\":101,\"deptName\":\"数字信息学院\",\"deptCategory\":null,\"orderNum\":5,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:25:50', 362);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938483954432040962, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":101,\"deptName\":\"人文学院\",\"deptCategory\":null,\"orderNum\":7,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:26:05', 253);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484049919565825, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":101,\"deptName\":\"生态园林学院\",\"deptCategory\":null,\"orderNum\":0,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:26:27', 194);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484332238168066, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-16 14:58:45\",\"updateBy\":null,\"updateTime\":null,\"deptId\":102,\"parentId\":100,\"deptName\":\"行政单位\",\"deptCategory\":null,\"orderNum\":2,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:27:35', 393);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484400366247938, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-16 14:58:45\",\"updateBy\":null,\"updateTime\":null,\"deptId\":108,\"parentId\":102,\"deptName\":\"院领导\",\"deptCategory\":null,\"orderNum\":0,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:27:51', 326);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484432066797569, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-16 14:58:45\",\"updateBy\":null,\"updateTime\":null,\"deptId\":102,\"parentId\":100,\"deptName\":\"行政单位\",\"deptCategory\":null,\"orderNum\":0,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:27:59', 268);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484465994522625, '000000', '部门管理', 2, 'org.dromara.system.controller.system.SysDeptController.edit()', 'PUT', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":\"2025-06-20 16:22:20\",\"updateBy\":null,\"updateTime\":null,\"deptId\":109,\"parentId\":102,\"deptName\":\"办公室\",\"deptCategory\":null,\"orderNum\":2,\"leader\":null,\"phone\":\"15888888888\",\"email\":\"xxx@qq.com\",\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:28:07', 314);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484510433173506, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"人事处\",\"deptCategory\":null,\"orderNum\":3,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:28:17', 195);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484571141529602, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"教务处\",\"deptCategory\":null,\"orderNum\":4,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:28:32', 217);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484606537261058, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"科研处\",\"deptCategory\":null,\"orderNum\":5,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:28:40', 212);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484642499223553, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"学生处\",\"deptCategory\":null,\"orderNum\":6,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:28:49', 174);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484683938947074, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"计划财务处\",\"deptCategory\":null,\"orderNum\":7,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:28:59', 225);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484727639400449, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"招生就业处\",\"deptCategory\":null,\"orderNum\":8,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:29:09', 157);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484763211292673, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"培训处\",\"deptCategory\":null,\"orderNum\":9,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:29:18', 175);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484793892626434, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"总务处\",\"deptCategory\":null,\"orderNum\":10,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:29:25', 160);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484835030360066, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"保卫处\",\"deptCategory\":null,\"orderNum\":11,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:29:35', 173);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484865749442562, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"基建处\",\"deptCategory\":null,\"orderNum\":12,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:29:42', 196);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938484924218040322, '000000', '部门管理', 1, 'org.dromara.system.controller.system.SysDeptController.add()', 'POST', 1, 'admin', '研发部门', '/system/dept', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"deptId\":null,\"parentId\":102,\"deptName\":\"临安校区综合办\",\"deptCategory\":null,\"orderNum\":13,\"leader\":null,\"phone\":null,\"email\":null,\"status\":\"0\",\"belongDeptId\":null}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 14:29:56', 197);
INSERT INTO `sys_oper_log` (`oper_id`, `tenant_id`, `title`, `business_type`, `method`, `request_method`, `operator_type`, `oper_name`, `dept_name`, `oper_url`, `oper_ip`, `oper_location`, `oper_param`, `json_result`, `status`, `error_msg`, `oper_time`, `cost_time`) VALUES (1938504776858226689, '000000', '用户管理', 1, 'org.dromara.system.controller.system.SysUserController.add()', 'POST', 1, 'admin', '智能控制学院', '/system/user', '0:0:0:0:0:0:0:1', '内网IP', '{\"createDept\":null,\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"userId\":\"1938504775352471554\",\"deptId\":109,\"userName\":\"long五\",\"nickName\":\"longwu\",\"userType\":null,\"email\":\"longwu@qq.com\",\"phonenumber\":\"13998990011\",\"sex\":\"0\",\"status\":\"0\",\"remark\":\"备注\",\"roleIds\":[3,\"1938120227459309569\",4],\"postIds\":[],\"roleId\":null,\"userIds\":null,\"excludeUserIds\":null,\"superAdmin\":false}', '{\"code\":200,\"msg\":\"操作成功\",\"data\":null}', 0, '', '2025-06-27 15:48:49', 779);
COMMIT;
-- ----------------------------
@@ -3056,6 +2987,10 @@ INSERT INTO `sys_oss` (`oss_id`, `tenant_id`, `file_name`, `original_name`, `fil
INSERT INTO `sys_oss` (`oss_id`, `tenant_id`, `file_name`, `original_name`, `file_suffix`, `url`, `ext1`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `service`) VALUES (1937429742304845825, '000000', '2025/06/24/df073cb12ee24a7e8b0b284831c6db38.jpg', 'f247f67237c907d1822a983edd1a834b.jpg', '.jpg', 'http://47.99.164.66:20004/ruoyi/2025/06/24/df073cb12ee24a7e8b0b284831c6db38.jpg', NULL, 103, '2025-06-24 16:37:01', 1, '2025-06-24 16:37:01', 1, 'minio');
INSERT INTO `sys_oss` (`oss_id`, `tenant_id`, `file_name`, `original_name`, `file_suffix`, `url`, `ext1`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `service`) VALUES (1937429742543921154, '000000', '2025/06/24/fa4978c7179e44b2a45b111d68e7e27d.jpg', 'f7ed000a33e283acdabbe92e13f41e69.jpg', '.jpg', 'http://47.99.164.66:20004/ruoyi/2025/06/24/fa4978c7179e44b2a45b111d68e7e27d.jpg', NULL, 103, '2025-06-24 16:37:01', 1, '2025-06-24 16:37:01', 1, 'minio');
INSERT INTO `sys_oss` (`oss_id`, `tenant_id`, `file_name`, `original_name`, `file_suffix`, `url`, `ext1`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `service`) VALUES (1938010080976248833, '000000', '2025/06/26/1ac9cee08caf40abb9f5633ae5125d9b.jpg', 'f7ed000a33e283acdabbe92e13f41e69.jpg', '.jpg', 'http://47.99.164.66:20004/ruoyi/2025/06/26/1ac9cee08caf40abb9f5633ae5125d9b.jpg', NULL, 103, '2025-06-26 07:03:04', 1, '2025-06-26 07:03:04', 1, 'minio');
INSERT INTO `sys_oss` (`oss_id`, `tenant_id`, `file_name`, `original_name`, `file_suffix`, `url`, `ext1`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `service`) VALUES (1938188024470237185, '000000', '2025/06/26/c88c097f331647d4bfffa87e17da1f3d.jpeg', '9648bfe1d4289e6b6a9d86790f226549.jpeg', '.jpeg', 'http://47.99.164.66:20004/ruoyi/2025/06/26/c88c097f331647d4bfffa87e17da1f3d.jpeg', NULL, 103, '2025-06-26 18:50:09', 1937383272285396994, '2025-06-26 18:50:09', 1937383272285396994, 'minio');
INSERT INTO `sys_oss` (`oss_id`, `tenant_id`, `file_name`, `original_name`, `file_suffix`, `url`, `ext1`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `service`) VALUES (1938188230729330689, '000000', '2025/06/26/2a24f30f55544c39a6e02c74137ca770.jpeg', 'd0fcba42af30abd01cca39eeca1f4f1b.jpeg', '.jpeg', 'http://47.99.164.66:20004/ruoyi/2025/06/26/2a24f30f55544c39a6e02c74137ca770.jpeg', NULL, 103, '2025-06-26 18:50:59', 1, '2025-06-26 18:50:59', 1, 'minio');
INSERT INTO `sys_oss` (`oss_id`, `tenant_id`, `file_name`, `original_name`, `file_suffix`, `url`, `ext1`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `service`) VALUES (1938188366855467010, '000000', '2025/06/26/5876680ac2cf451dac5aaf1255fa41d7.jpeg', 'd0fcba42af30abd01cca39eeca1f4f1b.jpeg', '.jpeg', 'http://47.99.164.66:20004/ruoyi/2025/06/26/5876680ac2cf451dac5aaf1255fa41d7.jpeg', NULL, 103, '2025-06-26 18:51:31', 1, '2025-06-26 18:51:31', 1, 'minio');
INSERT INTO `sys_oss` (`oss_id`, `tenant_id`, `file_name`, `original_name`, `file_suffix`, `url`, `ext1`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `service`) VALUES (1938188650860179457, '000000', '2025/06/26/b675346b357d4b4b8fb5fa0143ad11d6.jpeg', '8980aea4b2f13f4e277b1c458de1f84f.jpeg', '.jpeg', 'http://47.99.164.66:20004/ruoyi/2025/06/26/b675346b357d4b4b8fb5fa0143ad11d6.jpeg', NULL, 103, '2025-06-26 18:52:39', 1937383272285396994, '2025-06-26 18:52:39', 1937383272285396994, 'minio');
COMMIT;
-- ----------------------------
@@ -3158,9 +3093,9 @@ CREATE TABLE `sys_role` (
-- ----------------------------
BEGIN;
INSERT INTO `sys_role` (`role_id`, `tenant_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '000000', '超级管理员', 'superadmin', 1, '1', 1, 1, '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL, '超级管理员');
INSERT INTO `sys_role` (`role_id`, `tenant_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, '000000', '本部门及以下', 'test1', 3, '4', 1, 1, '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-24 13:33:38', '');
INSERT INTO `sys_role` (`role_id`, `tenant_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, '000000', '本部门及以下', 'test1', 3, '4', 1, 1, '0', '0', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-26 17:14:27', '');
INSERT INTO `sys_role` (`role_id`, `tenant_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, '000000', '仅本人', 'test2', 4, '5', 1, 1, '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL, '');
INSERT INTO `sys_role` (`role_id`, `tenant_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1938120227459309569, '000000', '学生', 'student', 3, '1', 1, 1, '0', '0', 103, 1, '2025-06-26 14:20:45', 1, '2025-06-26 14:20:45', '');
INSERT INTO `sys_role` (`role_id`, `tenant_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1938120227459309569, '000000', '学生', 'student', 3, '1', 1, 1, '0', '0', 103, 1, '2025-06-26 14:20:45', 1, '2025-06-26 19:06:37', '');
INSERT INTO `sys_role` (`role_id`, `tenant_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1938120323613728770, '000000', '老师', 'teacher', 4, '1', 1, 1, '0', '0', 103, 1, '2025-06-26 14:21:08', 1, '2025-06-26 14:21:08', '');
COMMIT;
@@ -3304,6 +3239,56 @@ INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 193707902269351526
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937079022693515269);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937079022693515270);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937079022693515271);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937133799553060166);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937133799553060167);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937133799553060168);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937133799553060169);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937133799553060170);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937133799553060171);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482248800083970);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482248804278273);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482248804278274);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482248804278275);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482248804278276);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482248804278277);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044365);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044366);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044367);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044368);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044369);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044370);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044865);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044866);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044867);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044868);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044869);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482251627044870);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482252721758210);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482252721758211);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482252721758212);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482252721758213);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482252721758214);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482252721758215);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253107634177);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253107634178);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253107634179);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253107634180);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253107634181);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253107634182);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253527064577);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253527064578);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253527064579);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253527064580);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253527064581);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482253527064582);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482254454005762);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482254454005763);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482254454005764);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482254454005765);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482254454005766);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937482254454005767);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937705241914253314);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (3, 1937705497146040322);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (4, 5);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (4, 1500);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (4, 1501);
@@ -3317,6 +3302,69 @@ INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (4, 1508);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (4, 1509);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (4, 1510);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (4, 1511);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937078443615322113);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079017668739074);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079017681321985);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079017681321986);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079017681321987);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079017681321988);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079017681321989);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079022693515266);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079022693515267);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079022693515268);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079022693515269);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079022693515270);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937079022693515271);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937133799553060166);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937133799553060167);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937133799553060168);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937133799553060169);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937133799553060170);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937133799553060171);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482248800083970);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482248804278273);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482248804278274);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482248804278275);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482248804278276);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482248804278277);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044365);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044366);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044367);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044368);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044369);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044370);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044865);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044866);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044867);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044868);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044869);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482251627044870);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482252721758210);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482252721758211);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482252721758212);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482252721758213);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482252721758214);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482252721758215);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253107634177);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253107634178);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253107634179);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253107634180);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253107634181);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253107634182);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253527064577);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253527064578);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253527064579);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253527064580);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253527064581);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482253527064582);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482254454005762);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482254454005763);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482254454005764);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482254454005765);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482254454005766);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937482254454005767);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937705241914253314);
INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (1938120227459309569, 1937705497146040322);
COMMIT;
-- ----------------------------
@@ -3394,7 +3442,7 @@ CREATE TABLE `sys_tenant` (
-- Records of sys_tenant
-- ----------------------------
BEGIN;
INSERT INTO `sys_tenant` (`id`, `tenant_id`, `contact_user_name`, `contact_phone`, `company_name`, `license_number`, `address`, `intro`, `domain`, `remark`, `package_id`, `expire_time`, `account_count`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1, '000000', '管理组', '15888888888', 'XXX有限公司', NULL, NULL, '多租户通用后台管理管理系统', NULL, NULL, NULL, NULL, -1, '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
INSERT INTO `sys_tenant` (`id`, `tenant_id`, `contact_user_name`, `contact_phone`, `company_name`, `license_number`, `address`, `intro`, `domain`, `remark`, `package_id`, `expire_time`, `account_count`, `status`, `del_flag`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1, '000000', '管理组', '15888888888', '杭州第一技师学院', NULL, NULL, '多租户通用后台管理管理系统', NULL, NULL, NULL, NULL, -1, '0', '0', 103, 1, '2025-06-20 16:22:20', NULL, NULL);
COMMIT;
-- ----------------------------
@@ -3456,10 +3504,11 @@ CREATE TABLE `sys_user` (
-- Records of sys_user
-- ----------------------------
BEGIN;
INSERT INTO `sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '000000', 103, 'admin', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', 1938010080976248833, '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '0:0:0:0:0:0:0:1', '2025-06-26 14:08:18', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-26 14:08:18', '管理员');
INSERT INTO `sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '000000', 103, 'admin', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', 1938188366855467010, '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '0:0:0:0:0:0:0:1', '2025-06-27 15:34:19', 103, 1, '2025-06-20 16:22:20', 1, '2025-06-27 15:34:19', '管理员');
INSERT INTO `sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, '000000', 108, 'test', '本部门及以下 密码666666', 'sys_user', '', '', '0', NULL, '$2a$10$b8yUzN0C71sbz.PhNOCgJe.Tu1yWC3RNrTyjSQ8p1W0.aaUXUJ.Ne', '0', '0', '127.0.0.1', '2025-06-20 16:22:20', 103, 1, '2025-06-20 16:22:20', 3, '2025-06-20 16:22:20', NULL);
INSERT INTO `sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, '000000', 102, 'test1', '仅本人 密码666666', 'sys_user', '', '', '0', NULL, '$2a$10$b8yUzN0C71sbz.PhNOCgJe.Tu1yWC3RNrTyjSQ8p1W0.aaUXUJ.Ne', '0', '0', '127.0.0.1', '2025-06-20 16:22:20', 103, 1, '2025-06-20 16:22:20', 4, '2025-06-20 16:22:20', NULL);
INSERT INTO `sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937383272285396994, '000000', 103, 'wuzilong', 'wuzilong', 'sys_user', '', '', '0', NULL, '$2a$10$4ypXPu8Pwy2juPvLRxFioeODfSJYaGyOYD/yoWXWGE1.DADDRYFmm', '0', '0', '0:0:0:0:0:0:0:1', '2025-06-24 17:07:37', 103, 1, '2025-06-24 13:32:22', 1, '2025-06-26 14:21:29', '');
INSERT INTO `sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1937383272285396994, '000000', 103, 'wuzilong', 'wuzilong', 'sys_user', '', '', '0', 1938188650860179457, '$2a$10$4ypXPu8Pwy2juPvLRxFioeODfSJYaGyOYD/yoWXWGE1.DADDRYFmm', '0', '0', '0:0:0:0:0:0:0:1', '2025-06-27 11:16:57', 103, 1, '2025-06-24 13:32:22', 1937383272285396994, '2025-06-27 11:16:57', '');
INSERT INTO `sys_user` (`user_id`, `tenant_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1938504775352471554, '000000', 109, 'long五', 'longwu', 'sys_user', 'longwu@qq.com', '13998990011', '0', NULL, '$2a$10$nUPSkALQvbW/tfOfm20n.ut3Mygs6I7K/F4Rsrm8NTPqbsluVoTT6', '0', '0', '', NULL, 103, 1, '2025-06-27 15:48:49', 1, '2025-06-27 15:48:49', '备注');
COMMIT;
-- ----------------------------
@@ -3496,10 +3545,13 @@ CREATE TABLE `sys_user_role` (
BEGIN;
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (1, 1);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (3, 3);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (4, 4);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (4, 3);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (4, 1938120227459309569);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (1937383272285396994, 3);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (1937383272285396994, 1938120227459309569);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (1937383272285396994, 1938120323613728770);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (1938504775352471554, 3);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (1938504775352471554, 4);
INSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (1938504775352471554, 1938120227459309569);
COMMIT;
-- ----------------------------
@@ -3610,28 +3662,4 @@ INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `
INSERT INTO `test_tree` (`id`, `tenant_id`, `parent_id`, `dept_id`, `user_id`, `tree_name`, `version`, `create_dept`, `create_time`, `create_by`, `update_time`, `update_by`, `del_flag`) VALUES (13, '000000', 10, 108, 3, '子节点99', 0, 103, '2025-06-20 16:22:26', 1, NULL, NULL, 0);
COMMIT;
-- ----------------------------
-- Table structure for xg_stu_msg
-- ----------------------------
DROP TABLE IF EXISTS `xg_stu_msg`;
CREATE TABLE `xg_stu_msg` (
`id` bigint(20) NOT NULL COMMENT '主键',
`stu_name` varchar(255) NOT NULL COMMENT '学生姓名',
`stu_no` int(32) NOT NULL COMMENT '学生工号',
`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 '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生信息表';
-- ----------------------------
-- Records of xg_stu_msg
-- ----------------------------
BEGIN;
INSERT INTO `xg_stu_msg` (`id`, `stu_name`, `stu_no`, `tenant_id`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1937057195996921858, '里斯2', 232, '000000', 103, 1, '2025-06-23 15:56:39', 1, '2025-06-23 15:57:22');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
@@ -0,0 +1,675 @@
# MySQL 数据库建设规范(强制性)
## 📋 文档说明
**版本**: v1.0
**制定时间**: 2025-01-08
**适用范围**: 整个项目的所有数据库建表操作
**重要性**: ⚠️ **强制性规范** - 任何数据库相关开发都必须严格遵循本规范
---
## 🎯 总体原则
### 1. 一致性优先
- 所有业务表必须遵循统一的字段设计规范
- 统一使用标准的命名规范和数据类型
- 保持与现有数据库模型的高度一致性
### 2. 性能导向
- 优化查询性能,合理设计索引
- 控制表结构复杂度,避免过度冗余
- 考虑数据增长趋势,预留扩展空间
### 3. 安全可控
- 支持多租户数据隔离
- 统一的权限控制字段
- 完整的操作审计追踪
### 4. 可扩展性
- 预留扩展字段和机制
- 支持业务模块的独立发展
- 兼容未来功能需求
### 5. 可维护性
- 完整的中文注释说明
- 标准化的文档记录
- 便于理解和维护的结构设计
---
## 🔴 核心原则(强制执行)
### ⚠️ 强制性要求
1. **所有业务表**必须包含标准基础字段
2. **统一使用雪花 ID**作为主键
3. **强制使用逻辑删除**,禁止物理删除
4. **所有表必须支持多租户**
5. **完整的中文注释**是必须的
6. **禁止使用数据库外键约束**,关联关系通过应用层维护
---
## 🗄️ 数据库环境配置
### 基础配置要求
- **MySQL 版本**: 5.7.36+ (推荐 8.0+)
- **字符集**: utf8mb4
- **排序规则**: utf8mb4_general_ci
- **存储引擎**: InnoDB
- **时区**: Asia/Shanghai
### 数据库连接配置
```yaml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/hzdyjs_xg?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: ${DB_USERNAME:root}
password: ${DB_PASSWORD:password}
```
---
## 📊 表结构设计规范
### 🔴 强制性基础字段(所有业务表必须包含)
每个业务表都**必须**包含以下基础字段:
```sql
-- 主键字段(必须)
`id` bigint(20) NOT NULL COMMENT '主键ID',
-- 多租户字段(必须)
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' 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代表删除)',
-- 主键定义(必须)
PRIMARY KEY (`id`) USING BTREE
```
### 字段设计细则
#### 主键字段 (id)
- **类型**: `bigint(20) NOT NULL`
- **策略**: 使用雪花 ID (ASSIGN_ID)
- **注释**: 主键 ID
- **强制要求**: 所有表必须使用此设计
#### 租户字段 (tenant_id)
- **类型**: `varchar(20) NOT NULL`
- **默认值**: '000000'
- **用途**: 多租户数据隔离
- **索引**: 必须创建索引
#### 审计字段
- **create_dept**: 创建部门 ID,记录数据创建的部门
- **create_by**: 创建人 ID,记录数据创建者
- **create_time**: 创建时间,自动记录数据创建时间
- **update_by**: 更新人 ID,记录最后更新者
- **update_time**: 更新时间,自动记录数据更新时间
#### 逻辑删除字段 (deleted)
- **类型**: `tinyint(1) DEFAULT 0`
- **含义**: 0-存在,1-已删除
- **强制要求**: 禁止物理删除,必须使用逻辑删除
---
## 📝 字段设计规范
### 数据类型选择
#### 字符串类型
- **varchar(n)**: 变长字符串,n≤255 时使用
- **text**: 长文本内容,如富文本、描述等
- **char(1)**: 固定长度字符,如状态标识
#### 数值类型
- **bigint(20)**: ID 类型字段(主键、外键)
- **int(11)**: 普通整数字段
- **decimal(m,n)**: 精确小数,如金额、评分
#### 时间类型
- **datetime**: 标准时间字段
- **timestamp**: 自动更新时间戳(特殊需求)
#### 布尔类型
- **tinyint(1)**: 布尔值,0-否,1-是
### 强制规则
#### 字段命名规范
- **使用小写字母**和下划线
- **见名知意**,避免缩写
- **统一后缀**:
- `_id`: ID 类型字段
- `_time`: 时间类型字段
- `_status`: 状态类型字段
- `_flag`: 标志类型字段
#### 字段长度规范
- **姓名字段**: varchar(50)
- **电话字段**: varchar(20)
- **邮箱字段**: varchar(100)
- **地址字段**: varchar(200)
- **标题字段**: varchar(200)
- **编码字段**: varchar(50)
#### NULL 值规范
- **主键**: NOT NULL
- **关联字段**: 根据业务需求确定
- **租户 ID**: NOT NULL
- **创建相关字段**: 可为 NULL
- **业务关键字段**: 建议 NOT NULL
---
## 🚫 外键约束规范(重要)
### 禁止使用数据库外键约束
#### 🔴 强制性原则
**项目中严格禁止使用数据库级别的外键约束(FOREIGN KEY),所有表关联关系通过应用层逻辑维护。**
#### 禁用外键约束的原因
1. **性能考虑**
- 外键约束会降低数据插入、更新、删除的性能
- 在高并发场景下会产生额外的锁开销
- 分库分表时外键约束会成为性能瓶颈
2. **灵活性要求**
- 支持数据库分库分表扩展
- 便于数据迁移和重构
- 避免循环依赖问题
3. **维护便利性**
- 简化数据库结构变更
- 减少约束冲突导致的部署问题
- 便于测试数据管理
#### 替代方案
1. **应用层数据一致性**
```java
// 在业务逻辑中维护关联关系
@Transactional
public void deleteUser(Long userId) {
// 检查关联数据
if (hasRelatedData(userId)) {
throw new BusinessException("用户存在关联数据,无法删除");
}
// 执行删除
userService.deleteById(userId);
}
```
2. **命名约定标识关联**
```sql
-- 通过字段命名明确标识关联关系
`user_id` bigint(20) COMMENT '用户ID,关联sys_user表',
`dept_id` bigint(20) COMMENT '部门ID,关联sys_dept表',
`role_id` bigint(20) COMMENT '角色ID,关联sys_role表'
```
3. **数据校验注解**
```java
// 使用注解进行数据校验
@Entity
public class User {
@NotNull
@ExistReference(table = "sys_dept", field = "id")
private Long deptId;
}
```
#### 关联字段设计规范
1. **命名规范**
- 关联字段必须以 `_id` 结尾
- 字段名能够明确表达关联关系
- 例如:`user_id`、`parent_id`、`dept_id`
2. **注释要求**
```sql
`user_id` bigint(20) NOT NULL COMMENT '用户ID,关联sys_user.id',
`parent_id` bigint(20) DEFAULT NULL COMMENT '父级ID,关联本表id,顶级为0',
```
3. **索引设计**
```sql
-- 关联字段必须创建索引,提升查询性能
KEY `idx_user_id` (`user_id`),
KEY `idx_dept_id` (`dept_id`),
```
#### 数据一致性保障
1. **业务层校验**
- 在 Service 层添加关联数据校验
- 删除操作前检查关联数据
- 使用事务确保操作原子性
2. **定期数据校验**
```sql
-- 定期执行数据一致性检查脚本
SELECT u.* FROM sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.id
WHERE u.dept_id IS NOT NULL AND d.id IS NULL;
```
3. **监控和报警**
- 建立数据一致性监控
- 发现数据不一致时及时报警
- 记录详细的操作审计日志
---
## 🔍 索引设计规范
### 基础索引(必须创建)
每个表都必须创建以下基础索引:
```sql
-- 租户索引(必须)
KEY `idx_tenant_id` (`tenant_id`),
-- 删除标志索引(必须)
KEY `idx_deleted` (`deleted`),
-- 创建时间索引(建议)
KEY `idx_create_time` (`create_time`),
-- 组合索引:租户+删除标志(高效查询)
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`)
```
### 业务索引规范
#### 状态字段索引
```sql
KEY `idx_status` (`status`)
```
#### 时间范围索引
```sql
KEY `idx_time_range` (`start_time`, `end_time`)
```
#### 关联字段索引
```sql
-- 关联字段索引(注意:不使用外键约束)
KEY `idx_parent_id` (`parent_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_dept_id` (`dept_id`)
```
#### 组合索引
```sql
-- 常用查询组合
KEY `idx_user_type_status` (`user_id`, `type`, `status`)
```
### 索引命名规范
- **单列索引**: `idx_字段名`
- **组合索引**: `idx_字段1_字段2`
- **唯一索引**: `uk_字段名` 或 `uk_字段1_字段2`
---
## 🏗️ 建表 SQL 模板
### 标准业务表模板
```sql
-- ----------------------------
-- Table structure for 模块_表名
-- ----------------------------
DROP TABLE IF EXISTS `模块_表名`;
CREATE TABLE `模块_表名` (
-- 基础字段(必须)
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' 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代表删除)',
-- 业务字段
`业务字段1` varchar(100) NOT NULL COMMENT '业务字段说明',
`业务字段2` text COMMENT '业务字段说明',
-- 关联字段(注意:不使用外键约束)
`user_id` bigint(20) DEFAULT NULL COMMENT '用户ID,关联sys_user.id',
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID,关联sys_dept.id',
-- 状态和其他字段
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
-- 主键和索引(注意:不创建外键约束)
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_business_key` (`tenant_id`, `业务唯一字段`, `deleted`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_deleted` (`deleted`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`),
KEY `idx_user_id` (`user_id`),
KEY `idx_dept_id` (`dept_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='表的中文描述';
```
### 系统配置表模板
```sql
-- 系统配置类表(如字典、参数等)
CREATE TABLE `sys_配置表名` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' 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 '更新时间',
-- 配置相关字段
`config_key` varchar(100) NOT NULL COMMENT '配置键',
`config_value` varchar(500) DEFAULT NULL COMMENT '配置值',
`config_type` char(1) DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_config_key` (`config_key`, `tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
```
### 关联关系表模板
```sql
-- 多对多关联表
CREATE TABLE `模块_关联表名` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
-- 关联字段(注意:不使用外键约束)
`主表_id` bigint(20) NOT NULL COMMENT '主表ID,关联主表.id',
`从表_id` bigint(20) NOT NULL COMMENT '从表ID,关联从表.id',
-- 主键和索引(注意:不创建外键约束)
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_relation` (`主表_id`, `从表_id`, `tenant_id`),
KEY `idx_主表_id` (`主表_id`),
KEY `idx_从表_id` (`从表_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关联关系表';
```
---
## 🔄 数据迁移规范
### 迁移脚本命名
```
V{版本号}__{功能描述}.sql
例如:V1.0.1__add_user_table.sql
```
### 迁移脚本结构
```sql
-- ==========================================
-- 数据库变更脚本
-- 版本:V1.0.1
-- 功能:新增用户表
-- 作者:开发者姓名
-- 时间:2025-01-08
-- ==========================================
-- 新增表
CREATE TABLE IF NOT EXISTS `new_table` (
-- 表结构定义
);
-- 修改表(如果需要)
ALTER TABLE `existing_table`
ADD COLUMN `new_column` varchar(100) COMMENT '新字段说明';
-- 数据初始化(如果需要)
INSERT INTO `new_table` VALUES (...);
-- 创建索引(如果需要)
CREATE INDEX `idx_new_column` ON `existing_table` (`new_column`);
```
### 迁移注意事项
1. **向前兼容**:新增字段必须有默认值
2. **数据备份**:重要变更前必须备份
3. **灰度发布**:分步骤执行重大变更
4. **回滚方案**:准备对应的回滚脚本
---
## ⚡ 性能优化规范
### 查询优化
1. **避免 SELECT \***:明确指定需要的字段
2. **合理使用索引**:根据查询模式创建合适索引
3. **分页查询**:大数据量必须分页
4. **避免全表扫描**:WHERE 条件必须使用索引字段
### 表设计优化
1. **垂直分表**:字段过多时考虑分表
2. **水平分表**:数据量过大时考虑分表
3. **冗余设计**:适度冗余提升查询性能
4. **归档策略**:历史数据定期归档
### 索引优化
1. **组合索引**:多条件查询创建组合索引
2. **覆盖索引**:避免回表查询
3. **索引维护**:定期检查和优化索引
4. **避免冗余**:删除不必要的索引
---
## 🔒 安全规范
### 数据安全
1. **敏感数据加密**:密码、身份证等敏感信息
2. **数据脱敏**:测试环境使用脱敏数据
3. **访问控制**:基于角色的数据访问控制
4. **审计日志**:完整的数据变更日志
### 权限控制
1. **最小权限原则**:只授予必要的权限
2. **账号管理**:定期审查数据库账号
3. **密码策略**:强密码策略和定期更换
4. **网络安全**:限制数据库访问网络
### 备份策略
1. **定期备份**:每日全量备份
2. **增量备份**:实时或小时级增量备份
3. **异地备份**:关键数据异地存储
4. **恢复测试**:定期验证备份恢复
---
## ✅ 检查清单
### 新建表检查清单
- [ ] 包含所有强制基础字段
- [ ] 主键使用 bigint(20)类型
- [ ] 租户字段正确设置
- [ ] 逻辑删除字段存在
- [ ] 审计字段完整
- [ ] 表注释完整准确
- [ ] 字段注释完整
- [ ] **未使用外键约束**(重要)
- [ ] 关联字段命名规范(以\_id 结尾)
- [ ] 关联字段注释明确标识关联表
### 字段设计检查清单
- [ ] 字段命名符合规范
- [ ] 数据类型选择合理
- [ ] 字段长度设置适当
- [ ] NULL 值设置合理
- [ ] 默认值设置正确
- [ ] 字段注释明确
### 索引设计检查清单
- [ ] 基础索引已创建
- [ ] 业务索引设计合理
- [ ] 索引命名规范
- [ ] 唯一约束正确
- [ ] 组合索引顺序合理
---
## 🛠️ 工具和脚本
### 建表辅助脚本
```sql
-- 自动生成基础字段的存储过程
DELIMITER $$
CREATE PROCEDURE `add_base_fields`(IN table_name VARCHAR(64))
BEGIN
SET @sql = CONCAT('ALTER TABLE ', table_name, ' ADD COLUMN IF NOT EXISTS `tenant_id` varchar(20) NOT NULL DEFAULT ''000000'' COMMENT ''租户编号''');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 添加其他基础字段...
END$$
DELIMITER ;
```
### 表结构检查脚本
```sql
-- 检查缺失基础字段的表
SELECT
TABLE_NAME,
CASE
WHEN COLUMN_NAME IS NULL THEN CONCAT('缺少字段: ', required_field)
ELSE '字段存在'
END AS check_result
FROM (
SELECT 'tenant_id' AS required_field
UNION SELECT 'create_time'
UNION SELECT 'update_time'
UNION SELECT 'deleted'
) rf
CROSS JOIN INFORMATION_SCHEMA.TABLES t
LEFT JOIN INFORMATION_SCHEMA.COLUMNS c
ON t.TABLE_NAME = c.TABLE_NAME
AND c.COLUMN_NAME = rf.required_field
WHERE t.TABLE_SCHEMA = 'hzdyjs_xg'
AND t.TABLE_TYPE = 'BASE TABLE'
AND c.COLUMN_NAME IS NULL;
```
---
## 📚 参考示例
### 现有表结构参考
项目中已有的标准表结构可参考:
- `hq_hall_info` - 报告厅信息表
- `hq_hall_reservation` - 报告厅预约表
- `hq_sat_survey` - 问卷调查表
- `sys_user` - 用户表
- `sys_dict_data` - 字典数据表
### 命名示例
- **模块前缀**: `hq_`(后勤)、`sys_`(系统)、`gen_`(代码生成)
- **表名示例**: `hq_hall_info`、`sys_user_role`
- **字段示例**: `user_name`、`create_time`、`hall_status`
---
## ⚠️ 重要提醒
1. **强制性要求**:本规范所有标注为"必须"、"强制"的条目都是强制性的
2. **一致性保证**:新建表必须与现有表结构保持一致
3. **文档同步**:表结构变更必须同步更新文档
4. **Code Review**:所有数据库变更都需要进行代码审查
5. **测试验证**:新表结构必须经过充分测试验证
---
## 📞 技术支持
如有疑问或需要技术支持,请联系:
- **技术负责人**:项目技术负责人
- **文档维护**:定期更新和维护本规范
- **培训支持**:为团队成员提供规范培训
---
**最后更新**: 2025-01-08
**下次审查**: 2025-07-08
File renamed without changes.
File renamed without changes.
+284
View File
@@ -0,0 +1,284 @@
# 项目总览
## 📋 项目基本信息
**项目名称**:高校后勤校园管理系统 (HZDYJS_XG)
**项目类型**:企业级 Web 应用系统
**开发模式**:前后端分离 + 移动端 App
**架构模式**:微服务架构 + 多租户设计
**当前版本**:v1.0.0
**开发周期**:2024.01 - 2024.10
## 🎯 项目愿景
构建一个**现代化、智能化、易用性强**的高校后勤管理平台,提升后勤服务效率,改善师生体验,实现后勤管理的数字化转型。
## 📊 核心业务领域
### 1. 📋 后勤满意度调查系统
- **目标**:收集师生对后勤服务的满意度反馈
- **价值**:数据驱动的服务质量改进
- **覆盖范围**:餐饮、宿舍、保洁、维修等全方位后勤服务
### 2. 🏛️ 报告厅预约管理系统
- **目标**:优化校园会议室/报告厅资源配置
- **价值**:提高场地利用率,减少冲突和浪费
- **覆盖范围**:各类会议室、报告厅、活动场所
### 3. 🔧 后勤维修服务系统
- **目标**:建立高效的设施维修服务流程
- **价值**:快速响应,提升维修效率
- **覆盖范围**:宿舍、教学楼、公共设施维修
### 4. 🍽️ 餐饮服务管理系统
- **目标**:提升校园餐饮服务质量和体验
- **价值**:菜品管理、营养配餐、师生反馈
- **覆盖范围**:食堂管理、外卖配送、营养健康
## 🏗️ 技术架构概览
### 系统架构图
```mermaid
graph TB
subgraph "前端层"
A1[Web管理端<br/>Vue3 + Element Plus]
A2[移动端App<br/>UniApp + uView UI]
end
subgraph "网关层"
B1[API Gateway<br/>Spring Cloud Gateway]
end
subgraph "业务服务层"
C1[用户管理服务<br/>Spring Boot]
C2[满意度调查服务<br/>Spring Boot]
C3[报告厅预约服务<br/>Spring Boot]
C4[系统管理服务<br/>Spring Boot]
end
subgraph "数据层"
D1[MySQL 8.0<br/>主数据库]
D2[Redis 7.0<br/>缓存/会话]
D3[MinIO<br/>文件存储]
end
subgraph "基础设施"
E1[Docker<br/>容器化部署]
E2[Nginx<br/>负载均衡]
E3[ELK<br/>日志分析]
E4[Prometheus<br/>监控告警]
end
A1 --> B1
A2 --> B1
B1 --> C1
B1 --> C2
B1 --> C3
B1 --> C4
C1 --> D1
C2 --> D1
C3 --> D1
C4 --> D1
C1 --> D2
C2 --> D2
C3 --> D2
C4 --> D2
C1 --> D3
C2 --> D3
C3 --> D3
C4 --> D3
```
### 技术栈详情
#### 后端技术栈
- **核心框架**:Spring Boot 3.4.6 + Spring Cloud 2023.0.x
- **开发语言**:Java 17/21
- **ORM 框架**:MyBatis-Plus 3.5.12
- **权限认证**:Sa-Token 1.42.0 + JWT
- **数据库**:MySQL 8.0(主库)+ Redis 7.0(缓存)
- **消息队列**:RabbitMQ 3.12
- **任务调度**:SnailJob 1.5.0
- **工作流引擎**:Warm-Flow 1.7.3
- **文档管理**:SpringDoc + Knife4j
#### 前端技术栈
- **Web 框架**:Vue 3.5.13 + TypeScript 5.8.3
- **UI 组件库**:Element Plus 2.9.8
- **构建工具**:Vite 7.0.9
- **状态管理**:Pinia
- **HTTP 客户端**:Axios
- **图表组件**:ECharts 5.x
#### 移动端技术栈
- **跨平台框架**:uni-app
- **UI 组件库**:uView UI
- **状态管理**:Vuex
- **地图服务**:高德地图 API
#### 部署运维
- **容器化**:Docker + Docker Compose
- **容器编排**:Kubernetes(生产环境)
- **Web 服务器**:Nginx(反向代理 + 负载均衡)
- **CI/CD**:GitLab CI/CD
- **监控告警**:Prometheus + Grafana + AlertManager
- **日志管理**:ELK Stack(Elasticsearch + Logstash + Kibana)
## 📈 项目规模指标
### 代码规模
- **后端代码**:约 15 万行 Java 代码
- **前端代码**:约 8 万行 Vue/TypeScript 代码
- **移动端代码**:约 3 万行 JavaScript 代码
- **数据库表**:约 80 张业务表
### 功能模块
- **核心业务模块**:4 个
- **基础支撑模块**:6 个
- **管理配置模块**:8 个
- **API 接口数量**:约 200 个
### 性能指标
- **并发用户数**:支持 1000+在线用户
- **响应时间**:平均响应时间 < 200ms
- **可用性**:99.9%系统可用性
- **数据处理**:支持千万级数据查询
## 👥 团队组织结构
### 项目团队
- **项目经理**:1 人(项目管理 + 需求分析)
- **架构师**:1 人(技术架构 + 核心开发)
- **后端开发**:2 人(Spring Boot 微服务开发)
- **前端开发**:2 人(Vue3 + 移动端开发)
- **测试工程师**:1 人(功能测试 + 自动化测试)
- **运维工程师**:1 人(部署运维 + 监控告警)
### 开发分工
| 模块 | 负责人 | 开发重点 |
| ------------------- | ------ | -------------------- |
| 用户管理 + 系统管理 | 张三 | 权限体系、多租户架构 |
| 满意度调查系统 | 李四 | 问卷设计器、数据统计 |
| 报告厅预约系统 | 王五 | 工作流引擎、预约算法 |
| 前端 UI + 移动端 | 赵六 | 用户体验、界面设计 |
## 📅 项目时间线
### 第一阶段:基础架构搭建(2024.01-2024.02)
- ✅ 技术选型和架构设计
- ✅ 开发环境搭建
- ✅ 基础框架集成
- ✅ 用户权限系统开发
### 第二阶段:核心功能开发(2024.03-2024.06)
- ✅ 满意度调查系统开发
- 🟡 报告厅预约系统开发(进行中)
- ⭕ 维修服务系统开发(待开始)
- ⭕ 餐饮管理系统开发(待开始)
### 第三阶段:系统集成测试(2024.07-2024.08)
- ⭕ 功能测试和集成测试
- ⭕ 性能测试和优化
- ⭕ 安全测试和加固
- ⭕ 用户验收测试
### 第四阶段:部署上线(2024.09-2024.10)
- ⭕ 生产环境部署
- ⭕ 数据迁移和初始化
- ⭕ 用户培训和推广
- ⭕ 运维监控体系建立
## 🎯 项目目标与 KPI
### 业务目标
- **服务效率提升**:报告厅预约流程效率提升 80%
- **用户满意度**:后勤服务满意度达到 90%以上
- **数据驱动决策**:建立完善的数据分析和报告体系
- **成本控制**:通过系统化管理降低运营成本 15%
### 技术目标
- **系统稳定性**:99.9%系统可用性
- **响应性能**:平均响应时间 < 200ms
- **扩展性**:支持 10 倍用户增长的架构设计
- **安全性**:通过等保三级安全认证
### 质量目标
- **代码质量**:代码覆盖率 > 80%
- **文档完整性**:100%API 文档覆盖
- **用户体验**:移动端 App 评分 > 4.5 星
- **培训效果**:用户培训通过率 > 95%
## 🔧 开发工具链
### 开发环境
- **IDE**:IntelliJ IDEA 2024.x
- **版本控制**:Git + GitLab
- **数据库工具**:Navicat Premium
- **API 测试**:Postman + Swagger UI
- **代码质量**:SonarQube
### 协作工具
- **项目管理**:禅道 + GitLab Issues
- **文档协作**:语雀 + Markdown
- **设计工具**:Figma + ProcessOn
- **沟通工具**:企业微信 + 腾讯会议
## 📋 下一步行动计划
### 近期重点(未来 2 周)
1. **完成报告厅预约系统后端开发**
2. **启动前端界面开发**
3. **完善 API 文档和测试用例**
4. **建立 CI/CD 自动化流水线**
### 中期规划(未来 1 个月)
1. **完成核心功能模块集成**
2. **开始系统性能测试**
3. **完善用户手册和培训材料**
4. **准备生产环境部署方案**
### 长期愿景(未来 3 个月)
1. **系统全面上线运行**
2. **建立运维监控体系**
3. **收集用户反馈,持续优化**
4. **探索 AI 智能化功能集成**
---
**🎯 项目愿景**:打造高校后勤管理的标杆系统,为数字化校园建设贡献力量!
## 📖 相关文档
- **业务模块详情**:[业务模块文档](../业务模块/README.md)
- **技术架构设计**:[设计文档](../设计文档/README.md)
- **开发指南**:[开发文档](../开发文档/README.md)
- **部署指南**:[部署文档](../部署文档/README.md)
+258
View File
@@ -0,0 +1,258 @@
# 项目总览模板
> 🎯 **模板用途**:本模板用于创建新项目的总览文档,为 Cursor AI 提供标准格式参考
## 📋 项目基本信息
**项目名称**:[项目名称]
**项目类型**:[Web 应用/移动应用/桌面应用/其他]
**开发模式**:[前后端分离/单体应用/微服务/其他]
**架构模式**:[架构设计模式]
**当前版本**:[版本号]
**开发周期**:[开始时间] - [结束时间]
## 🎯 项目愿景
[项目的整体愿景和目标,描述项目要解决的问题和期望达到的效果]
## 📊 核心业务领域
### 1. [业务领域 1]
- **目标**:[业务目标]
- **价值**:[业务价值]
- **覆盖范围**:[具体范围]
### 2. [业务领域 2]
- **目标**:[业务目标]
- **价值**:[业务价值]
- **覆盖范围**:[具体范围]
### 3. [业务领域 3]
- **目标**:[业务目标]
- **价值**:[业务价值]
- **覆盖范围**:[具体范围]
## 🏗️ 技术架构概览
### 系统架构图
```mermaid
graph TB
subgraph "前端层"
A1[Web端<br/>[前端技术栈]]
A2[移动端<br/>[移动端技术栈]]
end
subgraph "服务层"
B1[业务服务<br/>[后端技术栈]]
end
subgraph "数据层"
C1[数据库<br/>[数据库类型]]
C2[缓存<br/>[缓存技术]]
end
A1 --> B1
A2 --> B1
B1 --> C1
B1 --> C2
```
### 技术栈详情
#### 后端技术栈
- **核心框架**:[主要框架及版本]
- **开发语言**:[编程语言]
- **ORM 框架**:[ORM 框架]
- **权限认证**:[认证方案]
- **数据库**:[数据库类型及版本]
- **缓存**:[缓存技术]
- **消息队列**:[消息队列技术]
- **任务调度**:[任务调度框架]
#### 前端技术栈
- **Web 框架**:[前端框架及版本]
- **UI 组件库**:[UI 组件库]
- **构建工具**:[构建工具]
- **状态管理**:[状态管理方案]
- **HTTP 客户端**:[HTTP 客户端]
#### 移动端技术栈(如适用)
- **开发框架**:[移动端框架]
- **UI 组件库**:[移动端 UI 库]
- **状态管理**:[移动端状态管理]
#### 部署运维
- **容器化**:[容器技术]
- **Web 服务器**:[Web 服务器]
- **CI/CD**:[CI/CD 工具]
- **监控告警**:[监控方案]
- **日志管理**:[日志方案]
## 📈 项目规模指标
### 代码规模
- **后端代码**:约 [X] 万行 [语言] 代码
- **前端代码**:约 [X] 万行 [语言] 代码
- **移动端代码**:约 [X] 万行 [语言] 代码(如适用)
- **数据库表**:约 [X] 张业务表
### 功能模块
- **核心业务模块**:[X] 个
- **基础支撑模块**:[X] 个
- **管理配置模块**:[X] 个
- **API 接口数量**:约 [X] 个
### 性能指标
- **并发用户数**:支持 [X] 在线用户
- **响应时间**:平均响应时间 < [X]ms
- **可用性**:[X]% 系统可用性
- **数据处理**:支持 [X] 级数据查询
## 👥 团队组织结构
### 项目团队
- **项目经理**:[X] 人(职责说明)
- **架构师**:[X] 人(职责说明)
- **后端开发**:[X] 人(职责说明)
- **前端开发**:[X] 人(职责说明)
- **测试工程师**:[X] 人(职责说明)
- **运维工程师**:[X] 人(职责说明)
### 开发分工
| 模块 | 负责人 | 开发重点 |
| -------- | ------ | ---------- |
| [模块 1] | [姓名] | [重点说明] |
| [模块 2] | [姓名] | [重点说明] |
| [模块 3] | [姓名] | [重点说明] |
## 📅 项目时间线
### 第一阶段:[阶段名称]([时间范围])
- ✅/🟡/⭕ [任务 1]
- ✅/🟡/⭕ [任务 2]
- ✅/🟡/⭕ [任务 3]
### 第二阶段:[阶段名称]([时间范围])
- ✅/🟡/⭕ [任务 1]
- ✅/🟡/⭕ [任务 2]
- ✅/🟡/⭕ [任务 3]
### 第三阶段:[阶段名称]([时间范围])
- ✅/🟡/⭕ [任务 1]
- ✅/🟡/⭕ [任务 2]
- ✅/🟡/⭕ [任务 3]
## 🎯 项目目标与 KPI
### 业务目标
- **[目标 1]**:[具体指标]
- **[目标 2]**:[具体指标]
- **[目标 3]**:[具体指标]
- **[目标 4]**:[具体指标]
### 技术目标
- **[目标 1]**:[具体指标]
- **[目标 2]**:[具体指标]
- **[目标 3]**:[具体指标]
- **[目标 4]**:[具体指标]
### 质量目标
- **[目标 1]**:[具体指标]
- **[目标 2]**:[具体指标]
- **[目标 3]**:[具体指标]
- **[目标 4]**:[具体指标]
## 🔧 开发工具链
### 开发环境
- **IDE**:[开发工具]
- **版本控制**:[版本控制工具]
- **数据库工具**:[数据库管理工具]
- **API 测试**:[API 测试工具]
- **代码质量**:[代码质量工具]
### 协作工具
- **项目管理**:[项目管理工具]
- **文档协作**:[文档工具]
- **设计工具**:[设计工具]
- **沟通工具**:[沟通工具]
## 📋 下一步行动计划
### 近期重点(未来 [X] 周)
1. **[行动项 1]**
2. **[行动项 2]**
3. **[行动项 3]**
4. **[行动项 4]**
### 中期规划(未来 [X] 个月)
1. **[规划项 1]**
2. **[规划项 2]**
3. **[规划项 3]**
4. **[规划项 4]**
### 长期愿景(未来 [X] 个月)
1. **[愿景项 1]**
2. **[愿景项 2]**
3. **[愿景项 3]**
4. **[愿景项 4]**
---
**🎯 项目愿景**:[简洁的项目愿景描述]
## 📖 相关文档
- **业务模块详情**:[业务模块文档](../业务模块/README.md)
- **技术架构设计**:[设计文档](../设计文档/README.md)
- **开发指南**:[开发文档](../开发文档/README.md)
- **部署指南**:[部署文档](../部署文档/README.md)
---
## 📝 模板使用说明
### 适用场景
- 新项目启动时创建项目总览
- 项目重大更新时更新项目信息
- 为新团队成员介绍项目概况
- 项目汇报和展示
### 填写指南
1. **基本信息**:填写项目的基础信息,确保准确性
2. **技术架构**:根据实际技术选型填写,可使用 Mermaid 图表
3. **团队信息**:根据实际团队结构填写
4. **时间线**:使用 ✅(已完成)、🟡(进行中)、⭕(未开始)标记
5. **目标 KPI**:设置可量化的具体指标
### 维护要求
- **定期更新**:项目重大变更时及时更新
- **版本管理**:重要更新需要记录版本变更
- **团队同步**:确保团队成员了解最新项目状态