-- =============================================
-- 星撰个人综合平台 - 基础用户系统数据库结构导出
-- 版本: M2 基础用户系统
-- 生成时间: 2024-12-30
-- 数据库: MySQL 8.0+
-- =============================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- =============================================
-- 1. 用户表 (sys_users)
-- =============================================
DROP TABLE IF EXISTS `sys_users`;
CREATE TABLE `sys_users` (
  `id` BIGINT NOT NULL COMMENT '主键，雪花ID',
  `username` VARCHAR(50) NOT NULL COMMENT '用户名，唯一',
  `email` VARCHAR(100) NOT NULL COMMENT '邮箱，唯一',
  `mobile` VARCHAR(20) NULL COMMENT '手机号',
  `password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希值',
  `avatar` VARCHAR(255) NULL COMMENT '头像URL',
  `nickname` VARCHAR(100) NULL COMMENT '昵称',
  `status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态：active-正常,inactive-未激活,locked-锁定,disabled-禁用',
  `gender` TINYINT NULL DEFAULT 0 COMMENT '性别：0-未知,1-男,2-女',
  `birthday` DATE NULL COMMENT '生日',
  `bio` VARCHAR(500) NULL COMMENT '个人简介',
  `login_count` INT NOT NULL DEFAULT 0 COMMENT '登录次数',
  `last_login_at` DATETIME NULL COMMENT '最后登录时间',
  `last_login_ip` VARCHAR(45) NULL COMMENT '最后登录IP',
  `failed_attempts` INT NOT NULL DEFAULT 0 COMMENT '连续失败尝试次数',
  `locked_until` DATETIME NULL COMMENT '锁定截止时间',
  `is_root` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否超级管理员',
  `extra` JSON NULL COMMENT '扩展信息，JSON格式',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_by` BIGINT NULL COMMENT '更新人ID',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` DATETIME NULL COMMENT '删除时间，软删除标记',
  `version` INT NOT NULL DEFAULT 1 COMMENT '乐观锁版本号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';

-- 用户表索引
CREATE UNIQUE INDEX `uk_username` ON `sys_users` (`username`, `deleted_at`);
CREATE UNIQUE INDEX `uk_email` ON `sys_users` (`email`, `deleted_at`);
CREATE INDEX `idx_mobile` ON `sys_users` (`mobile`);
CREATE INDEX `idx_status` ON `sys_users` (`status`);
CREATE INDEX `idx_created_at` ON `sys_users` (`created_at`);
CREATE INDEX `idx_deleted_at` ON `sys_users` (`deleted_at`);
CREATE INDEX `idx_is_root` ON `sys_users` (`is_root`);
CREATE INDEX `idx_last_login` ON `sys_users` (`last_login_at`);

-- =============================================
-- 2. 角色表 (sys_roles)
-- =============================================
DROP TABLE IF EXISTS `sys_roles`;
CREATE TABLE `sys_roles` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `code` VARCHAR(50) NOT NULL COMMENT '角色代码，唯一',
  `name` VARCHAR(100) NOT NULL COMMENT '角色名称',
  `description` TEXT NULL COMMENT '角色描述',
  `pid` BIGINT NULL DEFAULT 0 COMMENT '父角色ID，0表示顶级',
  `path` VARCHAR(500) NULL COMMENT '层级路径，如：/1/2/3/',
  `level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '同级排序号',
  `status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态：active-启用,inactive-禁用',
  `is_system` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否系统内置角色',
  `permissions_snapshot` JSON NULL COMMENT '权限快照，用于优化查询',
  `extra` JSON NULL COMMENT '扩展信息',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_by` BIGINT NULL COMMENT '更新人ID',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` DATETIME NULL COMMENT '删除时间',
  `version` INT NOT NULL DEFAULT 1 COMMENT '版本号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';

-- 角色表索引
CREATE UNIQUE INDEX `uk_code` ON `sys_roles` (`code`, `deleted_at`);
CREATE INDEX `idx_name` ON `sys_roles` (`name`);
CREATE INDEX `idx_pid` ON `sys_roles` (`pid`);
CREATE INDEX `idx_path` ON `sys_roles` (`path`);
CREATE INDEX `idx_status` ON `sys_roles` (`status`);
CREATE INDEX `idx_deleted_at` ON `sys_roles` (`deleted_at`);
CREATE INDEX `idx_is_system` ON `sys_roles` (`is_system`);
CREATE INDEX `idx_sort` ON `sys_roles` (`pid`, `sort_order`);

-- =============================================
-- 3. 权限表 (sys_permissions)
-- =============================================
DROP TABLE IF EXISTS `sys_permissions`;
CREATE TABLE `sys_permissions` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `code` VARCHAR(100) NOT NULL COMMENT '权限代码，唯一',
  `name` VARCHAR(100) NOT NULL COMMENT '权限名称',
  `type` VARCHAR(20) NOT NULL COMMENT '权限类型：menu-菜单,button-按钮,api-接口,data-数据',
  `resource` VARCHAR(50) NULL COMMENT '资源标识，如：user,role,post',
  `action` VARCHAR(50) NULL COMMENT '操作标识，如：read,create,update,delete',
  `description` TEXT NULL COMMENT '权限描述',
  `pid` BIGINT NULL DEFAULT 0 COMMENT '父权限ID',
  `path` VARCHAR(500) NULL COMMENT '层级路径',
  `level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态',
  `meta` JSON NULL COMMENT '元数据，如：图标、路由等',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_by` BIGINT NULL COMMENT '更新人ID',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` DATETIME NULL COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';

-- 权限表索引
CREATE UNIQUE INDEX `uk_code` ON `sys_permissions` (`code`, `deleted_at`);
CREATE INDEX `idx_type` ON `sys_permissions` (`type`);
CREATE INDEX `idx_resource_action` ON `sys_permissions` (`resource`, `action`);
CREATE INDEX `idx_pid` ON `sys_permissions` (`pid`);
CREATE INDEX `idx_deleted_at` ON `sys_permissions` (`deleted_at`);
CREATE INDEX `idx_status` ON `sys_permissions` (`status`);
CREATE INDEX `idx_sort` ON `sys_permissions` (`pid`, `sort_order`);

-- =============================================
-- 4. 组织架构表 (sys_organizations)
-- =============================================
DROP TABLE IF EXISTS `sys_organizations`;
CREATE TABLE `sys_organizations` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `code` VARCHAR(100) NOT NULL COMMENT '组织代码，唯一',
  `name` VARCHAR(200) NOT NULL COMMENT '组织名称',
  `full_name` VARCHAR(200) NULL COMMENT '组织全称',
  `description` TEXT NULL COMMENT '组织描述',
  `pid` BIGINT NULL DEFAULT 0 COMMENT '父组织ID',
  `path` VARCHAR(500) NULL COMMENT '层级路径',
  `level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
  `type` VARCHAR(20) NULL COMMENT '组织类型：company,department,team',
  `status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `leader_id` BIGINT NULL COMMENT '负责人ID',
  `address` VARCHAR(200) NULL COMMENT '地址',
  `phone` VARCHAR(50) NULL COMMENT '联系电话',
  `extra` JSON NULL COMMENT '扩展信息',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_by` BIGINT NULL COMMENT '更新人ID',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` DATETIME NULL COMMENT '删除时间',
  `version` INT NOT NULL DEFAULT 1 COMMENT '版本号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='组织架构表';

-- 组织架构表索引
CREATE UNIQUE INDEX `uk_code` ON `sys_organizations` (`code`, `deleted_at`);
CREATE INDEX `idx_name` ON `sys_organizations` (`name`);
CREATE INDEX `idx_pid` ON `sys_organizations` (`pid`);
CREATE INDEX `idx_path` ON `sys_organizations` (`path`);
CREATE INDEX `idx_type` ON `sys_organizations` (`type`);
CREATE INDEX `idx_leader_id` ON `sys_organizations` (`leader_id`);
CREATE INDEX `idx_deleted_at` ON `sys_organizations` (`deleted_at`);
CREATE INDEX `idx_status` ON `sys_organizations` (`status`);
CREATE INDEX `idx_sort` ON `sys_organizations` (`pid`, `sort_order`);

-- =============================================
-- 5. 字典类型表 (sys_dict_types)
-- =============================================
DROP TABLE IF EXISTS `sys_dict_types`;
CREATE TABLE `sys_dict_types` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `code` VARCHAR(50) NOT NULL COMMENT '字典类型代码，唯一',
  `name` VARCHAR(100) NOT NULL COMMENT '字典类型名称',
  `description` TEXT NULL COMMENT '描述',
  `pid` BIGINT NULL DEFAULT 0 COMMENT '父字典类型ID，支持字典分类',
  `path` VARCHAR(500) NULL COMMENT '层级路径',
  `level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
  `status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态：active-启用,inactive-禁用',
  `is_system` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否系统内置',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_by` BIGINT NULL COMMENT '更新人ID',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` DATETIME NULL COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典类型表';

-- 字典类型表索引
CREATE UNIQUE INDEX `uk_code` ON `sys_dict_types` (`code`, `deleted_at`);
CREATE INDEX `idx_name` ON `sys_dict_types` (`name`);
CREATE INDEX `idx_pid` ON `sys_dict_types` (`pid`);
CREATE INDEX `idx_path` ON `sys_dict_types` (`path`);
CREATE INDEX `idx_status` ON `sys_dict_types` (`status`);
CREATE INDEX `idx_deleted_at` ON `sys_dict_types` (`deleted_at`);
CREATE INDEX `idx_is_system` ON `sys_dict_types` (`is_system`);
CREATE INDEX `idx_sort` ON `sys_dict_types` (`pid`, `sort_order`);

-- =============================================
-- 6. 字典项表 (sys_dict_items)
-- =============================================
DROP TABLE IF EXISTS `sys_dict_items`;
CREATE TABLE `sys_dict_items` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `type_id` BIGINT NOT NULL COMMENT '字典类型ID',
  `item_key` VARCHAR(50) NOT NULL COMMENT '字典项键',
  `item_value` VARCHAR(200) NOT NULL COMMENT '字典项值',
  `label` VARCHAR(100) NOT NULL COMMENT '显示标签',
  `label_en` VARCHAR(200) NULL COMMENT '英文标签',
  `description` TEXT NULL COMMENT '描述',
  `pid` BIGINT NULL DEFAULT 0 COMMENT '父字典项ID，支持树形字典',
  `path` VARCHAR(500) NULL COMMENT '层级路径',
  `level` INT NOT NULL DEFAULT 1 COMMENT '层级深度',
  `sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
  `status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态',
  `css_class` VARCHAR(50) NULL COMMENT 'CSS样式类',
  `color` VARCHAR(50) NULL COMMENT '颜色值，如：#FF0000',
  `extra` JSON NULL COMMENT '扩展属性',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_by` BIGINT NULL COMMENT '更新人ID',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` DATETIME NULL COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典项表';

-- 字典项表索引
CREATE UNIQUE INDEX `uk_type_key` ON `sys_dict_items` (`type_id`, `item_key`, `deleted_at`);
CREATE INDEX `idx_type_id` ON `sys_dict_items` (`type_id`);
CREATE INDEX `idx_pid` ON `sys_dict_items` (`pid`);
CREATE INDEX `idx_status` ON `sys_dict_items` (`status`);
CREATE INDEX `idx_deleted_at` ON `sys_dict_items` (`deleted_at`);
CREATE INDEX `idx_sort` ON `sys_dict_items` (`type_id`, `sort_order`);
CREATE INDEX `idx_key` ON `sys_dict_items` (`item_key`);

-- =============================================
-- 7. 标签表 (sys_tags)
-- =============================================
DROP TABLE IF EXISTS `sys_tags`;
CREATE TABLE `sys_tags` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `name` VARCHAR(50) NOT NULL COMMENT '标签名称',
  `type` VARCHAR(50) NULL DEFAULT 'user' COMMENT '标签类型：user-用户标签,role-角色标签,content-内容标签',
  `color` VARCHAR(50) NULL COMMENT '标签颜色，如：#FF0000',
  `description` TEXT NULL COMMENT '描述',
  `usage_count` INT NOT NULL DEFAULT 0 COMMENT '使用次数统计',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `deleted_at` DATETIME NULL COMMENT '删除时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='标签表';

-- 标签表索引
CREATE UNIQUE INDEX `uk_name_type` ON `sys_tags` (`name`, `type`, `deleted_at`);
CREATE INDEX `idx_type` ON `sys_tags` (`type`);
CREATE INDEX `idx_usage_count` ON `sys_tags` (`usage_count` DESC);
CREATE INDEX `idx_deleted_at` ON `sys_tags` (`deleted_at`);
CREATE INDEX `idx_name` ON `sys_tags` (`name`);

-- =============================================
-- 8. 用户角色关联表 (sys_user_roles)
-- =============================================
DROP TABLE IF EXISTS `sys_user_roles`;
CREATE TABLE `sys_user_roles` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `user_id` BIGINT NOT NULL COMMENT '用户ID',
  `role_id` BIGINT NOT NULL COMMENT '角色ID',
  `expired_at` DATETIME NULL COMMENT '过期时间，NULL表示永久',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表';

-- 用户角色关联表索引
CREATE UNIQUE INDEX `uk_user_role` ON `sys_user_roles` (`user_id`, `role_id`);
CREATE INDEX `idx_user_id` ON `sys_user_roles` (`user_id`);
CREATE INDEX `idx_role_id` ON `sys_user_roles` (`role_id`);
CREATE INDEX `idx_expired_at` ON `sys_user_roles` (`expired_at`);
CREATE INDEX `idx_created_at` ON `sys_user_roles` (`created_at`);

-- =============================================
-- 9. 角色权限关联表 (sys_role_permissions)
-- =============================================
DROP TABLE IF EXISTS `sys_role_permissions`;
CREATE TABLE `sys_role_permissions` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `role_id` BIGINT NOT NULL COMMENT '角色ID',
  `permission_id` BIGINT NOT NULL COMMENT '权限ID',
  `is_half` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否半选状态（树形权限）',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表';

-- 角色权限关联表索引
CREATE UNIQUE INDEX `uk_role_permission` ON `sys_role_permissions` (`role_id`, `permission_id`);
CREATE INDEX `idx_role_id` ON `sys_role_permissions` (`role_id`);
CREATE INDEX `idx_permission_id` ON `sys_role_permissions` (`permission_id`);
CREATE INDEX `idx_is_half` ON `sys_role_permissions` (`is_half`);

-- =============================================
-- 10. 用户组织关联表 (sys_user_organizations)
-- =============================================
DROP TABLE IF EXISTS `sys_user_organizations`;
CREATE TABLE `sys_user_organizations` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `user_id` BIGINT NOT NULL COMMENT '用户ID',
  `organization_id` BIGINT NOT NULL COMMENT '组织ID',
  `is_primary` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否主组织',
  `position` VARCHAR(100) NULL COMMENT '职位',
  `joined_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户组织关联表';

-- 用户组织关联表索引
CREATE UNIQUE INDEX `uk_user_org` ON `sys_user_organizations` (`user_id`, `organization_id`);
CREATE INDEX `idx_user_id` ON `sys_user_organizations` (`user_id`);
CREATE INDEX `idx_organization_id` ON `sys_user_organizations` (`organization_id`);
CREATE INDEX `idx_is_primary` ON `sys_user_organizations` (`is_primary`);
CREATE INDEX `idx_joined_at` ON `sys_user_organizations` (`joined_at`);

-- =============================================
-- 11. 用户标签关联表 (sys_user_tags)
-- =============================================
DROP TABLE IF EXISTS `sys_user_tags`;
CREATE TABLE `sys_user_tags` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `user_id` BIGINT NOT NULL COMMENT '用户ID',
  `tag_id` BIGINT NOT NULL COMMENT '标签ID',
  `created_by` BIGINT NULL COMMENT '创建人ID',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户标签关联表';

-- 用户标签关联表索引
CREATE UNIQUE INDEX `uk_user_tag` ON `sys_user_tags` (`user_id`, `tag_id`);
CREATE INDEX `idx_user_id` ON `sys_user_tags` (`user_id`);
CREATE INDEX `idx_tag_id` ON `sys_user_tags` (`tag_id`);
CREATE INDEX `idx_created_at` ON `sys_user_tags` (`created_at`);

-- =============================================
-- 12. 操作日志表 (sys_operation_logs)
-- =============================================
DROP TABLE IF EXISTS `sys_operation_logs`;
CREATE TABLE `sys_operation_logs` (
  `id` BIGINT NOT NULL COMMENT '主键',
  `user_id` BIGINT NULL COMMENT '操作用户ID',
  `username` VARCHAR(100) NULL COMMENT '操作用户名',
  `module` VARCHAR(50) NOT NULL COMMENT '操作模块',
  `action` VARCHAR(50) NOT NULL COMMENT '操作类型',
  `target` VARCHAR(200) NULL COMMENT '操作对象描述',
  `target_id` BIGINT NULL COMMENT '操作对象ID',
  `request_data` TEXT NULL COMMENT '请求数据',
  `response_data` TEXT NULL COMMENT '响应数据',
  `status` VARCHAR(20) NOT NULL COMMENT '操作状态：success-成功,fail-失败',
  `ip` VARCHAR(45) NULL COMMENT 'IP地址',
  `user_agent` VARCHAR(200) NULL COMMENT '用户代理',
  `duration` BIGINT NULL COMMENT '操作耗时(毫秒)',
  `error_msg` TEXT NULL COMMENT '错误信息',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';

-- 操作日志表索引
CREATE INDEX `idx_user_id` ON `sys_operation_logs` (`user_id`);
CREATE INDEX `idx_module_action` ON `sys_operation_logs` (`module`, `action`);
CREATE INDEX `idx_target` ON `sys_operation_logs` (`target_id`);
CREATE INDEX `idx_status` ON `sys_operation_logs` (`status`);
CREATE INDEX `idx_created_at` ON `sys_operation_logs` (`created_at`);
CREATE INDEX `idx_ip` ON `sys_operation_logs` (`ip`);

-- =============================================
-- 初始化数据
-- =============================================

-- -- 1. 系统初始用户
-- INSERT INTO `sys_users` (`id`, `username`, `email`, `password_hash`, `nickname`, `is_root`, `status`) 
-- VALUES (1, 'root', 'root@system.local', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewYpfQaXUIkRrPJK', '超级管理员', TRUE, 'active');

-- INSERT INTO `sys_users` (`id`, `username`, `email`, `password_hash`, `nickname`, `status`) 
-- VALUES (2, 'admin', 'admin@system.local', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewYpfQaXUIkRrPJK', '系统管理员', 'active');

-- -- 2. 系统初始角色
-- INSERT INTO `sys_roles` (`id`, `code`, `name`, `description`, `is_system`, `status`) 
-- VALUES (1, 'super_admin', '超级管理员', '拥有系统所有权限', TRUE, 'active');

-- INSERT INTO `sys_roles` (`id`, `code`, `name`, `description`, `is_system`, `status`, `pid`, `path`, `level`) 
-- VALUES (2, 'admin', '系统管理员', '负责系统配置和用户管理', TRUE, 'active', 1, '/1/2/', 2);

-- INSERT INTO `sys_roles` (`id`, `code`, `name`, `description`, `is_system`, `status`) 
-- VALUES (3, 'user', '普通用户', '普通注册用户默认角色', TRUE, 'active');

-- -- 3. 分配角色
-- INSERT INTO `sys_user_roles` (`user_id`, `role_id`) VALUES (1, 1);
-- INSERT INTO `sys_user_roles` (`user_id`, `role_id`) VALUES (2, 2);

-- -- 4. 字典分类
-- INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`) VALUES
-- (1, 'system', '系统字典', TRUE),
-- (2, 'business', '业务字典', TRUE);

-- -- 5. 用户状态字典
-- INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
-- (10, 'user_status', '用户状态', TRUE, 1, '/1/10/');

-- INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `color`, `sort_order`) VALUES
-- (10, 'active', 'active', '正常', '#52c41a', 1),
-- (10, 'inactive', 'inactive', '未激活', '#faad14', 2),
-- (10, 'locked', 'locked', '锁定', '#ff4d4f', 3),
-- (10, 'disabled', 'disabled', '禁用', '#d9d9d9', 4);

-- -- 6. 组织类型字典
-- INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
-- (11, 'org_type', '组织类型', TRUE, 1, '/1/11/');

-- INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `sort_order`) VALUES
-- (11, 'company', 'company', '公司', 1),
-- (11, 'department', 'department', '部门', 2),
-- (11, 'team', 'team', '团队', 3),
-- (11, 'group', 'group', '小组', 4);

-- -- 7. 性别字典
-- INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
-- (12, 'gender', '性别', TRUE, 1, '/1/12/');

-- INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `sort_order`) VALUES
-- (12, '0', '0', '未知', 1),
-- (12, '1', '1', '男', 2),
-- (12, '2', '2', '女', 3);

-- -- 8. 权限类型字典
-- INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
-- (13, 'permission_type', '权限类型', TRUE, 1, '/1/13/');

-- INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `color`, `sort_order`) VALUES
-- (13, 'menu', 'menu', '菜单', '#1890ff', 1),
-- (13, 'button', 'button', '按钮', '#52c41a', 2),
-- (13, 'api', 'api', '接口', '#fa8c16', 3),
-- (13, 'data', 'data', '数据', '#722ed1', 4);

-- -- 9. 标签类型字典
-- INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
-- (14, 'tag_type', '标签类型', TRUE, 1, '/1/14/');

-- INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `sort_order`) VALUES
-- (14, 'user', 'user', '用户标签', 1),
-- (14, 'role', 'role', '角色标签', 2),
-- (14, 'content', 'content', '内容标签', 3);

-- -- 10. 地区字典（示例）
-- INSERT INTO `sys_dict_types` (`id`, `code`, `name`, `is_system`, `pid`, `path`) VALUES
-- (20, 'region', '地区', TRUE, 2, '/2/20/');

-- INSERT INTO `sys_dict_items` (`type_id`, `item_key`, `item_value`, `label`, `sort_order`) VALUES
-- (20, 'CN', 'CN', '中国', 1);

-- -- 11. 基础权限数据
-- INSERT INTO `sys_permissions` (`id`, `code`, `name`, `type`, `resource`, `action`) VALUES
-- (1, 'system:manage', '系统管理', 'menu', 'system', 'manage'),
-- (2, 'user:read', '查看用户', 'api', 'user', 'read'),
-- (3, 'user:create', '创建用户', 'api', 'user', 'create'),
-- (4, 'user:update', '更新用户', 'api', 'user', 'update'),
-- (5, 'user:delete', '删除用户', 'api', 'user', 'delete'),
-- (6, 'role:read', '查看角色', 'api', 'role', 'read'),
-- (7, 'role:create', '创建角色', 'api', 'role', 'create'),
-- (8, 'role:update', '更新角色', 'api', 'role', 'update'),
-- (9, 'role:delete', '删除角色', 'api', 'role', 'delete');

-- -- 12. 为超级管理员角色分配所有权限
-- INSERT INTO `sys_role_permissions` (`role_id`, `permission_id`) 
-- SELECT 1, id FROM `sys_permissions`;

-- -- 13. 初始组织架构
-- INSERT INTO `sys_organizations` (`id`, `code`, `name`, `type`, `status`) VALUES
-- (1, 'ROOT', '星撰集团', 'company', 'active');

-- INSERT INTO `sys_organizations` (`id`, `code`, `name`, `type`, `pid`, `path`, `level`, `status`) VALUES
-- (2, 'TECH', '技术部', 'department', 1, '/1/2/', 2, 'active'),
-- (3, 'PRODUCT', '产品部', 'department', 1, '/1/3/', 2, 'active'),
-- (4, 'OPERATE', '运营部', 'department', 1, '/1/4/', 2, 'active');

-- -- 14. 示例标签数据
-- INSERT INTO `sys_tags` (`name`, `type`, `color`, `description`) VALUES
-- ('VIP', 'user', '#ff4d4f', 'VIP用户'),
-- ('活跃用户', 'user', '#52c41a', '经常登录的用户'),
-- ('内容创作者', 'user', '#1890ff', '发布优质内容的用户'),
-- ('新用户', 'user', '#faad14', '注册不满30天的用户'),
-- ('核心角色', 'role', '#ff4d4f', '系统核心角色'),
-- ('业务角色', 'role', '#1890ff', '业务相关角色');

-- SET FOREIGN_KEY_CHECKS = 1;

-- -- =============================================
-- -- 导出完成
-- -- 说明：
-- -- 1. 默认密码哈希对应的明文密码是 "123456"
-- -- 2. 所有ID使用雪花算法生成，这里为演示使用了简单数字
-- -- 3. 建议在生产环境中修改默认密码
-- -- 4. 可根据实际需求调整初始化数据
-- -- ============================================= 