Files
x-server-mobile/backend/database/migrations/002_merge_old_data.sql
T
root 1f6d346f6a feat: add multi-company Feishu integration and data migration
- Add companies table enhancements (abbr, tenant_key, feishu_enabled)
- Add users table enhancements (feishu fields, sn, report_to, etc.)
- Create company_feishu_apps table for multi-app per company
- Create user_sn_pool table for user number management
- Update FeishuService to support multiple Feishu apps per company
- Add data migration script (002_merge_old_data.sql)
- Add import script (scripts/import_old_data.php)
- Update User and Company models with new scopes and relationships
- Add CompanyFeishuApp model
- Add Git workflow documentation (GIT_WORKFLOW.md)

This supports:
- Multi-company architecture with Feishu integration
- Multiple Feishu apps per company (X-Server, Ticket, CRM)
- User number assignment system
- Data migration from old project

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

135 lines
6.8 KiB
SQL
Raw 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.
-- 合并旧项目数据到新项目
-- 执行前请确保已备份数据库
-- 1. 更新 companies 表,添加飞书相关字段
ALTER TABLE `companies`
ADD COLUMN `abbr` varchar(50) NOT NULL DEFAULT '' COMMENT '公司缩写' AFTER `name`,
ADD COLUMN `tenant_key` varchar(36) NOT NULL DEFAULT '' COMMENT '飞书企业标识' AFTER `abbr`,
ADD COLUMN `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序' AFTER `tenant_key`,
ADD COLUMN `feishu_enabled` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否启用飞书';
-- 2. 更新 users 表,添加飞书相关字段
ALTER TABLE `users`
ADD COLUMN `sn` varchar(36) NOT NULL DEFAULT '' COMMENT '用户编号' AFTER `id`,
ADD COLUMN `report_to` bigint(20) UNSIGNED NULL DEFAULT 0 COMMENT '上级用户ID' AFTER `sn`,
ADD COLUMN `avatar` varchar(255) NULL DEFAULT NULL COMMENT '头像' AFTER `phone`,
ADD COLUMN `sex` tinyint(2) NULL DEFAULT NULL COMMENT '性别:1:男,2:女' AFTER `avatar`,
ADD COLUMN `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态' AFTER `sex`,
ADD COLUMN `user_type` tinyint(2) NOT NULL DEFAULT 1 COMMENT '用户类型 1内部2外部' AFTER `status`,
ADD COLUMN `union_id` varchar(60) NULL DEFAULT NULL COMMENT 'ISV的唯一标识' AFTER `user_type`,
ADD COLUMN `feishu_user_id` varchar(60) NULL DEFAULT NULL COMMENT '飞书user_id' AFTER `union_id`,
ADD COLUMN `feishu_open_id` varchar(60) NULL DEFAULT NULL COMMENT '飞书open_id' AFTER `feishu_user_id`,
ADD COLUMN `tenant_key` varchar(60) NULL DEFAULT NULL COMMENT '当前企业标识' AFTER `feishu_open_id`,
ADD COLUMN `position` varchar(128) NULL DEFAULT NULL COMMENT '职位' AFTER `tenant_key`,
ADD COLUMN `sign_img` varchar(255) NULL DEFAULT NULL COMMENT '签名图片' AFTER `position`;
-- 3. 创建公司飞书应用配置表
CREATE TABLE IF NOT EXISTS `company_feishu_apps` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`company_id` int(11) NOT NULL DEFAULT 0 COMMENT '公司ID',
`system_id` int(11) NOT NULL DEFAULT 0 COMMENT '系统ID:1=X-Server, 2=工单, 3=CRM_PC',
`name` varchar(90) NOT NULL DEFAULT '' COMMENT '应用名称',
`tenant_key` varchar(36) NOT NULL DEFAULT '' COMMENT '企业标识',
`app_id` varchar(60) NOT NULL DEFAULT '' COMMENT '飞书应用ID',
`app_secret` varchar(150) NOT NULL DEFAULT '' COMMENT '飞书应用密钥',
`encrypt_key` varchar(60) NULL DEFAULT NULL COMMENT '事件加密密钥',
`verification_token` varchar(60) NULL DEFAULT NULL COMMENT '事件验证令牌',
`base_uri` varchar(255) NOT NULL DEFAULT 'https://open.feishu.cn/open-apis/' COMMENT '飞书API基础地址',
`callback_url` varchar(255) NULL DEFAULT NULL COMMENT 'PC端回调地址',
`mobile_callback_url` varchar(255) NULL DEFAULT NULL COMMENT '移动端回调地址',
`scopes` text NULL COMMENT '授权范围',
`state` varchar(255) NULL DEFAULT NULL COMMENT '携带参数',
`sort` int(11) NOT NULL DEFAULT 0 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='公司飞书应用配置';
-- 4. 创建用户编号池表
CREATE TABLE IF NOT EXISTS `user_sn_pool` (
`sn` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '用户编号',
`user_id` bigint(20) UNSIGNED NULL DEFAULT NULL COMMENT '分配的用户ID',
`status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '状态:0未分配,1已分配',
`created_at` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
PRIMARY KEY (`sn`) USING BTREE,
KEY `idx_user_id` (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户编号池';
-- 5. 插入初始编号池数据(从100000到199999)
INSERT IGNORE INTO `user_sn_pool` (`sn`, `status`, `created_at`)
SELECT
100000 + n.n AS sn,
0 AS status,
UNIX_TIMESTAMP() AS created_at
FROM (
SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) t
CROSS JOIN (
SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION
SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) t1
CROSS JOIN (
SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
) t2;
-- 6. 创建迁移数据临时表(用于从旧数据迁移)
CREATE TABLE IF NOT EXISTS `_migration_users` (
`id` bigint(20) UNSIGNED NOT NULL,
`sn` varchar(36) NOT NULL DEFAULT '',
`report_to` bigint(20) UNSIGNED NULL DEFAULT 0,
`name` varchar(60) NOT NULL DEFAULT '',
`avatar` varchar(255) NULL DEFAULT NULL,
`sex` tinyint(2) NULL DEFAULT NULL,
`password` varchar(255) NOT NULL DEFAULT '',
`phone` varchar(22) NOT NULL DEFAULT '',
`email` varchar(90) NOT NULL DEFAULT '',
`corp_id` int(11) NOT NULL DEFAULT 0,
`status` tinyint(1) NOT NULL DEFAULT 1,
`user_type` tinyint(2) NOT NULL DEFAULT 1,
`union_id` varchar(60) NULL DEFAULT NULL,
`user_id` varchar(60) NULL DEFAULT NULL,
`open_id` varchar(60) NULL DEFAULT NULL,
`tenant_key` varchar(60) NULL DEFAULT NULL,
`position` varchar(128) NULL DEFAULT NULL,
`sign_img` varchar(255) NULL DEFAULT NULL,
`created_at` int(11) NOT NULL DEFAULT 0,
`updated_at` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `_migration_corp` (
`id` int(11) UNSIGNED NOT NULL,
`name` varchar(255) NOT NULL DEFAULT '',
`abbr` enum('hesu','xinyouhe','paika','simate','mbaf') NOT NULL DEFAULT 'hesu',
`tenant_key` varchar(36) NOT NULL DEFAULT '',
`sort` int(11) NOT NULL DEFAULT 0,
`status` tinyint(1) NOT NULL DEFAULT 1,
`created_at` int(11) NOT NULL DEFAULT 0,
`updated_at` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `_migration_corp_feishu_app` (
`id` int(11) UNSIGNED NOT NULL,
`corp_id` int(11) NOT NULL DEFAULT 0,
`system_id` int(11) NOT NULL DEFAULT 0,
`name` varchar(90) NOT NULL DEFAULT '',
`tenant_key` varchar(36) NOT NULL DEFAULT '',
`app_id` varchar(60) NOT NULL DEFAULT '',
`app_secret` varchar(150) NOT NULL DEFAULT '',
`base_uri` varchar(255) NOT NULL DEFAULT '',
`r_url` varchar(255) NULL DEFAULT NULL,
`m_url` varchar(255) NULL DEFAULT '',
`scopes` text NULL,
`state` varchar(255) NULL DEFAULT NULL,
`sort` int(11) NOT NULL DEFAULT 0,
`status` tinyint(1) NOT NULL DEFAULT 1,
`created_at` int(11) NOT NULL DEFAULT 0,
`updated_at` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;