-- 只创建缺失的表，不重复创建已存在的表
-- 适用于部分表已存在的情况

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;
