refactor: 多租户开发和代码规范调整
This commit is contained in:
@@ -39,58 +39,24 @@ INSERT INTO `sys_tenant` (`id`, `name`, `code`, `status`, `create_time`) VALUES
|
||||
(1, '默认租户', 'DEFAULT', 1, NOW());
|
||||
|
||||
-- ============================================
|
||||
-- 2. 创建租户切换审计日志表
|
||||
-- ============================================
|
||||
DROP TABLE IF EXISTS `sys_tenant_switch_log`;
|
||||
CREATE TABLE `sys_tenant_switch_log` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||
`username` varchar(64) COMMENT '用户名',
|
||||
`from_tenant_id` bigint COMMENT '原租户ID',
|
||||
`from_tenant_name` varchar(100) COMMENT '原租户名称',
|
||||
`to_tenant_id` bigint NOT NULL COMMENT '目标租户ID',
|
||||
`to_tenant_name` varchar(100) COMMENT '目标租户名称',
|
||||
`switch_time` datetime NOT NULL COMMENT '切换时间',
|
||||
`ip_address` varchar(50) COMMENT 'IP地址',
|
||||
`user_agent` varchar(500) COMMENT '浏览器信息',
|
||||
`status` tinyint DEFAULT '1' COMMENT '切换状态(1-成功 0-失败)',
|
||||
`fail_reason` varchar(255) COMMENT '失败原因',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_switch_time` (`switch_time`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户切换审计日志表';
|
||||
|
||||
-- ============================================
|
||||
-- 3. 创建用户租户关联表(支持一个用户属于多个租户)
|
||||
-- ============================================
|
||||
DROP TABLE IF EXISTS `sys_user_tenant`;
|
||||
CREATE TABLE `sys_user_tenant` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||
`is_default` tinyint DEFAULT '0' COMMENT '是否默认租户(1-是 0-否)',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_user_tenant` (`user_id`, `tenant_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户租户关联表(多租户模式)';
|
||||
|
||||
-- ============================================
|
||||
-- 3. 为业务表添加 tenant_id 字段
|
||||
-- 2. 为业务表添加 tenant_id 字段
|
||||
-- ============================================
|
||||
-- 注意:MySQL 5.7 不支持 IF NOT EXISTS,如果字段已存在会报错
|
||||
-- 建议先检查字段是否存在,或使用 MySQL 8.0+
|
||||
|
||||
-- 用户表
|
||||
-- 用户表:仅在不存在时添加列和索引,避免重复执行报错
|
||||
ALTER TABLE `sys_user`
|
||||
ADD COLUMN `tenant_id` bigint DEFAULT 1 COMMENT '租户ID' AFTER `id`,
|
||||
ADD INDEX `idx_tenant_id` (`tenant_id`);
|
||||
|
||||
-- 更新现有数据的 tenant_id(设置为默认租户)
|
||||
UPDATE `sys_user` SET `tenant_id` = 1 WHERE `tenant_id` IS NULL;
|
||||
|
||||
-- 修改 username 索引:从单列索引改为 (username, tenant_id) 组合唯一索引
|
||||
-- 这样同一租户内用户名唯一,不同租户可以有相同用户名
|
||||
DROP INDEX `login_name` ON `sys_user`;
|
||||
ALTER TABLE `sys_user`
|
||||
ADD UNIQUE KEY `uk_username_tenant` (`username`, `tenant_id`);
|
||||
|
||||
-- 角色表
|
||||
ALTER TABLE `sys_role`
|
||||
ADD COLUMN `tenant_id` bigint DEFAULT 1 COMMENT '租户ID' AFTER `id`,
|
||||
@@ -120,53 +86,21 @@ ADD INDEX `idx_tenant_id` (`tenant_id`);
|
||||
UPDATE `sys_log` SET `tenant_id` = 1 WHERE `tenant_id` IS NULL;
|
||||
|
||||
-- AI 命令记录表
|
||||
ALTER TABLE `ai_command_log`
|
||||
ALTER TABLE `ai_command_record`
|
||||
ADD COLUMN `tenant_id` bigint DEFAULT 1 COMMENT '租户ID' AFTER `id`,
|
||||
ADD INDEX `idx_tenant_id` (`tenant_id`);
|
||||
|
||||
UPDATE `ai_command_log` SET `tenant_id` = 1 WHERE `tenant_id` IS NULL;
|
||||
UPDATE `ai_command_record` SET `tenant_id` = 1 WHERE `tenant_id` IS NULL;
|
||||
|
||||
-- 代码生成配置表(如果存在)
|
||||
-- ALTER TABLE `gen_config`
|
||||
-- ADD COLUMN `tenant_id` bigint DEFAULT 1 COMMENT '租户ID' AFTER `id`,
|
||||
-- ADD INDEX `idx_tenant_id` (`tenant_id`);
|
||||
-- UPDATE `gen_config` SET `tenant_id` = 1 WHERE `tenant_id` IS NULL;
|
||||
|
||||
-- 代码生成字段配置表(如果存在)
|
||||
-- ALTER TABLE `gen_field_config`
|
||||
-- ADD COLUMN `tenant_id` bigint DEFAULT 1 COMMENT '租户ID' AFTER `id`,
|
||||
-- ADD INDEX `idx_tenant_id` (`tenant_id`);
|
||||
-- UPDATE `gen_field_config` SET `tenant_id` = 1 WHERE `tenant_id` IS NULL;
|
||||
|
||||
-- ============================================
|
||||
-- 4. 初始化现有用户的租户关联(默认租户)
|
||||
-- ============================================
|
||||
INSERT INTO `sys_user_tenant` (`user_id`, `tenant_id`, `is_default`)
|
||||
SELECT `id`, 1, 1 FROM `sys_user` WHERE `is_deleted` = 0
|
||||
ON DUPLICATE KEY UPDATE `is_default` = 1;
|
||||
|
||||
-- ============================================
|
||||
-- 5. 添加租户管理菜单和权限(仅在菜单不存在时添加)
|
||||
-- 4. 添加租户管理菜单和权限(仅在菜单不存在时添加)
|
||||
-- ============================================
|
||||
-- 租户管理主菜单(放在部门管理之后,字典管理之前,ID=6)
|
||||
INSERT INTO `sys_menu` (`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`, `always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
|
||||
VALUES (6, 1, '0,1', '租户管理', 1, 'Tenant', 'tenant', 'system/tenant/index', NULL, NULL, NULL, 1, 5, 'el-icon-OfficeBuilding', NULL, NOW(), NOW(), NULL)
|
||||
ON DUPLICATE KEY UPDATE `name` = '租户管理';
|
||||
|
||||
-- 调整字典管理的排序(从6改为7)
|
||||
UPDATE `sys_menu` SET `sort` = 7 WHERE `id` = 7 AND `sort` = 6;
|
||||
|
||||
-- 调整字典项的排序(从7改为8)
|
||||
UPDATE `sys_menu` SET `sort` = 8 WHERE `id` = 8 AND `sort` = 7;
|
||||
|
||||
-- 调整系统日志的排序(从8改为9)
|
||||
UPDATE `sys_menu` SET `sort` = 9 WHERE `id` = 9 AND `sort` = 8;
|
||||
|
||||
-- 调整系统配置的排序(从9改为10)
|
||||
UPDATE `sys_menu` SET `sort` = 10 WHERE `id` = 10 AND `sort` = 9;
|
||||
|
||||
-- 调整通知公告的排序(从10改为11)
|
||||
UPDATE `sys_menu` SET `sort` = 11 WHERE `id` = 11 AND `sort` = 10;
|
||||
|
||||
-- 租户管理权限按钮(ID: 141-145)
|
||||
INSERT INTO `sys_menu` (`id`, `parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`, `perm`, `always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`, `create_time`, `update_time`, `params`)
|
||||
@@ -190,20 +124,3 @@ VALUES
|
||||
ON DUPLICATE KEY UPDATE `role_id` = VALUES(`role_id`);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- ============================================
|
||||
-- 脚本执行完成
|
||||
-- ============================================
|
||||
-- 执行完成后,请在 application.yml 中配置:
|
||||
-- youlai:
|
||||
-- tenant:
|
||||
-- enabled: true
|
||||
-- column: tenant_id
|
||||
-- default-tenant-id: 1
|
||||
-- header-name: tenant-id
|
||||
-- ignore-tables:
|
||||
-- - sys_tenant
|
||||
-- - sys_dict
|
||||
-- - sys_dict_item
|
||||
-- - sys_config
|
||||
-- ============================================
|
||||
|
||||
@@ -12,60 +12,48 @@ USE youlai_admin;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ============================================
|
||||
-- 1. 删除用户租户关联表
|
||||
-- ============================================
|
||||
DROP TABLE IF EXISTS `sys_user_tenant`;
|
||||
|
||||
-- ============================================
|
||||
-- 2. 删除租户表(可选)
|
||||
-- 1. 删除租户表(可选)
|
||||
-- ============================================
|
||||
-- 注意:如果将来可能再次启用多租户,建议保留此表
|
||||
-- 如需删除,取消下面的注释
|
||||
-- DROP TABLE IF EXISTS `sys_tenant`;
|
||||
|
||||
-- ============================================
|
||||
-- 3. 移除业务表的 tenant_id 字段和索引
|
||||
-- 2. 移除业务表的 tenant_id 字段和索引
|
||||
-- ============================================
|
||||
-- 注意:如果字段不存在会报错,请根据实际情况调整
|
||||
|
||||
-- 用户表
|
||||
ALTER TABLE `sys_user` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
ALTER TABLE `sys_user` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
-- 先删除组合唯一索引
|
||||
ALTER TABLE `sys_user` DROP INDEX `uk_username_tenant`;
|
||||
-- 删除租户ID索引和字段
|
||||
ALTER TABLE `sys_user` DROP INDEX `idx_tenant_id`;
|
||||
ALTER TABLE `sys_user` DROP COLUMN `tenant_id`;
|
||||
-- 恢复原来的用户名唯一索引
|
||||
ALTER TABLE `sys_user` ADD UNIQUE KEY `login_name` (`username`);
|
||||
|
||||
-- 角色表
|
||||
ALTER TABLE `sys_role` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
ALTER TABLE `sys_role` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
ALTER TABLE `sys_role` DROP INDEX `idx_tenant_id`;
|
||||
ALTER TABLE `sys_role` DROP COLUMN `tenant_id`;
|
||||
|
||||
-- 部门表
|
||||
ALTER TABLE `sys_dept` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
ALTER TABLE `sys_dept` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
ALTER TABLE `sys_dept` DROP INDEX `idx_tenant_id`;
|
||||
ALTER TABLE `sys_dept` DROP COLUMN `tenant_id`;
|
||||
|
||||
-- 通知公告表
|
||||
ALTER TABLE `sys_notice` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
ALTER TABLE `sys_notice` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
ALTER TABLE `sys_notice` DROP INDEX `idx_tenant_id`;
|
||||
ALTER TABLE `sys_notice` DROP COLUMN `tenant_id`;
|
||||
|
||||
-- 系统日志表
|
||||
ALTER TABLE `sys_log` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
ALTER TABLE `sys_log` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
ALTER TABLE `sys_log` DROP INDEX `idx_tenant_id`;
|
||||
ALTER TABLE `sys_log` DROP COLUMN `tenant_id`;
|
||||
|
||||
-- AI 命令记录表
|
||||
ALTER TABLE `ai_command_log` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
ALTER TABLE `ai_command_log` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
|
||||
-- 代码生成配置表(如果存在)
|
||||
-- ALTER TABLE `gen_config` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
-- ALTER TABLE `gen_config` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
|
||||
-- 代码生成字段配置表(如果存在)
|
||||
-- ALTER TABLE `gen_field_config` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
-- ALTER TABLE `gen_field_config` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
|
||||
-- 菜单表(如果之前添加了)
|
||||
-- ALTER TABLE `sys_menu` DROP INDEX IF EXISTS `idx_tenant_id`;
|
||||
-- ALTER TABLE `sys_menu` DROP COLUMN IF EXISTS `tenant_id`;
|
||||
ALTER TABLE `ai_command_record` DROP INDEX `idx_tenant_id`;
|
||||
ALTER TABLE `ai_command_record` DROP COLUMN `tenant_id`;
|
||||
|
||||
-- ============================================
|
||||
-- 4. 删除租户管理菜单和权限
|
||||
-- 3. 删除租户管理菜单和权限
|
||||
-- ============================================
|
||||
-- 删除角色菜单关联
|
||||
DELETE FROM `sys_role_menu` WHERE `menu_id` IN (6, 141, 142, 143, 144, 145);
|
||||
@@ -76,36 +64,4 @@ DELETE FROM `sys_menu` WHERE `id` IN (141, 142, 143, 144, 145);
|
||||
-- 删除租户管理主菜单
|
||||
DELETE FROM `sys_menu` WHERE `id` = 6;
|
||||
|
||||
-- 恢复字典管理的排序(从7改回6)
|
||||
UPDATE `sys_menu` SET `sort` = 6 WHERE `id` = 7 AND `sort` = 7;
|
||||
|
||||
-- 恢复字典项的排序(从8改回7)
|
||||
UPDATE `sys_menu` SET `sort` = 7 WHERE `id` = 8 AND `sort` = 8;
|
||||
|
||||
-- 恢复系统日志的排序(从9改回8)
|
||||
UPDATE `sys_menu` SET `sort` = 8 WHERE `id` = 9 AND `sort` = 9;
|
||||
|
||||
-- 恢复系统配置的排序(从10改回9)
|
||||
UPDATE `sys_menu` SET `sort` = 9 WHERE `id` = 10 AND `sort` = 10;
|
||||
|
||||
-- 恢复通知公告的排序(从11改回10)
|
||||
UPDATE `sys_menu` SET `sort` = 10 WHERE `id` = 11 AND `sort` = 11;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- ============================================
|
||||
-- 脚本执行完成
|
||||
-- ============================================
|
||||
-- 执行完成后,请执行以下操作:
|
||||
-- 1. 在 application.yml 中配置:
|
||||
-- youlai:
|
||||
-- tenant:
|
||||
-- enabled: false
|
||||
-- 2. 更新 BaseEntity.java,将 tenantId 字段的 exist 设置为 false
|
||||
-- 或移除 tenantId 字段(如果确定不再使用)
|
||||
-- ============================================
|
||||
-- 注意:
|
||||
-- 1. MySQL 5.7 不支持 IF EXISTS 语法,如果执行报错,请手动检查字段是否存在
|
||||
-- 2. 对于 MySQL 8.0+,可以使用上面的语法
|
||||
-- 3. 如果使用 MySQL 5.7,请先检查字段是否存在,再执行删除操作
|
||||
-- ============================================
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -255,19 +255,6 @@ INSERT INTO `sys_menu` VALUES (913, 911, '0,9,910,911', '菜单三级-2', 'M', N
|
||||
-- 路由参数
|
||||
INSERT INTO `sys_menu` VALUES (1001, 10, '0,10', '参数(type=1)', 'M', 'RouteParamType1', 'route-param-type1', 'demo/route-param', NULL, 0, 1, 1, 1, 'el-icon-Star', NULL, now(), now(), '{\"type\": \"1\"}');
|
||||
INSERT INTO `sys_menu` VALUES (1002, 10, '0,10', '参数(type=2)', 'M', 'RouteParamType2', 'route-param-type2', 'demo/route-param', NULL, 0, 1, 1, 2, 'el-icon-StarFilled', NULL, now(), now(), '{\"type\": \"2\"}');
|
||||
-- ============================================
|
||||
--- 系统配置权限按钮(ID: 901-905)
|
||||
--- 字典项权限按钮(ID: 701-704)
|
||||
-- ============================================
|
||||
-- 通知公告权限按钮(ID: 1101-1106)
|
||||
-- ============================================
|
||||
-- ============================================
|
||||
-- 字典项权限按钮(ID: 701-704)
|
||||
-- ============================================
|
||||
-- ============================================
|
||||
-- 租户管理权限按钮(ID: 501-505)
|
||||
-- ============================================
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_role
|
||||
@@ -353,6 +340,7 @@ INSERT INTO `sys_role_menu` VALUES (2, 1001), (2, 1002);
|
||||
DROP TABLE IF EXISTS `sys_user`;
|
||||
CREATE TABLE `sys_user` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`tenant_id` bigint DEFAULT 1 COMMENT '租户ID',
|
||||
`username` varchar(64) COMMENT '用户名',
|
||||
`nickname` varchar(64) COMMENT '昵称',
|
||||
`gender` tinyint(1) DEFAULT 1 COMMENT '性别((1-男 2-女 0-保密)',
|
||||
@@ -369,15 +357,16 @@ CREATE TABLE `sys_user` (
|
||||
`is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)',
|
||||
`openid` char(28) COMMENT '微信 openid',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
KEY `login_name` (`username`)
|
||||
UNIQUE KEY `uk_username_tenant` (`username`, `tenant_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统用户表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of sys_user
|
||||
-- ----------------------------
|
||||
INSERT INTO `sys_user` VALUES (1, 'root', '有来技术', 0, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', NULL, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345677', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL);
|
||||
INSERT INTO `sys_user` VALUES (2, 'admin', '系统管理员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345678', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL);
|
||||
INSERT INTO `sys_user` VALUES (3, 'test', '测试小用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345679', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL);
|
||||
INSERT INTO `sys_user` VALUES (1, 1, 'root', '有来技术', 0, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', NULL, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345677', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL);
|
||||
INSERT INTO `sys_user` VALUES (2, 1, 'admin', '系统管理员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345678', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL);
|
||||
INSERT INTO `sys_user` VALUES (3, 1, 'test', '测试小用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345679', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_user_role
|
||||
@@ -425,10 +414,10 @@ CREATE TABLE `sys_log` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='系统操作日志表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for gen_config
|
||||
-- Table structure for gen_table
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `gen_config`;
|
||||
CREATE TABLE `gen_config` (
|
||||
DROP TABLE IF EXISTS `gen_table`;
|
||||
CREATE TABLE `gen_table` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`table_name` varchar(100) NOT NULL COMMENT '表名',
|
||||
`module_name` varchar(100) COMMENT '模块名',
|
||||
@@ -447,12 +436,12 @@ CREATE TABLE `gen_config` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成配置表';
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for gen_field_config
|
||||
-- Table structure for gen_table_column
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `gen_field_config`;
|
||||
CREATE TABLE `gen_field_config` (
|
||||
DROP TABLE IF EXISTS `gen_table_column`;
|
||||
CREATE TABLE `gen_table_column` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||
`config_id` bigint NOT NULL COMMENT '关联的配置ID',
|
||||
`table_id` bigint NOT NULL COMMENT '关联的表配置ID',
|
||||
`column_name` varchar(100) ,
|
||||
`column_type` varchar(50) ,
|
||||
`column_length` int ,
|
||||
@@ -471,7 +460,7 @@ CREATE TABLE `gen_field_config` (
|
||||
`create_time` datetime COMMENT '创建时间',
|
||||
`update_time` datetime COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `config_id` (`config_id`)
|
||||
KEY `idx_table_id` (`table_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成字段配置表';
|
||||
|
||||
-- ----------------------------
|
||||
@@ -559,60 +548,60 @@ INSERT INTO `sys_user_notice` VALUES (10, 10, 2, 1, NULL, now(), now(), 0);
|
||||
-- ----------------------------
|
||||
-- AI 命令记录表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `ai_command_log`;
|
||||
CREATE TABLE `ai_command_log` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`user_id` bigint DEFAULT NULL COMMENT '用户ID',
|
||||
`username` varchar(64) DEFAULT NULL COMMENT '用户名',
|
||||
`original_command` text COMMENT '原始命令',
|
||||
`ai_provider` varchar(32) DEFAULT NULL COMMENT 'AI 供应商(qwen/openai/deepseek/gemini等)',
|
||||
`ai_model` varchar(64) DEFAULT NULL COMMENT 'AI 模型名称(qwen-plus/qwen-max/gpt-4-turbo等)',
|
||||
`parse_status` tinyint DEFAULT '0' COMMENT '解析是否成功(0-失败, 1-成功)',
|
||||
`function_calls` text COMMENT '解析出的函数调用列表(JSON)',
|
||||
`explanation` varchar(500) DEFAULT NULL COMMENT 'AI的理解说明',
|
||||
`confidence` decimal(3,2) DEFAULT NULL COMMENT '置信度(0.00-1.00)',
|
||||
`parse_error_message` text COMMENT '解析错误信息',
|
||||
`input_tokens` int DEFAULT NULL COMMENT '输入Token数量',
|
||||
`output_tokens` int DEFAULT NULL COMMENT '输出Token数量',
|
||||
`parse_duration_ms` int DEFAULT NULL COMMENT '解析耗时(毫秒)',
|
||||
`function_name` varchar(255) DEFAULT NULL COMMENT '执行的函数名称',
|
||||
`function_arguments` text COMMENT '函数参数(JSON)',
|
||||
`execute_status` tinyint(1) DEFAULT NULL COMMENT '执行状态(0-待执行, 1-成功, -1-失败)',
|
||||
`execute_error_message` text COMMENT '执行错误信息',
|
||||
`ip_address` varchar(128) DEFAULT NULL COMMENT 'IP地址',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_provider` (`ai_provider`),
|
||||
KEY `idx_model` (`ai_model`),
|
||||
KEY `idx_parse_success` (`parse_status`),
|
||||
KEY `idx_execute_status` (`execute_status`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI 命令日志表';
|
||||
DROP TABLE IF EXISTS `ai_command_record`;
|
||||
CREATE TABLE `ai_command_record` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`user_id` bigint DEFAULT NULL COMMENT '用户ID',
|
||||
`username` varchar(64) DEFAULT NULL COMMENT '用户名',
|
||||
`original_command` text COMMENT '原始命令',
|
||||
`ai_provider` varchar(32) DEFAULT NULL COMMENT 'AI 供应商(qwen/openai/deepseek/gemini等)',
|
||||
`ai_model` varchar(64) DEFAULT NULL COMMENT 'AI 模型名称(qwen-plus/qwen-max/gpt-4-turbo等)',
|
||||
`parse_status` tinyint DEFAULT '0' COMMENT '解析是否成功(0-失败, 1-成功)',
|
||||
`function_calls` text COMMENT '解析出的函数调用列表(JSON)',
|
||||
`explanation` varchar(500) DEFAULT NULL COMMENT 'AI的理解说明',
|
||||
`confidence` decimal(3,2) DEFAULT NULL COMMENT '置信度(0.00-1.00)',
|
||||
`parse_error_message` text COMMENT '解析错误信息',
|
||||
`input_tokens` int DEFAULT NULL COMMENT '输入Token数量',
|
||||
`output_tokens` int DEFAULT NULL COMMENT '输出Token数量',
|
||||
`parse_duration_ms` int DEFAULT NULL COMMENT '解析耗时(毫秒)',
|
||||
`function_name` varchar(255) DEFAULT NULL COMMENT '执行的函数名称',
|
||||
`function_arguments` text COMMENT '函数参数(JSON)',
|
||||
`execute_status` tinyint(1) DEFAULT NULL COMMENT '执行状态(0-待执行, 1-成功, -1-失败)',
|
||||
`execute_error_message` text COMMENT '执行错误信息',
|
||||
`ip_address` varchar(128) DEFAULT NULL COMMENT 'IP地址',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_provider` (`ai_provider`),
|
||||
KEY `idx_model` (`ai_model`),
|
||||
KEY `idx_parse_success` (`parse_status`),
|
||||
KEY `idx_execute_status` (`execute_status`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI 命令记录表';
|
||||
|
||||
-- ----------------------------
|
||||
-- 租户表(多租户模式)
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_tenant`;
|
||||
CREATE TABLE `sys_tenant` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '租户ID',
|
||||
`name` varchar(100) NOT NULL COMMENT '租户名称',
|
||||
`code` varchar(50) NOT NULL COMMENT '租户编码(唯一)',
|
||||
`contact_name` varchar(50) DEFAULT NULL COMMENT '联系人姓名',
|
||||
`contact_phone` varchar(20) DEFAULT NULL COMMENT '联系人电话',
|
||||
`contact_email` varchar(100) DEFAULT NULL COMMENT '联系人邮箱',
|
||||
`domain` varchar(100) DEFAULT NULL COMMENT '租户域名(用于域名识别)',
|
||||
`logo` varchar(255) DEFAULT NULL COMMENT '租户Logo',
|
||||
`status` tinyint DEFAULT '1' COMMENT '状态(1-正常 0-禁用)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`expire_time` datetime DEFAULT NULL COMMENT '过期时间(NULL表示永不过期)',
|
||||
`create_time` datetime COMMENT '创建时间',
|
||||
`update_time` datetime COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_code` (`code`),
|
||||
UNIQUE KEY `uk_domain` (`domain`),
|
||||
KEY `idx_status` (`status`)
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '租户ID',
|
||||
`name` varchar(100) NOT NULL COMMENT '租户名称',
|
||||
`code` varchar(50) NOT NULL COMMENT '租户编码(唯一)',
|
||||
`contact_name` varchar(50) DEFAULT NULL COMMENT '联系人姓名',
|
||||
`contact_phone` varchar(20) DEFAULT NULL COMMENT '联系人电话',
|
||||
`contact_email` varchar(100) DEFAULT NULL COMMENT '联系人邮箱',
|
||||
`domain` varchar(100) DEFAULT NULL COMMENT '租户域名(用于域名识别)',
|
||||
`logo` varchar(255) DEFAULT NULL COMMENT '租户Logo',
|
||||
`status` tinyint DEFAULT '1' COMMENT '状态(1-正常 0-禁用)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`expire_time` datetime DEFAULT NULL COMMENT '过期时间(NULL表示永不过期)',
|
||||
`create_time` datetime COMMENT '创建时间',
|
||||
`update_time` datetime COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_code` (`code`),
|
||||
UNIQUE KEY `uk_domain` (`domain`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统租户表';
|
||||
|
||||
-- ----------------------------
|
||||
@@ -621,28 +610,6 @@ CREATE TABLE `sys_tenant` (
|
||||
INSERT INTO `sys_tenant` VALUES (1, '默认租户', 'DEFAULT', '系统管理员', '18812345678', 'admin@youlai.tech', NULL, NULL, 1, '系统默认租户', NULL, now(), now());
|
||||
INSERT INTO `sys_tenant` VALUES (2, '演示租户', 'DEMO', '演示用户', '18812345679', 'demo@youlai.tech', 'demo.youlai.tech', NULL, 1, '演示租户', NULL, now(), now());
|
||||
|
||||
-- ----------------------------
|
||||
-- 用户租户关联表(多租户模式)
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_user_tenant`;
|
||||
CREATE TABLE `sys_user_tenant` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||
`is_default` tinyint DEFAULT '0' COMMENT '是否默认租户(1-是 0-否)',
|
||||
`create_time` datetime COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_user_tenant` (`user_id`, `tenant_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_tenant_id` (`tenant_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户租户关联表(多租户模式)';
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of sys_user_tenant
|
||||
-- ----------------------------
|
||||
INSERT INTO `sys_user_tenant` VALUES (1, 1, 1, 1, now());
|
||||
INSERT INTO `sys_user_tenant` VALUES (2, 2, 1, 1, now());
|
||||
INSERT INTO `sys_user_tenant` VALUES (3, 2, 2, 0, now());
|
||||
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
Reference in New Issue
Block a user