a7f3ee3565
同步仓库名称变更,涉及 16 个文件 66 处引用: - ai-skills: 菜单配置 - backend/guides: AI操作手册、环境配置、部署、gitnexus、opencode 工作流 - backend: 模块创建规则、通信规范、协作工作流、实施规范 - frontend: 收银设计、管理后台实施计划 - standards: 数据库设计规范
665 lines
27 KiB
Markdown
665 lines
27 KiB
Markdown
# 通用平台框架 — 数据库表结构规划
|
||
|
||
> 基于当前项目分析和通用平台框架最佳实践,列出平台运行所需的全量表结构及归属服务。
|
||
> **注意:本规划仅做设计,不做任何代码实施。**
|
||
|
||
---
|
||
|
||
## 一、表结构总览
|
||
|
||
| 服务归属 | 表数量 | 表名前缀 | 说明 |
|
||
|---------|--------|---------|------|
|
||
| **rui-service-system** | 11 | `sys_` | 系统基础服务(租户/菜单/角色/字典/配置/部门/岗位) |
|
||
| **rui-service-user** | 7 | `uc_` | 用户中心服务(用户/详情/等级/角色/部门/岗位/权限) |
|
||
| **rui-auth** | 3 | `auth_` | 认证中心(OAuth2客户端/登录日志/操作日志) |
|
||
| **rui-gateway** | 2 | `gw_` | 网关服务(路由配置/限流规则) |
|
||
| **公共表** | 2 | — | 跨服务使用(文件/消息) |
|
||
| **合计** | **25** | | |
|
||
|
||
> **命名调整建议**:当前 `rui_xxx` 前缀过长,建议简化为服务简称前缀,如 `sys_`、`uc_`、`auth_`、`gw_`,更简洁专业。
|
||
|
||
---
|
||
|
||
## 二、rui-service-system 系统基础服务(11张表)
|
||
|
||
### 2.1 租户管理
|
||
|
||
```sql
|
||
-- sys_tenant — 租户(原 rui_system_tenant 改进)
|
||
CREATE TABLE sys_tenant (
|
||
id BIGINT NOT NULL,
|
||
tenant_code VARCHAR(50) NOT NULL COMMENT '租户编码',
|
||
tenant_name VARCHAR(200) NOT NULL COMMENT '租户名称',
|
||
tenant_type TINYINT NOT NULL DEFAULT 1 COMMENT '类型 1:企业 2:个人 3:试用',
|
||
tenant_level TINYINT NOT NULL DEFAULT 1 COMMENT '等级 1:基础版 2:专业版 3:旗舰版',
|
||
logo_url VARCHAR(500) DEFAULT NULL COMMENT 'Logo',
|
||
contact_name VARCHAR(100) DEFAULT NULL,
|
||
contact_phone VARCHAR(20) DEFAULT NULL,
|
||
contact_email VARCHAR(100) DEFAULT NULL,
|
||
domains VARCHAR(500) DEFAULT NULL COMMENT '绑定域名(逗号分隔)',
|
||
max_user_count INT NOT NULL DEFAULT 100 COMMENT '最大用户数',
|
||
expire_time DATETIME DEFAULT NULL COMMENT '过期时间 NULL:永久',
|
||
super_admin_id BIGINT DEFAULT NULL COMMENT '超管用户ID',
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_tenant_code (tenant_code),
|
||
INDEX idx_status (status)
|
||
) COMMENT='租户';
|
||
|
||
-- sys_tenant_package — 租户套餐(新增)
|
||
CREATE TABLE sys_tenant_package (
|
||
id BIGINT NOT NULL,
|
||
package_code VARCHAR(100) NOT NULL COMMENT '套餐编码',
|
||
package_name VARCHAR(200) NOT NULL COMMENT '套餐名称',
|
||
max_user_count INT NOT NULL DEFAULT 100,
|
||
max_dept_count INT NOT NULL DEFAULT 50,
|
||
max_menu_count INT NOT NULL DEFAULT 100,
|
||
price DECIMAL(19,4) NOT NULL DEFAULT 0 COMMENT '价格',
|
||
duration_days INT NOT NULL DEFAULT 365 COMMENT '时长(天)',
|
||
remark VARCHAR(500) DEFAULT NULL,
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_package_code (package_code)
|
||
) COMMENT='租户套餐';
|
||
```
|
||
|
||
### 2.2 组织架构
|
||
|
||
```sql
|
||
-- sys_dept — 部门(新增)
|
||
CREATE TABLE sys_dept (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
parent_id BIGINT NOT NULL DEFAULT 0,
|
||
ancestors VARCHAR(500) DEFAULT '' COMMENT '祖级ID列表 如: 0,1,5,',
|
||
dept_code VARCHAR(100) NOT NULL COMMENT '部门编码',
|
||
dept_name VARCHAR(100) NOT NULL COMMENT '部门名称',
|
||
leader_id BIGINT DEFAULT NULL COMMENT '负责人ID',
|
||
phone VARCHAR(20) DEFAULT NULL,
|
||
email VARCHAR(100) DEFAULT NULL,
|
||
sort_no INT NOT NULL DEFAULT 0,
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_dept_code (tenant_id, dept_code),
|
||
INDEX idx_parent (parent_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='部门';
|
||
|
||
-- sys_post — 岗位(新增)
|
||
CREATE TABLE sys_post (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
post_code VARCHAR(100) NOT NULL COMMENT '岗位编码',
|
||
post_name VARCHAR(100) NOT NULL COMMENT '岗位名称',
|
||
sort_no INT NOT NULL DEFAULT 0,
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_post_code (tenant_id, post_code),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='岗位';
|
||
```
|
||
|
||
### 2.3 菜单与权限
|
||
|
||
```sql
|
||
-- sys_menu — 菜单(原 rui_system_menu 改进)
|
||
CREATE TABLE sys_menu (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
parent_id BIGINT NOT NULL DEFAULT 0 COMMENT '父菜单ID 0:顶级',
|
||
ancestors VARCHAR(500) DEFAULT '' COMMENT '祖级ID列表',
|
||
menu_code VARCHAR(100) NOT NULL COMMENT '菜单编码(唯一标识)',
|
||
menu_name VARCHAR(100) NOT NULL COMMENT '菜单名称',
|
||
menu_type TINYINT NOT NULL DEFAULT 1 COMMENT '类型 1:目录 2:菜单 3:按钮',
|
||
icon VARCHAR(100) DEFAULT NULL COMMENT '图标',
|
||
path VARCHAR(200) DEFAULT NULL COMMENT '路由路径',
|
||
component VARCHAR(200) DEFAULT NULL COMMENT '组件路径',
|
||
permission VARCHAR(200) DEFAULT NULL COMMENT '权限标识 如: user:list',
|
||
is_external TINYINT NOT NULL DEFAULT 0 COMMENT '是否外链 0:否 1:是',
|
||
target VARCHAR(20) DEFAULT '_self' COMMENT '打开方式 _self/_blank',
|
||
keep_alive TINYINT NOT NULL DEFAULT 0 COMMENT '是否缓存 0:否 1:是',
|
||
visible TINYINT NOT NULL DEFAULT 1 COMMENT '是否显示 0:隐藏 1:显示',
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
sort_no INT NOT NULL DEFAULT 0,
|
||
remark VARCHAR(500) DEFAULT NULL,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_menu_code (tenant_id, menu_code),
|
||
INDEX idx_parent (parent_id),
|
||
INDEX idx_ancestors (ancestors(100)),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='菜单';
|
||
```
|
||
|
||
### 2.4 角色管理
|
||
|
||
```sql
|
||
-- sys_role — 角色(原 rui_system_role 改进)
|
||
CREATE TABLE sys_role (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
parent_id BIGINT NOT NULL DEFAULT 0,
|
||
ancestors VARCHAR(500) DEFAULT '' COMMENT '祖级ID列表',
|
||
role_code VARCHAR(100) NOT NULL COMMENT '角色编码',
|
||
role_name VARCHAR(100) NOT NULL COMMENT '角色名称',
|
||
role_type TINYINT NOT NULL DEFAULT 1 COMMENT '类型 1:系统角色 2:租户角色 3:自定义',
|
||
data_scope TINYINT NOT NULL DEFAULT 1 COMMENT '数据范围 1:全部 2:本部门 3:本部门及子部门 4:仅本人 5:自定义',
|
||
description VARCHAR(500) DEFAULT NULL,
|
||
sort_no INT NOT NULL DEFAULT 0,
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_role_code (tenant_id, role_code),
|
||
INDEX idx_parent (parent_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='角色';
|
||
|
||
-- sys_role_menu — 角色菜单关联(原 rui_system_role_menu 改进)
|
||
CREATE TABLE sys_role_menu (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
role_id BIGINT NOT NULL,
|
||
menu_id BIGINT NOT NULL,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_role_menu (tenant_id, role_id, menu_id),
|
||
INDEX idx_role (role_id),
|
||
INDEX idx_menu (menu_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='角色菜单关联';
|
||
```
|
||
|
||
### 2.5 数据字典
|
||
|
||
```sql
|
||
-- sys_dict_type — 字典类型(新增,拆分原字典表)
|
||
CREATE TABLE sys_dict_type (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
dict_code VARCHAR(100) NOT NULL COMMENT '字典编码(唯一标识)',
|
||
dict_name VARCHAR(200) NOT NULL COMMENT '字典名称',
|
||
description VARCHAR(500) DEFAULT NULL,
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_dict_code (tenant_id, dict_code),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='字典类型';
|
||
|
||
-- sys_dict_item — 字典项(新增,拆分原字典表)
|
||
CREATE TABLE sys_dict_item (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
dict_type_id BIGINT NOT NULL COMMENT '字典类型ID',
|
||
item_code VARCHAR(100) NOT NULL COMMENT '项编码',
|
||
item_label VARCHAR(200) NOT NULL COMMENT '项标签',
|
||
item_value VARCHAR(200) NOT NULL COMMENT '项值',
|
||
sort_no INT NOT NULL DEFAULT 0,
|
||
remark VARCHAR(500) DEFAULT NULL,
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_dict_type_code (tenant_id, dict_type_id, item_code),
|
||
INDEX idx_dict_type (dict_type_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='字典项';
|
||
```
|
||
|
||
### 2.6 系统配置
|
||
|
||
```sql
|
||
-- sys_config — 系统配置(原 rui_system_config 改进)
|
||
CREATE TABLE sys_config (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
config_group VARCHAR(100) NOT NULL DEFAULT 'default' COMMENT '配置分组(oss/sms/email)',
|
||
config_key VARCHAR(200) NOT NULL COMMENT '配置键',
|
||
config_value VARCHAR(2000) NOT NULL COMMENT '配置值',
|
||
config_type VARCHAR(20) NOT NULL DEFAULT 'STRING' COMMENT '值类型 STRING/JSON/NUMBER/BOOLEAN/ENCRYPTED',
|
||
is_system TINYINT NOT NULL DEFAULT 0 COMMENT '是否系统级 0:租户 1:系统',
|
||
is_encrypted TINYINT NOT NULL DEFAULT 0 COMMENT '是否加密 0:明文 1:密文',
|
||
description VARCHAR(500) DEFAULT NULL,
|
||
sort_no INT NOT NULL DEFAULT 0,
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_config_key (tenant_id, config_key),
|
||
INDEX idx_group (config_group),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='系统配置';
|
||
```
|
||
|
||
---
|
||
|
||
## 三、rui-service-user 用户中心服务(7张表)
|
||
|
||
### 3.1 用户主体
|
||
|
||
```sql
|
||
-- uc_user — 用户主表(原 rui_user_credential + rui_user_info 合并改进)
|
||
CREATE TABLE uc_user (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
username VARCHAR(100) NOT NULL COMMENT '用户名',
|
||
password VARCHAR(255) NOT NULL COMMENT '密码(BCrypt加密)',
|
||
user_type TINYINT NOT NULL DEFAULT 1 COMMENT '用户类型 1:普通用户 2:管理员 3:系统用户',
|
||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:禁用 1:启用',
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_username (tenant_id, username),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='用户';
|
||
|
||
-- uc_user_detail — 用户详情表(原 rui_user_info 拆分)
|
||
CREATE TABLE uc_user_detail (
|
||
id BIGINT NOT NULL,
|
||
user_id BIGINT NOT NULL COMMENT '用户ID',
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
nickname VARCHAR(100) DEFAULT NULL COMMENT '昵称',
|
||
real_name VARCHAR(100) DEFAULT NULL COMMENT '真实姓名',
|
||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
|
||
phone VARCHAR(20) DEFAULT NULL COMMENT '手机号',
|
||
avatar VARCHAR(1000) DEFAULT NULL COMMENT '头像URL',
|
||
gender TINYINT DEFAULT 0 COMMENT '性别 0:未知 1:男 2:女',
|
||
birthday DATE DEFAULT NULL,
|
||
id_card VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
|
||
address VARCHAR(500) DEFAULT NULL COMMENT '地址',
|
||
extra JSON DEFAULT NULL COMMENT '扩展字段(JSON格式)',
|
||
remark VARCHAR(500) DEFAULT NULL,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_user_id (user_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='用户详情';
|
||
```
|
||
|
||
### 3.2 用户等级
|
||
|
||
```sql
|
||
-- uc_user_level — 用户等级定义(原 rui_user_level 改进)
|
||
CREATE TABLE uc_user_level (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
level_code VARCHAR(100) NOT NULL COMMENT '等级编码',
|
||
level_name VARCHAR(100) NOT NULL COMMENT '等级名称',
|
||
level_no INT NOT NULL DEFAULT 1 COMMENT '等级序号(数字越大等级越高)',
|
||
min_score INT NOT NULL DEFAULT 0 COMMENT '最低积分要求',
|
||
icon VARCHAR(500) DEFAULT NULL COMMENT '等级图标',
|
||
benefits JSON DEFAULT NULL COMMENT '权益配置(JSON)',
|
||
upgrade_type TINYINT NOT NULL DEFAULT 1 COMMENT '升级方式 1:自动 2:手动审核',
|
||
expire_days INT DEFAULT 0 COMMENT '有效期(天) 0:永久',
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
sort_no INT NOT NULL DEFAULT 0,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_level_code (tenant_id, level_code),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='用户等级';
|
||
|
||
-- uc_user_level_log — 用户等级变更记录(原 rui_user_level_log 改进)
|
||
CREATE TABLE uc_user_level_log (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
user_id BIGINT NOT NULL COMMENT '用户ID',
|
||
change_type TINYINT NOT NULL DEFAULT 1 COMMENT '变更类型 1:升级 2:降级 3:手动调整 4:过期',
|
||
from_level_id BIGINT DEFAULT NULL COMMENT '原等级ID NULL:初始',
|
||
to_level_id BIGINT NOT NULL COMMENT '新等级ID',
|
||
score_before INT DEFAULT NULL COMMENT '变更前积分',
|
||
score_after INT DEFAULT NULL COMMENT '变更后积分',
|
||
reason VARCHAR(500) DEFAULT NULL COMMENT '变更原因',
|
||
operator_id BIGINT DEFAULT NULL COMMENT '操作人ID',
|
||
operator_type TINYINT NOT NULL DEFAULT 1 COMMENT '操作人类型 1:系统 2:管理员 3:用户',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='用户等级变更记录';
|
||
```
|
||
|
||
### 3.3 用户关联
|
||
|
||
```sql
|
||
-- uc_user_role — 用户角色关联(原 rui_user_role 改进)
|
||
CREATE TABLE uc_user_role (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
user_id BIGINT NOT NULL,
|
||
role_id BIGINT NOT NULL,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_user_role (tenant_id, user_id, role_id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_role (role_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='用户角色关联';
|
||
|
||
-- uc_user_dept — 用户部门关联(新增)
|
||
CREATE TABLE uc_user_dept (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
user_id BIGINT NOT NULL,
|
||
dept_id BIGINT NOT NULL,
|
||
is_main TINYINT NOT NULL DEFAULT 1 COMMENT '是否主部门 0:否 1:是',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_user_dept (tenant_id, user_id, dept_id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_dept (dept_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='用户部门关联';
|
||
|
||
-- uc_user_post — 用户岗位关联(新增)
|
||
CREATE TABLE uc_user_post (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
user_id BIGINT NOT NULL,
|
||
post_id BIGINT NOT NULL,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_user_post (tenant_id, user_id, post_id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_post (post_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='用户岗位关联';
|
||
|
||
-- uc_user_permission — 用户权限关联(新增,支持直接授权)
|
||
CREATE TABLE uc_user_permission (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
user_id BIGINT NOT NULL,
|
||
permission VARCHAR(200) NOT NULL COMMENT '权限标识 如: user:list',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_user_permission (tenant_id, user_id, permission),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='用户权限关联(直接授权)';
|
||
```
|
||
|
||
---
|
||
|
||
## 四、rui-auth 认证中心(3张表)
|
||
|
||
### 4.1 OAuth2 客户端
|
||
|
||
```sql
|
||
-- auth_oauth2_client — OAuth2客户端(原 rui_system_oauth2_client 改进)
|
||
CREATE TABLE auth_oauth2_client (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
client_id VARCHAR(100) NOT NULL COMMENT '客户端ID',
|
||
client_secret VARCHAR(255) DEFAULT NULL COMMENT '客户端密钥',
|
||
client_name VARCHAR(200) NOT NULL COMMENT '客户端名称',
|
||
client_type TINYINT NOT NULL DEFAULT 1 COMMENT '客户端类型 1:Web 2:App 3:小程序',
|
||
logo_url VARCHAR(500) DEFAULT NULL COMMENT 'Logo',
|
||
description VARCHAR(500) DEFAULT NULL,
|
||
authentication_methods VARCHAR(500) NOT NULL COMMENT '认证方式',
|
||
grant_types VARCHAR(500) NOT NULL COMMENT '授权类型',
|
||
redirect_uris TEXT DEFAULT NULL COMMENT '回调地址(逗号分隔)',
|
||
scopes VARCHAR(500) NOT NULL COMMENT '授权范围',
|
||
access_token_ttl INT NOT NULL DEFAULT 7200 COMMENT '访问令牌有效期(秒)',
|
||
refresh_token_ttl INT NOT NULL DEFAULT 604800 COMMENT '刷新令牌有效期(秒)',
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_client_id (tenant_id, client_id),
|
||
INDEX idx_tenant (tenant_id)
|
||
) COMMENT='OAuth2客户端';
|
||
```
|
||
|
||
### 4.2 日志审计
|
||
|
||
```sql
|
||
-- auth_login_log — 登录日志(新增)
|
||
CREATE TABLE auth_login_log (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
user_id BIGINT DEFAULT NULL,
|
||
username VARCHAR(100) DEFAULT NULL,
|
||
login_type TINYINT NOT NULL DEFAULT 1 COMMENT '登录类型 1:密码 2:短信 3:微信 4:支付宝',
|
||
client_id VARCHAR(100) DEFAULT NULL COMMENT '客户端ID',
|
||
ip VARCHAR(128) DEFAULT NULL,
|
||
location VARCHAR(255) DEFAULT NULL,
|
||
browser VARCHAR(200) DEFAULT NULL,
|
||
os VARCHAR(200) DEFAULT NULL,
|
||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:失败 1:成功',
|
||
msg VARCHAR(500) DEFAULT NULL COMMENT '消息',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_tenant (tenant_id),
|
||
INDEX idx_created (created_at)
|
||
) COMMENT='登录日志';
|
||
|
||
-- auth_oper_log — 操作日志(新增)
|
||
CREATE TABLE auth_oper_log (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
oper_type TINYINT NOT NULL DEFAULT 1 COMMENT '操作类型 1:新增 2:修改 3:删除 4:查询 5:导出 6:登录 7:登出',
|
||
title VARCHAR(200) NOT NULL COMMENT '操作模块',
|
||
method VARCHAR(500) DEFAULT NULL COMMENT '请求方法',
|
||
request_url VARCHAR(500) DEFAULT NULL COMMENT '请求URL',
|
||
request_method VARCHAR(10) DEFAULT NULL COMMENT '请求方式 GET/POST/PUT/DELETE',
|
||
request_params TEXT DEFAULT NULL COMMENT '请求参数',
|
||
response_data TEXT DEFAULT NULL COMMENT '响应数据',
|
||
user_id BIGINT DEFAULT NULL COMMENT '操作用户ID',
|
||
user_name VARCHAR(100) DEFAULT NULL COMMENT '操作用户名',
|
||
oper_ip VARCHAR(128) DEFAULT NULL COMMENT '操作IP',
|
||
oper_location VARCHAR(255) DEFAULT NULL COMMENT '操作地点',
|
||
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:失败 1:成功',
|
||
error_msg TEXT DEFAULT NULL COMMENT '错误消息',
|
||
cost_time BIGINT DEFAULT 0 COMMENT '耗时(ms)',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
INDEX idx_user (user_id),
|
||
INDEX idx_tenant (tenant_id),
|
||
INDEX idx_created (created_at)
|
||
) COMMENT='操作日志';
|
||
```
|
||
|
||
---
|
||
|
||
## 五、rui-gateway 网关服务(2张表)
|
||
|
||
```sql
|
||
-- gw_route — 路由配置(新增)
|
||
CREATE TABLE gw_route (
|
||
id BIGINT NOT NULL,
|
||
route_id VARCHAR(100) NOT NULL COMMENT '路由ID',
|
||
route_name VARCHAR(200) NOT NULL COMMENT '路由名称',
|
||
uri VARCHAR(500) NOT NULL COMMENT '目标URI',
|
||
predicates VARCHAR(1000) NOT NULL COMMENT '断言条件(JSON)',
|
||
filters VARCHAR(1000) DEFAULT NULL COMMENT '过滤器(JSON)',
|
||
sort_no INT NOT NULL DEFAULT 0,
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_route_id (route_id)
|
||
) COMMENT='网关路由配置';
|
||
|
||
-- gw_rate_limit — 限流规则(新增)
|
||
CREATE TABLE gw_rate_limit (
|
||
id BIGINT NOT NULL,
|
||
route_id VARCHAR(100) NOT NULL COMMENT '路由ID',
|
||
limit_type TINYINT NOT NULL DEFAULT 1 COMMENT '限流类型 1:IP 2:用户 3:接口',
|
||
limit_key VARCHAR(200) NOT NULL COMMENT '限流键',
|
||
limit_count INT NOT NULL DEFAULT 100 COMMENT '限流次数',
|
||
limit_window INT NOT NULL DEFAULT 60 COMMENT '时间窗口(秒)',
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
INDEX idx_route (route_id)
|
||
) COMMENT='网关限流规则';
|
||
```
|
||
|
||
---
|
||
|
||
## 六、公共表(跨服务使用,2张表)
|
||
|
||
```sql
|
||
-- pub_file — 文件记录(新增)
|
||
CREATE TABLE pub_file (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
file_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
|
||
file_url VARCHAR(1000) NOT NULL COMMENT '文件访问URL',
|
||
file_path VARCHAR(1000) NOT NULL COMMENT '文件存储路径',
|
||
file_size BIGINT NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
|
||
file_type VARCHAR(100) DEFAULT NULL COMMENT '文件类型',
|
||
storage_type TINYINT NOT NULL DEFAULT 1 COMMENT '存储类型 1:本地 2:OSS 3:MinIO',
|
||
module VARCHAR(100) DEFAULT NULL COMMENT '所属模块',
|
||
biz_id BIGINT DEFAULT NULL COMMENT '业务ID',
|
||
status TINYINT NOT NULL DEFAULT 1,
|
||
deleted TINYINT NOT NULL DEFAULT 0,
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
INDEX idx_tenant (tenant_id),
|
||
INDEX idx_module_biz (module, biz_id)
|
||
) COMMENT='文件记录';
|
||
|
||
-- pub_message — 消息记录(新增)
|
||
CREATE TABLE pub_message (
|
||
id BIGINT NOT NULL,
|
||
tenant_id BIGINT NOT NULL DEFAULT 0,
|
||
msg_type TINYINT NOT NULL DEFAULT 1 COMMENT '消息类型 1:短信 2:邮件 3:站内信 4:App推送',
|
||
template_code VARCHAR(100) DEFAULT NULL COMMENT '模板编码',
|
||
sender VARCHAR(200) DEFAULT NULL COMMENT '发送方',
|
||
receiver VARCHAR(500) NOT NULL COMMENT '接收方',
|
||
subject VARCHAR(500) DEFAULT NULL COMMENT '主题',
|
||
content TEXT NOT NULL COMMENT '内容',
|
||
params JSON DEFAULT NULL COMMENT '模板参数(JSON)',
|
||
send_status TINYINT NOT NULL DEFAULT 0 COMMENT '发送状态 0:待发送 1:发送中 2:成功 3:失败',
|
||
retry_count INT NOT NULL DEFAULT 0 COMMENT '重试次数',
|
||
send_time DATETIME DEFAULT NULL COMMENT '发送时间',
|
||
result_msg VARCHAR(500) DEFAULT NULL COMMENT '发送结果',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
PRIMARY KEY (id),
|
||
INDEX idx_tenant (tenant_id),
|
||
INDEX idx_status (send_status),
|
||
INDEX idx_created (created_at)
|
||
) COMMENT='消息记录';
|
||
```
|
||
|
||
---
|
||
|
||
## 七、表结构变更对照(当前 → 规划)
|
||
|
||
| 当前表名 | 规划表名 | 归属服务 | 变更类型 |
|
||
|---------|---------|---------|---------|
|
||
| rui_system_oauth2_client | auth_oauth2_client | rui-auth | 🔴 迁移 + 重构 |
|
||
| rui_system_tenant | sys_tenant | rui-service-system | 🟡 重构 |
|
||
| rui_user_credential | uc_user | rui-service-user | 🔴 合并拆分 |
|
||
| rui_user_info | uc_user_detail | rui-service-user | 🔴 合并拆分 |
|
||
| rui_user_level | uc_user_level | rui-service-user | 🟡 重构 |
|
||
| rui_user_level_log | uc_user_level_log | rui-service-user | 🟡 重构 |
|
||
| rui_user_role | uc_user_role | rui-service-user | 🟡 重构 |
|
||
| rui_system_menu | sys_menu | rui-service-system | 🟡 重构 |
|
||
| rui_system_role | sys_role | rui-service-system | 🟡 重构 |
|
||
| rui_system_role_menu | sys_role_menu | rui-service-system | 🟡 重构 |
|
||
| rui_system_dict | sys_dict_type + sys_dict_item | rui-service-system | 🔴 拆分 |
|
||
| rui_system_config | sys_config | rui-service-system | 🟡 重构 |
|
||
| — | sys_tenant_package | rui-service-system | 🟢 新增 |
|
||
| — | sys_dept | rui-service-system | 🟢 新增 |
|
||
| — | sys_post | rui-service-system | 🟢 新增 |
|
||
| — | uc_user_dept | rui-service-user | 🟢 新增 |
|
||
| — | uc_user_post | rui-service-user | 🟢 新增 |
|
||
| — | uc_user_permission | rui-service-user | 🟢 新增 |
|
||
| — | auth_login_log | rui-auth | 🟢 新增 |
|
||
| — | auth_oper_log | rui-auth | 🟢 新增 |
|
||
| — | gw_route | rui-gateway | 🟢 新增 |
|
||
| — | gw_rate_limit | rui-gateway | 🟢 新增 |
|
||
| — | pub_file | 公共 | 🟢 新增 |
|
||
| — | pub_message | 公共 | 🟢 新增 |
|
||
|
||
---
|
||
|
||
## 八、表前缀规则(新增)
|
||
|
||
| 前缀 | 归属服务 | 说明 |
|
||
|------|---------|------|
|
||
| `sys_` | rui-service-system | 系统基础表(租户/部门/岗位/菜单/角色/字典/配置) |
|
||
| `uc_` | rui-service-user | 用户中心表(用户/详情/等级/角色/部门/岗位关联) |
|
||
| `auth_` | rui-auth | 认证授权表(OAuth2客户端/登录日志/操作日志) |
|
||
| `gw_` | rui-gateway | 网关表(路由/限流) |
|
||
| `pub_` | 公共 | 跨服务公共表(文件/消息) |
|
||
| `biz_` | 业务服务 | 业务应用模块表(如 biz_order, biz_pay) |
|
||
|
||
---
|
||
|
||
## 九、Entity 设计规则(新增)
|
||
|
||
### 9.1 必须继承 BaseEntity
|
||
|
||
```java
|
||
@Data
|
||
@EqualsAndHashCode(callSuper = true)
|
||
public class User extends BaseEntity {
|
||
// 业务字段
|
||
}
|
||
```
|
||
|
||
### 9.2 @TableName 命名规则
|
||
|
||
```java
|
||
// ✅ 正确:不包含前缀,与全局配置 table-prefix 配合
|
||
@TableName(value = "user", keepGlobalPrefix = true)
|
||
// 实际表名: rui_user(当前)或 uc_user(建议调整后)
|
||
|
||
// ❌ 错误:硬编码前缀,或前缀与配置不一致
|
||
@TableName(value = "auth_user", keepGlobalPrefix = true)
|
||
// 实际表名: rui_auth_user(与 SQL 不一致)
|
||
```
|
||
|
||
### 9.3 主键策略统一
|
||
|
||
```java
|
||
// ✅ 统一使用 ASSIGN_ID(雪花算法)
|
||
@TableId(type = IdType.ASSIGN_ID)
|
||
private Long id;
|
||
|
||
// ❌ 不要混用 AUTO
|
||
@TableId(type = IdType.AUTO) // 错误!
|
||
```
|
||
|
||
---
|
||
|
||
> **文档版本**: v1.0
|
||
> **创建日期**: 2026-05-28
|
||
> **适用范围**: rui-framework 项目数据库设计
|
||
> **状态**: 仅规划,未实施
|