docs: 补充墨刀原型批注和示例数据到各文档
- 需求规格说明书:添加第8.3章墨刀批注汇总 - 全局注意事项(角色、部门管理、token) - 学校管理批注(挂载模式、软删除、必填规则) - 会员管理批注(登录方式、身份类型规则) - 学生管理批注(批量导入要求) - 应用管理批注(重置密钥、接口授权) - 区域管理批注(父级带入) - 示例数据(区域树、学校树) - 数据库设计文档:添加第4.6-4.9章示例数据 - 学校示例数据(武汉市第一中学等) - 会员示例数据 - 学生示例数据 - 应用示例数据(AI智慧平台) - 接口设计文档:添加第10章业务规则说明 - 学校管理规则(编码生成、挂载模式) - 会员管理规则(自动生成、身份类型) - 学生管理规则(批量导入) - 应用管理规则(密钥重置) - 区域管理规则 - README.md:添加原型批注要点和示例数据摘要
This commit is contained in:
parent
ba1a62b7af
commit
d35e257ec8
42
README.md
42
README.md
|
|
@ -181,6 +181,39 @@ mvn spring-boot:run
|
||||||
- **页面数量**:17个
|
- **页面数量**:17个
|
||||||
- **访问方式**:只读模式
|
- **访问方式**:只读模式
|
||||||
|
|
||||||
|
### 原型批注要点
|
||||||
|
|
||||||
|
> 详细批注信息见 `docs/01-需求文档/需求规格说明书_v1.0.md` 第8章
|
||||||
|
|
||||||
|
| 模块 | 关键批注 |
|
||||||
|
| -------- | -------------------------------------------- |
|
||||||
|
| **全局** | 系统支持3个角色:管理员、分公司用户、学校用户;会员需使用token支持小程序/H5登录 |
|
||||||
|
| **学校管理** | 学校下新增年级/班级为挂载模式(非新建);删除需检查子级和引用;所有删除为软删除 |
|
||||||
|
| **会员管理** | 支持3种登录方式;教师必须绑定学校信息且只能绑定本校学生;家长可绑定任意学生 |
|
||||||
|
| **学生管理** | 批量导入时自动创建不存在的家长用户(初始密码:123456) |
|
||||||
|
| **应用管理** | 重置密钥需弹窗显示并支持复制;接口授权采用勾选方式 |
|
||||||
|
| **区域管理** | 新增下级时自动带入父级区域 |
|
||||||
|
|
||||||
|
### 示例数据
|
||||||
|
|
||||||
|
**区域示例:**
|
||||||
|
|
||||||
|
```
|
||||||
|
湖北 → 武汉 → 武昌区/汉口区/汉阳区/江夏区/新洲区/黄陂区
|
||||||
|
湖北 → 黄冈 → 黄州区/红安县/麻城市
|
||||||
|
北京 | 香港 | 吉宁
|
||||||
|
```
|
||||||
|
|
||||||
|
**学校示例:**
|
||||||
|
|
||||||
|
- 武汉市第一中学(七年级1-3班、八年级、九年级)
|
||||||
|
- 武汉市第三中学
|
||||||
|
- 武汉市水果湖小学(一至六年级)
|
||||||
|
|
||||||
|
**应用示例:**
|
||||||
|
|
||||||
|
- AI智慧平台(YY000001)- 授权接口:学校接口、年级接口、班级接口
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 开发规范
|
## 开发规范
|
||||||
|
|
@ -219,6 +252,15 @@ mvn spring-boot:run
|
||||||
|
|
||||||
## 版本更新日志
|
## 版本更新日志
|
||||||
|
|
||||||
|
### v1.0.1 (2026-01-31)
|
||||||
|
|
||||||
|
**文档完善:**
|
||||||
|
|
||||||
|
- 需求规格说明书:补充墨刀原型批注汇总(第8.3章)
|
||||||
|
- 数据库设计文档:补充学校/会员/学生/应用示例数据
|
||||||
|
- 接口设计文档:补充业务规则说明(第10章)
|
||||||
|
- README.md:补充原型批注要点和示例数据
|
||||||
|
|
||||||
### v1.0.0 (2026-01-31)
|
### v1.0.0 (2026-01-31)
|
||||||
|
|
||||||
**前端技术栈升级:**
|
**前端技术栈升级:**
|
||||||
|
|
|
||||||
|
|
@ -714,8 +714,192 @@
|
||||||
| 6 | 年级管理 | 列表、编辑 | 2 |
|
| 6 | 年级管理 | 列表、编辑 | 2 |
|
||||||
| 7 | 班级管理 | 列表、编辑 | 2 |
|
| 7 | 班级管理 | 列表、编辑 | 2 |
|
||||||
| 8 | 学科管理 | 列表、编辑 | 2 |
|
| 8 | 学科管理 | 列表、编辑 | 2 |
|
||||||
|
| 9 | 区域管理 | 列表、编辑 | 2 |
|
||||||
| | **合计** | | **17** |
|
| | **合计** | | **17** |
|
||||||
|
|
||||||
|
### 8.3 墨刀批注汇总
|
||||||
|
|
||||||
|
> 以下为墨刀原型中的批注信息,作为开发实现的补充说明
|
||||||
|
|
||||||
|
#### 8.3.1 全局注意事项
|
||||||
|
|
||||||
|
| 批注序号 | 批注内容 |
|
||||||
|
|:------:|--------|
|
||||||
|
| 1 | 系统可以创建3个角色:管理员,分公司用户,学校用户 |
|
||||||
|
| 2 | 利用RuoYi的部门管理,创建分公司,并创建分公司的角色,分配对应的功能权限,也可创建学校用户角色 |
|
||||||
|
| 3 | 会员管理需要使用token来方便前端用户登录小程序或者H5 |
|
||||||
|
|
||||||
|
#### 8.3.2 学校管理批注
|
||||||
|
|
||||||
|
| 批注序号 | 批注内容 |
|
||||||
|
|:------:|--------|
|
||||||
|
| 1 | 学校下面新增年级,此处不做年级新增,只选择年级挂载在学校下面,功能类似编辑 |
|
||||||
|
| 2 | 删除时提示是否有子级,如有子级或者被学生信息使用时,给出提示,并且都是软删除 |
|
||||||
|
| 3 | 基于选择的区域根据学校名称和状态搜索 |
|
||||||
|
| 4 | 基于选择的区域新增学校信息 |
|
||||||
|
| 5 | 年级下面新增班级,此处不做班级新增,只选择班级挂载在年级下面,功能类似编辑 |
|
||||||
|
| 6 | 学校编码自动生成;所属地区从列表页选择的区域层级树带入,也可以手动调整;所属地区/学校编码/学校名称必填 |
|
||||||
|
| 7 | 学校下新增年级,选择对应的年级,支持多选,必填 |
|
||||||
|
| 8 | 年级下新增班级,选择对应的班级,支持多选 |
|
||||||
|
|
||||||
|
**示例数据 - 区域树:**
|
||||||
|
```
|
||||||
|
湖北
|
||||||
|
├── 武汉
|
||||||
|
│ ├── 武昌区
|
||||||
|
│ ├── 汉口区
|
||||||
|
│ ├── 汉阳区
|
||||||
|
│ ├── 江夏区
|
||||||
|
│ ├── 新洲区
|
||||||
|
│ └── 黄陂区
|
||||||
|
└── 黄冈
|
||||||
|
├── 黄州区
|
||||||
|
├── 红安县
|
||||||
|
└── 麻城市
|
||||||
|
北京
|
||||||
|
香港
|
||||||
|
吉宁
|
||||||
|
```
|
||||||
|
|
||||||
|
**示例数据 - 学校树:**
|
||||||
|
```
|
||||||
|
武汉市第一中学
|
||||||
|
├── 七年级
|
||||||
|
│ ├── 1班
|
||||||
|
│ ├── 2班
|
||||||
|
│ └── 3班
|
||||||
|
├── 八年级
|
||||||
|
└── 九年级
|
||||||
|
武汉市第三中学
|
||||||
|
武汉市水果湖小学
|
||||||
|
├── 一年级
|
||||||
|
├── 二年级
|
||||||
|
├── 三年级
|
||||||
|
├── 四年级
|
||||||
|
├── 五年级
|
||||||
|
└── 六年级
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 8.3.3 会员管理批注
|
||||||
|
|
||||||
|
| 批注序号 | 批注内容 |
|
||||||
|
|:------:|--------|
|
||||||
|
| 1 | 重置密码后,显示密码,提供复制功能 |
|
||||||
|
| 2 | 删除时,需要popconfirm提醒,并且如果会员明显绑定了学生信息,不允许删除,需要先移除绑定的学生信息 |
|
||||||
|
| 3 | 编辑跳转到会员编辑页面 |
|
||||||
|
| 4 | 使用RuoYi的鉴权登录处理用户,区分后台用户和会员信息 |
|
||||||
|
| 5 | 当前用户支持手机号+验证码登录、手机号+密码登录和微信登录,登录时需要使用输入验证码 |
|
||||||
|
| 6 | 禁用用户后,无法登录 |
|
||||||
|
| 7 | 昵称未填写时,自动生成 |
|
||||||
|
| 8 | 会员编号自动生成 |
|
||||||
|
| 9 | 出生日期和性别选填 |
|
||||||
|
| 10 | 身份信息为老师时,需要选择对应的区域/学校/年级/班级,学生信息从学生管理的数据中选择绑定,只允许选择与老师所属学校一样的学生 |
|
||||||
|
| 11 | 身份信息为家长时,不显示区域/学校/年级/班级,学生允许随便选择 |
|
||||||
|
|
||||||
|
**示例数据:**
|
||||||
|
- 会员编号:JS123123123
|
||||||
|
- 归属用户显示:昵称(手机号:13207166213)
|
||||||
|
|
||||||
|
**表格列定义:**
|
||||||
|
| 字段 | 说明 |
|
||||||
|
|-----|------|
|
||||||
|
| 会员编号 | 系统自动生成 |
|
||||||
|
| 手机号 | 11位手机号 |
|
||||||
|
| 昵称 | 用户昵称 |
|
||||||
|
| 性别 | 男/女/未知 |
|
||||||
|
| 出生日期 | 日期格式 |
|
||||||
|
| 身份类型 | 家长/教师 |
|
||||||
|
| 注册时间 | 日期时间 |
|
||||||
|
| 注册来源 | 小程序/H5/后台新增 |
|
||||||
|
| openId | 微信用户标识 |
|
||||||
|
| 状态 | 启用/禁用 |
|
||||||
|
| 操作 | 编辑、重置密码、删除 |
|
||||||
|
|
||||||
|
#### 8.3.4 学生管理批注
|
||||||
|
|
||||||
|
| 批注序号 | 批注内容 |
|
||||||
|
|:------:|--------|
|
||||||
|
| 1 | 学号不允许重复,可空 |
|
||||||
|
| 2 | 出生日期和性别可空 |
|
||||||
|
| 3 | 学校信息必填 |
|
||||||
|
|
||||||
|
**批量导入要求:**
|
||||||
|
| 序号 | 要求内容 |
|
||||||
|
|:---:|--------|
|
||||||
|
| 1 | 下载模板,模板包含姓名-必填,学号-必填,用户手机号-必填,区域-必填,学校-必填,年级-必填,班级-必填,性别-选填,出生年月-选填 |
|
||||||
|
| 2 | 导入数据时,检查必填信息,并检查区域/学校/年级/班级对应的信息一致 |
|
||||||
|
| 3 | 导入时,同时需要检查用户手机号,如果系统中存在用户手机号,那么导入的学生就挂在当前用户下;如果系统中不存在对应的用户,自动创建当前手机号的用户,身份为家长,初始密码123456,并把学生信息挂在当前用户下 |
|
||||||
|
|
||||||
|
**表格列定义:**
|
||||||
|
| 字段 | 说明 |
|
||||||
|
|-----|------|
|
||||||
|
| 姓名 | 学生姓名 |
|
||||||
|
| 学号 | 学生学号 |
|
||||||
|
| 性别 | 男/女/未知 |
|
||||||
|
| 出生年月 | 日期格式 |
|
||||||
|
| 地区 | 如:湖北省-武汉市-武昌区 |
|
||||||
|
| 学校 | 学校名称 |
|
||||||
|
| 年级 | 年级名称 |
|
||||||
|
| 班级 | 班级名称 |
|
||||||
|
| 学科 | 学科名称 |
|
||||||
|
| 用户身份 | 家长/教师 |
|
||||||
|
| 用户昵称 | 归属会员昵称 |
|
||||||
|
| 用户手机号 | 归属会员手机号 |
|
||||||
|
| 操作 | 编辑、删除 |
|
||||||
|
|
||||||
|
#### 8.3.5 应用管理批注
|
||||||
|
|
||||||
|
| 批注序号 | 批注内容 |
|
||||||
|
|:------:|--------|
|
||||||
|
| 1 | 重置密钥,弹出显示,并可以复制 |
|
||||||
|
| 2 | 删除popconfirm确认提示 |
|
||||||
|
|
||||||
|
**示例数据:**
|
||||||
|
- 应用名称:AI智慧平台
|
||||||
|
- 应用编码:YY000001
|
||||||
|
- 授权接口:学校接口、年级接口、班级接口
|
||||||
|
|
||||||
|
**接口授权表格:**
|
||||||
|
| 接口名称 | 接口地址 | 允许访问 |
|
||||||
|
|---------|---------|:------:|
|
||||||
|
| 查询学生信息 | /api/student/getList | ☐ |
|
||||||
|
| 查询学校信息 | /api/school/getList | ☐ |
|
||||||
|
| 查询年级信息 | /api/grade/getList | ☐ |
|
||||||
|
| 查询班级信息 | /api/class/getList | ☐ |
|
||||||
|
|
||||||
|
#### 8.3.6 区域管理批注
|
||||||
|
|
||||||
|
| 批注序号 | 批注内容 |
|
||||||
|
|:------:|--------|
|
||||||
|
| 1 | 区域名称必填 |
|
||||||
|
| 2 | 如果是新增下级跳转过来时,默认所属父级为选择的;直接点新增,所选区域需要手动选择 |
|
||||||
|
|
||||||
|
**表格列定义:**
|
||||||
|
| 字段 | 说明 |
|
||||||
|
|-----|------|
|
||||||
|
| 区域名称 | 如:湖北省、武汉市 |
|
||||||
|
| 区域编码 | 系统自动生成 |
|
||||||
|
| 创建时间 | 日期时间 |
|
||||||
|
| 创建人 | 操作人 |
|
||||||
|
| 操作 | 新增下级、编辑、删除 |
|
||||||
|
|
||||||
|
#### 8.3.7 年级管理
|
||||||
|
|
||||||
|
**表格列定义:**
|
||||||
|
| 字段 | 说明 |
|
||||||
|
|-----|------|
|
||||||
|
| 年级名称 | 如:一年级、七年级 |
|
||||||
|
| 年级编码 | 系统自动生成 |
|
||||||
|
| 状态 | 启用/禁用 |
|
||||||
|
| 创建时间 | 日期时间 |
|
||||||
|
| 创建人 | 操作人 |
|
||||||
|
| 操作 | 编辑、删除 |
|
||||||
|
|
||||||
|
**新增/编辑表单:**
|
||||||
|
- 年级名称(必填)
|
||||||
|
- 年级编码(自动生成)
|
||||||
|
- 状态(开关)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 9. 约束与假设
|
## 9. 约束与假设
|
||||||
|
|
|
||||||
|
|
@ -61,13 +61,14 @@
|
||||||
| | Element Plus | 2.x | UI组件库 |
|
| | Element Plus | 2.x | UI组件库 |
|
||||||
| | Axios | 1.x | HTTP客户端 |
|
| | Axios | 1.x | HTTP客户端 |
|
||||||
| | Pinia | 2.x | 状态管理 |
|
| | Pinia | 2.x | 状态管理 |
|
||||||
| **后端** | Spring Boot | 2.7.x | 应用框架 |
|
| **后端** | Spring Boot | 3.3.x | 应用框架(LTS版本) |
|
||||||
| | Spring Security | 5.x | 安全框架 |
|
| | Spring Security | 6.x | 安全框架 |
|
||||||
| | MyBatis Plus | 3.5.x | ORM框架 |
|
| | MyBatis Plus | 3.5.x | ORM框架 |
|
||||||
| | JWT | 0.11.x | Token认证 |
|
| | JWT | 0.12.x | Token认证 |
|
||||||
| | Hutool | 5.x | 工具库 |
|
| | Hutool | 5.x | 工具库 |
|
||||||
|
| | JDK | 17+ | 运行环境(LTS) |
|
||||||
| **数据库** | MySQL | 8.0 | 主数据库 |
|
| **数据库** | MySQL | 8.0 | 主数据库 |
|
||||||
| | Redis | 6.x | 缓存 |
|
| | Redis | 7.x | 缓存 |
|
||||||
| **中间件** | Nginx | 1.20+ | 反向代理 |
|
| **中间件** | Nginx | 1.20+ | 反向代理 |
|
||||||
| | MinIO | - | 文件存储(可选)|
|
| | MinIO | - | 文件存储(可选)|
|
||||||
| **基础框架** | RuoYi-Vue | 3.8.x | 快速开发框架 |
|
| **基础框架** | RuoYi-Vue | 3.8.x | 快速开发框架 |
|
||||||
|
|
|
||||||
|
|
@ -497,6 +497,69 @@ INSERT INTO pg_api_dict (api_id, api_code, api_name, api_path, api_method, api_d
|
||||||
(6, 'REGION_TREE', '查询区域树', '/open/region/tree', 'GET', '获取区域树形结构', 6);
|
(6, 'REGION_TREE', '查询区域树', '/open/region/tree', 'GET', '获取区域树形结构', 6);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 4.6 学校示例数据
|
||||||
|
|
||||||
|
> 以下数据来源于墨刀原型设计
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 学校数据
|
||||||
|
INSERT INTO pg_school (school_id, school_code, school_name, school_type, region_id, region_path, status, create_time) VALUES
|
||||||
|
(1, 'SCH20260001', '武汉市第一中学', '02', 111, '湖北省-武汉市-武昌区', '0', NOW()),
|
||||||
|
(2, 'SCH20260002', '武汉市第三中学', '02', 111, '湖北省-武汉市-武昌区', '0', NOW()),
|
||||||
|
(3, 'SCH20260003', '武汉市水果湖小学', '01', 111, '湖北省-武汉市-武昌区', '0', NOW());
|
||||||
|
|
||||||
|
-- 学校-年级关联(武汉市第一中学)
|
||||||
|
INSERT INTO pg_school_grade (id, school_id, grade_id, order_num) VALUES
|
||||||
|
(1, 1, 7, 1), -- 七年级
|
||||||
|
(2, 1, 8, 2), -- 八年级
|
||||||
|
(3, 1, 9, 3); -- 九年级
|
||||||
|
|
||||||
|
-- 学校-年级关联(武汉市水果湖小学)
|
||||||
|
INSERT INTO pg_school_grade (id, school_id, grade_id, order_num) VALUES
|
||||||
|
(4, 3, 1, 1), -- 一年级
|
||||||
|
(5, 3, 2, 2), -- 二年级
|
||||||
|
(6, 3, 3, 3), -- 三年级
|
||||||
|
(7, 3, 4, 4), -- 四年级
|
||||||
|
(8, 3, 5, 5), -- 五年级
|
||||||
|
(9, 3, 6, 6); -- 六年级
|
||||||
|
|
||||||
|
-- 学校-班级关联(武汉市第一中学-七年级)
|
||||||
|
INSERT INTO pg_school_class (id, school_grade_id, class_id, order_num) VALUES
|
||||||
|
(1, 1, 1, 1), -- 1班
|
||||||
|
(2, 1, 2, 2), -- 2班
|
||||||
|
(3, 1, 3, 3); -- 3班
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.7 会员示例数据
|
||||||
|
|
||||||
|
```sql
|
||||||
|
INSERT INTO pg_member (member_id, member_code, phone, password, nickname, gender, identity_type, region_id, school_id, register_source, register_time, status) VALUES
|
||||||
|
(1, 'JS123123123', '13207166213', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '张三家长', '1', '1', NULL, NULL, '1', NOW(), '0'),
|
||||||
|
(2, 'JS123123124', '13807166214', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '李老师', '2', '2', 111, 1, '1', NOW(), '0');
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.8 学生示例数据
|
||||||
|
|
||||||
|
```sql
|
||||||
|
INSERT INTO pg_student (student_id, student_name, student_no, gender, birthday, region_id, region_path, school_id, school_grade_id, school_class_id, member_id, status, create_time) VALUES
|
||||||
|
(1, '张小明', 'STU20260001', '1', '2015-03-15', 111, '湖北省-武汉市-武昌区', 1, 1, 1, 1, '0', NOW()),
|
||||||
|
(2, '张小红', 'STU20260002', '2', '2017-06-20', 111, '湖北省-武汉市-武昌区', 3, 4, 1, 1, '0', NOW());
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.9 应用示例数据
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 应用数据
|
||||||
|
INSERT INTO pg_application (app_id, app_code, app_name, app_secret, app_desc, status, create_time) VALUES
|
||||||
|
(1, 'YY000001', 'AI智慧平台', 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6', 'AI智慧教育平台接入', '0', NOW());
|
||||||
|
|
||||||
|
-- 应用接口授权
|
||||||
|
INSERT INTO pg_app_api (id, app_id, api_code, api_name, api_path, create_time) VALUES
|
||||||
|
(1, 1, 'SCHOOL_LIST', '查询学校信息', '/open/school/list', NOW()),
|
||||||
|
(2, 1, 'GRADE_LIST', '查询年级信息', '/open/grade/list', NOW()),
|
||||||
|
(3, 1, 'CLASS_LIST', '查询班级信息', '/open/class/list', NOW());
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. 索引设计
|
## 5. 索引设计
|
||||||
|
|
|
||||||
|
|
@ -958,4 +958,74 @@ MD5签名:E5D7C6B5A4F3E2D1C0B9A8F7E6D5C4B3
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 10. 业务规则说明
|
||||||
|
|
||||||
|
> 以下业务规则来源于墨刀原型批注,接口开发时需遵守
|
||||||
|
|
||||||
|
### 10.1 学校管理
|
||||||
|
|
||||||
|
| 规则编号 | 规则描述 |
|
||||||
|
|:------:|--------|
|
||||||
|
| SCH-01 | 学校编码自动生成,格式:SCH + 年份 + 4位序号 |
|
||||||
|
| SCH-02 | 新增学校时所属地区从列表页选择的区域层级树带入,也可手动调整 |
|
||||||
|
| SCH-03 | 所属地区/学校编码/学校名称为必填 |
|
||||||
|
| SCH-04 | 学校下新增年级为选择挂载模式,非新建年级,支持多选 |
|
||||||
|
| SCH-05 | 年级下新增班级为选择挂载模式,非新建班级,支持多选 |
|
||||||
|
| SCH-06 | 删除时检查是否有子级或被学生信息引用,有则不允许删除 |
|
||||||
|
| SCH-07 | 所有删除操作均为软删除 |
|
||||||
|
|
||||||
|
### 10.2 会员管理
|
||||||
|
|
||||||
|
| 规则编号 | 规则描述 |
|
||||||
|
|:------:|--------|
|
||||||
|
| MEM-01 | 会员编号自动生成,格式:JS + 时间戳 |
|
||||||
|
| MEM-02 | 昵称未填写时自动生成 |
|
||||||
|
| MEM-03 | 出生日期和性别为选填 |
|
||||||
|
| MEM-04 | 身份类型为"教师"时,必须填写区域/学校/年级/班级 |
|
||||||
|
| MEM-05 | 身份类型为"教师"时,只能绑定同校学生 |
|
||||||
|
| MEM-06 | 身份类型为"家长"时,不显示区域信息,可绑定任意学生 |
|
||||||
|
| MEM-07 | 重置密码后弹窗显示新密码,提供复制功能 |
|
||||||
|
| MEM-08 | 删除会员需popconfirm确认,如绑定学生则不允许删除 |
|
||||||
|
| MEM-09 | 禁用会员后无法登录任何端 |
|
||||||
|
| MEM-10 | 支持三种登录方式:手机号+验证码、手机号+密码、微信登录 |
|
||||||
|
|
||||||
|
### 10.3 学生管理
|
||||||
|
|
||||||
|
| 规则编号 | 规则描述 |
|
||||||
|
|:------:|--------|
|
||||||
|
| STU-01 | 学号不允许重复,可为空 |
|
||||||
|
| STU-02 | 出生日期和性别可为空 |
|
||||||
|
| STU-03 | 学校信息(区域/学校/年级/班级)为必填 |
|
||||||
|
| STU-04 | 学生必须归属于某个会员 |
|
||||||
|
|
||||||
|
**批量导入规则:**
|
||||||
|
|
||||||
|
| 规则编号 | 规则描述 |
|
||||||
|
|:------:|--------|
|
||||||
|
| IMP-01 | 模板字段:姓名(必填)、学号(必填)、用户手机号(必填)、区域(必填)、学校(必填)、年级(必填)、班级(必填)、性别(选填)、出生年月(选填) |
|
||||||
|
| IMP-02 | 导入时校验必填字段和区域/学校/年级/班级数据一致性 |
|
||||||
|
| IMP-03 | 用户手机号已存在则挂载到已有用户 |
|
||||||
|
| IMP-04 | 用户手机号不存在则自动创建家长用户,初始密码:123456 |
|
||||||
|
|
||||||
|
### 10.4 应用管理
|
||||||
|
|
||||||
|
| 规则编号 | 规则描述 |
|
||||||
|
|:------:|--------|
|
||||||
|
| APP-01 | 应用编码自动生成,格式:YY + 6位序号 |
|
||||||
|
| APP-02 | 应用密钥(AppSecret)自动生成,32位随机字符串 |
|
||||||
|
| APP-03 | 重置密钥后弹窗显示新密钥,提供复制功能 |
|
||||||
|
| APP-04 | 删除应用需popconfirm确认 |
|
||||||
|
| APP-05 | 禁用应用后无法调用任何API |
|
||||||
|
|
||||||
|
### 10.5 区域管理
|
||||||
|
|
||||||
|
| 规则编号 | 规则描述 |
|
||||||
|
|:------:|--------|
|
||||||
|
| REG-01 | 区域名称必填 |
|
||||||
|
| REG-02 | 区域编码自动生成 |
|
||||||
|
| REG-03 | 新增下级时默认所属父级为选择的区域 |
|
||||||
|
| REG-04 | 删除区域前检查是否有子级或被引用 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
*文档结束*
|
*文档结束*
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,174 @@
|
||||||
|
DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_LOCKS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
|
||||||
|
DROP TABLE IF EXISTS QRTZ_CALENDARS;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 1、存储每一个已配置的 jobDetail 的详细信息
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_JOB_DETAILS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
job_name varchar(200) not null comment '任务名称',
|
||||||
|
job_group varchar(200) not null comment '任务组名',
|
||||||
|
description varchar(250) null comment '相关介绍',
|
||||||
|
job_class_name varchar(250) not null comment '执行任务类名称',
|
||||||
|
is_durable varchar(1) not null comment '是否持久化',
|
||||||
|
is_nonconcurrent varchar(1) not null comment '是否并发',
|
||||||
|
is_update_data varchar(1) not null comment '是否更新数据',
|
||||||
|
requests_recovery varchar(1) not null comment '是否接受恢复执行',
|
||||||
|
job_data blob null comment '存放持久化job对象',
|
||||||
|
primary key (sched_name, job_name, job_group)
|
||||||
|
) engine=innodb comment = '任务详细信息表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 2、 存储已配置的 Trigger 的信息
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_TRIGGERS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
trigger_name varchar(200) not null comment '触发器的名字',
|
||||||
|
trigger_group varchar(200) not null comment '触发器所属组的名字',
|
||||||
|
job_name varchar(200) not null comment 'qrtz_job_details表job_name的外键',
|
||||||
|
job_group varchar(200) not null comment 'qrtz_job_details表job_group的外键',
|
||||||
|
description varchar(250) null comment '相关介绍',
|
||||||
|
next_fire_time bigint(13) null comment '上一次触发时间(毫秒)',
|
||||||
|
prev_fire_time bigint(13) null comment '下一次触发时间(默认为-1表示不触发)',
|
||||||
|
priority integer null comment '优先级',
|
||||||
|
trigger_state varchar(16) not null comment '触发器状态',
|
||||||
|
trigger_type varchar(8) not null comment '触发器的类型',
|
||||||
|
start_time bigint(13) not null comment '开始时间',
|
||||||
|
end_time bigint(13) null comment '结束时间',
|
||||||
|
calendar_name varchar(200) null comment '日程表名称',
|
||||||
|
misfire_instr smallint(2) null comment '补偿执行的策略',
|
||||||
|
job_data blob null comment '存放持久化job对象',
|
||||||
|
primary key (sched_name, trigger_name, trigger_group),
|
||||||
|
foreign key (sched_name, job_name, job_group) references QRTZ_JOB_DETAILS(sched_name, job_name, job_group)
|
||||||
|
) engine=innodb comment = '触发器详细信息表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_SIMPLE_TRIGGERS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
|
||||||
|
trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
|
||||||
|
repeat_count bigint(7) not null comment '重复的次数统计',
|
||||||
|
repeat_interval bigint(12) not null comment '重复的间隔时间',
|
||||||
|
times_triggered bigint(10) not null comment '已经触发的次数',
|
||||||
|
primary key (sched_name, trigger_name, trigger_group),
|
||||||
|
foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
|
||||||
|
) engine=innodb comment = '简单触发器的信息表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_CRON_TRIGGERS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
|
||||||
|
trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
|
||||||
|
cron_expression varchar(200) not null comment 'cron表达式',
|
||||||
|
time_zone_id varchar(80) comment '时区',
|
||||||
|
primary key (sched_name, trigger_name, trigger_group),
|
||||||
|
foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
|
||||||
|
) engine=innodb comment = 'Cron类型的触发器表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_BLOB_TRIGGERS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
|
||||||
|
trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
|
||||||
|
blob_data blob null comment '存放持久化Trigger对象',
|
||||||
|
primary key (sched_name, trigger_name, trigger_group),
|
||||||
|
foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
|
||||||
|
) engine=innodb comment = 'Blob类型的触发器表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_CALENDARS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
calendar_name varchar(200) not null comment '日历名称',
|
||||||
|
calendar blob not null comment '存放持久化calendar对象',
|
||||||
|
primary key (sched_name, calendar_name)
|
||||||
|
) engine=innodb comment = '日历信息表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 7、 存储已暂停的 Trigger 组的信息
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_PAUSED_TRIGGER_GRPS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
|
||||||
|
primary key (sched_name, trigger_group)
|
||||||
|
) engine=innodb comment = '暂停的触发器表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_FIRED_TRIGGERS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
entry_id varchar(95) not null comment '调度器实例id',
|
||||||
|
trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
|
||||||
|
trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
|
||||||
|
instance_name varchar(200) not null comment '调度器实例名',
|
||||||
|
fired_time bigint(13) not null comment '触发的时间',
|
||||||
|
sched_time bigint(13) not null comment '定时器制定的时间',
|
||||||
|
priority integer not null comment '优先级',
|
||||||
|
state varchar(16) not null comment '状态',
|
||||||
|
job_name varchar(200) null comment '任务名称',
|
||||||
|
job_group varchar(200) null comment '任务组名',
|
||||||
|
is_nonconcurrent varchar(1) null comment '是否并发',
|
||||||
|
requests_recovery varchar(1) null comment '是否接受恢复执行',
|
||||||
|
primary key (sched_name, entry_id)
|
||||||
|
) engine=innodb comment = '已触发的触发器表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_SCHEDULER_STATE (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
instance_name varchar(200) not null comment '实例名称',
|
||||||
|
last_checkin_time bigint(13) not null comment '上次检查时间',
|
||||||
|
checkin_interval bigint(13) not null comment '检查间隔时间',
|
||||||
|
primary key (sched_name, instance_name)
|
||||||
|
) engine=innodb comment = '调度器状态表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 10、 存储程序的悲观锁的信息(假如使用了悲观锁)
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_LOCKS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
lock_name varchar(40) not null comment '悲观锁名称',
|
||||||
|
primary key (sched_name, lock_name)
|
||||||
|
) engine=innodb comment = '存储的悲观锁信息表';
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- 11、 Quartz集群实现同步机制的行锁表
|
||||||
|
-- ----------------------------
|
||||||
|
create table QRTZ_SIMPROP_TRIGGERS (
|
||||||
|
sched_name varchar(120) not null comment '调度名称',
|
||||||
|
trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键',
|
||||||
|
trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键',
|
||||||
|
str_prop_1 varchar(512) null comment 'String类型的trigger的第一个参数',
|
||||||
|
str_prop_2 varchar(512) null comment 'String类型的trigger的第二个参数',
|
||||||
|
str_prop_3 varchar(512) null comment 'String类型的trigger的第三个参数',
|
||||||
|
int_prop_1 int null comment 'int类型的trigger的第一个参数',
|
||||||
|
int_prop_2 int null comment 'int类型的trigger的第二个参数',
|
||||||
|
long_prop_1 bigint null comment 'long类型的trigger的第一个参数',
|
||||||
|
long_prop_2 bigint null comment 'long类型的trigger的第二个参数',
|
||||||
|
dec_prop_1 numeric(13,4) null comment 'decimal类型的trigger的第一个参数',
|
||||||
|
dec_prop_2 numeric(13,4) null comment 'decimal类型的trigger的第二个参数',
|
||||||
|
bool_prop_1 varchar(1) null comment 'Boolean类型的trigger的第一个参数',
|
||||||
|
bool_prop_2 varchar(1) null comment 'Boolean类型的trigger的第二个参数',
|
||||||
|
primary key (sched_name, trigger_name, trigger_group),
|
||||||
|
foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
|
||||||
|
) engine=innodb comment = '同步机制的行锁表';
|
||||||
|
|
||||||
|
commit;
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
[session-f44f888a] Repository or file not found
|
||||||
Loading…
Reference in New Issue