From e748eba55b16c93a8fe0bb11e0b14787e30f5672 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 24 Feb 2026 18:44:40 +0800 Subject: [PATCH] fix: add table structure migration with UTF-8 encoding - Update .gitignore to allow backend database migrations - Add 004_fix_table_structure.sql migration - Rename tables to plural form (user->users, company->companies) - Add missing fields to companies and users tables - Create company_feishu_apps table for multi-app configuration - Import company data and Feishu app configurations - Set UTF-8 charset to fix encoding issues from MySQL 5.7 export Co-Authored-By: Claude Opus 4.6 --- .gitignore | 1 + .../migrations/004_fix_table_structure.sql | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 backend/database/migrations/004_fix_table_structure.sql diff --git a/.gitignore b/.gitignore index 3e45471..a9e1ad2 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ docker-volumes/ # Large SQL files (import data files) *.sql !database/migrations/*.sql +!backend/database/migrations/*.sql diff --git a/backend/database/migrations/004_fix_table_structure.sql b/backend/database/migrations/004_fix_table_structure.sql new file mode 100644 index 0000000..59e11ee --- /dev/null +++ b/backend/database/migrations/004_fix_table_structure.sql @@ -0,0 +1,68 @@ +-- 修复表结构和命名以符合项目规范 +-- 执行前请备份数据库 +-- 确保以UTF-8编码执行: source /path/to/004_fix_table_structure.sql + +-- 设置字符集 +SET NAMES utf8mb4; +SET CHARACTER SET utf8mb4; + +-- 1. 重命名表为复数形式(符合 webman/Eloquent 规范) +RENAME TABLE `user` TO `users`; +RENAME TABLE `company` TO `companies`; + +-- 2. 为 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 '是否启用飞书' AFTER `status`; + +-- 3. 为 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 `sex` tinyint(2) NULL DEFAULT NULL COMMENT '性别:1:男,2:女' AFTER `avatar`, +ADD COLUMN `user_type` tinyint(2) NOT NULL DEFAULT 1 COMMENT '用户类型 1内部2外部' AFTER `status`, +ADD COLUMN `position` varchar(128) NULL DEFAULT NULL COMMENT '职位' AFTER `feishu_open_id`, +ADD COLUMN `sign_img` varchar(255) NULL DEFAULT NULL COMMENT '签名图片' AFTER `position`; + +-- 4. 创建飞书应用配置表 +CREATE TABLE IF NOT EXISTS `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) 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 '事件验证令牌', + `callback_url` varchar(255) NULL DEFAULT NULL COMMENT '回调地址', + `mobile_callback_url` varchar(255) NULL DEFAULT NULL COMMENT '移动端回调地址', + `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态', + `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 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司飞书应用配置'; + +-- 5. 清空并导入公司数据 +TRUNCATE TABLE `companies`; +ALTER TABLE `companies` AUTO_INCREMENT = 1; + +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); + +-- 6. 导入飞书应用配置 +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()); + +-- 执行完成提示 +SELECT '数据迁移完成!' AS message; +SELECT COUNT(*) AS company_count FROM companies; +SELECT COUNT(*) AS feishu_app_count FROM company_feishu_apps;