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