-- Active: 1763990602551@@192.144.167.231@3306@autoaiworksys
-- ============================================
-- 数据迁移脚本：将 device_status 表中的 device_id 迁移到 pla_account 表
-- 执行时间：2025-01-XX
-- 说明：根据 sn_code 匹配，将 device_status.device_id 更新到 pla_account.device_id
-- ============================================

-- ============================================
-- 1. 查看 device_status 表中的数据（用于确认）
-- ============================================
SELECT 
    sn_code,
    device_id,
    deviceName,
    isOnline,
    isLoggedIn,
    lastHeartbeatTime
FROM device_status
ORDER BY sn_code;

-- ============================================
-- 2. 查看迁移前的 pla_account 数据（用于确认）
-- ============================================
SELECT 
    id,
    sn_code,
    device_id,
    name,
    login_name,
    platform_type
FROM pla_account
ORDER BY sn_code;

-- ============================================
-- 3. 执行数据迁移：将 device_status.device_id 更新到 pla_account.device_id
-- ============================================
-- 根据 sn_code 匹配，更新 pla_account 表的 device_id 字段
UPDATE pla_account pa
INNER JOIN device_status ds ON pa.sn_code = ds.sn_code
SET pa.device_id = ds.device_id
WHERE ds.device_id IS NOT NULL 
  AND ds.device_id != ''
  AND (pa.device_id IS NULL OR pa.device_id = '');

-- ============================================
-- 4. 查看迁移后的结果（用于验证）
-- ============================================
SELECT 
    pa.id,
    pa.sn_code,
    pa.device_id,
    pa.name,
    pa.login_name,
    pa.platform_type,
    CASE 
        WHEN pa.device_id IS NOT NULL AND pa.device_id != '' THEN '已迁移'
        ELSE '未迁移'
    END AS migration_status
FROM pla_account pa
WHERE pa.sn_code IN (SELECT sn_code FROM device_status)
ORDER BY pa.sn_code;

-- ============================================
-- 5. 统计迁移结果
-- ============================================
SELECT 
    COUNT(*) AS total_device_status_records,
    SUM(CASE WHEN device_id IS NOT NULL AND device_id != '' THEN 1 ELSE 0 END) AS records_with_device_id
FROM device_status;

SELECT 
    COUNT(*) AS total_pla_account_records,
    SUM(CASE WHEN device_id IS NOT NULL AND device_id != '' THEN 1 ELSE 0 END) AS records_with_device_id_after_migration
FROM pla_account
WHERE sn_code IN (SELECT sn_code FROM device_status);

-- ============================================
-- 注意事项
-- ============================================
-- 1. 此脚本会根据 sn_code 匹配 device_status 和 pla_account 表
-- 2. 只会更新 device_id 为空或 NULL 的 pla_account 记录
-- 3. 如果 pla_account 中已有 device_id，不会覆盖（如需强制覆盖，请修改 WHERE 条件）
-- 4. 执行前建议先查看两个表的数据，确认匹配关系
-- 5. 如果 device_status 表中没有对应的 sn_code，该 pla_account 记录的 device_id 将保持为空

-- ============================================
-- 可选：如果需要强制覆盖已有的 device_id（谨慎操作！）
-- ============================================
-- 取消下面的注释，可以强制覆盖 pla_account 中已有的 device_id
/*
UPDATE pla_account pa
INNER JOIN device_status ds ON pa.sn_code = ds.sn_code
SET pa.device_id = ds.device_id
WHERE ds.device_id IS NOT NULL AND ds.device_id != '';
*/

