-- X-Server 用户表飞书数据迁移 -- 将 users 表中的飞书字段数据迁移到 user_feishu_apps 表 USE xserver; -- ===================================== -- 1. 迁移现有数据到 user_feishu_apps -- ===================================== -- 将 users 表中的飞书信息迁移到 user_feishu_apps 表 -- 使用每个公司的默认飞书应用 (system_id=1) INSERT INTO user_feishu_apps ( user_id, company_id, feishu_app_id, feishu_user_id, feishu_open_id, tenant_key, is_default, last_login_at, created_at, updated_at ) SELECT u.id as user_id, u.company_id, cfa.id as feishu_app_id, u.feishu_user_id, u.feishu_open_id, u.tenant_key, 1 as is_default, NOW() as last_login_at, u.created_at, u.updated_at FROM users u INNER JOIN company_feishu_apps cfa ON cfa.company_id = u.company_id WHERE u.feishu_user_id IS NOT NULL AND cfa.system_id = 1 AND cfa.status = 1 ON DUPLICATE KEY UPDATE feishu_user_id = VALUES(feishu_user_id), feishu_open_id = VALUES(feishu_open_id), tenant_key = VALUES(tenant_key), last_login_at = NOW(); -- ===================================== -- 2. 更新 users 表的 feishu_app_id -- ===================================== UPDATE users u INNER JOIN company_feishu_apps cfa ON cfa.company_id = u.company_id SET u.feishu_app_id = cfa.id WHERE u.feishu_user_id IS NOT NULL AND cfa.system_id = 1 AND cfa.status = 1; -- ===================================== -- 3. 验证迁移结果 -- ===================================== SELECT "=== 迁移前 users 表数据 ===" as ""; SELECT company_id, COUNT(*) as total_users, SUM(CASE WHEN feishu_user_id IS NOT NULL THEN 1 ELSE 0 END) as with_feishu_id, SUM(CASE WHEN feishu_app_id IS NOT NULL THEN 1 ELSE 0 END) as with_app_id FROM users GROUP BY company_id; SELECT "=== 迁移后 user_feishu_apps 表数据 ===" as ""; SELECT company_id, COUNT(DISTINCT user_id) as users_count, COUNT(*) as bindings_count FROM user_feishu_apps GROUP BY company_id; -- ===================================== -- 4. 标记冗余字段(不删除,保证向后兼容) -- ===================================== -- 注意:以下字段保留但不推荐使用 -- - feishu_user_id (冗余,应从 user_feishu_apps 获取) -- - feishu_open_id (冗余,应从 user_feishu_apps 获取) -- - tenant_key (冗余,应从 user_feishu_apps 获取) -- -- 推荐使用方式: -- $binding = UserFeishuApp::where('user_id', $userId) -- ->where('company_id', $companyId) -- ->where('feishu_app_id', $appId) -- ->first(); -- $feishuUserId = $binding ? $binding->feishu_user_id : null;