-- 系统配置与审计通知中心数据库表脚本
-- 数据库: H2/PostgreSQL

-- 字典类型表
CREATE TABLE IF NOT EXISTS sys_dict_type (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    dict_name VARCHAR(100) NOT NULL COMMENT '字典名称',
    dict_type VARCHAR(100) NOT NULL UNIQUE COMMENT '字典类型',
    status VARCHAR(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
    remark VARCHAR(500) COMMENT '备注',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    deleted_at TIMESTAMP
);

-- 字典数据表
CREATE TABLE IF NOT EXISTS sys_dict_data (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    dict_sort INT DEFAULT 0 COMMENT '字典排序',
    dict_label VARCHAR(100) NOT NULL COMMENT '字典标签',
    dict_value VARCHAR(100) NOT NULL COMMENT '字典键值',
    dict_type VARCHAR(100) NOT NULL COMMENT '字典类型',
    css_class VARCHAR(100) COMMENT '样式属性',
    list_class VARCHAR(100) COMMENT '表格回显样式',
    is_default VARCHAR(1) DEFAULT 'N' COMMENT '是否默认（Y是 N否）',
    status VARCHAR(1) DEFAULT '0' COMMENT '状态（0正常 1停用）',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    deleted_at TIMESTAMP
);

-- 系统配置表
CREATE TABLE IF NOT EXISTS sys_config (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    config_name VARCHAR(100) NOT NULL COMMENT '配置名称',
    config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键名',
    config_value VARCHAR(500) NOT NULL COMMENT '配置值',
    config_type VARCHAR(1) DEFAULT 'N' COMMENT '系统内置（Y是 N否）',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    deleted_at TIMESTAMP
);

-- 登录日志表
CREATE TABLE IF NOT EXISTS sys_login_log (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) COMMENT '用户名',
    ip VARCHAR(50) COMMENT 'IP地址',
    location VARCHAR(255) COMMENT '登录位置',
    browser VARCHAR(50) COMMENT '浏览器类型',
    os VARCHAR(50) COMMENT '操作系统',
    status VARCHAR(1) COMMENT '登录状态（0成功 1失败）',
    message VARCHAR(255) COMMENT '提示消息',
    login_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 异常日志表
CREATE TABLE IF NOT EXISTS sys_exception_log (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) COMMENT '用户名',
    title VARCHAR(100) COMMENT '异常标题',
    exception_name VARCHAR(100) COMMENT '异常名称',
    method_name VARCHAR(100) COMMENT '方法名称',
    method_params TEXT COMMENT '方法参数',
    exception_msg TEXT COMMENT '异常信息',
    exception_stack TEXT COMMENT '堆栈信息',
    ip VARCHAR(50) COMMENT 'IP地址',
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 系统公告表
CREATE TABLE IF NOT EXISTS sys_notice (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    notice_title VARCHAR(100) NOT NULL COMMENT '公告标题',
    notice_type VARCHAR(1) DEFAULT '1' COMMENT '公告类型（1通知 2公告）',
    notice_content TEXT COMMENT '公告内容',
    status VARCHAR(1) DEFAULT '0' COMMENT '公告状态（0正常 1关闭）',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    deleted_at TIMESTAMP
);

-- 文件管理表
CREATE TABLE IF NOT EXISTS sys_file (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    file_name VARCHAR(255) NOT NULL COMMENT '文件名',
    file_path VARCHAR(500) NOT NULL COMMENT '文件路径',
    file_size VARCHAR(50) COMMENT '文件大小',
    file_type VARCHAR(50) COMMENT '文件类型',
    storage_type VARCHAR(20) DEFAULT 'local' COMMENT '存储类型（local/oss/s3）',
    create_by VARCHAR(50) COMMENT '创建者',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    deleted_at TIMESTAMP
);

-- 用户消息表（消息推送用）
CREATE TABLE IF NOT EXISTS sys_user_message (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    user_id BIGINT NOT NULL COMMENT '接收用户ID',
    title VARCHAR(100) COMMENT '消息标题',
    content TEXT COMMENT '消息内容',
    message_type VARCHAR(1) DEFAULT '1' COMMENT '消息类型（1系统 2通知）',
    is_read VARCHAR(1) DEFAULT '0' COMMENT '是否已读（0未读 1已读）',
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 初始化默认系统配置数据
INSERT INTO sys_config (config_name, config_key, config_value, config_type) VALUES
('系统名称', 'sys.system.name', 'Novalon管理系统', 'Y'),
('系统版本', 'sys.system.version', '1.0.0', 'Y'),
('文件上传最大大小', 'sys.file.maxSize', '10485760', 'Y'),
('文件上传允许类型', 'sys.file.allowedTypes', 'jpg,jpeg,png,pdf,doc,docx,xls,xlsx', 'Y'),
('会话超时时间(分钟)', 'sys.session.timeout', '30', 'Y'),
('密码最小长度', 'sys.password.minLength', '6', 'Y');

-- 初始化默认字典类型
INSERT INTO sys_dict_type (dict_name, dict_type, status, remark) VALUES
('用户性别', 'sys_user_sex', '0', '用户性别列表'),
('菜单状态', 'sys_show_hide', '0', '菜单显示状态'),
('系统开关', 'sys_normal_disable', '0', '系统开关状态'),
('任务状态', 'sys_job_status', '0', '定时任务状态'),
('任务分组', 'sys_job_group', '0', '定时任务分组'),
('系统是否', 'sys_yes_no', '0', '系统是否列表');

-- 初始化默认字典数据
INSERT INTO sys_dict_data (dict_label, dict_value, dict_type, dict_sort, is_default, status) VALUES
('男', '0', 'sys_user_sex', 1, 'Y', '0'),
('女', '1', 'sys_user_sex', 2, 'N', '0'),
('未知', '2', 'sys_user_sex', 3, 'N', '0'),
('显示', '0', 'sys_show_hide', 1, 'Y', '0'),
('隐藏', '1', 'sys_show_hide', 2, 'N', '0'),
('正常', '0', 'sys_normal_disable', 1, 'Y', '0'),
('停用', '1', 'sys_normal_disable', 2, 'N', '0'),
('是', 'Y', 'sys_yes_no', 1, 'Y', '0'),
('否', 'N', 'sys_yes_no', 2, 'N', '0');

-- 创建索引
CREATE INDEX idx_sys_dict_type_dict_type ON sys_dict_type(dict_type);
CREATE INDEX idx_sys_dict_data_dict_type ON sys_dict_data(dict_type);
CREATE INDEX idx_sys_config_config_key ON sys_config(config_key);
CREATE INDEX idx_sys_login_log_username ON sys_login_log(username);
CREATE INDEX idx_sys_login_log_login_time ON sys_login_log(login_time);
CREATE INDEX idx_sys_exception_log_create_time ON sys_exception_log(create_time);
CREATE INDEX idx_sys_notice_status ON sys_notice(status);
CREATE INDEX idx_sys_file_create_by ON sys_file(create_by);
CREATE INDEX idx_sys_user_message_user_id ON sys_user_message(user_id);
CREATE INDEX idx_sys_user_message_is_read ON sys_user_message(is_read);
