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 <noreply@anthropic.com>
This commit is contained in:
root
2026-02-24 18:44:40 +08:00
parent 8629f4a4ce
commit e748eba55b
2 changed files with 69 additions and 0 deletions
+1
View File
@@ -52,3 +52,4 @@ docker-volumes/
# Large SQL files (import data files)
*.sql
!database/migrations/*.sql
!backend/database/migrations/*.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;