refactor: 物理删除 => 逻辑删除(适配已有唯一索引)

1.涉及逻辑删除调整表:
main_table.sql:菜单表、部门表、角色表、用户表、用户社会化关联表、字典表、字典项表、消息表、公告表、存储表、文件表、客户端表、短信配置表
插件:应用表、租户表、租户套餐表
2.deleted 是否已删除(0:否;id:是)
This commit is contained in:
2025-11-09 19:08:28 +08:00
parent 6be14b59b1
commit fbc0269b3c
25 changed files with 373 additions and 265 deletions

View File

@@ -63,4 +63,9 @@ public class BaseDO extends BaseIdDO {
*/
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/**
* 是否已删除0id
*/
private Long deleted;
}

View File

@@ -38,6 +38,6 @@ public interface AppMapper extends BaseMapper<AppDO> {
* @param accessKey Access Key
* @return 应用信息
*/
@Select("select * from sys_app where access_key = #{accessKey}")
@Select("select * from sys_app where deleted = 0 AND access_key = #{accessKey}")
AppDO selectByAccessKey(@FieldEncrypt @Param("accessKey") String accessKey);
}

View File

@@ -281,6 +281,12 @@ mybatis-plus:
# 主键类型(默认 assign_id表示自行赋值
# auto 代表使用数据库自增策略(需要在表中设置好自增约束)
id-type: ASSIGN_ID
# 逻辑删除字段名
logic-delete-field: deleted
# 逻辑未删除值
logic-not-delete-value: 0
# 逻辑已删除值(解决唯一索引冲突)
logic-delete-value: id
## 扩展配置
extension:
enabled: true

View File

@@ -1,8 +1,6 @@
databaseChangeLog:
- include:
file: db/changelog/mysql/main_table.sql
- include:
file: db/changelog/mysql/main_column.sql
- include:
file: db/changelog/mysql/main_data.sql
- include:
@@ -17,8 +15,6 @@ databaseChangeLog:
# - include:
# file: db/changelog/postgresql/main_table.sql
# - include:
# file: db/changelog/postgresql/main_column.sql
# - include:
# file: db/changelog/postgresql/main_data.sql
# - include:
# file: db/changelog/postgresql/plugin/plugin_open.sql

View File

@@ -1,2 +0,0 @@
-- liquibase formatted sql

View File

@@ -3,7 +3,7 @@
-- changeset charles7c:1
-- comment 初始化表结构
CREATE TABLE IF NOT EXISTS `sys_menu` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`title` varchar(30) NOT NULL COMMENT '标题',
`parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '上级菜单ID',
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型1目录2菜单3按钮',
@@ -22,15 +22,17 @@ CREATE TABLE IF NOT EXISTS `sys_menu` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_title_parent_id`(`title`, `parent_id`),
UNIQUE INDEX `uk_title_parent_id`(`title`, `parent_id`, `deleted`),
INDEX `idx_parent_id`(`parent_id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';
CREATE TABLE IF NOT EXISTS `sys_dept` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(30) NOT NULL COMMENT '名称',
`parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '上级部门ID',
`ancestors` varchar(512) NOT NULL DEFAULT '' COMMENT '祖级列表',
@@ -42,15 +44,17 @@ CREATE TABLE IF NOT EXISTS `sys_dept` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_name_parent_id`(`name`, `parent_id`),
UNIQUE INDEX `uk_name_parent_id`(`name`, `parent_id`, `deleted`),
INDEX `idx_parent_id`(`parent_id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
CREATE TABLE IF NOT EXISTS `sys_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(30) NOT NULL COMMENT '名称',
`code` varchar(30) NOT NULL COMMENT '编码',
`data_scope` tinyint(1) NOT NULL DEFAULT 4 COMMENT '数据权限1全部数据权限2本部门及以下数据权限3本部门数据权限4仅本人数据权限5自定义数据权限',
@@ -63,15 +67,17 @@ CREATE TABLE IF NOT EXISTS `sys_role` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_name`(`name`),
UNIQUE INDEX `uk_code`(`code`),
UNIQUE INDEX `uk_name`(`name`, `deleted`),
UNIQUE INDEX `uk_code`(`code`, `deleted`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
CREATE TABLE IF NOT EXISTS `sys_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`username` varchar(64) NOT NULL COMMENT '用户名',
`nickname` varchar(30) NOT NULL COMMENT '昵称',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
@@ -88,17 +94,19 @@ CREATE TABLE IF NOT EXISTS `sys_user` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_username`(`username`),
UNIQUE INDEX `uk_email`(`email`),
UNIQUE INDEX `uk_phone`(`phone`),
UNIQUE INDEX `uk_username`(`username`, `deleted`),
UNIQUE INDEX `uk_email`(`email`, `deleted`),
UNIQUE INDEX `uk_phone`(`phone`, `deleted`),
INDEX `idx_dept_id`(`dept_id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
CREATE TABLE IF NOT EXISTS `sys_user_password_history` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`password` varchar(255) NOT NULL COMMENT '密码',
`create_time` datetime NOT NULL COMMENT '创建时间',
@@ -107,19 +115,22 @@ CREATE TABLE IF NOT EXISTS `sys_user_password_history` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户历史密码表';
CREATE TABLE IF NOT EXISTS `sys_user_social` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`source` varchar(255) NOT NULL COMMENT '来源',
`open_id` varchar(255) NOT NULL COMMENT '开放ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`meta_json` text DEFAULT NULL COMMENT '附加信息',
`last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_source_open_id`(`source`, `open_id`)
UNIQUE INDEX `uk_source_open_id`(`source`, `open_id`, `deleted`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户社会化关联表';
CREATE TABLE IF NOT EXISTS `sys_user_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
PRIMARY KEY (`id`),
@@ -139,7 +150,7 @@ CREATE TABLE IF NOT EXISTS `sys_role_dept` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色和部门关联表';
CREATE TABLE IF NOT EXISTS `sys_option` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`category` varchar(50) NOT NULL COMMENT '类别',
`name` varchar(50) NOT NULL COMMENT '名称',
`code` varchar(100) NOT NULL COMMENT '',
@@ -153,7 +164,7 @@ CREATE TABLE IF NOT EXISTS `sys_option` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参数表';
CREATE TABLE IF NOT EXISTS `sys_dict` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(30) NOT NULL COMMENT '名称',
`code` varchar(30) NOT NULL COMMENT '编码',
`description` varchar(200) DEFAULT NULL COMMENT '描述',
@@ -162,13 +173,15 @@ CREATE TABLE IF NOT EXISTS `sys_dict` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_name`(`name`),
UNIQUE INDEX `uk_code`(`code`)
UNIQUE INDEX `uk_name`(`name`, `deleted`),
UNIQUE INDEX `uk_code`(`code`, `deleted`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典表';
CREATE TABLE IF NOT EXISTS `sys_dict_item` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`label` varchar(30) NOT NULL COMMENT '标签',
`value` varchar(30) NOT NULL COMMENT '',
`color` varchar(30) DEFAULT NULL COMMENT '标签颜色',
@@ -180,15 +193,17 @@ CREATE TABLE IF NOT EXISTS `sys_dict_item` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_value_dict_id`(`value`, `dict_id`),
UNIQUE INDEX `uk_value_dict_id`(`value`, `dict_id`, `deleted`),
INDEX `idx_dict_id`(`dict_id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典项表';
CREATE TABLE IF NOT EXISTS `sys_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`trace_id` varchar(255) DEFAULT NULL COMMENT '链路ID',
`description` varchar(255) NOT NULL COMMENT '日志描述',
`module` varchar(100) NOT NULL COMMENT '所属模块',
@@ -216,7 +231,7 @@ CREATE TABLE IF NOT EXISTS `sys_log` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统日志表';
CREATE TABLE IF NOT EXISTS `sys_message` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`title` varchar(50) NOT NULL COMMENT '标题',
`content` text DEFAULT NULL COMMENT '内容',
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型1系统消息2安全消息',
@@ -224,7 +239,10 @@ CREATE TABLE IF NOT EXISTS `sys_message` (
`scope` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '通知范围1所有人2指定用户',
`users` json DEFAULT NULL COMMENT '通知用户',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息表';
CREATE TABLE IF NOT EXISTS `sys_message_log` (
@@ -235,7 +253,7 @@ CREATE TABLE IF NOT EXISTS `sys_message_log` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息日志表';
CREATE TABLE IF NOT EXISTS `sys_notice` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`title` varchar(150) NOT NULL COMMENT '标题',
`content` mediumtext NOT NULL COMMENT '内容',
`type` varchar(30) NOT NULL COMMENT '分类',
@@ -250,9 +268,11 @@ CREATE TABLE IF NOT EXISTS `sys_notice` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公告表';
CREATE TABLE IF NOT EXISTS `sys_notice_log` (
@@ -263,7 +283,7 @@ CREATE TABLE IF NOT EXISTS `sys_notice_log` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公告日志表';
CREATE TABLE IF NOT EXISTS `sys_storage` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(100) NOT NULL COMMENT '名称',
`code` varchar(30) NOT NULL COMMENT '编码',
`type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型1本地存储2对象存储',
@@ -280,14 +300,16 @@ CREATE TABLE IF NOT EXISTS `sys_storage` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_code`(`code`),
UNIQUE INDEX `uk_code`(`code`, `deleted`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储表';
CREATE TABLE IF NOT EXISTS `sys_file` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(255) NOT NULL COMMENT '名称',
`original_name` varchar(255) NOT NULL COMMENT '原始名称',
`size` bigint(20) DEFAULT NULL COMMENT '大小(字节)',
@@ -306,15 +328,18 @@ CREATE TABLE IF NOT EXISTS `sys_file` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
INDEX `idx_type`(`type`),
INDEX `idx_sha256`(`sha256`),
INDEX `idx_storage_id`(`storage_id`),
INDEX `idx_create_user`(`create_user`)
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文件表';
CREATE TABLE IF NOT EXISTS `sys_client` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`client_id` varchar(50) NOT NULL COMMENT '客户端ID',
`client_type` varchar(50) NOT NULL COMMENT '客户端类型',
`auth_type` json NOT NULL COMMENT '认证类型',
@@ -325,14 +350,16 @@ CREATE TABLE IF NOT EXISTS `sys_client` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_client_id`(`client_id`),
UNIQUE INDEX `uk_client_id`(`client_id`, `deleted`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户端表';
CREATE TABLE IF NOT EXISTS `sys_sms_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(100) NOT NULL COMMENT '名称',
`supplier` varchar(50) NOT NULL COMMENT '厂商',
`access_key` varchar(255) NOT NULL COMMENT 'Access Key',
@@ -350,9 +377,11 @@ CREATE TABLE IF NOT EXISTS `sys_sms_config` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='短信配置表';
CREATE TABLE IF NOT EXISTS `sys_sms_log` (

View File

@@ -15,10 +15,12 @@ CREATE TABLE IF NOT EXISTS `sys_app` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_access_key`(`access_key`),
UNIQUE INDEX `uk_access_key`(`access_key`, `deleted`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用表';
-- 初始化默认菜单

View File

@@ -4,7 +4,7 @@
-- comment 初始化租户插件数据表
-- 初始化表结构
CREATE TABLE IF NOT EXISTS `tenant` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(30) NOT NULL COMMENT '名称',
`code` varchar(30) NOT NULL COMMENT '编码',
`domain` varchar(255) DEFAULT NULL COMMENT '域名',
@@ -18,16 +18,18 @@ CREATE TABLE IF NOT EXISTS `tenant` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
UNIQUE INDEX `uk_code`(`code`),
UNIQUE INDEX `uk_code`(`code`, `deleted`),
INDEX `idx_admin_user`(`admin_user`),
INDEX `idx_package_id`(`package_id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户表';
CREATE TABLE IF NOT EXISTS `tenant_package` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`id` bigint(20) AUTO_INCREMENT COMMENT 'ID',
`name` varchar(30) NOT NULL COMMENT '名称',
`sort` int NOT NULL DEFAULT 999 COMMENT '排序',
`menu_check_strictly` bit(1) DEFAULT b'1' COMMENT '菜单选择是否父子节点关联',
@@ -37,9 +39,11 @@ CREATE TABLE IF NOT EXISTS `tenant_package` (
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` bigint(20) DEFAULT NULL COMMENT '修改人',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '是否已删除0id',
PRIMARY KEY (`id`),
INDEX `idx_create_user`(`create_user`),
INDEX `idx_update_user`(`update_user`)
INDEX `idx_update_user`(`update_user`),
INDEX `idx_deleted`(`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户套餐表';
CREATE TABLE IF NOT EXISTS `tenant_package_menu` (
@@ -98,22 +102,25 @@ ALTER TABLE `sys_app`
-- 调整唯一索引
ALTER TABLE `sys_dept`
DROP INDEX `uk_name_parent_id`,
ADD UNIQUE INDEX `uk_name_parent_id` (`name`, `parent_id`, `tenant_id`);
ADD UNIQUE INDEX `uk_name_parent_id` (`name`, `parent_id`, `deleted`, `tenant_id`);
ALTER TABLE `sys_role`
DROP INDEX `uk_name`,
DROP INDEX `uk_code`,
ADD UNIQUE INDEX `uk_name` (`name`, `tenant_id`),
ADD UNIQUE INDEX `uk_code` (`code`, `tenant_id`);
ADD UNIQUE INDEX `uk_name` (`name`, `deleted`, `tenant_id`),
ADD UNIQUE INDEX `uk_code` (`code`, `deleted`, `tenant_id`);
ALTER TABLE `sys_user`
DROP INDEX `uk_username`,
DROP INDEX `uk_email`,
DROP INDEX `uk_phone`,
ADD UNIQUE INDEX `uk_username` (`username`, `tenant_id`),
ADD UNIQUE INDEX `uk_email` (`email`, `tenant_id`),
ADD UNIQUE INDEX `uk_phone` (`phone`, `tenant_id`);
ADD UNIQUE INDEX `uk_username` (`username`, `deleted`, `tenant_id`),
ADD UNIQUE INDEX `uk_email` (`email`, `deleted`, `tenant_id`),
ADD UNIQUE INDEX `uk_phone` (`phone`, `deleted`, `tenant_id`);
ALTER TABLE `sys_user_social`
DROP INDEX `uk_source_open_id`,
ADD UNIQUE INDEX `uk_source_open_id` (`source`, `open_id`, `deleted`, `tenant_id`);
ALTER TABLE `sys_app`
DROP INDEX `uk_access_key`,
ADD UNIQUE INDEX `uk_access_key` (`access_key`, `tenant_id`);
ADD UNIQUE INDEX `uk_access_key` (`access_key`, `deleted`, `tenant_id`);
-- 初始化默认菜单
INSERT INTO `sys_menu`
@@ -135,9 +142,3 @@ VALUES
(3023, '新增', 3020, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'tenant:package:create', 3, 1, 1, NOW()),
(3024, '修改', 3020, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'tenant:package:update', 4, 1, 1, NOW()),
(3025, '删除', 3020, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'tenant:package:delete', 5, 1, 1, NOW());
-- changeset kai:20251022-01
-- comment 重置租户场景索引
ALTER TABLE `sys_user_social`
DROP INDEX `uk_source_open_id`,
ADD UNIQUE INDEX `uk_source_open_id` (`source`, `open_id`, `tenant_id`);

View File

@@ -1,2 +0,0 @@
-- liquibase formatted sql

View File

@@ -22,12 +22,14 @@ CREATE TABLE IF NOT EXISTS "sys_menu" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_menu_title_parent_id" ON "sys_menu" ("title", "parent_id", "deleted");
CREATE INDEX "idx_menu_parent_id" ON "sys_menu" ("parent_id");
CREATE INDEX "idx_menu_create_user" ON "sys_menu" ("create_user");
CREATE INDEX "idx_menu_update_user" ON "sys_menu" ("update_user");
CREATE UNIQUE INDEX "uk_menu_title_parent_id" ON "sys_menu" ("title", "parent_id");
CREATE INDEX "idx_menu_deleted" ON "sys_menu" ("deleted");
COMMENT ON COLUMN "sys_menu"."id" IS 'ID';
COMMENT ON COLUMN "sys_menu"."title" IS '标题';
COMMENT ON COLUMN "sys_menu"."parent_id" IS '上级菜单ID';
@@ -47,6 +49,7 @@ COMMENT ON COLUMN "sys_menu"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_menu"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_menu"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_menu"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_menu"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_menu" IS '菜单表';
CREATE TABLE IF NOT EXISTS "sys_dept" (
@@ -62,12 +65,14 @@ CREATE TABLE IF NOT EXISTS "sys_dept" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_dept_name_parent_id" ON "sys_dept" ("name", "parent_id", "deleted");
CREATE INDEX "idx_dept_parent_id" ON "sys_dept" ("parent_id");
CREATE INDEX "idx_dept_create_user" ON "sys_dept" ("create_user");
CREATE INDEX "idx_dept_update_user" ON "sys_dept" ("update_user");
CREATE UNIQUE INDEX "uk_dept_name_parent_id" ON "sys_dept" ("name", "parent_id");
CREATE INDEX "idx_dept_deleted" ON "sys_dept" ("deleted");
COMMENT ON COLUMN "sys_dept"."id" IS 'ID';
COMMENT ON COLUMN "sys_dept"."name" IS '名称';
COMMENT ON COLUMN "sys_dept"."parent_id" IS '上级部门ID';
@@ -80,6 +85,7 @@ COMMENT ON COLUMN "sys_dept"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_dept"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_dept"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_dept"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_dept"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_dept" IS '部门表';
CREATE TABLE IF NOT EXISTS "sys_role" (
@@ -96,12 +102,14 @@ CREATE TABLE IF NOT EXISTS "sys_role" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_role_name" ON "sys_role" ("name");
CREATE UNIQUE INDEX "uk_role_code" ON "sys_role" ("code");
CREATE UNIQUE INDEX "uk_role_name" ON "sys_role" ("name", "deleted");
CREATE UNIQUE INDEX "uk_role_code" ON "sys_role" ("code", "deleted");
CREATE INDEX "idx_role_create_user" ON "sys_role" ("create_user");
CREATE INDEX "idx_role_update_user" ON "sys_role" ("update_user");
CREATE INDEX "idx_role_deleted" ON "sys_role" ("deleted");
COMMENT ON COLUMN "sys_role"."id" IS 'ID';
COMMENT ON COLUMN "sys_role"."name" IS '名称';
COMMENT ON COLUMN "sys_role"."code" IS '编码';
@@ -115,6 +123,7 @@ COMMENT ON COLUMN "sys_role"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_role"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_role"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_role"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_role"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_role" IS '角色表';
CREATE TABLE IF NOT EXISTS "sys_user" (
@@ -135,14 +144,16 @@ CREATE TABLE IF NOT EXISTS "sys_user" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_user_username" ON "sys_user" ("username");
CREATE UNIQUE INDEX "uk_user_email" ON "sys_user" ("email");
CREATE UNIQUE INDEX "uk_user_phone" ON "sys_user" ("phone");
CREATE UNIQUE INDEX "uk_user_username" ON "sys_user" ("username", "deleted");
CREATE UNIQUE INDEX "uk_user_email" ON "sys_user" ("email", "deleted");
CREATE UNIQUE INDEX "uk_user_phone" ON "sys_user" ("phone", "deleted");
CREATE INDEX "idx_user_dept_id" ON "sys_user" ("dept_id");
CREATE INDEX "idx_user_create_user" ON "sys_user" ("create_user");
CREATE INDEX "idx_user_update_user" ON "sys_user" ("update_user");
CREATE INDEX "idx_user_deleted" ON "sys_user" ("deleted");
COMMENT ON COLUMN "sys_user"."id" IS 'ID';
COMMENT ON COLUMN "sys_user"."username" IS '用户名';
COMMENT ON COLUMN "sys_user"."nickname" IS '昵称';
@@ -160,6 +171,7 @@ COMMENT ON COLUMN "sys_user"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_user"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_user"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_user"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_user"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_user" IS '用户表';
CREATE TABLE IF NOT EXISTS "sys_user_password_history" (
@@ -184,9 +196,11 @@ CREATE TABLE IF NOT EXISTS "sys_user_social" (
"meta_json" text DEFAULT NULL,
"last_login_time" timestamp DEFAULT NULL,
"create_time" timestamp NOT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_user_source_open_id" ON "sys_user_social" ("source", "open_id");
CREATE UNIQUE INDEX "uk_user_source_open_id" ON "sys_user_social" ("source", "open_id", "deleted");
COMMENT ON COLUMN "sys_user_social"."id" IS 'ID';
COMMENT ON COLUMN "sys_user_social"."source" IS '来源';
COMMENT ON COLUMN "sys_user_social"."open_id" IS '开放ID';
@@ -194,6 +208,8 @@ COMMENT ON COLUMN "sys_user_social"."user_id" IS '用户ID';
COMMENT ON COLUMN "sys_user_social"."meta_json" IS '附加信息';
COMMENT ON COLUMN "sys_user_social"."last_login_time" IS '最后登录时间';
COMMENT ON COLUMN "sys_user_social"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_user_social"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_user_social"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_user_social" IS '用户社会化关联表';
CREATE TABLE IF NOT EXISTS "sys_user_role" (
@@ -260,10 +276,11 @@ CREATE TABLE IF NOT EXISTS "sys_dict" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_dict_name" ON "sys_dict" ("name");
CREATE UNIQUE INDEX "uk_dict_code" ON "sys_dict" ("code");
CREATE UNIQUE INDEX "uk_dict_name" ON "sys_dict" ("name", "deleted");
CREATE UNIQUE INDEX "uk_dict_code" ON "sys_dict" ("code", "deleted");
COMMENT ON COLUMN "sys_dict"."id" IS 'ID';
COMMENT ON COLUMN "sys_dict"."name" IS '名称';
COMMENT ON COLUMN "sys_dict"."code" IS '编码';
@@ -273,6 +290,7 @@ COMMENT ON COLUMN "sys_dict"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_dict"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_dict"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_dict"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_dict"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_dict" IS '字典表';
CREATE TABLE IF NOT EXISTS "sys_dict_item" (
@@ -288,9 +306,10 @@ CREATE TABLE IF NOT EXISTS "sys_dict_item" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_dict_item_value_dict_id" ON "sys_dict_item" ("value", "dict_id");
CREATE UNIQUE INDEX "uk_dict_item_value_dict_id" ON "sys_dict_item" ("value", "dict_id", "deleted");
CREATE INDEX "idx_dict_item_dict_id" ON "sys_dict_item" ("dict_id");
CREATE INDEX "idx_dict_item_create_user" ON "sys_dict_item" ("create_user");
CREATE INDEX "idx_dict_item_update_user" ON "sys_dict_item" ("update_user");
@@ -306,6 +325,7 @@ COMMENT ON COLUMN "sys_dict_item"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_dict_item"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_dict_item"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_dict_item"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_dict_item"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_dict_item" IS '字典项表';
CREATE TABLE IF NOT EXISTS "sys_log" (
@@ -366,8 +386,11 @@ CREATE TABLE IF NOT EXISTS "sys_message" (
"scope" int2 NOT NULL DEFAULT 1,
"users" json DEFAULT NULL,
"create_time" timestamp NOT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE INDEX "idx_message_deleted" ON "sys_message" ("deleted");
COMMENT ON COLUMN "sys_message"."id" IS 'ID';
COMMENT ON COLUMN "sys_message"."title" IS '标题';
COMMENT ON COLUMN "sys_message"."content" IS '内容';
@@ -376,6 +399,8 @@ COMMENT ON COLUMN "sys_message"."path" IS '跳转路径';
COMMENT ON COLUMN "sys_message"."scope" IS '通知范围1所有人2指定用户';
COMMENT ON COLUMN "sys_message"."users" IS '通知用户';
COMMENT ON COLUMN "sys_message"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_message"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_message"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_message" IS '消息表';
CREATE TABLE IF NOT EXISTS "sys_message_log" (
@@ -405,10 +430,12 @@ CREATE TABLE IF NOT EXISTS "sys_notice" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE INDEX "idx_notice_create_user" ON "sys_notice" ("create_user");
CREATE INDEX "idx_notice_update_user" ON "sys_notice" ("update_user");
CREATE INDEX "idx_notice_deleted" ON "sys_notice" ("deleted");
COMMENT ON COLUMN "sys_notice"."id" IS 'ID';
COMMENT ON COLUMN "sys_notice"."title" IS '标题';
COMMENT ON COLUMN "sys_notice"."content" IS '内容';
@@ -424,6 +451,7 @@ COMMENT ON COLUMN "sys_notice"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_notice"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_notice"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_notice"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_notice"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_notice" IS '公告表';
CREATE TABLE IF NOT EXISTS "sys_notice_log" (
@@ -455,11 +483,13 @@ CREATE TABLE IF NOT EXISTS "sys_storage" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_storage_code" ON "sys_storage" ("code");
CREATE UNIQUE INDEX "uk_storage_code" ON "sys_storage" ("code", "deleted");
CREATE INDEX "idx_storage_create_user" ON "sys_storage" ("create_user");
CREATE INDEX "idx_storage_update_user" ON "sys_storage" ("update_user");
CREATE INDEX "idx_storage_deleted" ON "sys_storage" ("deleted");
COMMENT ON COLUMN "sys_storage"."id" IS 'ID';
COMMENT ON COLUMN "sys_storage"."name" IS '名称';
COMMENT ON COLUMN "sys_storage"."code" IS '编码';
@@ -477,6 +507,7 @@ COMMENT ON COLUMN "sys_storage"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_storage"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_storage"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_storage"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_storage"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_storage" IS '存储表';
CREATE TABLE IF NOT EXISTS "sys_file" (
@@ -499,12 +530,15 @@ CREATE TABLE IF NOT EXISTS "sys_file" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE INDEX "idx_file_type" ON "sys_file" ("type");
CREATE INDEX "idx_file_sha256" ON "sys_file" ("sha256");
CREATE INDEX "idx_file_storage_id" ON "sys_file" ("storage_id");
CREATE INDEX "idx_file_create_user" ON "sys_file" ("create_user");
CREATE INDEX "idx_file_update_user" ON "sys_file" ("update_user");
CREATE INDEX "idx_file_deleted" ON "sys_file" ("deleted");
COMMENT ON COLUMN "sys_file"."id" IS 'ID';
COMMENT ON COLUMN "sys_file"."name" IS '名称';
COMMENT ON COLUMN "sys_file"."original_name" IS '原始名称';
@@ -524,6 +558,7 @@ COMMENT ON COLUMN "sys_file"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_file"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_file"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_file"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_file"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_file" IS '文件表';
CREATE TABLE IF NOT EXISTS "sys_client" (
@@ -538,11 +573,13 @@ CREATE TABLE IF NOT EXISTS "sys_client" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_client_client_id" ON "sys_client" ("client_id");
CREATE INDEX "idx_client_create_user" ON "sys_client" ("create_user");
CREATE INDEX "idx_client_update_user" ON "sys_client" ("update_user");
CREATE INDEX "idx_client_deleted" ON "sys_client" ("deleted");
COMMENT ON COLUMN "sys_client"."id" IS 'ID';
COMMENT ON COLUMN "sys_client"."client_id" IS '客户端ID';
COMMENT ON COLUMN "sys_client"."client_type" IS '客户端类型';
@@ -554,6 +591,7 @@ COMMENT ON COLUMN "sys_client"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_client"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_client"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_client"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_client"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_client" IS '客户端表';
CREATE TABLE IF NOT EXISTS "sys_sms_config" (
@@ -575,10 +613,12 @@ CREATE TABLE IF NOT EXISTS "sys_sms_config" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE INDEX "idx_sms_config_create_user" ON "sys_sms_config" ("create_user");
CREATE INDEX "idx_sms_config_update_user" ON "sys_sms_config" ("update_user");
CREATE INDEX "idx_sms_config_deleted" ON "sys_sms_config" ("deleted");
COMMENT ON COLUMN "sys_sms_config"."id" IS 'ID';
COMMENT ON COLUMN "sys_sms_config"."name" IS '名称';
COMMENT ON COLUMN "sys_sms_config"."supplier" IS '厂商';
@@ -597,6 +637,7 @@ COMMENT ON COLUMN "sys_sms_config"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_sms_config"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_sms_config"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_sms_config"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_sms_config"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_sms_config" IS '短信配置表';
CREATE TABLE IF NOT EXISTS "sys_sms_log" (

View File

@@ -15,11 +15,13 @@ CREATE TABLE IF NOT EXISTS "sys_app" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_app_access_key" ON "sys_app" ("access_key");
CREATE UNIQUE INDEX "uk_app_access_key" ON "sys_app" ("access_key", "deleted");
CREATE INDEX "idx_app_create_user" ON "sys_app" ("create_user");
CREATE INDEX "idx_app_update_user" ON "sys_app" ("update_user");
CREATE INDEX "idx_app_deleted" ON "sys_app" ("deleted");
COMMENT ON COLUMN "sys_app"."id" IS 'ID';
COMMENT ON COLUMN "sys_app"."name" IS '名称';
COMMENT ON COLUMN "sys_app"."access_key" IS 'Access Key访问密钥';
@@ -31,6 +33,7 @@ COMMENT ON COLUMN "sys_app"."create_user" IS '创建人';
COMMENT ON COLUMN "sys_app"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_app"."update_user" IS '修改人';
COMMENT ON COLUMN "sys_app"."update_time" IS '修改时间';
COMMENT ON COLUMN "sys_app"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "sys_app" IS '应用表';
-- 初始化默认菜单

View File

@@ -18,13 +18,15 @@ CREATE TABLE IF NOT EXISTS "tenant" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "uk_tenant_code" ON "tenant" ("code");
CREATE UNIQUE INDEX "uk_tenant_code" ON "tenant" ("code", "deleted");
CREATE INDEX "idx_tenant_admin_user" ON "tenant" ("admin_user");
CREATE INDEX "idx_tenant_package_id" ON "tenant" ("package_id");
CREATE INDEX "idx_tenant_create_user" ON "tenant" ("create_user");
CREATE INDEX "idx_tenant_update_user" ON "tenant" ("update_user");
CREATE INDEX "idx_tenant_deleted" ON "tenant" ("deleted");
COMMENT ON COLUMN "tenant"."id" IS 'ID';
COMMENT ON COLUMN "tenant"."name" IS '名称';
COMMENT ON COLUMN "tenant"."code" IS '编码';
@@ -39,6 +41,7 @@ COMMENT ON COLUMN "tenant"."create_user" IS '创建人';
COMMENT ON COLUMN "tenant"."create_time" IS '创建时间';
COMMENT ON COLUMN "tenant"."update_user" IS '修改人';
COMMENT ON COLUMN "tenant"."update_time" IS '修改时间';
COMMENT ON COLUMN "tenant"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "tenant" IS '租户表';
CREATE TABLE IF NOT EXISTS "tenant_package" (
@@ -52,10 +55,12 @@ CREATE TABLE IF NOT EXISTS "tenant_package" (
"create_time" timestamp NOT NULL,
"update_user" int8 DEFAULT NULL,
"update_time" timestamp DEFAULT NULL,
"deleted" int8 NOT NULL DEFAULT 0,
PRIMARY KEY ("id")
);
CREATE INDEX "idx_tenant_package_create_user" ON "tenant_package" ("create_user");
CREATE INDEX "idx_tenant_package_update_user" ON "tenant_package" ("update_user");
CREATE INDEX "idx_tenant_deleted" ON "tenant_package" ("deleted");
COMMENT ON COLUMN "tenant_package"."id" IS 'ID';
COMMENT ON COLUMN "tenant_package"."name" IS '名称';
COMMENT ON COLUMN "tenant_package"."sort" IS '排序';
@@ -66,6 +71,7 @@ COMMENT ON COLUMN "tenant_package"."create_user" IS '创建人';
COMMENT ON COLUMN "tenant_package"."create_time" IS '创建时间';
COMMENT ON COLUMN "tenant_package"."update_user" IS '修改人';
COMMENT ON COLUMN "tenant_package"."update_time" IS '修改时间';
COMMENT ON COLUMN "tenant_package"."deleted" IS '是否已删除0id';
COMMENT ON TABLE "tenant_package" IS '租户套餐表';
CREATE TABLE IF NOT EXISTS "tenant_package_menu" (
@@ -140,19 +146,22 @@ CREATE INDEX "idx_app_tenant_id" ON "sys_app" ("tenant_id");
-- 调整唯一索引
DROP INDEX IF EXISTS "uk_dept_name_parent_id";
CREATE UNIQUE INDEX "uk_dept_name_parent_id" ON "sys_dept" ("name", "parent_id", "tenant_id");
CREATE UNIQUE INDEX "uk_dept_name_parent_id" ON "sys_dept" ("name", "parent_id", "deleted", "tenant_id");
DROP INDEX IF EXISTS "uk_role_name", "uk_role_code";
CREATE UNIQUE INDEX "uk_role_name" ON "sys_role" ("name", "tenant_id");
CREATE UNIQUE INDEX "uk_role_code" ON "sys_role" ("code", "tenant_id");
CREATE UNIQUE INDEX "uk_role_name" ON "sys_role" ("name", "deleted", "tenant_id");
CREATE UNIQUE INDEX "uk_role_code" ON "sys_role" ("code", "deleted", "tenant_id");
DROP INDEX IF EXISTS "uk_user_username", "uk_user_email", "uk_user_phone";
CREATE UNIQUE INDEX "uk_user_username" ON "sys_user" ("username", "tenant_id");
CREATE UNIQUE INDEX "uk_user_email" ON "sys_user" ("email", "tenant_id");
CREATE UNIQUE INDEX "uk_user_phone" ON "sys_user" ("phone", "tenant_id");
CREATE UNIQUE INDEX "uk_user_username" ON "sys_user" ("username", "deleted", "tenant_id");
CREATE UNIQUE INDEX "uk_user_email" ON "sys_user" ("email", "deleted", "tenant_id");
CREATE UNIQUE INDEX "uk_user_phone" ON "sys_user" ("phone", "deleted", "tenant_id");
DROP INDEX IF EXISTS "uk_user_source_open_id";
CREATE UNIQUE INDEX "uk_user_source_open_id" ON "sys_user_social" ("source", "open_id", "deleted", "tenant_id");
DROP INDEX IF EXISTS "uk_app_access_key";
CREATE UNIQUE INDEX "uk_app_access_key" ON "sys_app" ("access_key", "tenant_id");
CREATE UNIQUE INDEX "uk_app_access_key" ON "sys_app" ("access_key", "deleted", "tenant_id");
-- 初始化默认菜单
INSERT INTO "sys_menu" ("id", "title", "parent_id", "type", "path", "name", "component", "redirect", "icon", "is_external", "is_cache", "is_hidden", "permission", "sort", "status", "create_user", "create_time")
@@ -174,9 +183,3 @@ VALUES
(3024, '修改', 3020, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'tenant:package:update', 4, 1, 1, NOW()),
(3025, '删除', 3020, 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'tenant:package:delete', 5, 1, 1, NOW());
-- changeset kai:20251022-01
-- comment 重置租户场景索引
DROP INDEX IF EXISTS "uk_user_source_open_id";
CREATE UNIQUE INDEX "uk_user_source_open_id"
ON "sys_user_social" ("source", "open_id", "tenant_id");

View File

@@ -38,6 +38,6 @@ public interface FileMapper extends BaseMapper<FileDO> {
*
* @return 文件资源统计信息
*/
@Select("SELECT type, COUNT(1) number, SUM(size) size FROM sys_file WHERE type != 0 GROUP BY type")
@Select("SELECT type, COUNT(1) number, SUM(size) size FROM sys_file WHERE deleted = 0 AND type != 0 GROUP BY type")
List<FileStatisticsResp> statistics();
}

View File

@@ -65,7 +65,7 @@ public interface UserMapper extends DataPermissionMapper<UserDO> {
* @param username 用户名
* @return 用户信息
*/
@Select("SELECT * FROM sys_user WHERE username = #{username}")
@Select("SELECT * FROM sys_user WHERE username = #{username} AND deleted = 0")
UserDO selectByUsername(@Param("username") String username);
/**
@@ -74,7 +74,7 @@ public interface UserMapper extends DataPermissionMapper<UserDO> {
* @param phone 手机号
* @return 用户信息
*/
@Select("SELECT * FROM sys_user WHERE phone = #{phone}")
@Select("SELECT * FROM sys_user WHERE phone = #{phone} AND deleted = 0")
UserDO selectByPhone(@FieldEncrypt @Param("phone") String phone);
/**
@@ -83,7 +83,7 @@ public interface UserMapper extends DataPermissionMapper<UserDO> {
* @param email 邮箱
* @return 用户信息
*/
@Select("SELECT * FROM sys_user WHERE email = #{email}")
@Select("SELECT * FROM sys_user WHERE email = #{email} AND deleted = 0")
UserDO selectByEmail(@FieldEncrypt @Param("email") String email);
/**
@@ -92,6 +92,6 @@ public interface UserMapper extends DataPermissionMapper<UserDO> {
* @param id ID
* @return 昵称
*/
@Select("SELECT nickname FROM sys_user WHERE id = #{id}")
@Select("SELECT nickname FROM sys_user WHERE id = #{id} AND deleted = 0")
String selectNicknameById(@Param("id") Long id);
}

View File

@@ -85,4 +85,15 @@ public class MessageDO implements Serializable {
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/**
* 是否已删除0id
*/
private Long deleted;
}

View File

@@ -75,4 +75,15 @@ public class UserSocialDO implements Serializable {
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 修改时间
*/
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/**
* 是否已删除0id
*/
private Long deleted;
}

View File

@@ -510,7 +510,8 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes
q.in("t1.dept_id", deptIdList);
})
.in(CollUtil.isNotEmpty(userIdList), "t1.id", userIdList)
.notIn(CollUtil.isNotEmpty(excludeUserIdList), "t1.id", excludeUserIdList);
.notIn(CollUtil.isNotEmpty(excludeUserIdList), "t1.id", excludeUserIdList)
.eq("t1.deleted", 0L);
}
/**

View File

@@ -5,7 +5,9 @@
SELECT t1.label, t1.value, t1.color AS extra
FROM sys_dict_item AS t1
LEFT JOIN sys_dict AS t2 ON t1.dict_id = t2.id
WHERE t1.status = 1 AND t2.code = #{dictCode}
WHERE t1.deleted = 0
AND t1.status = 1
AND t2.code = #{dictCode}
ORDER BY t1.sort
</select>
</mapper>

View File

@@ -8,7 +8,8 @@
LEFT JOIN sys_role AS t3 ON t3.id = t2.role_id
LEFT JOIN sys_user_role AS t4 ON t4.role_id = t3.id
LEFT JOIN sys_user AS t5 ON t5.id = t4.user_id
WHERE t5.id = #{userId}
WHERE t1.deleted = 0
AND t5.id = #{userId}
AND t1.status = 1
AND t1.permission IS NOT NULL
</select>
@@ -18,6 +19,8 @@
FROM sys_menu AS t1
LEFT JOIN sys_role_menu AS t2 ON t2.menu_id = t1.id
LEFT JOIN sys_role AS t3 ON t3.id = t2.role_id
WHERE t3.id = #{roleId} AND t1.status = 1
WHERE t1.deleted = 0
AND t3.id = #{roleId}
AND t1.status = 1
</select>
</mapper>

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="top.continew.admin.system.mapper.MessageMapper">
<resultMap id="messageDetailMap" type="top.continew.admin.system.model.resp.message.MessageDetailResp">
<id column="id" property="id" />
<result property="users" column="users" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
@@ -19,14 +18,14 @@
t2.read_time AS readTime
FROM sys_message AS t1
LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id <if test="query.userId != null">AND t2.user_id = #{query.userId}</if>
<where>
WHERE t1.deleted = 0
<if test="query.userId != null">
<choose>
<when test="_databaseId == 'mysql'">
(t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{query.userId}, '"'))))
AND (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{query.userId}, '"'))))
</when>
<when test="_databaseId == 'pgsql'">
(t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{query.userId}::text)))
AND (t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{query.userId}::text)))
</when>
</choose>
</if>
@@ -39,7 +38,6 @@
<if test="query.isRead != null">
AND t2.read_time IS <if test="query.isRead">NOT</if> NULL
</if>
</where>
ORDER BY t1.create_time DESC
</select>
@@ -54,7 +52,8 @@
t1.users,
t1.create_time
FROM sys_message AS t1
WHERE t1.id = #{id}
WHERE t1.deleted = 0
AND t1.id = #{id}
</select>
<select id="selectUnreadListByUserId" resultType="top.continew.admin.system.model.entity.MessageDO">
@@ -62,13 +61,13 @@
t1.*
FROM sys_message AS t1
LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id AND t2.user_id = #{userId}
WHERE
WHERE t1.deleted = 0
<choose>
<when test="_databaseId == 'mysql'">
(t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"'))))
AND (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"'))))
</when>
<when test="_databaseId == 'pgsql'">
(t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{userId}::text) ))
AND (t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{userId}::text) ))
</when>
</choose>
AND t2.read_time IS NULL
@@ -79,13 +78,13 @@
COUNT(1)
FROM sys_message AS t1
LEFT JOIN sys_message_log AS t2 ON t2.message_id = t1.id AND t2.user_id = #{userId}
WHERE
WHERE t1.deleted = 0
<choose>
<when test="_databaseId == 'mysql'">
(t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"'))))
AND (t1.scope = 1 OR (t1.scope = 2 AND JSON_CONTAINS(t1.users, CONCAT('"', #{userId}, '"'))))
</when>
<when test="_databaseId == 'pgsql'">
(t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{userId}::text) ))
AND (t1.scope = 1 OR (t1.scope = 2 AND t1.users::jsonb @> jsonb_build_array(#{userId}::text) ))
</when>
</choose>
AND t2.read_time IS NULL

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="top.continew.admin.system.mapper.NoticeMapper">
<resultMap id="notice" type="top.continew.admin.system.model.resp.notice.NoticeResp">
<id property="id" column="id" />
<result property="noticeMethods" column="notice_methods" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
@@ -26,14 +25,14 @@
<if test="query.userId != null">
LEFT JOIN sys_notice_log AS t2 ON t2.notice_id = t1.id AND t2.user_id = #{query.userId}
</if>
<where>
WHERE t1.deleted = 0
<if test="query.userId != null">
<choose>
<when test="_databaseId == 'mysql'">
(t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{query.userId}, '"'))))
AND (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{query.userId}, '"'))))
</when>
<when test="_databaseId == 'pgsql'">
(t1.notice_scope = 1 OR (t1.notice_scope = 2 AND t1.notice_users::jsonb @> jsonb_build_array(#{query.userId}::text)))
AND (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND t1.notice_users::jsonb @> jsonb_build_array(#{query.userId}::text)))
</when>
</choose>
</if>
@@ -43,7 +42,6 @@
<if test="query.type != null and query.type != ''">
AND t1.type = #{query.type}
</if>
</where>
<if test="query.userId != null">
ORDER BY t1.is_top DESC, t1.publish_time DESC
</if>
@@ -57,13 +55,13 @@
t1.id
FROM sys_notice AS t1
LEFT JOIN sys_notice_log AS t2 ON t2.notice_id = t1.id AND t2.user_id = #{userId}
WHERE
WHERE t1.deleted = 0
<choose>
<when test="_databaseId == 'mysql'">
(t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{userId}, '"'))))
AND (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{userId}, '"'))))
</when>
<when test="_databaseId == 'pgsql'">
(t1.notice_scope = 1 OR (t1.notice_scope = 2 AND t1.notice_users::jsonb @> jsonb_build_array(#{userId}::text)))
AND (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND t1.notice_users::jsonb @> jsonb_build_array(#{userId}::text)))
</when>
</choose>
<if test="noticeMethod != null">
@@ -82,20 +80,20 @@
<select id="selectDashboardList"
resultType="top.continew.admin.system.model.resp.dashboard.DashboardNoticeResp">
SELECT
id, title, type, is_top
FROM sys_notice
WHERE status = 3
t1.id, t1.title, t1.type, t1.is_top
FROM sys_notice AS t1
WHERE t1.deleted = 0 AND t1.status = 3
<if test="userId != null">
<choose>
<when test="_databaseId == 'mysql'">
AND (notice_scope = 1 OR (notice_scope = 2 AND JSON_CONTAINS(notice_users, CONCAT('"', #{userId}, '"'))))
AND (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND JSON_CONTAINS(t1.notice_users, CONCAT('"', #{userId}, '"'))))
</when>
<when test="_databaseId == 'pgsql'">
AND (notice_scope = 1 OR (notice_scope = 2 AND notice_users::jsonb @> jsonb_build_array(#{userId}::text)))
AND (t1.notice_scope = 1 OR (t1.notice_scope = 2 AND t1.notice_users::jsonb @> jsonb_build_array(#{userId}::text)))
</when>
</choose>
</if>
ORDER BY is_top DESC, publish_time DESC
ORDER BY t1.is_top DESC, t1.publish_time DESC
LIMIT 5
</select>
</mapper>

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="top.continew.admin.system.mapper.UserRoleMapper">
<select id="selectUserPage" resultType="top.continew.admin.system.model.resp.role.RoleUserResp">
SELECT
t1.*,

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="top.continew.admin.system.mapper.user.UserMapper">
<sql id="selectUser">
SELECT
t1.id,

View File

@@ -12,6 +12,7 @@
) AS t2 ON t2.id = t1.id
WHERE t2.id IS NULL
</delete>
<delete id="deleteExpired" databaseId="pgsql">
DELETE FROM sys_user_password_history AS t1
WHERE user_id = #{userId}

View File

@@ -6,6 +6,8 @@
SELECT t1.*
FROM sys_user_social AS t1
LEFT JOIN sys_user AS t2 ON t2.id = t1.user_id
WHERE t1.source = #{source} AND t1.open_id = #{openId}
WHERE t1.deleted = 0
AND t1.source = #{source}
AND t1.open_id = #{openId}
</select>
</mapper>