-- ============================================================
-- 报表系统表 - 新增 tenant_id 迁移脚本
-- 为已存在的5张报表系统表添加租户隔离字段
-- 执行前请确认当前数据库中表是否存在
-- ============================================================

-- ----------------------------------------------------------
-- 1. report_business_config (业务配置表)
-- ----------------------------------------------------------

-- 添加 tenant_id 列
ALTER TABLE IF EXISTS report_business_config
    ADD COLUMN IF NOT EXISTS tenant_id BIGINT NOT NULL DEFAULT 0;

-- 重建唯一索引（加入 tenant_id）
DROP INDEX IF EXISTS idx_business_code;
CREATE UNIQUE INDEX IF NOT EXISTS idx_business_code
    ON report_business_config (tenant_id, business_code);

COMMENT ON COLUMN report_business_config.tenant_id IS '租户ID';


-- ----------------------------------------------------------
-- 2. report_report_config (报表配置表)
-- ----------------------------------------------------------

-- 添加 tenant_id 列
ALTER TABLE IF EXISTS report_report_config
    ADD COLUMN IF NOT EXISTS tenant_id BIGINT NOT NULL DEFAULT 0;

-- 重建唯一约束（加入 tenant_id）
ALTER TABLE IF EXISTS report_report_config
    DROP CONSTRAINT IF EXISTS uk_business_report_code;
ALTER TABLE IF EXISTS report_report_config
    ADD CONSTRAINT uk_business_report_code UNIQUE (tenant_id, business_code, report_code);

-- 重建索引
DROP INDEX IF EXISTS idx_report_business_code;
CREATE INDEX IF NOT EXISTS idx_report_business_code
    ON report_report_config (tenant_id, business_code);

COMMENT ON COLUMN report_report_config.tenant_id IS '租户ID';


-- ----------------------------------------------------------
-- 3. report_field_config (字段配置表)
-- ----------------------------------------------------------

-- 添加 tenant_id 列
ALTER TABLE IF EXISTS report_field_config
    ADD COLUMN IF NOT EXISTS tenant_id BIGINT NOT NULL DEFAULT 0;

-- 重建唯一约束（加入 tenant_id）
ALTER TABLE IF EXISTS report_field_config
    DROP CONSTRAINT IF EXISTS uk_business_report_field_code;
ALTER TABLE IF EXISTS report_field_config
    ADD CONSTRAINT uk_business_report_field_code UNIQUE (tenant_id, business_code, report_code, field_code);

-- 重建索引
DROP INDEX IF EXISTS idx_field_business_report;
CREATE INDEX IF NOT EXISTS idx_field_business_report
    ON report_field_config (tenant_id, business_code, report_code);
DROP INDEX IF EXISTS idx_field_data_type;
CREATE INDEX IF NOT EXISTS idx_field_data_type
    ON report_field_config (tenant_id, data_type);
DROP INDEX IF EXISTS idx_field_field_role;
CREATE INDEX IF NOT EXISTS idx_field_field_role
    ON report_field_config (tenant_id, field_role);

COMMENT ON COLUMN report_field_config.tenant_id IS '租户ID';


-- ----------------------------------------------------------
-- 4. report_extract_config (抽取配置表)
-- ----------------------------------------------------------

-- 添加 tenant_id 列
ALTER TABLE IF EXISTS report_extract_config
    ADD COLUMN IF NOT EXISTS tenant_id BIGINT NOT NULL DEFAULT 0;

-- 重建唯一约束（加入 tenant_id）
ALTER TABLE IF EXISTS report_extract_config
    DROP CONSTRAINT IF EXISTS uk_business_report_extract_code;
ALTER TABLE IF EXISTS report_extract_config
    ADD CONSTRAINT uk_business_report_extract_code UNIQUE (tenant_id, business_code, report_code, extract_code);

-- 重建索引
DROP INDEX IF EXISTS idx_extract_business_report;
CREATE INDEX IF NOT EXISTS idx_extract_business_report
    ON report_extract_config (tenant_id, business_code, report_code);

COMMENT ON COLUMN report_extract_config.tenant_id IS '租户ID';


-- ----------------------------------------------------------
-- 5. report_extract_log (抽取记录表)
-- ----------------------------------------------------------

-- 添加 tenant_id 列
ALTER TABLE IF EXISTS report_extract_log
    ADD COLUMN IF NOT EXISTS tenant_id BIGINT NOT NULL DEFAULT 0;

-- 重建唯一约束（加入 tenant_id）
ALTER TABLE IF EXISTS report_extract_log
    DROP CONSTRAINT IF EXISTS uk_extract_keys;
ALTER TABLE IF EXISTS report_extract_log
    ADD CONSTRAINT uk_extract_keys UNIQUE (tenant_id, business_code, report_code, extract_code, stat_date);

-- 重建索引
DROP INDEX IF EXISTS idx_extract_log_business_report;
CREATE INDEX IF NOT EXISTS idx_extract_log_business_report
    ON report_extract_log (tenant_id, business_code, report_code);
DROP INDEX IF EXISTS idx_extract_log_stat_date;
CREATE INDEX IF NOT EXISTS idx_extract_log_stat_date
    ON report_extract_log (tenant_id, stat_date);

COMMENT ON COLUMN report_extract_log.tenant_id IS '租户ID';
