Files
x-server-mobile/backend/database/migrations/init.sql
T

197 lines
10 KiB
SQL
Raw Normal View History

-- 企业内部工具系统 - 数据库初始化脚本
-- 数据库: 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`);