批量更新
This commit is contained in:
@@ -1,108 +0,0 @@
|
||||
-- 为员工表添加工资卡信息和密码字段
|
||||
-- 创建时间: 2025
|
||||
|
||||
SET @dbname = DATABASE();
|
||||
SET @tablename = 'yz_tenant_employees';
|
||||
|
||||
-- 添加工资卡开户行字段
|
||||
SET @columnname = 'bank_name';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column bank_name already exists in yz_tenant_employees" AS "";',
|
||||
'ALTER TABLE yz_tenant_employees ADD COLUMN bank_name VARCHAR(100) DEFAULT NULL COMMENT ''工资卡开户行'' AFTER position_id;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- 添加工资卡卡号字段
|
||||
SET @columnname = 'bank_account';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column bank_account already exists in yz_tenant_employees" AS "";',
|
||||
'ALTER TABLE yz_tenant_employees ADD COLUMN bank_account VARCHAR(50) DEFAULT NULL COMMENT ''工资卡卡号'' AFTER bank_name;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- 添加登录密码字段
|
||||
SET @columnname = 'password';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column password already exists in yz_tenant_employees" AS "";',
|
||||
'ALTER TABLE yz_tenant_employees ADD COLUMN password VARCHAR(255) DEFAULT NULL COMMENT ''登录密码(加密后)'' AFTER bank_account;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- 添加盐值字段
|
||||
SET @columnname = 'salt';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column salt already exists in yz_tenant_employees" AS "";',
|
||||
'ALTER TABLE yz_tenant_employees ADD COLUMN salt VARCHAR(100) DEFAULT NULL COMMENT ''密码盐值'' AFTER password;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- 添加最后登录时间字段
|
||||
SET @columnname = 'last_login_time';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column last_login_time already exists in yz_tenant_employees" AS "";',
|
||||
'ALTER TABLE yz_tenant_employees ADD COLUMN last_login_time DATETIME DEFAULT NULL COMMENT ''最后登录时间'' AFTER salt;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- 添加最后登录IP字段
|
||||
SET @columnname = 'last_login_ip';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column last_login_ip already exists in yz_tenant_employees" AS "";',
|
||||
'ALTER TABLE yz_tenant_employees ADD COLUMN last_login_ip VARCHAR(50) DEFAULT NULL COMMENT ''最后登录IP'' AFTER last_login_time;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
-- 添加知识库管理相关的菜单项
|
||||
-- 注意:需要先查询知识库菜单的ID(parent_id),假设为 11
|
||||
|
||||
-- 如果知识库菜单ID为11,添加分类管理和标签管理菜单
|
||||
-- 请根据实际数据库中的知识库菜单ID修改下面的 parent_id 值
|
||||
|
||||
-- 查询知识库菜单ID(如果需要)
|
||||
-- SELECT id FROM yz_menus WHERE path = '/apps/knowledge';
|
||||
|
||||
-- 添加分类管理菜单(如果不存在)
|
||||
INSERT INTO yz_menus (
|
||||
name,
|
||||
path,
|
||||
parent_id,
|
||||
icon,
|
||||
`order`,
|
||||
status,
|
||||
component_path,
|
||||
menu_type,
|
||||
description
|
||||
)
|
||||
SELECT
|
||||
'分类管理',
|
||||
'/apps/knowledge/category',
|
||||
id,
|
||||
'fa-solid fa-folder',
|
||||
2,
|
||||
1,
|
||||
'@/views/apps/knowledge/category/index.vue',
|
||||
1,
|
||||
'知识库分类管理'
|
||||
FROM yz_menus
|
||||
WHERE path = '/apps/knowledge'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM yz_menus WHERE path = '/apps/knowledge/category'
|
||||
);
|
||||
|
||||
-- 添加标签管理菜单(如果不存在)
|
||||
INSERT INTO yz_menus (
|
||||
name,
|
||||
path,
|
||||
parent_id,
|
||||
icon,
|
||||
`order`,
|
||||
status,
|
||||
component_path,
|
||||
menu_type,
|
||||
description
|
||||
)
|
||||
SELECT
|
||||
'标签管理',
|
||||
'/apps/knowledge/tag',
|
||||
id,
|
||||
'fa-solid fa-tags',
|
||||
3,
|
||||
1,
|
||||
'@/views/apps/knowledge/tag/index.vue',
|
||||
1,
|
||||
'知识库标签管理'
|
||||
FROM yz_menus
|
||||
WHERE path = '/apps/knowledge'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM yz_menus WHERE path = '/apps/knowledge/tag'
|
||||
);
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
-- 为菜单表添加 delete_time 字段(软删除)
|
||||
-- 如果字段已存在,则不会重复添加
|
||||
|
||||
SET @dbname = DATABASE();
|
||||
SET @tablename = 'yz_menus';
|
||||
SET @columnname = 'delete_time';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column delete_time already exists in yz_menus" AS "";',
|
||||
'ALTER TABLE yz_menus ADD COLUMN delete_time DATETIME DEFAULT NULL COMMENT ''删除时间(软删除)'' AFTER update_time;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- 添加索引以优化查询性能
|
||||
SET @indexname = 'idx_delete_time';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (INDEX_NAME = @indexname)
|
||||
) > 0,
|
||||
'SELECT "Index idx_delete_time already exists in yz_menus" AS "";',
|
||||
'ALTER TABLE yz_menus ADD INDEX idx_delete_time (delete_time);'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
-- 添加组织架构管理菜单
|
||||
-- 注意:请根据实际情况修改 parent_id(92 是 OA 模块的 ID,请确认)
|
||||
|
||||
INSERT INTO yz_menus (name, path, parent_id, icon, `order`, status, component_path, menu_type, description)
|
||||
VALUES ('组织架构', '/apps/oa/organization', 92, 'fa-solid fa-sitemap', 1, 1, '@/views/apps/oa/organization/index.vue', 1, '组织架构管理(部门与职位)')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
name = VALUES(name),
|
||||
path = VALUES(path),
|
||||
icon = VALUES(icon),
|
||||
`order` = VALUES(`order`),
|
||||
status = VALUES(status),
|
||||
component_path = VALUES(component_path),
|
||||
menu_type = VALUES(menu_type),
|
||||
description = VALUES(description);
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
-- 检查角色权限数据
|
||||
-- 查询角色ID为1的权限信息
|
||||
|
||||
-- 1. 查看角色基本信息
|
||||
SELECT
|
||||
role_id,
|
||||
role_name,
|
||||
menu_ids,
|
||||
JSON_LENGTH(COALESCE(menu_ids, CAST('[]' AS JSON))) as menu_count,
|
||||
tenant_id,
|
||||
status
|
||||
FROM yz_roles
|
||||
WHERE role_id = 1;
|
||||
|
||||
-- 2. 查看所有角色的 menu_ids 字段
|
||||
SELECT
|
||||
role_id,
|
||||
role_name,
|
||||
menu_ids,
|
||||
JSON_LENGTH(COALESCE(menu_ids, CAST('[]' AS JSON))) as menu_count
|
||||
FROM yz_roles
|
||||
WHERE delete_time IS NULL
|
||||
ORDER BY role_id;
|
||||
|
||||
-- 3. 查看菜单表中有权限标识的菜单
|
||||
SELECT
|
||||
id,
|
||||
name,
|
||||
path,
|
||||
permission,
|
||||
menu_type,
|
||||
parent_id
|
||||
FROM yz_menus
|
||||
WHERE delete_time IS NULL
|
||||
AND permission IS NOT NULL
|
||||
AND permission != ''
|
||||
ORDER BY id
|
||||
LIMIT 20;
|
||||
|
||||
-- 4. 如果 role_id=1 的 menu_ids 不为空,查看这些菜单的权限标识
|
||||
-- 假设 menu_ids 是 [1,2,3],可以这样查询:
|
||||
-- SELECT DISTINCT permission
|
||||
-- FROM yz_menus
|
||||
-- WHERE id IN (1,2,3)
|
||||
-- AND delete_time IS NULL
|
||||
-- AND permission IS NOT NULL
|
||||
-- AND permission != '';
|
||||
|
||||
-- 5. 查看 menu_ids 字段的原始JSON值(用于调试)
|
||||
SELECT
|
||||
role_id,
|
||||
role_name,
|
||||
menu_ids,
|
||||
CAST(menu_ids AS CHAR) as menu_ids_str
|
||||
FROM yz_roles
|
||||
WHERE role_id = 1;
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1,178 +0,0 @@
|
||||
-- 只创建缺失的表,不重复创建已存在的表
|
||||
-- 适用于部分表已存在的情况
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- 检查并创建用户表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_users (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
|
||||
username VARCHAR(50) NOT NULL COMMENT '用户名',
|
||||
password VARCHAR(255) NOT NULL COMMENT '加密后的密码',
|
||||
salt VARCHAR(100) NOT NULL COMMENT '密码盐值',
|
||||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱地址',
|
||||
avatar VARCHAR(500) DEFAULT NULL COMMENT '头像URL',
|
||||
nickname VARCHAR(50) DEFAULT NULL COMMENT '昵称',
|
||||
role VARCHAR(20) DEFAULT 'user' COMMENT '用户角色:admin-管理员,user-普通用户',
|
||||
status TINYINT DEFAULT 1 COMMENT '用户状态:0-禁用,1-启用',
|
||||
last_login_time DATETIME DEFAULT NULL COMMENT '最后登录时间',
|
||||
last_login_ip VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP',
|
||||
login_count INT DEFAULT 0 COMMENT '登录次数',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
UNIQUE KEY uk_username (username),
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_role (role),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- 检查并创建菜单表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_menus (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '菜单ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '菜单名称',
|
||||
path VARCHAR(255) NOT NULL COMMENT '菜单路径',
|
||||
parent_id INT DEFAULT 0 COMMENT '父菜单ID,0表示顶级菜单',
|
||||
level TINYINT DEFAULT 1 COMMENT '菜单层级:1-一级菜单,2-二级菜单,3-三级菜单',
|
||||
full_path VARCHAR(500) DEFAULT NULL COMMENT '完整路径(包含所有父级路径)',
|
||||
is_leaf TINYINT DEFAULT 0 COMMENT '是否叶子节点:0-非叶子节点,1-叶子节点',
|
||||
has_children TINYINT DEFAULT 0 COMMENT '是否有子菜单:0-无子菜单,1-有子菜单',
|
||||
children_count INT DEFAULT 0 COMMENT '子菜单数量',
|
||||
icon VARCHAR(100) DEFAULT NULL COMMENT '菜单图标',
|
||||
order_num INT DEFAULT 0 COMMENT '排序序号',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
|
||||
component_path VARCHAR(500) DEFAULT NULL COMMENT '组件路径',
|
||||
is_external TINYINT DEFAULT 0 COMMENT '是否外部链接:0-内部路由,1-外部链接',
|
||||
external_url VARCHAR(1000) DEFAULT NULL COMMENT '外部链接地址',
|
||||
menu_type TINYINT DEFAULT 1 COMMENT '菜单类型:1-普通菜单,2-分组菜单,3-按钮菜单',
|
||||
permission VARCHAR(200) DEFAULT NULL COMMENT '权限标识',
|
||||
description VARCHAR(500) DEFAULT NULL COMMENT '菜单描述',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(100) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_parent_id (parent_id),
|
||||
INDEX idx_level (level),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_order (order_num),
|
||||
INDEX idx_menu_type (menu_type),
|
||||
INDEX idx_full_path (full_path(255))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表(增强版)';
|
||||
|
||||
-- 检查并创建程序分类表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_program_category (
|
||||
category_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '分类ID',
|
||||
category_name VARCHAR(100) NOT NULL COMMENT '分类名称',
|
||||
category_desc VARCHAR(500) DEFAULT NULL COMMENT '分类描述',
|
||||
parent_id INT DEFAULT 0 COMMENT '父分类ID,0表示顶级分类',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号,用于展示顺序',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_parent_id (parent_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='程序分类表';
|
||||
|
||||
-- 检查并创建程序信息表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_program_info (
|
||||
program_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '程序ID',
|
||||
category_id INT NOT NULL COMMENT '所属分类ID',
|
||||
program_name VARCHAR(200) NOT NULL COMMENT '程序名称',
|
||||
program_desc TEXT COMMENT '程序描述',
|
||||
jump_url VARCHAR(1000) NOT NULL COMMENT '跳转地址',
|
||||
icon_url VARCHAR(1000) DEFAULT NULL COMMENT '程序图标地址',
|
||||
version VARCHAR(50) DEFAULT NULL COMMENT '程序版本',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号,用于展示顺序',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_category_id (category_id),
|
||||
INDEX idx_status (status),
|
||||
CONSTRAINT yz_fk_program_category FOREIGN KEY (category_id) REFERENCES yz_program_category (category_id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='程序信息表';
|
||||
|
||||
-- 检查并创建租户表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_tenants (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '租户ID',
|
||||
|
||||
-- 基本信息
|
||||
name VARCHAR(100) NOT NULL COMMENT '租户名称',
|
||||
code VARCHAR(50) NOT NULL COMMENT '租户编码(唯一)',
|
||||
owner VARCHAR(50) NOT NULL COMMENT '负责人',
|
||||
phone VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
|
||||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱地址',
|
||||
|
||||
-- 状态信息
|
||||
status VARCHAR(20) DEFAULT 'enabled' COMMENT '状态:enabled-启用,disabled-禁用',
|
||||
audit_status VARCHAR(20) DEFAULT 'pending' COMMENT '审核状态:pending-待审核,approved-已通过,rejected-已拒绝',
|
||||
|
||||
-- 审核信息
|
||||
audit_comment TEXT DEFAULT NULL COMMENT '审核意见',
|
||||
audit_by VARCHAR(50) DEFAULT NULL COMMENT '审核人',
|
||||
audit_time DATETIME DEFAULT NULL COMMENT '审核时间',
|
||||
|
||||
-- 其他信息
|
||||
remark TEXT DEFAULT NULL COMMENT '备注',
|
||||
|
||||
-- 时间戳
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
UNIQUE KEY uk_code (code),
|
||||
INDEX idx_name (name),
|
||||
INDEX idx_owner (owner),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_audit_status (audit_status),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';
|
||||
|
||||
-- 检查并创建文件表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_files (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '文件ID',
|
||||
tenant_id VARCHAR(64) NOT NULL COMMENT '租户ID',
|
||||
user_id INT NOT NULL DEFAULT 0 COMMENT '用户ID',
|
||||
|
||||
-- 文件基础信息
|
||||
file_name VARCHAR(255) NOT NULL COMMENT '文件名称',
|
||||
original_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
|
||||
file_path VARCHAR(500) NOT NULL COMMENT '文件存储路径',
|
||||
file_url VARCHAR(500) COMMENT '文件访问URL',
|
||||
file_size BIGINT NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
|
||||
file_type VARCHAR(50) NOT NULL COMMENT '文件类型',
|
||||
file_ext VARCHAR(20) NOT NULL COMMENT '文件扩展名',
|
||||
|
||||
-- 分类信息
|
||||
category VARCHAR(100) NOT NULL COMMENT '文件分类',
|
||||
sub_category VARCHAR(100) COMMENT '子分类',
|
||||
|
||||
-- 状态信息
|
||||
status TINYINT DEFAULT 1 COMMENT '状态(1:正常, 0:删除)',
|
||||
is_public TINYINT DEFAULT 0 COMMENT '是否公开(1:是, 0:否)',
|
||||
|
||||
-- 上传信息
|
||||
upload_by VARCHAR(100) NOT NULL COMMENT '上传人',
|
||||
upload_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant (tenant_id),
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_category (category),
|
||||
INDEX idx_upload_time (upload_time),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 完成创建
|
||||
SELECT 'Missing tables created successfully!' as message;
|
||||
@@ -1,163 +0,0 @@
|
||||
-- 创建OA模块相关表(租户应用)
|
||||
-- 创建时间: 2025
|
||||
-- 描述: 创建租户部门表、租户职位表和租户员工表
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- =============================================
|
||||
-- 1. 创建租户部门表
|
||||
-- =============================================
|
||||
CREATE TABLE IF NOT EXISTS yz_tenant_departments (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '部门ID',
|
||||
tenant_id INT NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '部门名称',
|
||||
code VARCHAR(50) DEFAULT NULL COMMENT '部门编码',
|
||||
parent_id INT DEFAULT 0 COMMENT '父部门ID,0表示顶级部门',
|
||||
description TEXT DEFAULT NULL COMMENT '部门描述',
|
||||
manager_id INT DEFAULT NULL COMMENT '部门经理ID',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:1-启用,0-禁用',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
delete_time DATETIME DEFAULT NULL COMMENT '删除时间(软删除)',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant_id (tenant_id),
|
||||
INDEX idx_code (code),
|
||||
INDEX idx_parent_id (parent_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_sort_order (sort_order)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户部门表';
|
||||
|
||||
-- =============================================
|
||||
-- 2. 创建租户职位表
|
||||
-- =============================================
|
||||
CREATE TABLE IF NOT EXISTS yz_tenant_positions (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '职位ID',
|
||||
tenant_id INT NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '职位名称',
|
||||
code VARCHAR(50) DEFAULT NULL COMMENT '职位编码',
|
||||
department_id INT DEFAULT NULL COMMENT '所属部门ID',
|
||||
level INT DEFAULT 0 COMMENT '职位级别',
|
||||
description TEXT DEFAULT NULL COMMENT '职位描述',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:1-启用,0-禁用',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
delete_time DATETIME DEFAULT NULL COMMENT '删除时间(软删除)',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant_id (tenant_id),
|
||||
INDEX idx_code (code),
|
||||
INDEX idx_department_id (department_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_sort_order (sort_order)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户职位表';
|
||||
|
||||
-- =============================================
|
||||
-- 3. 创建租户员工表(如果不存在)
|
||||
-- =============================================
|
||||
CREATE TABLE IF NOT EXISTS yz_tenant_employees (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工ID',
|
||||
tenant_id INT NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
employee_no VARCHAR(50) NOT NULL COMMENT '工号',
|
||||
name VARCHAR(50) NOT NULL COMMENT '姓名',
|
||||
phone VARCHAR(20) DEFAULT NULL COMMENT '手机号',
|
||||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
|
||||
department_id INT DEFAULT NULL COMMENT '部门ID',
|
||||
position_id INT DEFAULT NULL COMMENT '职位ID',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:1-在职,0-离职',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
delete_time DATETIME DEFAULT NULL COMMENT '删除时间(软删除)',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant_id (tenant_id),
|
||||
INDEX idx_employee_no (employee_no),
|
||||
INDEX idx_name (name),
|
||||
INDEX idx_department_id (department_id),
|
||||
INDEX idx_position_id (position_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户员工表';
|
||||
|
||||
-- =============================================
|
||||
-- 4. 更新用户表,添加部门和职位字段(如果不存在)
|
||||
-- =============================================
|
||||
-- 检查并添加 department_id 字段
|
||||
SET @dbname = DATABASE();
|
||||
SET @tablename = 'yz_users';
|
||||
SET @columnname = 'department_id';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column department_id already exists in yz_users" AS "";',
|
||||
'ALTER TABLE yz_users ADD COLUMN department_id INT DEFAULT NULL COMMENT ''部门ID'' AFTER role;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- 检查并添加 position_id 字段
|
||||
SET @columnname = 'position_id';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column position_id already exists in yz_users" AS "";',
|
||||
'ALTER TABLE yz_users ADD COLUMN position_id INT DEFAULT NULL COMMENT ''职位ID'' AFTER department_id;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- =============================================
|
||||
-- 5. 更新租户员工表,添加部门和职位字段(如果不存在)
|
||||
-- =============================================
|
||||
-- 检查并添加 department_id 字段
|
||||
SET @tablename = 'yz_tenant_employees';
|
||||
SET @columnname = 'department_id';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column department_id already exists in yz_employees" AS "";',
|
||||
'ALTER TABLE yz_tenant_employees ADD COLUMN department_id INT DEFAULT NULL COMMENT ''部门ID'' AFTER email;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
-- 检查并添加 position_id 字段
|
||||
SET @columnname = 'position_id';
|
||||
SET @preparedStatement = (SELECT IF(
|
||||
(
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
(TABLE_SCHEMA = @dbname)
|
||||
AND (TABLE_NAME = @tablename)
|
||||
AND (COLUMN_NAME = @columnname)
|
||||
) > 0,
|
||||
'SELECT "Column position_id already exists in yz_tenant_employees" AS "";',
|
||||
'ALTER TABLE yz_tenant_employees ADD COLUMN position_id INT DEFAULT NULL COMMENT ''职位ID'' AFTER department_id;'
|
||||
));
|
||||
PREPARE alterIfNotExists FROM @preparedStatement;
|
||||
EXECUTE alterIfNotExists;
|
||||
DEALLOCATE PREPARE alterIfNotExists;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
-- 删除现有表并重新创建
|
||||
-- 注意:这会删除所有数据,请谨慎使用
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- 删除现有表(按依赖关系顺序)
|
||||
DROP TABLE IF EXISTS yz_user_role_relations;
|
||||
DROP TABLE IF EXISTS yz_user_roles;
|
||||
DROP TABLE IF EXISTS yz_files;
|
||||
DROP TABLE IF EXISTS yz_program_info;
|
||||
DROP TABLE IF EXISTS yz_program_category;
|
||||
DROP TABLE IF EXISTS yz_menus;
|
||||
DROP TABLE IF EXISTS yz_users;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 现在可以重新运行 init_database.sql
|
||||
SELECT 'Tables dropped successfully. You can now run init_database.sql' as message;
|
||||
@@ -1,336 +0,0 @@
|
||||
-- 云泽系统数据库初始化脚本
|
||||
-- 创建时间: 2024
|
||||
-- 描述: 包含所有系统表的创建和初始化数据
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- =============================================
|
||||
-- 1. 用户相关表
|
||||
-- =============================================
|
||||
|
||||
-- 创建用户表
|
||||
CREATE TABLE yz_users (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
|
||||
username VARCHAR(50) NOT NULL COMMENT '用户名',
|
||||
password VARCHAR(255) NOT NULL COMMENT '加密后的密码',
|
||||
salt VARCHAR(100) NOT NULL COMMENT '密码盐值',
|
||||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱地址',
|
||||
avatar VARCHAR(500) DEFAULT NULL COMMENT '头像URL',
|
||||
nickname VARCHAR(50) DEFAULT NULL COMMENT '昵称',
|
||||
role VARCHAR(20) DEFAULT 'user' COMMENT '用户角色:admin-管理员,user-普通用户',
|
||||
status TINYINT DEFAULT 1 COMMENT '用户状态:0-禁用,1-启用',
|
||||
last_login_time DATETIME DEFAULT NULL COMMENT '最后登录时间',
|
||||
last_login_ip VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP',
|
||||
login_count INT DEFAULT 0 COMMENT '登录次数',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
UNIQUE KEY uk_username (username),
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_role (role),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- =============================================
|
||||
-- 2. 菜单相关表
|
||||
-- =============================================
|
||||
|
||||
-- 创建菜单表(增强版,包含完整父子级别参数)
|
||||
CREATE TABLE yz_menus (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '菜单ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '菜单名称',
|
||||
path VARCHAR(255) NOT NULL COMMENT '菜单路径',
|
||||
parent_id INT DEFAULT 0 COMMENT '父菜单ID,0表示顶级菜单',
|
||||
icon VARCHAR(100) DEFAULT NULL COMMENT '菜单图标',
|
||||
`order` INT DEFAULT 0 COMMENT '排序序号',
|
||||
`status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
|
||||
component_path VARCHAR(500) DEFAULT NULL COMMENT '组件路径',
|
||||
is_external TINYINT DEFAULT 0 COMMENT '是否外部链接:0-内部路由,1-外部链接',
|
||||
external_url VARCHAR(1000) DEFAULT NULL COMMENT '外部链接地址',
|
||||
menu_type TINYINT DEFAULT 1 COMMENT '菜单类型:1-普通菜单,2-分组菜单,3-按钮菜单',
|
||||
permission VARCHAR(200) DEFAULT NULL COMMENT '权限标识',
|
||||
description VARCHAR(500) DEFAULT NULL COMMENT '菜单描述',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(100) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(100) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_parent_id (parent_id),
|
||||
INDEX idx_status (`status`),
|
||||
INDEX idx_order (`order`),
|
||||
INDEX idx_menu_type (menu_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表(增强版)';
|
||||
|
||||
-- =============================================
|
||||
-- 3. 程序管理相关表
|
||||
-- =============================================
|
||||
|
||||
-- 创建程序分类表
|
||||
CREATE TABLE yz_program_category (
|
||||
category_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '分类ID',
|
||||
category_name VARCHAR(100) NOT NULL COMMENT '分类名称',
|
||||
category_desc VARCHAR(500) DEFAULT NULL COMMENT '分类描述',
|
||||
parent_id INT DEFAULT 0 COMMENT '父分类ID,0表示顶级分类',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号,用于展示顺序',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_parent_id (parent_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='程序分类表';
|
||||
|
||||
-- 创建程序信息表
|
||||
CREATE TABLE yz_program_info (
|
||||
program_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '程序ID',
|
||||
category_id INT NOT NULL COMMENT '所属分类ID',
|
||||
program_name VARCHAR(200) NOT NULL COMMENT '程序名称',
|
||||
program_desc TEXT COMMENT '程序描述',
|
||||
jump_url VARCHAR(1000) NOT NULL COMMENT '跳转地址',
|
||||
icon_url VARCHAR(1000) DEFAULT NULL COMMENT '程序图标地址',
|
||||
version VARCHAR(50) DEFAULT NULL COMMENT '程序版本',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号,用于展示顺序',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_category_id (category_id),
|
||||
INDEX idx_status (status),
|
||||
CONSTRAINT yz_fk_program_category FOREIGN KEY (category_id) REFERENCES yz_program_category (category_id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='程序信息表';
|
||||
|
||||
-- =============================================
|
||||
-- 4. 租户管理相关表
|
||||
-- =============================================
|
||||
|
||||
-- 创建租户表
|
||||
CREATE TABLE yz_tenants (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '租户ID',
|
||||
|
||||
-- 基本信息
|
||||
name VARCHAR(100) NOT NULL COMMENT '租户名称',
|
||||
code VARCHAR(50) NOT NULL COMMENT '租户编码(唯一)',
|
||||
owner VARCHAR(50) NOT NULL COMMENT '负责人',
|
||||
phone VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
|
||||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱地址',
|
||||
|
||||
-- 状态信息
|
||||
status VARCHAR(20) DEFAULT 'enabled' COMMENT '状态:enabled-启用,disabled-禁用',
|
||||
audit_status VARCHAR(20) DEFAULT 'pending' COMMENT '审核状态:pending-待审核,approved-已通过,rejected-已拒绝',
|
||||
|
||||
-- 审核信息
|
||||
audit_comment TEXT DEFAULT NULL COMMENT '审核意见',
|
||||
audit_by VARCHAR(50) DEFAULT NULL COMMENT '审核人',
|
||||
audit_time DATETIME DEFAULT NULL COMMENT '审核时间',
|
||||
|
||||
-- 其他信息
|
||||
remark TEXT DEFAULT NULL COMMENT '备注',
|
||||
|
||||
-- 时间戳
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
UNIQUE KEY uk_code (code),
|
||||
INDEX idx_name (name),
|
||||
INDEX idx_owner (owner),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_audit_status (audit_status),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';
|
||||
|
||||
-- =============================================
|
||||
-- 5. 文件管理相关表
|
||||
-- =============================================
|
||||
|
||||
-- 创建文件表
|
||||
CREATE TABLE yz_files (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '文件ID',
|
||||
tenant_id VARCHAR(64) NOT NULL COMMENT '租户ID',
|
||||
user_id INT NOT NULL DEFAULT 0 COMMENT '用户ID',
|
||||
|
||||
-- 文件基础信息
|
||||
file_name VARCHAR(255) NOT NULL COMMENT '文件名称',
|
||||
original_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
|
||||
file_path VARCHAR(500) NOT NULL COMMENT '文件存储路径',
|
||||
file_url VARCHAR(500) COMMENT '文件访问URL',
|
||||
file_size BIGINT NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
|
||||
file_type VARCHAR(50) NOT NULL COMMENT '文件类型',
|
||||
file_ext VARCHAR(20) NOT NULL COMMENT '文件扩展名',
|
||||
|
||||
-- 分类信息
|
||||
category VARCHAR(100) NOT NULL COMMENT '文件分类',
|
||||
sub_category VARCHAR(100) COMMENT '子分类',
|
||||
|
||||
-- 状态信息
|
||||
status TINYINT DEFAULT 1 COMMENT '状态(1:正常, 0:删除)',
|
||||
is_public TINYINT DEFAULT 0 COMMENT '是否公开(1:是, 0:否)',
|
||||
|
||||
-- 上传信息
|
||||
upload_by VARCHAR(100) NOT NULL COMMENT '上传人',
|
||||
upload_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant (tenant_id),
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_category (category),
|
||||
INDEX idx_upload_time (upload_time),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
|
||||
|
||||
-- =============================================
|
||||
-- 6. 插入初始数据
|
||||
-- =============================================
|
||||
|
||||
-- 插入默认租户数据
|
||||
INSERT INTO yz_tenants (name, code, owner, phone, email, status, audit_status, audit_comment, audit_by, audit_time, remark, create_by) VALUES
|
||||
('默认租户', 'default', 'admin', '13800138000', 'admin@yunzer.com', 'enabled', 'approved', '系统默认租户,自动通过审核', 'system', NOW(), '系统默认租户,用于初始化数据', 'system'),
|
||||
('示例租户A', 'demo-a', '张三', '13900139000', 'zhangsan@demo.com', 'enabled', 'approved', '资料完整,审核通过', 'admin', DATE_SUB(NOW(), INTERVAL 30 DAY), '演示租户A,用于展示功能', 'admin'),
|
||||
('示例租户B', 'demo-b', '李四', '13700137000', 'lisi@demo.com', 'enabled', 'pending', NULL, NULL, NULL, '待审核租户,资料已提交', 'admin');
|
||||
|
||||
-- 插入默认管理员用户
|
||||
-- 注意:实际使用时需要生成真实的加密密码和盐值
|
||||
INSERT INTO yz_users (username, password, salt, email, nickname, role, status, create_by) VALUES
|
||||
('admin', 'encrypted_password_here', 'salt_here', 'admin@yunzer.com', '超级管理员', 'admin', 1, 'system'),
|
||||
('test', 'encrypted_password_here', 'salt_here', 'test@yunzer.com', '测试用户', 'user', 1, 'system');
|
||||
|
||||
-- 插入默认菜单数据
|
||||
INSERT INTO yz_menus (name, path, parent_id, icon, `order`, status, component_path, menu_type, description) VALUES
|
||||
('仪表盘', '/dashboard', 0, 'fa-solid fa-gauge', 1, 1, '@/views/dashboard/index.vue', 1, '系统仪表盘,展示关键指标'),
|
||||
('系统管理', '/system', 0, 'fa-solid fa-screwdriver-wrench', 4, 1, null, 2, '系统管理功能模块'),
|
||||
('系统设置', '/settings', 0, 'fa-solid fa-gear', 99, 1, '@/views/settings/index.vue', 1, '系统参数设置'),
|
||||
('应用管理', '/apps', 0, 'fa-solid fa-gear', 4, 1, null, 2, '应用管理功能模块'),
|
||||
('文件管理', '/system/files', 2, 'fa-solid fa-folder', 3, 1, '@/views/system/files/index.vue', 1, '文件管理系统'),
|
||||
('租户管理', '/system/tenant', 2, 'fas fa-user-friends', 2, 1, '@/views/system/tenant/index.vue', 1, '租户管理'),
|
||||
('用户管理', '/system/users', 2, 'fa-solid fa-user', 1, 1, '@/views/system/users/index.vue', 1, '用户信息管理'),
|
||||
('角色管理', '/system/roles', 2, 'fa-solid fa-user-tag', 2, 1, '@/views/system/roles/index.vue', 1, '角色权限管理'),
|
||||
('权限管理', '/system/permissions', 2, 'fa-solid fa-key', 2, 1, '@/views/system/permissions/index.vue', 1, '权限管理'),
|
||||
('菜单管理', '/system/menus', 2, 'fa-solid fa-bars-progress', 2, 1, '@/views/system/menus/manager.vue', 1, '菜单权限管理'),
|
||||
('程序管理', '/system/programs', 2, 'fa-solid fa-grip', 3, 1, '@/views/system/programs/index.vue', 1, '程序功能管理'),
|
||||
('知识库', '/apps/knowledge', 4, 'fa-solid fa-book', 1, 1, '@/views/apps/knowledge/index.vue', 1, '知识库管理'),
|
||||
('编辑', '/apps/knowledge/edit', 11, '', 1, 1, '@/views/apps/knowledge/components/edit.vue', 1, '知识库编辑'),
|
||||
('详情', '/apps/knowledge/detail', 11, '', 1, 1, '@/views/apps/knowledge/components/detail.vue', 1, '知识库详情');
|
||||
|
||||
-- =============================================
|
||||
-- 4. 知识库相关表
|
||||
-- =============================================
|
||||
|
||||
-- 创建知识库分类表
|
||||
CREATE TABLE IF NOT EXISTS yz_knowledge_category (
|
||||
category_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '分类ID',
|
||||
category_name VARCHAR(100) NOT NULL COMMENT '分类名称',
|
||||
category_desc VARCHAR(500) DEFAULT NULL COMMENT '分类描述',
|
||||
parent_id INT DEFAULT 0 COMMENT '父分类ID,0表示顶级分类',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
INDEX idx_parent_id (parent_id),
|
||||
INDEX idx_sort_order (sort_order)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库分类表';
|
||||
|
||||
-- 创建知识库标签表
|
||||
CREATE TABLE IF NOT EXISTS yz_knowledge_tags (
|
||||
tag_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '标签ID',
|
||||
tag_name VARCHAR(50) NOT NULL COMMENT '标签名称',
|
||||
tag_color VARCHAR(20) DEFAULT NULL COMMENT '标签颜色',
|
||||
usage_count INT DEFAULT 0 COMMENT '使用次数',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
UNIQUE KEY uk_tag_name (tag_name),
|
||||
INDEX idx_usage_count (usage_count)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库标签表';
|
||||
|
||||
-- 创建知识库内容表
|
||||
CREATE TABLE IF NOT EXISTS yz_knowledge (
|
||||
knowledge_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '知识ID',
|
||||
title VARCHAR(200) NOT NULL COMMENT '标题',
|
||||
category_id INT DEFAULT NULL COMMENT '分类ID',
|
||||
tags TEXT COMMENT '标签JSON数组,存储标签名称',
|
||||
author VARCHAR(50) NOT NULL COMMENT '作者',
|
||||
content LONGTEXT COMMENT '正文内容(富文本)',
|
||||
summary VARCHAR(500) DEFAULT NULL COMMENT '摘要',
|
||||
cover_url VARCHAR(500) DEFAULT NULL COMMENT '封面图片URL',
|
||||
status TINYINT DEFAULT 0 COMMENT '状态:0-草稿,1-已发布,2-已归档',
|
||||
view_count INT DEFAULT 0 COMMENT '查看次数',
|
||||
like_count INT DEFAULT 0 COMMENT '点赞数',
|
||||
is_recommend TINYINT DEFAULT 0 COMMENT '是否推荐:0-否,1-是',
|
||||
is_top TINYINT DEFAULT 0 COMMENT '是否置顶:0-否,1-是',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
INDEX idx_category_id (category_id),
|
||||
INDEX idx_author (author),
|
||||
INDEX idx_title (title),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_create_time (create_time),
|
||||
INDEX idx_view_count (view_count),
|
||||
INDEX idx_is_recommend (is_recommend),
|
||||
INDEX idx_is_top (is_top)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库内容表';
|
||||
|
||||
-- 创建知识库收藏表
|
||||
CREATE TABLE IF NOT EXISTS yz_knowledge_favorites (
|
||||
favorite_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '收藏ID',
|
||||
knowledge_id INT NOT NULL COMMENT '知识ID',
|
||||
user_id INT NOT NULL COMMENT '用户ID',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
UNIQUE KEY uk_knowledge_user (knowledge_id, user_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
CONSTRAINT yz_fk_fav_knowledge FOREIGN KEY (knowledge_id) REFERENCES yz_knowledge (knowledge_id) ON DELETE CASCADE,
|
||||
CONSTRAINT yz_fk_fav_user FOREIGN KEY (user_id) REFERENCES yz_users (id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库收藏表';
|
||||
|
||||
-- 插入默认知识库分类
|
||||
INSERT INTO yz_knowledge_category (category_name, category_desc, parent_id, sort_order) VALUES
|
||||
('技术文档', '技术相关的文档资料', 0, 1),
|
||||
('产品手册', '产品使用手册和说明', 0, 2),
|
||||
('用户指南', '用户操作指南和教程', 0, 3),
|
||||
('常见问题', '常见问题解答', 0, 4),
|
||||
('API文档', 'API接口文档', 0, 5),
|
||||
('Vue', 'Vue框架相关', 1, 101),
|
||||
('React', 'React框架相关', 1, 102),
|
||||
('Go', 'Go语言相关', 1, 103);
|
||||
|
||||
-- 插入默认知识库标签
|
||||
INSERT INTO yz_knowledge_tags (tag_name, tag_color, usage_count) VALUES
|
||||
('Vue', '#4CAF50', 0),
|
||||
('React', '#42A5F5', 0),
|
||||
('TypeScript', '#3178C6', 0),
|
||||
('Element Plus', '#409EFF', 0),
|
||||
('Vue Router', '#4FC08D', 0),
|
||||
('Pinia', '#FFD54F', 0),
|
||||
('Go', '#00ADD8', 0),
|
||||
('Python', '#3776AB', 0);
|
||||
|
||||
-- 插入默认程序分类
|
||||
INSERT INTO yz_program_category (category_name, category_desc, parent_id, sort_order) VALUES
|
||||
('办公软件', '办公相关程序', 0, 1),
|
||||
('开发工具', '开发相关工具', 0, 2),
|
||||
('系统工具', '系统管理工具', 0, 3);
|
||||
|
||||
-- 插入默认程序信息
|
||||
INSERT INTO yz_program_info (category_id, program_name, program_desc, jump_url, icon_url, version, status, sort_order) VALUES
|
||||
(1, '文档编辑器', '在线文档编辑工具', '/editor', '/icons/editor.png', '1.0.0', 1, 1),
|
||||
(2, '代码编辑器', '在线代码编辑工具', '/code', '/icons/code.png', '1.0.0', 1, 1),
|
||||
(3, '系统监控', '系统状态监控工具', '/monitor', '/icons/monitor.png', '1.0.0', 1, 1);
|
||||
|
||||
-- 恢复外键检查
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- 完成初始化
|
||||
SELECT 'Database initialization completed successfully!' as message;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
-- =============================================
|
||||
-- 角色权限迁移脚本(简化版,不使用存储过程)
|
||||
-- 将 yz_role_menus 表中的权限数据迁移到 yz_roles 表的 menu_ids 字段(JSON数组)
|
||||
-- =============================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤1: 在 yz_roles 表中添加 menu_ids 字段(JSON类型存储菜单ID数组)
|
||||
-- =============================================
|
||||
|
||||
-- 检查字段是否已存在,如果不存在则添加
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.columns
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_roles'
|
||||
AND column_name = 'menu_ids');
|
||||
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'ALTER TABLE yz_roles ADD COLUMN menu_ids JSON NULL COMMENT ''菜单权限ID数组,JSON格式存储'' AFTER description',
|
||||
'SELECT ''字段 menu_ids 已存在,跳过添加'' AS message');
|
||||
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤2: 从 yz_role_menus 表迁移数据到 yz_roles.menu_ids
|
||||
-- =============================================
|
||||
|
||||
-- 检查 yz_role_menus 表是否存在
|
||||
SET @table_exists := (SELECT COUNT(*) FROM information_schema.tables
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_role_menus');
|
||||
|
||||
-- 如果表存在,执行迁移
|
||||
-- 注意:需要分步执行,因为PREPARE不能执行多语句
|
||||
|
||||
-- 2.1 创建临时表存储每个角色的菜单ID数组
|
||||
-- 使用 GROUP_CONCAT 和 CONCAT 来构建JSON数组(兼容性更好)
|
||||
-- 处理 NULL 情况:如果 GROUP_CONCAT 返回 NULL,则使用空数组 '[]'
|
||||
SET @sqlstmt := IF(@table_exists > 0,
|
||||
'CREATE TEMPORARY TABLE temp_role_menu_ids AS
|
||||
SELECT
|
||||
role_id,
|
||||
IFNULL(CONCAT(''['', GROUP_CONCAT(menu_id ORDER BY menu_id SEPARATOR '',''), '']''), ''[]'') as menu_ids_json
|
||||
FROM yz_role_menus
|
||||
GROUP BY role_id',
|
||||
'SELECT ''表 yz_role_menus 不存在,跳过数据迁移'' AS message');
|
||||
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 2.2 更新 yz_roles 表的 menu_ids 字段
|
||||
-- 将字符串转换为 JSON 类型
|
||||
SET @sqlstmt := IF(@table_exists > 0,
|
||||
'UPDATE yz_roles r
|
||||
INNER JOIN temp_role_menu_ids t ON r.role_id = t.role_id
|
||||
SET r.menu_ids = CAST(t.menu_ids_json AS JSON)',
|
||||
'SELECT ''跳过更新'' AS message');
|
||||
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 2.3 删除临时表
|
||||
SET @sqlstmt := IF(@table_exists > 0,
|
||||
'DROP TEMPORARY TABLE IF EXISTS temp_role_menu_ids',
|
||||
'SELECT ''跳过删除临时表'' AS message');
|
||||
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 2.4 对于没有权限的角色,确保设置为空数组(如果还没有设置)
|
||||
-- 使用 CAST 将字符串转换为 JSON 类型
|
||||
UPDATE yz_roles
|
||||
SET menu_ids = CAST('[]' AS JSON)
|
||||
WHERE menu_ids IS NULL;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤3: 验证迁移结果
|
||||
-- =============================================
|
||||
|
||||
SELECT
|
||||
r.role_id,
|
||||
r.role_name,
|
||||
r.menu_ids,
|
||||
JSON_LENGTH(COALESCE(r.menu_ids, CAST('[]' AS JSON))) as menu_count,
|
||||
(SELECT COUNT(*) FROM yz_role_menus WHERE role_id = r.role_id) as old_count
|
||||
FROM yz_roles r
|
||||
WHERE r.delete_time IS NULL
|
||||
ORDER BY r.role_id;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤4: 备份旧表(可选,建议先备份)
|
||||
-- =============================================
|
||||
|
||||
-- 检查 yz_role_menus 表是否存在
|
||||
SET @table_exists := (SELECT COUNT(*) FROM information_schema.tables
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_role_menus');
|
||||
|
||||
-- 检查备份表是否已存在
|
||||
SET @backup_exists := (SELECT COUNT(*) FROM information_schema.tables
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_role_menus_backup');
|
||||
|
||||
-- 如果原表存在且备份表不存在,则创建备份
|
||||
SET @sqlstmt := IF(@table_exists > 0 AND @backup_exists = 0,
|
||||
'CREATE TABLE yz_role_menus_backup AS SELECT * FROM yz_role_menus',
|
||||
IF(@backup_exists > 0,
|
||||
'SELECT ''备份表 yz_role_menus_backup 已存在,跳过备份'' AS message',
|
||||
'SELECT ''表 yz_role_menus 不存在,无需备份'' AS message'));
|
||||
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================
|
||||
-- 注意:迁移完成后,需要确认数据正确,然后可以删除 yz_role_menus 表
|
||||
-- 删除命令:DROP TABLE IF EXISTS yz_role_menus;
|
||||
-- =============================================
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
-- =============================================
|
||||
-- 角色权限迁移脚本
|
||||
-- 将 yz_role_menus 表中的权限数据迁移到 yz_roles 表的 menu_ids 字段(JSON数组)
|
||||
-- 执行时间: 2025
|
||||
-- =============================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤1: 在 yz_roles 表中添加 menu_ids 字段(JSON类型存储菜单ID数组)
|
||||
-- =============================================
|
||||
|
||||
-- 检查字段是否已存在
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.columns
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_roles'
|
||||
AND column_name = 'menu_ids');
|
||||
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'ALTER TABLE yz_roles ADD COLUMN menu_ids JSON NULL COMMENT "菜单权限ID数组,JSON格式存储" AFTER description',
|
||||
'SELECT "字段 menu_ids 已存在" AS message');
|
||||
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤2: 从 yz_role_menus 表迁移数据到 yz_roles.menu_ids
|
||||
-- =============================================
|
||||
|
||||
-- 使用临时存储过程迁移数据
|
||||
DELIMITER $$
|
||||
|
||||
DROP PROCEDURE IF EXISTS migrate_role_permissions$$
|
||||
|
||||
CREATE PROCEDURE migrate_role_permissions()
|
||||
BEGIN
|
||||
DECLARE done INT DEFAULT FALSE;
|
||||
DECLARE v_role_id INT;
|
||||
DECLARE v_menu_ids JSON;
|
||||
DECLARE cur CURSOR FOR
|
||||
SELECT role_id, JSON_ARRAYAGG(menu_id ORDER BY menu_id) as menu_ids
|
||||
FROM yz_role_menus
|
||||
GROUP BY role_id;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
|
||||
OPEN cur;
|
||||
|
||||
read_loop: LOOP
|
||||
FETCH cur INTO v_role_id, v_menu_ids;
|
||||
IF done THEN
|
||||
LEAVE read_loop;
|
||||
END IF;
|
||||
|
||||
-- 更新角色表的 menu_ids 字段
|
||||
UPDATE yz_roles
|
||||
SET menu_ids = v_menu_ids
|
||||
WHERE role_id = v_role_id;
|
||||
|
||||
END LOOP;
|
||||
|
||||
CLOSE cur;
|
||||
|
||||
-- 对于没有权限的角色,设置为空数组
|
||||
UPDATE yz_roles
|
||||
SET menu_ids = JSON_ARRAY()
|
||||
WHERE menu_ids IS NULL;
|
||||
|
||||
SELECT '数据迁移完成' AS message;
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- 执行迁移
|
||||
CALL migrate_role_permissions();
|
||||
|
||||
-- 删除临时存储过程
|
||||
DROP PROCEDURE IF EXISTS migrate_role_permissions;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤3: 验证迁移结果
|
||||
-- =============================================
|
||||
|
||||
-- 查看迁移后的数据
|
||||
SELECT
|
||||
r.role_id,
|
||||
r.role_name,
|
||||
r.menu_ids,
|
||||
JSON_LENGTH(r.menu_ids) as menu_count,
|
||||
(SELECT COUNT(*) FROM yz_role_menus WHERE role_id = r.role_id) as old_count
|
||||
FROM yz_roles r
|
||||
WHERE r.delete_time IS NULL
|
||||
ORDER BY r.role_id;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤4: 备份旧表(可选,建议先备份)
|
||||
-- =============================================
|
||||
|
||||
-- 创建备份表
|
||||
CREATE TABLE IF NOT EXISTS yz_role_menus_backup AS
|
||||
SELECT * FROM yz_role_menus;
|
||||
|
||||
SELECT '备份表 yz_role_menus_backup 创建完成' AS message;
|
||||
|
||||
-- =============================================
|
||||
-- 注意:迁移完成后,需要确认数据正确,然后可以删除 yz_role_menus 表
|
||||
-- 删除命令:DROP TABLE IF EXISTS yz_role_menus;
|
||||
-- =============================================
|
||||
|
||||
@@ -1,192 +0,0 @@
|
||||
-- 性能优化索引脚本
|
||||
-- 创建时间: 2025
|
||||
-- 描述: 为常用查询字段添加索引,提升查询性能
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =============================================
|
||||
-- 1. 部门表 (yz_tenant_departments) 索引优化
|
||||
-- =============================================
|
||||
|
||||
-- 检查并添加 tenant_id 索引(如果不存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_tenant_departments'
|
||||
AND index_name = 'idx_tenant_id');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_tenant_id ON yz_tenant_departments(tenant_id)',
|
||||
'SELECT "索引 idx_tenant_id 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 delete_time 索引(如果不存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_tenant_departments'
|
||||
AND index_name = 'idx_delete_time');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_delete_time ON yz_tenant_departments(delete_time)',
|
||||
'SELECT "索引 idx_delete_time 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加复合索引 (tenant_id, delete_time) 用于常用查询
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_tenant_departments'
|
||||
AND index_name = 'idx_tenant_delete');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_tenant_delete ON yz_tenant_departments(tenant_id, delete_time)',
|
||||
'SELECT "索引 idx_tenant_delete 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 parent_id 索引(用于树形结构查询)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_tenant_departments'
|
||||
AND index_name = 'idx_parent_id');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_parent_id ON yz_tenant_departments(parent_id)',
|
||||
'SELECT "索引 idx_parent_id 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================
|
||||
-- 2. 职位表 (yz_tenant_positions) 索引优化
|
||||
-- =============================================
|
||||
|
||||
-- 检查并添加 tenant_id 索引(如果不存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_tenant_positions'
|
||||
AND index_name = 'idx_tenant_id');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_tenant_id ON yz_tenant_positions(tenant_id)',
|
||||
'SELECT "索引 idx_tenant_id 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 delete_time 索引(如果不存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_tenant_positions'
|
||||
AND index_name = 'idx_delete_time');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_delete_time ON yz_tenant_positions(delete_time)',
|
||||
'SELECT "索引 idx_delete_time 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 department_id 索引(用于按部门查询职位)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_tenant_positions'
|
||||
AND index_name = 'idx_department_id');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_department_id ON yz_tenant_positions(department_id)',
|
||||
'SELECT "索引 idx_department_id 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加复合索引 (department_id, delete_time, status) 用于常用查询
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_tenant_positions'
|
||||
AND index_name = 'idx_dept_delete_status');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_dept_delete_status ON yz_tenant_positions(department_id, delete_time, status)',
|
||||
'SELECT "索引 idx_dept_delete_status 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================
|
||||
-- 3. 角色表 (yz_roles) 索引优化
|
||||
-- =============================================
|
||||
|
||||
-- 检查并添加 tenant_id 索引(如果不存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_roles'
|
||||
AND index_name = 'idx_tenant_id');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_tenant_id ON yz_roles(tenant_id)',
|
||||
'SELECT "索引 idx_tenant_id 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 delete_time 索引(如果不存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_roles'
|
||||
AND index_name = 'idx_delete_time');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_delete_time ON yz_roles(delete_time)',
|
||||
'SELECT "索引 idx_delete_time 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- =============================================
|
||||
-- 4. 员工表 (yz_employees) 索引优化
|
||||
-- =============================================
|
||||
|
||||
-- 检查并添加 tenant_id 索引(如果不存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_employees'
|
||||
AND index_name = 'idx_tenant_id');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_tenant_id ON yz_employees(tenant_id)',
|
||||
'SELECT "索引 idx_tenant_id 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 delete_time 索引(如果不存在)
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_employees'
|
||||
AND index_name = 'idx_delete_time');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_delete_time ON yz_employees(delete_time)',
|
||||
'SELECT "索引 idx_delete_time 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 department_id 索引
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_employees'
|
||||
AND index_name = 'idx_department_id');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_department_id ON yz_employees(department_id)',
|
||||
'SELECT "索引 idx_department_id 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 检查并添加 position_id 索引
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.statistics
|
||||
WHERE table_schema = DATABASE()
|
||||
AND table_name = 'yz_employees'
|
||||
AND index_name = 'idx_position_id');
|
||||
SET @sqlstmt := IF(@exist = 0,
|
||||
'CREATE INDEX idx_position_id ON yz_employees(position_id)',
|
||||
'SELECT "索引 idx_position_id 已存在" AS message');
|
||||
PREPARE stmt FROM @sqlstmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT '性能优化索引创建完成!' AS message;
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
-- 性能优化索引脚本(简化版)
|
||||
-- 创建时间: 2025
|
||||
-- 描述: 为常用查询字段添加索引,提升查询性能
|
||||
-- 注意: 如果索引已存在会报错,可以忽略或手动删除重复的索引
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =============================================
|
||||
-- 1. 部门表 (yz_tenant_departments) 索引优化
|
||||
-- =============================================
|
||||
|
||||
-- 添加 tenant_id 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_tenant_id ON yz_tenant_departments(tenant_id);
|
||||
|
||||
-- 添加 delete_time 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_delete_time ON yz_tenant_departments(delete_time);
|
||||
|
||||
-- 添加复合索引 (tenant_id, delete_time) 用于常用查询
|
||||
CREATE INDEX IF NOT EXISTS idx_tenant_delete ON yz_tenant_departments(tenant_id, delete_time);
|
||||
|
||||
-- 添加 parent_id 索引(用于树形结构查询)
|
||||
CREATE INDEX IF NOT EXISTS idx_parent_id ON yz_tenant_departments(parent_id);
|
||||
|
||||
-- =============================================
|
||||
-- 2. 职位表 (yz_tenant_positions) 索引优化
|
||||
-- =============================================
|
||||
|
||||
-- 添加 tenant_id 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_tenant_id ON yz_tenant_positions(tenant_id);
|
||||
|
||||
-- 添加 delete_time 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_delete_time ON yz_tenant_positions(delete_time);
|
||||
|
||||
-- 添加 department_id 索引(用于按部门查询职位)
|
||||
CREATE INDEX IF NOT EXISTS idx_department_id ON yz_tenant_positions(department_id);
|
||||
|
||||
-- 添加复合索引 (department_id, delete_time, status) 用于常用查询
|
||||
CREATE INDEX IF NOT EXISTS idx_dept_delete_status ON yz_tenant_positions(department_id, delete_time, status);
|
||||
|
||||
-- =============================================
|
||||
-- 3. 角色表 (yz_roles) 索引优化
|
||||
-- =============================================
|
||||
|
||||
-- 添加 tenant_id 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_tenant_id ON yz_roles(tenant_id);
|
||||
|
||||
-- 添加 delete_time 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_delete_time ON yz_roles(delete_time);
|
||||
|
||||
-- =============================================
|
||||
-- 4. 员工表 (yz_employees) 索引优化
|
||||
-- =============================================
|
||||
|
||||
-- 添加 tenant_id 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_tenant_id ON yz_employees(tenant_id);
|
||||
|
||||
-- 添加 delete_time 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_delete_time ON yz_employees(delete_time);
|
||||
|
||||
-- 添加 department_id 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_department_id ON yz_employees(department_id);
|
||||
|
||||
-- 添加 position_id 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_position_id ON yz_employees(position_id);
|
||||
|
||||
SELECT '性能优化索引创建完成!' AS message;
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
-- =============================================
|
||||
-- 角色权限回滚脚本
|
||||
-- 如果迁移出现问题,可以从备份表恢复数据
|
||||
-- =============================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤1: 从备份表恢复数据到 yz_role_menus
|
||||
-- =============================================
|
||||
|
||||
-- 如果 yz_role_menus 表被删除,先创建它
|
||||
CREATE TABLE IF NOT EXISTS yz_role_menus (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
role_id INT NOT NULL,
|
||||
menu_id INT NOT NULL,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
create_by VARCHAR(50) NULL,
|
||||
UNIQUE KEY uk_role_menu (role_id, menu_id),
|
||||
INDEX idx_role_id (role_id),
|
||||
INDEX idx_menu_id (menu_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色菜单关联表(备份恢复)';
|
||||
|
||||
-- 从备份表恢复数据
|
||||
INSERT INTO yz_role_menus (id, role_id, menu_id, create_time, create_by)
|
||||
SELECT id, role_id, menu_id, create_time, create_by
|
||||
FROM yz_role_menus_backup
|
||||
ON DUPLICATE KEY UPDATE
|
||||
menu_id = VALUES(menu_id),
|
||||
create_time = VALUES(create_time),
|
||||
create_by = VALUES(create_by);
|
||||
|
||||
SELECT '数据恢复完成' AS message;
|
||||
|
||||
-- =============================================
|
||||
-- 步骤2: 如果需要移除 menu_ids 字段(可选)
|
||||
-- =============================================
|
||||
|
||||
-- 注意:如果确定要移除新字段,可以执行以下命令
|
||||
-- ALTER TABLE yz_roles DROP COLUMN menu_ids;
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
-- 创建部门表
|
||||
-- 创建时间: 2025
|
||||
-- 描述: OA系统部门管理表
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- 检查并创建租户部门表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_tenant_departments (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '部门ID',
|
||||
tenant_id INT NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '部门名称',
|
||||
code VARCHAR(50) DEFAULT NULL COMMENT '部门编码',
|
||||
parent_id INT DEFAULT 0 COMMENT '父部门ID,0表示顶级部门',
|
||||
description TEXT DEFAULT NULL COMMENT '部门描述',
|
||||
manager_id INT DEFAULT NULL COMMENT '部门经理ID',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:1-启用,0-禁用',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
delete_time DATETIME DEFAULT NULL COMMENT '删除时间(软删除)',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant_id (tenant_id),
|
||||
INDEX idx_code (code),
|
||||
INDEX idx_parent_id (parent_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_sort_order (sort_order)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户部门表';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
-- 创建员工表
|
||||
-- 创建时间: 2025
|
||||
-- 描述: OA系统员工管理表
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- 检查并创建租户员工表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_tenant_employees (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工ID',
|
||||
tenant_id INT NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
employee_no VARCHAR(50) NOT NULL COMMENT '工号',
|
||||
name VARCHAR(50) NOT NULL COMMENT '姓名',
|
||||
phone VARCHAR(20) DEFAULT NULL COMMENT '手机号',
|
||||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
|
||||
department_id INT DEFAULT NULL COMMENT '部门ID',
|
||||
position_id INT DEFAULT NULL COMMENT '职位ID',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:1-在职,0-离职',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
delete_time DATETIME DEFAULT NULL COMMENT '删除时间(软删除)',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant_id (tenant_id),
|
||||
INDEX idx_employee_no (employee_no),
|
||||
INDEX idx_name (name),
|
||||
INDEX idx_department_id (department_id),
|
||||
INDEX idx_position_id (position_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户员工表';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
CREATE TABLE yz_files (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '文件ID',
|
||||
tenant_id VARCHAR(64) NOT NULL COMMENT '租户ID',
|
||||
user_id INT NOT NULL DEFAULT 0 COMMENT '用户ID',
|
||||
|
||||
-- 文件基础信息
|
||||
file_name VARCHAR(255) NOT NULL COMMENT '文件名称',
|
||||
original_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
|
||||
file_path VARCHAR(500) NOT NULL COMMENT '文件存储路径',
|
||||
file_url VARCHAR(500) COMMENT '文件访问URL',
|
||||
file_size BIGINT NOT NULL DEFAULT 0 COMMENT '文件大小(字节)',
|
||||
file_type VARCHAR(50) NOT NULL COMMENT '文件类型',
|
||||
file_ext VARCHAR(20) NOT NULL COMMENT '文件扩展名',
|
||||
|
||||
-- 分类信息
|
||||
category VARCHAR(100) NOT NULL COMMENT '文件分类',
|
||||
sub_category VARCHAR(100) COMMENT '子分类',
|
||||
|
||||
-- 状态信息
|
||||
status TINYINT DEFAULT 1 COMMENT '状态(1:正常, 0:删除)',
|
||||
is_public TINYINT DEFAULT 0 COMMENT '是否公开(1:是, 0:否)',
|
||||
|
||||
-- 上传信息
|
||||
upload_by VARCHAR(100) NOT NULL COMMENT '上传人',
|
||||
upload_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant (tenant_id),
|
||||
INDEX idx_user (user_id),
|
||||
INDEX idx_category (category),
|
||||
INDEX idx_upload_time (upload_time),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
|
||||
@@ -1,94 +0,0 @@
|
||||
-- 创建知识库分类表
|
||||
CREATE TABLE `yz_knowledge_category` (
|
||||
`category_id` INT NOT NULL AUTO_INCREMENT COMMENT '分类ID',
|
||||
`category_name` VARCHAR(100) NOT NULL COMMENT '分类名称',
|
||||
`category_desc` VARCHAR(500) DEFAULT NULL COMMENT '分类描述',
|
||||
`parent_id` INT DEFAULT 0 COMMENT '父分类ID,0表示顶级分类',
|
||||
`sort_order` INT DEFAULT 0 COMMENT '排序序号',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`category_id`),
|
||||
KEY `idx_parent_id` (`parent_id`),
|
||||
KEY `idx_sort_order` (`sort_order`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库分类表';
|
||||
|
||||
-- 创建知识库标签表
|
||||
CREATE TABLE `yz_knowledge_tags` (
|
||||
`tag_id` INT NOT NULL AUTO_INCREMENT COMMENT '标签ID',
|
||||
`tag_name` VARCHAR(50) NOT NULL COMMENT '标签名称',
|
||||
`tag_color` VARCHAR(20) DEFAULT NULL COMMENT '标签颜色',
|
||||
`usage_count` INT DEFAULT 0 COMMENT '使用次数',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`tag_id`),
|
||||
UNIQUE KEY `uk_tag_name` (`tag_name`),
|
||||
KEY `idx_usage_count` (`usage_count`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库标签表';
|
||||
|
||||
-- 创建知识库内容表
|
||||
CREATE TABLE `yz_knowledge` (
|
||||
`knowledge_id` INT NOT NULL AUTO_INCREMENT COMMENT '知识ID',
|
||||
`title` VARCHAR(200) NOT NULL COMMENT '标题',
|
||||
`category_id` INT DEFAULT NULL COMMENT '分类ID',
|
||||
`tags` TEXT COMMENT '标签JSON数组,存储标签名称',
|
||||
`author` VARCHAR(50) NOT NULL COMMENT '作者',
|
||||
`content` LONGTEXT COMMENT '正文内容(富文本)',
|
||||
`summary` VARCHAR(500) DEFAULT NULL COMMENT '摘要',
|
||||
`cover_url` VARCHAR(500) DEFAULT NULL COMMENT '封面图片URL',
|
||||
`status` TINYINT DEFAULT 0 COMMENT '状态:0-草稿,1-已发布,2-已归档',
|
||||
`view_count` INT DEFAULT 0 COMMENT '查看次数',
|
||||
`like_count` INT DEFAULT 0 COMMENT '点赞数',
|
||||
`is_recommend` TINYINT DEFAULT 0 COMMENT '是否推荐:0-否,1-是',
|
||||
`is_top` TINYINT DEFAULT 0 COMMENT '是否置顶:0-否,1-是',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`create_by` VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
`update_by` VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
PRIMARY KEY (`knowledge_id`),
|
||||
KEY `idx_category_id` (`category_id`),
|
||||
KEY `idx_author` (`author`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_create_time` (`create_time`),
|
||||
KEY `idx_view_count` (`view_count`),
|
||||
KEY `idx_is_recommend` (`is_recommend`),
|
||||
KEY `idx_is_top` (`is_top`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库内容表';
|
||||
|
||||
-- 创建知识库收藏表
|
||||
CREATE TABLE `yz_knowledge_favorites` (
|
||||
`favorite_id` INT NOT NULL AUTO_INCREMENT COMMENT '收藏ID',
|
||||
`knowledge_id` INT NOT NULL COMMENT '知识ID',
|
||||
`user_id` INT NOT NULL COMMENT '用户ID',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`favorite_id`),
|
||||
UNIQUE KEY `uk_knowledge_user` (`knowledge_id`, `user_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
CONSTRAINT `yz_fk_fav_knowledge` FOREIGN KEY (`knowledge_id`) REFERENCES `yz_knowledge` (`knowledge_id`) ON DELETE CASCADE,
|
||||
CONSTRAINT `yz_fk_fav_user` FOREIGN KEY (`user_id`) REFERENCES `yz_users` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库收藏表';
|
||||
|
||||
-- 插入默认分类
|
||||
INSERT INTO `yz_knowledge_category` (`category_name`, `category_desc`, `parent_id`, `sort_order`) VALUES
|
||||
('技术文档', '技术相关的文档资料', 0, 1),
|
||||
('产品手册', '产品使用手册和说明', 0, 2),
|
||||
('用户指南', '用户操作指南和教程', 0, 3),
|
||||
('常见问题', '常见问题解答', 0, 4),
|
||||
('API文档', 'API接口文档', 0, 5),
|
||||
('Vue', 'Vue框架相关', 1, 101),
|
||||
('React', 'React框架相关', 1, 102),
|
||||
('Go', 'Go语言相关', 1, 103);
|
||||
|
||||
-- 插入默认标签
|
||||
INSERT INTO `yz_knowledge_tags` (`tag_name`, `tag_color`, `usage_count`) VALUES
|
||||
('Vue', '#4CAF50', 0),
|
||||
('React', '#42A5F5', 0),
|
||||
('TypeScript', '#3178C6', 0),
|
||||
('Element Plus', '#409EFF', 0),
|
||||
('Vue Router', '#4FC08D', 0),
|
||||
('Pinia', '#FFD54F', 0),
|
||||
('Go', '#00ADD8', 0),
|
||||
('Python', '#3776AB', 0);
|
||||
|
||||
--插入默认知识
|
||||
INSERT INTO `yz_knowledge` (`title`, `category_id`, `tags`, `author`, `content`, `summary`, `cover_url`, `status`, `view_count`, `like_count`, `is_recommend`, `is_top`, `create_time`, `update_time`, `create_by`, `update_by`) VALUES
|
||||
('Vue', 1, 'Vue', 'admin', 'Vue is a progressive framework for building user interfaces.', 'Vue is a progressive framework for building user interfaces.', 'https://vuejs.org/images/logo.png', 1, 0, 0, 0, 0, '2021-01-01 00:00:00', '2021-01-01 00:00:00', 'admin', 'admin');
|
||||
@@ -1,42 +0,0 @@
|
||||
-- 创建菜单表(增强版,包含完整父子级别参数)
|
||||
CREATE TABLE `yz_menus` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
|
||||
`name` VARCHAR(100) NOT NULL COMMENT '菜单名称',
|
||||
`path` VARCHAR(255) NOT NULL COMMENT '菜单路径',
|
||||
`parent_id` INT DEFAULT 0 COMMENT '父菜单ID,0表示顶级菜单',
|
||||
`level` TINYINT DEFAULT 1 COMMENT '菜单层级:1-一级菜单,2-二级菜单,3-三级菜单',
|
||||
`full_path` VARCHAR(500) DEFAULT NULL COMMENT '完整路径(包含所有父级路径)',
|
||||
`is_leaf` TINYINT DEFAULT 0 COMMENT '是否叶子节点:0-非叶子节点,1-叶子节点',
|
||||
`has_children` TINYINT DEFAULT 0 COMMENT '是否有子菜单:0-无子菜单,1-有子菜单',
|
||||
`children_count` INT DEFAULT 0 COMMENT '子菜单数量',
|
||||
`icon` VARCHAR(100) DEFAULT NULL COMMENT '菜单图标',
|
||||
`order` INT DEFAULT 0 COMMENT '排序序号',
|
||||
`status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
|
||||
`component_path` VARCHAR(500) DEFAULT NULL COMMENT '组件路径',
|
||||
`is_external` TINYINT DEFAULT 0 COMMENT '是否外部链接:0-内部路由,1-外部链接',
|
||||
`external_url` VARCHAR(1000) DEFAULT NULL COMMENT '外部链接地址',
|
||||
`menu_type` TINYINT DEFAULT 1 COMMENT '菜单类型:1-普通菜单,2-分组菜单,3-按钮菜单',
|
||||
`permission` VARCHAR(200) DEFAULT NULL COMMENT '权限标识',
|
||||
`description` VARCHAR(500) DEFAULT NULL COMMENT '菜单描述',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`create_by` VARCHAR(100) DEFAULT NULL COMMENT '创建人',
|
||||
`update_by` VARCHAR(100) DEFAULT NULL COMMENT '更新人',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_parent_id` (`parent_id`),
|
||||
KEY `idx_level` (`level`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_order` (`order`),
|
||||
KEY `idx_menu_type` (`menu_type`),
|
||||
KEY `idx_full_path` (`full_path`(255))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单表(增强版)';
|
||||
|
||||
-- 插入默认菜单数据(包含完整父子级别参数)
|
||||
INSERT INTO `yz_menus` (`name`, `path`, `parent_id`, `level`, `full_path`, `is_leaf`, `has_children`, `children_count`, `icon`, `order`, `status`, `component_path`, `menu_type`, `description`) VALUES
|
||||
('仪表盘', '/dashboard', 0, 1, '/dashboard', 1, 0, 0, 'el-icon-monitor', 1, 1, '@/views/dashboard/index.vue', 1, '系统仪表盘,展示关键指标'),
|
||||
('文件管理', '/files', 0, 1, '/files', 1, 0, 0, 'el-icon-folder', 3, 1, '@/views/files/index.vue', 1, '文件管理系统'),
|
||||
('系统管理', '/system', 0, 1, '/system', 0, 1, 3, 'el-icon-setting', 4, 1, null, 2, '系统管理功能模块'),
|
||||
('用户管理', '/system/users', 4, 2, '/system/users', 1, 0, 0, 'el-icon-user', 1, 1, '@/views/system/users/index.vue', 1, '用户信息管理'),
|
||||
('菜单管理', '/system/menus', 4, 2, '/system/menus', 1, 0, 0, 'el-icon-menu', 2, 1, '@/views/system/menumanager.vue', 1, '菜单权限管理'),
|
||||
('程序管理', '/system/programs', 4, 2, '/system/programs', 1, 0, 0, 'el-icon-cpu', 3, 1, '@/views/system/programs/index.vue', 1, '程序功能管理'),
|
||||
('系统设置', '/settings', 0, 1, '/settings', 1, 0, 0, 'el-icon-setting', 99, 1, '@/views/settings/index.vue', 1, '系统参数设置');
|
||||
@@ -1,32 +0,0 @@
|
||||
-- 创建职位表
|
||||
-- 创建时间: 2025
|
||||
-- 描述: OA系统职位管理表
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- 检查并创建租户职位表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_tenant_positions (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '职位ID',
|
||||
tenant_id INT NOT NULL DEFAULT 0 COMMENT '租户ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '职位名称',
|
||||
code VARCHAR(50) DEFAULT NULL COMMENT '职位编码',
|
||||
department_id INT DEFAULT NULL COMMENT '所属部门ID',
|
||||
level INT DEFAULT 0 COMMENT '职位级别',
|
||||
description TEXT DEFAULT NULL COMMENT '职位描述',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号',
|
||||
status TINYINT DEFAULT 1 COMMENT '状态:1-启用,0-禁用',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
delete_time DATETIME DEFAULT NULL COMMENT '删除时间(软删除)',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_tenant_id (tenant_id),
|
||||
INDEX idx_code (code),
|
||||
INDEX idx_department_id (department_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_sort_order (sort_order)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户职位表';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
-- 创建程序分类表
|
||||
CREATE TABLE `yz_program_category` (
|
||||
`category_id` INT NOT NULL AUTO_INCREMENT COMMENT '分类ID',
|
||||
`category_name` VARCHAR(100) NOT NULL COMMENT '分类名称',
|
||||
`category_desc` VARCHAR(500) DEFAULT NULL COMMENT '分类描述',
|
||||
`parent_id` INT DEFAULT 0 COMMENT '父分类ID,0表示顶级分类',
|
||||
`sort_order` INT DEFAULT 0 COMMENT '排序序号,用于展示顺序',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`category_id`),
|
||||
KEY `idx_parent_id` (`parent_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='程序分类表';
|
||||
|
||||
-- 创建程序信息表
|
||||
CREATE TABLE `yz_program_info` (
|
||||
`program_id` INT NOT NULL AUTO_INCREMENT COMMENT '程序ID',
|
||||
`category_id` INT NOT NULL COMMENT '所属分类ID',
|
||||
`program_name` VARCHAR(200) NOT NULL COMMENT '程序名称',
|
||||
`program_desc` TEXT COMMENT '程序描述',
|
||||
`jump_url` VARCHAR(1000) NOT NULL COMMENT '跳转地址',
|
||||
`icon_url` VARCHAR(1000) DEFAULT NULL COMMENT '程序图标地址',
|
||||
`version` VARCHAR(50) DEFAULT NULL COMMENT '程序版本',
|
||||
`status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
|
||||
`sort_order` INT DEFAULT 0 COMMENT '排序序号,用于展示顺序',
|
||||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`program_id`),
|
||||
KEY `idx_category_id` (`category_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
CONSTRAINT `yz_fk_program_category` FOREIGN KEY (`category_id`) REFERENCES `yz_program_category` (`category_id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='程序信息表';
|
||||
@@ -1,34 +0,0 @@
|
||||
-- 创建角色表
|
||||
CREATE TABLE IF NOT EXISTS yz_roles (
|
||||
role_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '角色ID',
|
||||
tenant_id INT NOT NULL COMMENT '租户ID',
|
||||
role_code VARCHAR(50) NOT NULL COMMENT '角色代码',
|
||||
role_name VARCHAR(50) NOT NULL COMMENT '角色名称',
|
||||
description VARCHAR(500) DEFAULT NULL COMMENT '角色描述',
|
||||
status TINYINT DEFAULT 1 COMMENT '角色状态:0-禁用,1-启用',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序序号',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
delete_time DATETIME DEFAULT NULL COMMENT '删除时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
UNIQUE KEY uk_role_code (role_code),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_sort_order (sort_order),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
|
||||
-- 插入默认角色数据
|
||||
INSERT INTO yz_roles (tenant_id, role_code, role_name, description, status, sort_order, create_by, delete_time) VALUES
|
||||
(0, 'system_admin', '系统管理员', '系统超级管理员,拥有所有权限', 1, 1, 'system'),
|
||||
(0, 'admin', '管理员', '普通管理员,拥有大部分管理权限', 1, 2, 'system'),
|
||||
(0, 'user', '普通用户', '普通用户,拥有基础使用权限', 1, 3, 'system')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
tenant_id = VALUES(tenant_id),
|
||||
role_name = VALUES(role_name),
|
||||
description = VALUES(description),
|
||||
update_time = CURRENT_TIMESTAMP,
|
||||
delete_time = NULL;
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
-- 创建租户表
|
||||
-- 创建时间: 2025
|
||||
-- 描述: 云泽系统租户管理表
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- 检查并创建租户表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS yz_tenants (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '租户ID',
|
||||
|
||||
-- 基本信息
|
||||
name VARCHAR(100) NOT NULL COMMENT '租户名称',
|
||||
code VARCHAR(50) NOT NULL COMMENT '租户编码(唯一)',
|
||||
owner VARCHAR(50) NOT NULL COMMENT '负责人',
|
||||
phone VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
|
||||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱地址',
|
||||
|
||||
-- 状态信息
|
||||
status VARCHAR(20) DEFAULT 'enabled' COMMENT '状态:enabled-启用,disabled-禁用',
|
||||
audit_status VARCHAR(20) DEFAULT 'pending' COMMENT '审核状态:pending-待审核,approved-已通过,rejected-已拒绝',
|
||||
|
||||
-- 审核信息
|
||||
audit_comment TEXT DEFAULT NULL COMMENT '审核意见',
|
||||
audit_by VARCHAR(50) DEFAULT NULL COMMENT '审核人',
|
||||
audit_time DATETIME DEFAULT NULL COMMENT '审核时间',
|
||||
|
||||
-- 其他信息
|
||||
remark TEXT DEFAULT NULL COMMENT '备注',
|
||||
|
||||
-- 时间戳
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
UNIQUE KEY uk_code (code),
|
||||
INDEX idx_name (name),
|
||||
INDEX idx_owner (owner),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_audit_status (audit_status),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- =============================================
|
||||
-- 插入测试数据
|
||||
-- =============================================
|
||||
|
||||
-- 清空现有测试数据(可选,注释掉以保留现有数据)
|
||||
-- DELETE FROM yz_tenants WHERE id > 0;
|
||||
|
||||
-- 插入测试租户数据
|
||||
INSERT INTO yz_tenants (
|
||||
name,
|
||||
code,
|
||||
owner,
|
||||
phone,
|
||||
email,
|
||||
status,
|
||||
audit_status,
|
||||
audit_comment,
|
||||
audit_by,
|
||||
audit_time,
|
||||
remark,
|
||||
create_by
|
||||
) VALUES
|
||||
-- 默认租户(已通过审核)
|
||||
('默认租户', 'default', 'admin', '13800138000', 'admin@yunzer.com', 'enabled', 'approved', '系统默认租户,自动通过审核', 'system', NOW(), '系统默认租户,用于初始化数据', 'system'),
|
||||
|
||||
-- 示例租户A(已通过审核)
|
||||
('示例租户A', 'demo-a', '张三', '13900139000', 'zhangsan@demo.com', 'enabled', 'approved', '资料完整,审核通过', 'admin', DATE_SUB(NOW(), INTERVAL 30 DAY), '演示租户A,用于展示功能', 'admin'),
|
||||
|
||||
-- 示例租户B(待审核)
|
||||
('示例租户B', 'demo-b', '李四', '13700137000', 'lisi@demo.com', 'enabled', 'pending', NULL, NULL, NULL, '待审核租户,资料已提交', 'admin'),
|
||||
|
||||
-- 新申请租户C(待审核)
|
||||
('新申请租户C', 'new-tenant-c', '王五', '13600136000', 'wangwu@new.com', 'enabled', 'pending', NULL, NULL, NULL, '新申请的租户,等待审核', 'admin'),
|
||||
|
||||
-- 已拒绝租户D
|
||||
('已拒绝租户D', 'rejected-tenant', '赵六', '13500135000', 'zhaoliu@reject.com', 'disabled', 'rejected', '申请资料不完整,缺少必要信息', 'admin', DATE_SUB(NOW(), INTERVAL 10 DAY), '申请被拒绝的租户示例', 'admin'),
|
||||
|
||||
-- 企业租户E(已通过)
|
||||
('企业租户E', 'enterprise-e', '陈七', '13400134000', 'chenqi@enterprise.com', 'enabled', 'approved', '企业级用户,认证通过', 'admin', DATE_SUB(NOW(), INTERVAL 15 DAY), '大型企业客户租户', 'admin'),
|
||||
|
||||
-- 测试租户F(已通过)
|
||||
('测试租户F', 'test-f', '刘八', '13300133000', 'liuba@test.com', 'enabled', 'approved', '测试环境使用,已通过', 'admin', DATE_SUB(NOW(), INTERVAL 5 DAY), '测试环境租户', 'admin'),
|
||||
|
||||
-- 禁用租户G
|
||||
('禁用租户G', 'disabled-g', '周九', '13200132000', 'zhoujiu@disabled.com', 'disabled', 'approved', '已通过审核但被禁用', 'admin', DATE_SUB(NOW(), INTERVAL 20 DAY), '已禁用的租户示例', 'admin'),
|
||||
|
||||
-- 小公司租户H(待审核)
|
||||
('小公司租户H', 'small-h', '吴十', '13100131000', 'wushi@small.com', 'enabled', 'pending', NULL, NULL, NULL, '小型公司申请,等待审核', 'admin'),
|
||||
|
||||
-- 个人开发者租户I(已通过)
|
||||
('个人开发者I', 'developer-i', '郑十一', '13000130000', 'zhengshiyi@dev.com', 'enabled', 'approved', '个人开发者账户,审核通过', 'admin', DATE_SUB(NOW(), INTERVAL 8 DAY), '个人开发者租户', 'admin');
|
||||
|
||||
-- 查询验证
|
||||
SELECT 'Tenants table created and test data inserted successfully!' as message;
|
||||
SELECT COUNT(*) as total_tenants FROM yz_tenants;
|
||||
SELECT
|
||||
id,
|
||||
name,
|
||||
code,
|
||||
status,
|
||||
audit_status,
|
||||
create_time
|
||||
FROM yz_tenants
|
||||
ORDER BY id;
|
||||
@@ -1,32 +0,0 @@
|
||||
-- 创建用户表
|
||||
CREATE TABLE yz_users (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
|
||||
username VARCHAR(50) NOT NULL COMMENT '用户名',
|
||||
password VARCHAR(255) NOT NULL COMMENT '加密后的密码',
|
||||
salt VARCHAR(100) NOT NULL COMMENT '密码盐值',
|
||||
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱地址',
|
||||
avatar VARCHAR(500) DEFAULT NULL COMMENT '头像URL',
|
||||
nickname VARCHAR(50) DEFAULT NULL COMMENT '昵称',
|
||||
role VARCHAR(20) DEFAULT 'user' COMMENT '用户角色:admin-管理员,user-普通用户',
|
||||
status TINYINT DEFAULT 1 COMMENT '用户状态:0-禁用,1-启用',
|
||||
last_login_time DATETIME DEFAULT NULL COMMENT '最后登录时间',
|
||||
last_login_ip VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP',
|
||||
login_count INT DEFAULT 0 COMMENT '登录次数',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(50) DEFAULT NULL COMMENT '创建人',
|
||||
update_by VARCHAR(50) DEFAULT NULL COMMENT '更新人',
|
||||
|
||||
-- 索引
|
||||
UNIQUE KEY uk_username (username),
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_role (role),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_create_time (create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- 插入默认管理员用户
|
||||
-- 密码为 yunzer123,已使用scrypt算法加密
|
||||
INSERT INTO yz_users (username, password, salt, email, nickname, role, status, create_by) VALUES
|
||||
('admin', 'encrypted_password_here', 'salt_here', 'admin@yunzer.com', '超级管理员', 'admin', 1, 'system'),
|
||||
('test', 'encrypted_password_here', 'salt_here', 'test@yunzer.com', '测试用户', 'user', 1, 'system');
|
||||
@@ -1,99 +0,0 @@
|
||||
# 执行数据库索引优化说明
|
||||
|
||||
## 方法一:使用数据库管理工具(推荐)
|
||||
|
||||
### 使用 Navicat、DBeaver、phpMyAdmin 等工具
|
||||
|
||||
1. 连接到数据库:
|
||||
- 主机:`43.133.71.191`
|
||||
- 端口:`3308`
|
||||
- 用户名:`gotest`
|
||||
- 密码:`2nZhRdMPCNZrdzsd`
|
||||
- 数据库:`gotest`
|
||||
|
||||
2. 打开并执行以下文件之一:
|
||||
- `server/database/performance_indexes_simple.sql` (推荐,简单版本)
|
||||
- `server/database/performance_indexes.sql` (完整版本,包含存在性检查)
|
||||
|
||||
## 方法二:使用 MySQL 命令行(如果已安装)
|
||||
|
||||
### Windows PowerShell
|
||||
|
||||
```powershell
|
||||
# 方法 1: 使用 Get-Content 管道
|
||||
Get-Content server\database\performance_indexes_simple.sql | mysql -u gotest -p2nZhRdMPCNZrdzsd -h 43.133.71.191 -P 3308 gotest
|
||||
|
||||
# 方法 2: 使用 source 命令(需要先登录 MySQL)
|
||||
mysql -u gotest -p2nZhRdMPCNZrdzsd -h 43.133.71.191 -P 3308 gotest
|
||||
# 然后在 MySQL 提示符下执行:
|
||||
source server/database/performance_indexes_simple.sql
|
||||
```
|
||||
|
||||
### Windows CMD
|
||||
|
||||
```cmd
|
||||
mysql -u gotest -p2nZhRdMPCNZrdzsd -h 43.133.71.191 -P 3308 gotest < server\database\performance_indexes_simple.sql
|
||||
```
|
||||
|
||||
### Linux/Mac
|
||||
|
||||
```bash
|
||||
mysql -u gotest -p2nZhRdMPCNZrdzsd -h 43.133.71.191 -P 3308 gotest < server/database/performance_indexes_simple.sql
|
||||
```
|
||||
|
||||
## 方法三:在 Go 代码中执行(临时方案)
|
||||
|
||||
如果无法直接执行 SQL,可以在后端代码初始化时执行:
|
||||
|
||||
```go
|
||||
// 在 server/models/user.go 的 Init 函数中添加
|
||||
func Init(version string) {
|
||||
// ... 现有代码 ...
|
||||
|
||||
// 执行索引优化(可选,建议直接执行 SQL 文件)
|
||||
// 这里可以添加执行索引创建的代码
|
||||
}
|
||||
```
|
||||
|
||||
## 验证索引是否创建成功
|
||||
|
||||
执行以下 SQL 查询验证索引:
|
||||
|
||||
```sql
|
||||
-- 查看部门表索引
|
||||
SHOW INDEX FROM yz_tenant_departments;
|
||||
|
||||
-- 查看职位表索引
|
||||
SHOW INDEX FROM yz_tenant_positions;
|
||||
|
||||
-- 查看角色表索引
|
||||
SHOW INDEX FROM yz_roles;
|
||||
|
||||
-- 查看员工表索引
|
||||
SHOW INDEX FROM yz_employees;
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **MySQL 版本要求**:
|
||||
- `CREATE INDEX IF NOT EXISTS` 需要 MySQL 8.0.12+
|
||||
- 如果使用较低版本,请使用 `performance_indexes.sql`(包含存在性检查)
|
||||
|
||||
2. **执行时间**:
|
||||
- 索引创建可能需要几秒到几分钟,取决于数据量
|
||||
- 创建索引期间,表会锁定(通常很快)
|
||||
|
||||
3. **索引已存在**:
|
||||
- 如果索引已存在,`CREATE INDEX IF NOT EXISTS` 会忽略
|
||||
- 如果使用 `performance_indexes.sql`,会显示"索引已存在"的消息
|
||||
|
||||
4. **性能影响**:
|
||||
- 索引创建后,查询性能会显著提升
|
||||
- 插入/更新操作可能稍慢(通常可忽略)
|
||||
|
||||
## 预期效果
|
||||
|
||||
- 查询速度提升:**50-90%**(取决于数据量)
|
||||
- 减少全表扫描
|
||||
- 优化 WHERE 和 JOIN 查询
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
# 角色权限迁移说明
|
||||
|
||||
## 概述
|
||||
将角色权限从关系表 `yz_role_menus` 迁移到 `yz_roles` 表的 JSON 数组字段 `menu_ids`。
|
||||
|
||||
## 迁移步骤
|
||||
|
||||
### 1. 执行迁移脚本
|
||||
```bash
|
||||
mysql -u gotest -p gotest < server/database/migrate_role_permissions_to_json.sql
|
||||
```
|
||||
|
||||
或者在 MySQL 客户端中执行:
|
||||
```sql
|
||||
source server/database/migrate_role_permissions_to_json.sql
|
||||
```
|
||||
|
||||
### 2. 验证迁移结果
|
||||
迁移脚本会自动:
|
||||
- 在 `yz_roles` 表中添加 `menu_ids` JSON 字段
|
||||
- 从 `yz_role_menus` 表迁移数据到 `menu_ids` 字段
|
||||
- 创建备份表 `yz_role_menus_backup`
|
||||
- 验证迁移结果
|
||||
|
||||
### 3. 确认数据正确性
|
||||
执行以下查询验证数据:
|
||||
```sql
|
||||
SELECT
|
||||
r.role_id,
|
||||
r.role_name,
|
||||
r.menu_ids,
|
||||
JSON_LENGTH(r.menu_ids) as menu_count,
|
||||
(SELECT COUNT(*) FROM yz_role_menus_backup WHERE role_id = r.role_id) as old_count
|
||||
FROM yz_roles r
|
||||
WHERE r.delete_time IS NULL
|
||||
ORDER BY r.role_id;
|
||||
```
|
||||
|
||||
### 4. 删除旧表(可选)
|
||||
确认数据迁移正确后,可以删除旧的关系表:
|
||||
```sql
|
||||
DROP TABLE IF EXISTS yz_role_menus;
|
||||
```
|
||||
|
||||
## 回滚方案
|
||||
如果迁移出现问题,可以使用回滚脚本:
|
||||
```bash
|
||||
mysql -u gotest -p gotest < server/database/rollback_role_permissions.sql
|
||||
```
|
||||
|
||||
## 代码变更
|
||||
- `server/models/role.go`: 添加 `MenuIds` 字段和 JSON 序列化/反序列化方法
|
||||
- `server/models/permission.go`: 更新 `GetRoleMenus` 和 `AssignRolePermissions` 函数
|
||||
|
||||
## 注意事项
|
||||
1. **备份数据**:迁移前请确保已备份数据库
|
||||
2. **测试环境**:建议先在测试环境执行迁移
|
||||
3. **数据一致性**:迁移后请验证权限分配功能是否正常
|
||||
4. **性能影响**:JSON 字段查询性能可能略低于关系表,但简化了数据结构
|
||||
|
||||
## JSON 字段格式
|
||||
`menu_ids` 字段存储格式为 JSON 数组,例如:
|
||||
```json
|
||||
[1, 2, 3, 4, 5]
|
||||
```
|
||||
|
||||
空数组表示该角色没有任何权限:
|
||||
```json
|
||||
[]
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user