diff --git a/README.md b/README.md index 2813d63..b82bc09 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,39 @@ mvn spring-boot:run - **页面数量**: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) **前端技术栈升级:** diff --git a/docs/01-需求文档/需求规格说明书_v1.0.md b/docs/01-需求文档/需求规格说明书_v1.0.md index 2c251a6..41603f3 100644 --- a/docs/01-需求文档/需求规格说明书_v1.0.md +++ b/docs/01-需求文档/需求规格说明书_v1.0.md @@ -714,8 +714,192 @@ | 6 | 年级管理 | 列表、编辑 | 2 | | 7 | 班级管理 | 列表、编辑 | 2 | | 8 | 学科管理 | 列表、编辑 | 2 | +| 9 | 区域管理 | 列表、编辑 | 2 | | | **合计** | | **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. 约束与假设 diff --git a/docs/02-系统设计/系统设计文档_v1.0.md b/docs/02-系统设计/系统设计文档_v1.0.md index b5ea770..b953598 100644 --- a/docs/02-系统设计/系统设计文档_v1.0.md +++ b/docs/02-系统设计/系统设计文档_v1.0.md @@ -61,13 +61,14 @@ | | Element Plus | 2.x | UI组件库 | | | Axios | 1.x | HTTP客户端 | | | Pinia | 2.x | 状态管理 | -| **后端** | Spring Boot | 2.7.x | 应用框架 | -| | Spring Security | 5.x | 安全框架 | +| **后端** | Spring Boot | 3.3.x | 应用框架(LTS版本) | +| | Spring Security | 6.x | 安全框架 | | | MyBatis Plus | 3.5.x | ORM框架 | -| | JWT | 0.11.x | Token认证 | +| | JWT | 0.12.x | Token认证 | | | Hutool | 5.x | 工具库 | +| | JDK | 17+ | 运行环境(LTS) | | **数据库** | MySQL | 8.0 | 主数据库 | -| | Redis | 6.x | 缓存 | +| | Redis | 7.x | 缓存 | | **中间件** | Nginx | 1.20+ | 反向代理 | | | MinIO | - | 文件存储(可选)| | **基础框架** | RuoYi-Vue | 3.8.x | 快速开发框架 | diff --git a/docs/03-数据库设计/数据库设计文档_v1.0.md b/docs/03-数据库设计/数据库设计文档_v1.0.md index 339f865..d738f7d 100644 --- a/docs/03-数据库设计/数据库设计文档_v1.0.md +++ b/docs/03-数据库设计/数据库设计文档_v1.0.md @@ -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); ``` +### 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. 索引设计 diff --git a/docs/04-接口文档/接口设计文档_v1.0.md b/docs/04-接口文档/接口设计文档_v1.0.md index 4a9ba49..222f2aa 100644 --- a/docs/04-接口文档/接口设计文档_v1.0.md +++ b/docs/04-接口文档/接口设计文档_v1.0.md @@ -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 | 删除区域前检查是否有子级或被引用 | + +--- + *文档结束* diff --git a/sql/quartz.sql b/sql/quartz.sql new file mode 100644 index 0000000..cee613b --- /dev/null +++ b/sql/quartz.sql @@ -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; \ No newline at end of file diff --git a/sql/ry_20240629.sql b/sql/ry_20240629.sql new file mode 100644 index 0000000..bd72f5d --- /dev/null +++ b/sql/ry_20240629.sql @@ -0,0 +1 @@ +[session-f44f888a] Repository or file not found \ No newline at end of file