-- MySQL数据库初始化脚本 -- 适用于智能办公管理系统 -- 版本: 1.0 -- 作者: 数据库迁移团队 -- 创建数据库 CREATE DATABASE IF NOT EXISTS smart_office_auth CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE IF NOT EXISTS smart_office_attendance CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE IF NOT EXISTS smart_office_approval CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建用户并授权(根据实际情况调整) -- CREATE USER 'smartoffice'@'%' IDENTIFIED BY 'SmartOffice123'; -- GRANT ALL PRIVILEGES ON smart_office_auth.* TO 'smartoffice'@'%'; -- GRANT ALL PRIVILEGES ON smart_office_attendance.* TO 'smartoffice'@'%'; -- GRANT ALL PRIVILEGES ON smart_office_approval.* TO 'smartoffice'@'%'; -- FLUSH PRIVILEGES; -- 使用认证数据库 USE smart_office_auth; -- 用户表 (sys_user) CREATE TABLE IF NOT EXISTS sys_user ( id BIGINT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(200) NOT NULL, email VARCHAR(100), phone VARCHAR(20), nickname VARCHAR(50), real_name VARCHAR(50), avatar VARCHAR(500), gender INT DEFAULT 0, birthday DATETIME, dept_id BIGINT, position VARCHAR(100), status INT DEFAULT 1, last_login_time DATETIME, last_login_ip VARCHAR(50), login_count INT DEFAULT 0, failed_login_count INT DEFAULT 0, lock_time DATETIME, password_reset_time DATETIME, is_super_admin TINYINT(1) DEFAULT FALSE, remark VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, create_by BIGINT, update_by BIGINT, deleted TINYINT(1) DEFAULT FALSE ); CREATE INDEX idx_username ON sys_user(username); CREATE INDEX idx_email ON sys_user(email); CREATE INDEX idx_phone ON sys_user(phone); CREATE INDEX idx_dept_id ON sys_user(dept_id); -- 角色表 (sys_role) CREATE TABLE IF NOT EXISTS sys_role ( id BIGINT AUTO_INCREMENT PRIMARY KEY, role_code VARCHAR(50) NOT NULL UNIQUE, role_name VARCHAR(50) NOT NULL, description VARCHAR(200), data_scope INT DEFAULT 1, status INT DEFAULT 1, sort INT DEFAULT 0, is_system TINYINT(1) DEFAULT FALSE, remark VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, create_by BIGINT, update_by BIGINT, deleted TINYINT(1) DEFAULT FALSE ); CREATE INDEX idx_role_code ON sys_role(role_code); CREATE INDEX idx_role_name ON sys_role(role_name); -- 权限表 (sys_permission) CREATE TABLE IF NOT EXISTS sys_permission ( id BIGINT AUTO_INCREMENT PRIMARY KEY, permission_code VARCHAR(100) NOT NULL UNIQUE, permission_name VARCHAR(50) NOT NULL, permission_type INT NOT NULL, parent_id BIGINT DEFAULT 0, path VARCHAR(200), component VARCHAR(200), icon VARCHAR(100), sort INT DEFAULT 0, status INT DEFAULT 1, is_visible TINYINT(1) DEFAULT TRUE, is_cache TINYINT(1) DEFAULT FALSE, is_external TINYINT(1) DEFAULT FALSE, external_url VARCHAR(500), request_method VARCHAR(20), api_path VARCHAR(500), remark VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, create_by BIGINT, update_by BIGINT, deleted TINYINT(1) DEFAULT FALSE ); CREATE INDEX idx_permission_code ON sys_permission(permission_code); CREATE INDEX idx_parent_id ON sys_permission(parent_id); CREATE INDEX idx_sort ON sys_permission(sort); -- 用户角色关联表 CREATE TABLE IF NOT EXISTS sys_user_role ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL, role_id BIGINT NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_user_role (user_id, role_id) ); -- 角色权限关联表 CREATE TABLE IF NOT EXISTS sys_role_permission ( id BIGINT AUTO_INCREMENT PRIMARY KEY, role_id BIGINT NOT NULL, permission_id BIGINT NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_role_permission (role_id, permission_id) ); -- 部门表 (sys_department) CREATE TABLE IF NOT EXISTS sys_department ( id BIGINT AUTO_INCREMENT PRIMARY KEY, dept_code VARCHAR(50) NOT NULL UNIQUE, dept_name VARCHAR(100) NOT NULL, parent_id BIGINT DEFAULT 0, ancestors VARCHAR(500), leader_id BIGINT, sort INT DEFAULT 0, status INT DEFAULT 1, phone VARCHAR(20), email VARCHAR(100), address VARCHAR(200), remark VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, create_by BIGINT, update_by BIGINT, deleted TINYINT(1) DEFAULT FALSE ); CREATE INDEX idx_dept_code ON sys_department(dept_code); CREATE INDEX idx_parent_id ON sys_department(parent_id); -- 操作日志表 (sys_operation_log) CREATE TABLE IF NOT EXISTS sys_operation_log ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT, username VARCHAR(50), real_name VARCHAR(50), operation_type VARCHAR(50), operation_module VARCHAR(100), operation_description VARCHAR(500), request_method VARCHAR(10), request_url VARCHAR(500), request_params TEXT, request_ip VARCHAR(50), request_location VARCHAR(100), user_agent VARCHAR(500), execute_time BIGINT, status INT DEFAULT 1, error_message TEXT, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_user_time ON sys_operation_log(user_id, create_time); CREATE INDEX idx_module_time ON sys_operation_log(operation_module, create_time); -- 使用考勤数据库 USE smart_office_attendance; -- 考勤记录表 (attendance_record) CREATE TABLE IF NOT EXISTS attendance_record ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL, dept_id BIGINT, attendance_date DATE NOT NULL, check_in_time DATETIME, check_out_time DATETIME, work_hours DECIMAL(5,2), late_minutes INT DEFAULT 0, early_minutes INT DEFAULT 0, overtime_hours DECIMAL(5,2) DEFAULT 0, attendance_status INT DEFAULT 0, location VARCHAR(200), latitude DECIMAL(10,8), longitude DECIMAL(11,8), device_info VARCHAR(200), ip_address VARCHAR(50), remark VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); CREATE INDEX idx_user_date ON attendance_record(user_id, attendance_date); CREATE INDEX idx_dept_date ON attendance_record(dept_id, attendance_date); -- 请假申请表 (leave_request) CREATE TABLE IF NOT EXISTS leave_request ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL, leave_type INT NOT NULL, start_time DATETIME NOT NULL, end_time DATETIME NOT NULL, duration_days DECIMAL(5,2), reason VARCHAR(500), attachment_url VARCHAR(500), status INT DEFAULT 0, approval_flow_id BIGINT, current_approver_id BIGINT, remark VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); CREATE INDEX idx_user_status ON leave_request(user_id, status); CREATE INDEX idx_approval_flow ON leave_request(approval_flow_id); -- 加班申请表 (overtime_request) CREATE TABLE IF NOT EXISTS overtime_request ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL, overtime_date DATE NOT NULL, start_time DATETIME NOT NULL, end_time DATETIME NOT NULL, duration_hours DECIMAL(5,2), reason VARCHAR(500), compensation_type INT DEFAULT 1, status INT DEFAULT 0, approval_flow_id BIGINT, current_approver_id BIGINT, remark VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); CREATE INDEX idx_user_status_ot ON overtime_request(user_id, status); CREATE INDEX idx_overtime_date ON overtime_request(overtime_date); -- 使用审批数据库 USE smart_office_approval; -- 工作流定义表 (workflow_definition) CREATE TABLE IF NOT EXISTS workflow_definition ( id BIGINT AUTO_INCREMENT PRIMARY KEY, workflow_code VARCHAR(50) NOT NULL UNIQUE, workflow_name VARCHAR(100) NOT NULL, workflow_type INT NOT NULL, description VARCHAR(500), version INT DEFAULT 1, status INT DEFAULT 1, form_schema JSON, process_definition JSON, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, create_by BIGINT, update_by BIGINT ); -- 工作流实例表 (workflow_instance) CREATE TABLE IF NOT EXISTS workflow_instance ( id BIGINT AUTO_INCREMENT PRIMARY KEY, workflow_definition_id BIGINT NOT NULL, business_key VARCHAR(100), business_type VARCHAR(50), business_data JSON, initiator_id BIGINT NOT NULL, current_node_id BIGINT, current_assignee_id BIGINT, status INT DEFAULT 0, start_time DATETIME DEFAULT CURRENT_TIMESTAMP, end_time DATETIME, duration_days INT, remark VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); CREATE INDEX idx_business_key ON workflow_instance(business_key); CREATE INDEX idx_initiator_status ON workflow_instance(initiator_id, status); -- 审批节点表 (approval_node) CREATE TABLE IF NOT EXISTS approval_node ( id BIGINT AUTO_INCREMENT PRIMARY KEY, workflow_instance_id BIGINT NOT NULL, node_code VARCHAR(50) NOT NULL, node_name VARCHAR(100) NOT NULL, node_type INT NOT NULL, assignee_type INT NOT NULL, assignee_ids JSON, status INT DEFAULT 0, start_time DATETIME, end_time DATETIME, duration_hours DECIMAL(5,2), comment VARCHAR(500), attachment_url VARCHAR(500), create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 插入初始数据(可选) -- 插入超级管理员角色 USE smart_office_auth; INSERT IGNORE INTO sys_role (role_code, role_name, description, data_scope, status, sort, is_system, remark) VALUES ('SUPER_ADMIN', '超级管理员', '系统超级管理员', 1, 1, 0, TRUE, '系统内置角色'); -- 插入默认权限(示例) INSERT IGNORE INTO sys_permission (permission_code, permission_name, permission_type, parent_id, path, component, icon, sort, status, is_visible, is_cache, is_external, external_url, request_method, api_path, remark) VALUES ('SYSTEM_MANAGE', '系统管理', 0, 0, '/system', 'Layout', 'system', 0, 1, TRUE, FALSE, FALSE, NULL, NULL, NULL, '系统管理目录'); -- 插入默认用户(密码为加密后的"admin123") INSERT IGNORE INTO sys_user (username, password, email, phone, nickname, real_name, avatar, gender, dept_id, position, status, is_super_admin, remark) VALUES ('admin', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', 'admin@smartoffice.com', '13800138000', '管理员', '系统管理员', '', 1, NULL, '系统管理员', 1, TRUE, '默认超级管理员'); -- 关联用户角色 INSERT IGNORE INTO sys_user_role (user_id, role_id) SELECT u.id, r.id FROM sys_user u, sys_role r WHERE u.username = 'admin' AND r.role_code = 'SUPER_ADMIN'; -- 完成 SELECT 'MySQL数据库初始化完成' AS message;