Files
autoAiWorkSys/_sql/migrate_device_status_to_pla_account.sql
张成 4443d43ec1 1
2025-12-15 22:03:01 +08:00

136 lines
5.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.
-- ============================================
-- 数据库迁移脚本:移除 device_status迁移到 pla_account
-- 执行时间2025-01-XX
-- 说明:
-- 1. 为 pla_account 表添加 device_id 字段
-- 2. 删除 device_status 表(如果存在)
-- 3. 创建 account_config 表(账号配置表)
-- ============================================
-- ============================================
-- 1. 为 pla_account 表添加 device_id 字段
-- ============================================
SET @exist_device_id = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'pla_account'
AND COLUMN_NAME = 'device_id'
);
SET @sql_device_id = IF(@exist_device_id = 0,
'ALTER TABLE `pla_account`
ADD COLUMN `device_id` VARCHAR(200) NULL DEFAULT '''' COMMENT ''设备ID''
AFTER `sn_code`',
'SELECT ''字段 device_id 已存在,跳过添加'' AS message'
);
PREPARE stmt FROM @sql_device_id;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ============================================
-- 2. 创建 account_config 表(如果不存在)
-- ============================================
CREATE TABLE IF NOT EXISTS `account_config` (
`account_id` INT NOT NULL COMMENT '账号ID关联 pla_account.id',
`platform_type` VARCHAR(50) NOT NULL DEFAULT 'boss' COMMENT '平台类型boss- Boss直聘, liepin- 猎聘)',
`platform_config` JSON NULL COMMENT '平台相关配置JSON对象',
`auto_deliver_config` JSON NULL COMMENT '自动投递配置JSON对象',
`auto_chat_config` JSON NULL COMMENT '自动沟通配置JSON对象',
`auto_active_config` JSON NULL COMMENT '自动活跃配置JSON对象',
`notes` TEXT NULL DEFAULT '' COMMENT '备注',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`account_id`),
INDEX `idx_platform_type` (`platform_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账号配置表';
-- 如果 MySQL 版本低于 5.7,不支持 JSON 类型,可以使用以下 SQL将 JSON 改为 TEXT
/*
CREATE TABLE IF NOT EXISTS `account_config` (
`account_id` INT NOT NULL COMMENT '账号ID关联 pla_account.id',
`platform_type` VARCHAR(50) NOT NULL DEFAULT 'boss' COMMENT '平台类型boss- Boss直聘, liepin- 猎聘)',
`platform_config` TEXT NULL COMMENT '平台相关配置JSON对象',
`auto_deliver_config` TEXT NULL COMMENT '自动投递配置JSON对象',
`auto_chat_config` TEXT NULL COMMENT '自动沟通配置JSON对象',
`auto_active_config` TEXT NULL COMMENT '自动活跃配置JSON对象',
`notes` TEXT NULL DEFAULT '' COMMENT '备注',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`account_id`),
INDEX `idx_platform_type` (`platform_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账号配置表';
*/
-- ============================================
-- 3. 可选:迁移 device_status 中的 device_id 到 pla_account
-- ============================================
-- 注意:此步骤只在 device_status 表存在且有数据时执行
-- 如果 device_status 表已不存在,可以跳过此步骤
-- 检查 device_status 表是否存在
SET @table_exists = (
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'device_status'
);
-- 如果 device_status 表存在,尝试迁移 device_id 数据
-- 注意:此迁移假设 device_status 使用 sn_code 作为主键pla_account 也有 sn_code 字段
-- 如果结构不同,请手动调整迁移 SQL
/*
SET @sql_migrate_device_id = IF(@table_exists > 0,
'UPDATE `pla_account` pa
INNER JOIN `device_status` ds ON pa.sn_code = ds.sn_code
SET pa.device_id = ds.device_id
WHERE pa.device_id IS NULL OR pa.device_id = ''''
AND ds.device_id IS NOT NULL AND ds.device_id != ''''',
'SELECT ''device_status 表不存在,跳过数据迁移'' AS message'
);
PREPARE stmt FROM @sql_migrate_device_id;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
*/
-- ============================================
-- 4. 删除 device_status 表(谨慎操作!)
-- ============================================
-- ⚠️ 警告:删除表会丢失所有数据,请确保已经备份或迁移了需要的数据
-- 如果确定要删除 device_status 表,请取消下面 SQL 的注释
-- DROP TABLE IF EXISTS `device_status`;
-- 如果不想直接删除,可以重命名表作为备份:
-- RENAME TABLE `device_status` TO `device_status_backup_202501XX`;
-- ============================================
-- 注意事项
-- ============================================
-- 1. 执行前请先备份数据库
-- 2. device_id 字段允许为 NULL旧数据可能没有 device_id
-- 3. account_config 表使用 account_id 作为主键,关联 pla_account.id
-- 4. 如果 MySQL 版本低于 5.7,请使用 TEXT 类型替代 JSON 类型
-- 5. device_status 表的删除操作是可选的,建议先重命名备份
-- 6. 如果 device_status 表不存在,相关的 SQL 会自动跳过
-- ============================================
-- 验证执行结果
-- ============================================
-- 执行以下 SQL 验证迁移结果:
-- 1. 检查 pla_account 表的 device_id 字段
-- DESCRIBE pla_account;
-- 2. 检查 account_config 表是否创建成功
-- DESCRIBE account_config;
-- 3. 检查 device_status 表是否还存在(如果已删除,此查询会报错)
-- SELECT COUNT(*) FROM device_status;
-- 4. 查看已迁移 device_id 的账号数量
-- SELECT COUNT(*) FROM pla_account WHERE device_id IS NOT NULL AND device_id != '';