feat: add complete database initialization script

- Add 008_complete_init.sql with all 10 tables
- Include approval workflow tables:
  - approval_flow (审批流程配置表)
  - approval_node (审批流程节点表)
  - approval_order (审批单表)
  - approval_record (审批记录表)
- Include business trip tables:
  - business_trip (出差申请表)
  - business_trip_itinerary (出差行程明细表)
- Include user_feishu_binding (用户飞书应用绑定表)

All tables use proper UTF-8 encoding with utf8mb4_unicode_ci collation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-24 21:27:49 +08:00
parent be9ae8a0d9
commit 6e61d0adc7
@@ -0,0 +1,252 @@
-- XServer 数据库完整初始化脚本
-- 使用 UTF-8 编码保存此文件
-- 执行方式:docker exec 1Panel-mysql-409s mysql -uroot -p'mysql_xEsdPa' --default-character-set=utf8mb4 xserver < 008_complete_init.sql
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
USE xserver;
-- =====================================
-- 1. 公司表
-- =====================================
DROP TABLE IF EXISTS companies;
CREATE TABLE `companies` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT "公司ID",
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "公司名称",
`abbr` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT "" COMMENT "公司缩写",
`tenant_key` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT "" COMMENT "飞书企业标识",
`sort` int(11) NOT NULL DEFAULT 0 COMMENT "排序",
`status` tinyint NOT NULL DEFAULT 1 COMMENT "状态:1=启用,0=禁用",
`feishu_enabled` tinyint(1) NOT NULL DEFAULT 0 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_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT="公司表";
INSERT INTO companies (name, abbr, tenant_key, status, sort, feishu_enabled) VALUES
("合塑", "hesu", "10edab4d5d85175f", 1, 1, 1),
("新友合", "xinyouhe", "14e7bc0fe5985740", 1, 2, 1),
("派卡", "paika", "14e5377859d71740", 1, 3, 1),
("斯玛特", "simate", "", 0, 4, 0),
("magic bridge Auto", "mbaf", "", 1, 5, 0);
-- =====================================
-- 2. 用户表
-- =====================================
DROP TABLE IF EXISTS users;
CREATE TABLE `users` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT "用户ID",
`sn` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT "" COMMENT "用户编号",
`company_id` bigint unsigned NOT NULL COMMENT "所属公司ID",
`report_to` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT "上级用户ID",
`name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "用户名",
`avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "头像URL",
`sex` tinyint(2) NULL DEFAULT NULL COMMENT "性别:1=男,2=女",
`email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "邮箱",
`phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "手机号",
`password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "密码",
`status` tinyint NOT NULL DEFAULT 1 COMMENT "状态:1=正常,0=禁用",
`user_type` tinyint(2) NOT NULL DEFAULT 1 COMMENT "用户类型:1=内部,2=外部",
`union_id` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "飞书UnionID",
`feishu_user_id` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "飞书用户ID",
`feishu_open_id` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "飞书OpenID",
`tenant_key` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "当前企业标识",
`position` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "职位",
`sign_img` varchar(255) COLLATE utf8mb4_unicode_ci 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_company_id` (`company_id`),
KEY `idx_feishu_user_id` (`feishu_user_id`),
KEY `idx_feishu_union_id` (`union_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT="用户表";
-- =====================================
-- 3. 飞书应用配置表
-- =====================================
DROP TABLE IF EXISTS company_feishu_apps;
CREATE TABLE `company_feishu_apps` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT "ID",
`company_id` int(11) NOT NULL COMMENT "公司ID",
`system_id` int(11) NOT NULL DEFAULT 1 COMMENT "系统ID:1=X-Server",
`name` varchar(90) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT "" COMMENT "应用名称",
`app_id` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT "" COMMENT "飞书应用ID",
`app_secret` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT "" COMMENT "飞书应用密钥",
`encrypt_key` varchar(60) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT "事件加密密钥",
`verification_token` varchar(60) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT "事件验证令牌",
`callback_url` varchar(255) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT "PC端回调地址",
`mobile_callback_url` varchar(255) COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT "移动端回调地址",
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT "状态:1=启用,0=禁用",
`created_at` int(11) NOT NULL DEFAULT 0 COMMENT "创建时间",
`updated_at` int(11) NOT NULL DEFAULT 0 COMMENT "更新时间",
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_company_id` (`company_id`) USING BTREE,
KEY `idx_system_id` (`system_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT="公司飞书应用配置表";
INSERT INTO company_feishu_apps (company_id, system_id, name, app_id, app_secret, callback_url, mobile_callback_url, status, created_at, updated_at) VALUES
(2, 1, "X-Server", "cli_a73e1e6406fa501c", "9cMfxujjGG9JPmNfNcOwUdCoIXqaM1wY", "https://x.hnxinyouhe.com/auth/feishu-callback", "https://mweb-fdesk.hnxinyouhe.com/login/feishu-callback", 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(3, 1, "X-Server", "cli_a73e8253144f500b", "MpLqRmfWx8iA8vwWj5IO6elvIKAHU8E6", "https://x.hnxinyouhe.com/auth/feishu-callback", "https://mweb-fdesk.hnxinyouhe.com/login/feishu-callback", 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(1, 1, "X-Server", "cli_a6183b882cb8500d", "VqYib48u4EtDIa6nG9qH3f0fYCA1bCvs", "https://x.hnxinyouhe.com/auth/feishu-callback", "https://mweb-fdesk.hnxinyouhe.com/login/feishu-callback", 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
-- =====================================
-- 4. 审批流程配置表
-- =====================================
DROP TABLE IF EXISTS approval_flow;
CREATE TABLE `approval_flow` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT "流程ID",
`business_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "业务类型标识(如:business-trip, purchase)",
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "流程名称",
`description` varchar(255) COLLATE utf8mb4_unicode_ci 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="审批流程配置表";
INSERT INTO approval_flow (id, business_type, name, status) VALUES
(1, "business-trip", "默认出差审批流程", 1);
-- =====================================
-- 5. 审批流程节点表
-- =====================================
DROP TABLE IF EXISTS approval_node;
CREATE TABLE `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) COLLATE utf8mb4_unicode_ci 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="审批流程节点表";
INSERT INTO approval_node (flow_id, type, name, `order`, approvers) VALUES
(1, "approver", "部门主管审批", 1, "[]"),
(1, "approver", "人事审批", 2, "[]");
-- =====================================
-- 6. 审批单表
-- =====================================
DROP TABLE IF EXISTS approval_order;
CREATE TABLE `approval_order` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT "审批单ID",
`business_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "业务类型",
`business_id` bigint unsigned NOT NULL COMMENT "业务单据ID",
`title` varchar(200) COLLATE utf8mb4_unicode_ci 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. 审批记录表(审批轨迹)
-- =====================================
DROP TABLE IF EXISTS approval_record;
CREATE TABLE `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) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "节点类型",
`approver_id` bigint unsigned NOT NULL COMMENT "审批人ID",
`action` ENUM("submit", "approve", "reject", "cancel") NOT NULL COMMENT "操作类型",
`comment` varchar(500) COLLATE utf8mb4_unicode_ci 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. 出差申请表
-- =====================================
DROP TABLE IF EXISTS business_trip;
CREATE TABLE `business_trip` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT "出差ID",
`user_id` bigint unsigned NOT NULL COMMENT "申请人ID",
`reason` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "出差事由",
`start_date` date NOT NULL COMMENT "开始日期",
`end_date` date NOT NULL COMMENT "结束日期",
`destination` varchar(200) COLLATE utf8mb4_unicode_ci 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. 出差行程明细表
-- =====================================
DROP TABLE IF EXISTS business_trip_itinerary;
CREATE TABLE `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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "出发地",
`destination` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "目的地",
`transport` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "交通方式",
`accommodation` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "住宿安排",
`remark` varchar(255) COLLATE utf8mb4_unicode_ci 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="出差行程明细表";
-- =====================================
-- 10. 用户与飞书应用关联表
-- =====================================
DROP TABLE IF EXISTS user_feishu_binding;
CREATE TABLE `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) COLLATE utf8mb4_unicode_ci 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="用户飞书应用绑定表";
-- =====================================
-- 验证结果
-- =====================================
SELECT "=== 所有表 ===" as "";
SHOW TABLES;
SELECT "=== companies 数据 ===" as "";
SELECT id, name, abbr, tenant_key FROM companies ORDER BY id;
SELECT "=== company_feishu_apps 数据 ===" as "";
SELECT id, company_id, name, app_id FROM company_feishu_apps ORDER BY id;
SELECT "=== 统计 ===" as "";
SELECT "Total tables:" as "", COUNT(*) as count FROM information_schema.tables WHERE table_schema = "xserver";