-- 企业内部工具系统 - 数据库初始化脚本 -- 数据库: x_server_mobile -- ===================================== -- 1. 公司表(飞书应用配置) -- ===================================== CREATE TABLE IF NOT EXISTS `company` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '公司ID', `name` VARCHAR(100) NOT NULL COMMENT '公司名称', `feishu_app_id` VARCHAR(100) DEFAULT NULL COMMENT '飞书应用ID', `feishu_app_secret` VARCHAR(255) DEFAULT NULL COMMENT '飞书应用密钥', `feishu_tenant_key` VARCHAR(100) DEFAULT NULL COMMENT '飞书租户Key', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1=启用,0=禁用', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_feishu_app_id` (`feishu_app_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司表'; -- ===================================== -- 2. 用户表(全局用户) -- ===================================== CREATE TABLE IF NOT EXISTS `user` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID', `company_id` BIGINT UNSIGNED NOT NULL COMMENT '所属公司ID', `feishu_user_id` VARCHAR(100) DEFAULT NULL COMMENT '飞书用户ID', `feishu_union_id` VARCHAR(100) DEFAULT NULL COMMENT '飞书UnionID(跨应用唯一)', `name` VARCHAR(50) NOT NULL COMMENT '用户名', `email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱', `phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号', `avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1=正常,0=禁用', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_company_id` (`company_id`), KEY `idx_feishu_user_id` (`feishu_user_id`), KEY `idx_feishu_union_id` (`feishu_union_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; -- ===================================== -- 3. 用户与飞书应用关联表 -- ===================================== CREATE TABLE IF NOT EXISTS `user_feishu_binding` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', `user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID', `company_id` BIGINT UNSIGNED NOT NULL COMMENT '公司ID', `feishu_open_id` VARCHAR(100) DEFAULT NULL COMMENT '飞书OpenID', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_company` (`user_id`, `company_id`), KEY `idx_feishu_open_id` (`feishu_open_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户飞书应用绑定表'; -- ===================================== -- 4. 审批流程配置表 -- ===================================== CREATE TABLE IF NOT EXISTS `approval_flow` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '流程ID', `business_type` VARCHAR(50) NOT NULL COMMENT '业务类型标识(如:business-trip, purchase)', `name` VARCHAR(100) NOT NULL COMMENT '流程名称', `description` VARCHAR(255) DEFAULT NULL COMMENT '流程描述', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1=启用,0=禁用', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_business_type` (`business_type`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批流程配置表'; -- ===================================== -- 5. 审批流程节点表 -- ===================================== CREATE TABLE IF NOT EXISTS `approval_node` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '节点ID', `flow_id` BIGINT UNSIGNED NOT NULL COMMENT '流程ID', `type` ENUM('approver', 'and_approve', 'or_approve', 'notify') NOT NULL COMMENT '节点类型', `name` VARCHAR(100) NOT NULL COMMENT '节点名称', `order` INT NOT NULL DEFAULT 0 COMMENT '节点顺序', `approvers` JSON DEFAULT NULL COMMENT '审批人列表(JSON数组)', `conditions` JSON DEFAULT NULL COMMENT '条件判断(JSON)', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_flow_id` (`flow_id`), KEY `idx_order` (`order`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批流程节点表'; -- ===================================== -- 6. 审批单表 -- ===================================== CREATE TABLE IF NOT EXISTS `approval_order` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '审批单ID', `business_type` VARCHAR(50) NOT NULL COMMENT '业务类型', `business_id` BIGINT UNSIGNED NOT NULL COMMENT '业务单据ID', `title` VARCHAR(200) NOT NULL COMMENT '审批标题', `applicant_id` BIGINT UNSIGNED NOT NULL COMMENT '申请人ID', `status` ENUM('draft', 'pending', 'approved', 'rejected', 'cancelled') NOT NULL DEFAULT 'draft' COMMENT '审批状态', `current_nodes` JSON DEFAULT NULL COMMENT '当前待审批节点ID列表', `flow_id` BIGINT UNSIGNED NOT NULL COMMENT '使用的流程ID', `form_data` JSON DEFAULT NULL COMMENT '业务表单数据(JSON)', `attachments` JSON DEFAULT NULL COMMENT '附件列表(JSON)', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_business` (`business_type`, `business_id`), KEY `idx_applicant` (`applicant_id`), KEY `idx_status` (`status`), KEY `idx_created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批单表'; -- ===================================== -- 7. 审批记录表(审批轨迹) -- ===================================== CREATE TABLE IF NOT EXISTS `approval_record` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '记录ID', `order_id` BIGINT UNSIGNED NOT NULL COMMENT '审批单ID', `node_id` BIGINT UNSIGNED NOT NULL COMMENT '节点ID', `node_type` VARCHAR(20) NOT NULL COMMENT '节点类型', `approver_id` BIGINT UNSIGNED NOT NULL COMMENT '审批人ID', `action` ENUM('submit', 'approve', 'reject', 'cancel') NOT NULL COMMENT '操作类型', `comment` VARCHAR(500) DEFAULT NULL COMMENT '审批意见', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间', PRIMARY KEY (`id`), KEY `idx_order_id` (`order_id`), KEY `idx_approver_id` (`approver_id`), KEY `idx_created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批记录表'; -- ===================================== -- 8. 出差申请表 -- ===================================== CREATE TABLE IF NOT EXISTS `business_trip` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '出差ID', `user_id` BIGINT UNSIGNED NOT NULL COMMENT '申请人ID', `reason` VARCHAR(500) NOT NULL COMMENT '出差事由', `start_date` DATE NOT NULL COMMENT '开始日期', `end_date` DATE NOT NULL COMMENT '结束日期', `destination` VARCHAR(200) NOT NULL COMMENT '目的地', `estimated_cost` DECIMAL(10,2) DEFAULT 0.00 COMMENT '预计费用', `status` ENUM('draft', 'pending', 'approved', 'rejected', 'cancelled') NOT NULL DEFAULT 'draft' COMMENT '状态', `approval_order_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '关联审批单ID', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_status` (`status`), KEY `idx_dates` (`start_date`, `end_date`), KEY `idx_approval_order_id` (`approval_order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='出差申请表'; -- ===================================== -- 9. 出差行程明细表 -- ===================================== CREATE TABLE IF NOT EXISTS `business_trip_itinerary` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '行程ID', `business_trip_id` BIGINT UNSIGNED NOT NULL COMMENT '出差申请ID', `date` DATE NOT NULL COMMENT '行程日期', `departure` VARCHAR(100) DEFAULT NULL COMMENT '出发地', `destination` VARCHAR(100) NOT NULL COMMENT '目的地', `transport` VARCHAR(50) DEFAULT NULL COMMENT '交通方式', `accommodation` VARCHAR(100) DEFAULT NULL COMMENT '住宿安排', `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_business_trip_id` (`business_trip_id`), KEY `idx_date` (`date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='出差行程明细表'; -- ===================================== -- 初始化数据 -- ===================================== -- 插入默认公司 INSERT INTO `company` (`id`, `name`, `status`) VALUES (1, '示例公司', 1) ON DUPLICATE KEY UPDATE `name` = VALUES(`name`); -- 插入默认用户 INSERT INTO `user` (`id`, `company_id`, `name`, `email`, `status`) VALUES (1, 1, '管理员', 'admin@example.com', 1) ON DUPLICATE KEY UPDATE `name` = VALUES(`name`); -- 插入默认出差审批流程 INSERT INTO `approval_flow` (`id`, `business_type`, `name`, `status`) VALUES (1, 'business-trip', '默认出差审批流程', 1) ON DUPLICATE KEY UPDATE `name` = VALUES(`name`); -- 插入默认审批节点 INSERT INTO `approval_node` (`flow_id`, `type`, `name`, `order`, `approvers`) VALUES (1, 'approver', '部门主管审批', 1, '[]'), (1, 'approver', '人事审批', 2, '[]') ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);