SET NAMES utf8mb4; USE baiyue_iam; SET @customer_dimension_status_ddl = (SELECT IF( EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='iam_tenant' AND column_name='dimension_initialization_status'), 'SELECT 1', 'ALTER TABLE iam_tenant ADD COLUMN dimension_initialization_status VARCHAR(16) NOT NULL DEFAULT ''READY'' COMMENT ''默认尺寸初始化状态:PENDING待处理、READY已就绪、FAILED失败'' AFTER status')); PREPARE customer_dimension_status_stmt FROM @customer_dimension_status_ddl; EXECUTE customer_dimension_status_stmt; DEALLOCATE PREPARE customer_dimension_status_stmt; CREATE TABLE IF NOT EXISTS iam_customer_dimension_initialization_task ( tenant_id BIGINT NOT NULL COMMENT '客户ID及任务聚合ID', operator_id BIGINT NOT NULL COMMENT '触发初始化的操作人ID;系统补偿为0', initialization_key VARCHAR(128) NOT NULL COMMENT '稳定初始化幂等键:iam-customer-create:{tenantId}', action VARCHAR(16) NOT NULL DEFAULT 'INITIALIZE' COMMENT '目标动作:INITIALIZE初始化、COMPENSATE补偿', status VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '投递状态:PENDING待投递、SENDING投递中、READY已就绪、FAILED失败、CANCELLED已补偿', attempt_count INT NOT NULL DEFAULT 0 COMMENT '当前动作已失败尝试次数', next_retry_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '下次允许投递时间', lease_owner VARCHAR(128) NULL COMMENT '当前任务租约持有者', lease_until DATETIME(3) NULL COMMENT '当前任务租约截止时间', last_error_code VARCHAR(32) NULL COMMENT '最后下游错误码', last_error_message VARCHAR(1000) NULL COMMENT '最后诊断错误,不保存敏感凭证', remote_config_id BIGINT NULL COMMENT 'Firstleg返回的首条默认尺寸配置ID', task_version INT NOT NULL DEFAULT 0 COMMENT '任务乐观版本;切换动作或认领时递增', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '任务创建时间', updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '任务更新时间', completed_at DATETIME(3) NULL COMMENT 'READY或CANCELLED完成时间', PRIMARY KEY (tenant_id), KEY idx_customer_dimension_task_dispatch (status,next_retry_at,lease_until), KEY idx_customer_dimension_task_diagnosis (status,updated_at) ) ENGINE=InnoDB COMMENT='IAM客户默认尺寸可靠后台初始化任务及诊断状态';