/*
 数据库升级脚本 - 分离联络单号和件号
 
 执行日期: 2026-02-04
 目的: 将barcode字段拆分为ContactNumber和ItemNumber两个独立字段
 影响表: scandata
*/

USE fullautowaterpressure;

-- 1. 添加新字段
ALTER TABLE `scandata` 
ADD COLUMN `ContactNumber` VARCHAR(100) NULL COMMENT '联络单号' AFTER `barcode`,
ADD COLUMN `ItemNumber` VARCHAR(100) NULL COMMENT '件号' AFTER `ContactNumber`;

-- 2. 迁移现有数据（如果barcode包含"-"分隔符）
UPDATE `scandata` 
SET 
    `ContactNumber` = SUBSTRING_INDEX(`barcode`, '-', 1),
    `ItemNumber` = SUBSTRING_INDEX(`barcode`, '-', -1)
WHERE `barcode` IS NOT NULL AND `barcode` LIKE '%-%';

-- 3. 对于没有分隔符的数据，将整个barcode作为联络单号
UPDATE `scandata` 
SET 
    `ContactNumber` = `barcode`,
    `ItemNumber` = ''
WHERE `barcode` IS NOT NULL AND `barcode` NOT LIKE '%-%';

-- 4. 添加索引以提高查询性能
CREATE INDEX `idx_contact_number` ON `scandata`(`ContactNumber`);
CREATE INDEX `idx_item_number` ON `scandata`(`ItemNumber`);

-- 5. 验证数据迁移
SELECT 
    COUNT(*) as total_records,
    COUNT(ContactNumber) as has_contact_number,
    COUNT(ItemNumber) as has_item_number
FROM `scandata`;

-- 6. 显示迁移后的示例数据
SELECT 
    Id,
    barcode as '原条码',
    ContactNumber as '联络单号',
    ItemNumber as '件号',
    CreateTime
FROM `scandata`
ORDER BY Id DESC
LIMIT 10;

-- 注意：
-- 1. barcode字段保留用于兼容性，不删除
-- 2. 新数据将同时填充barcode、ContactNumber和ItemNumber
-- 3. 如果需要回滚，可以删除新增的两个字段
