Files
root 8d78e18267 Initial commit: X-Server Mobile enterprise tool system
- Frontend: React 18 + TypeScript + Vite + Ant Design Mobile
- Backend: PHP 8.5 + Webman 2.x + MySQL + Redis
- i18n support: Chinese, English, Russian, Spanish, French
- Approval workflow engine
- Docker development environment
- Feishu integration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 17:57:25 +08:00

197 lines
10 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 企业内部工具系统 - 数据库初始化脚本
-- 数据库: 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`);