-- 1.0.278：KPI SQL 配置化计算引擎（AIDOP-KPI-SQL-CONFIG-RUNTIME-1）。
-- 表结构由 CodeFirst（EnableInitTable=true）从实体创建；本项目 EnableUnderLine=false → 列名 PascalCase。
-- 下方 CREATE TABLE IF NOT EXISTS 为兜底（CodeFirst 已建则跳过），列名/类型对齐实体。
-- 种子：S5_L1_001 在 AIDOP 租户 797403760988229 的 LEGACY_CODE v1（PUBLISHED/IsCurrent=1）——默认=legacy 向后兼容 + 支持"回滚到 LEGACY_CODE"演示。

CREATE TABLE IF NOT EXISTS ado_smart_ops_kpi_calc_config (
  `Id` BIGINT NOT NULL AUTO_INCREMENT,
  `TenantId` BIGINT DEFAULT NULL,
  `MetricCode` VARCHAR(50) NOT NULL,
  `ModuleCode` VARCHAR(20) NOT NULL,
  `VersionNo` INT NOT NULL,
  `CalcEngineType` VARCHAR(20) NOT NULL DEFAULT 'CONFIG_SQL',
  `DataSourceCode` VARCHAR(100) DEFAULT NULL,
  `SqlScript` TEXT DEFAULT NULL,
  `SqlParametersJson` TEXT DEFAULT NULL,
  `TimeoutSeconds` INT NOT NULL DEFAULT 30,
  `PublishStatus` VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
  `IsCurrent` TINYINT(1) NOT NULL DEFAULT 0,
  `Remark` TEXT DEFAULT NULL,
  `CreatedBy` VARCHAR(100) DEFAULT NULL,
  `CreatedAt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `UpdatedBy` VARCHAR(100) DEFAULT NULL,
  `UpdatedAt` DATETIME DEFAULT NULL,
  `PublishedBy` VARCHAR(100) DEFAULT NULL,
  `PublishedAt` DATETIME DEFAULT NULL,
  `RetiredBy` VARCHAR(100) DEFAULT NULL,
  `RetiredAt` DATETIME DEFAULT NULL,
  PRIMARY KEY (`Id`),
  UNIQUE KEY `uk_kpi_calc_cfg_metric_ver` (`MetricCode`, `TenantId`, `VersionNo`),
  KEY `idx_kpi_calc_cfg_current` (`MetricCode`, `TenantId`, `IsCurrent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='KPI 计算配置（SQL 配置化）';

CREATE TABLE IF NOT EXISTS ado_smart_ops_kpi_calc_run_log (
  `Id` BIGINT NOT NULL AUTO_INCREMENT,
  `TenantId` BIGINT DEFAULT NULL,
  `BatchId` VARCHAR(100) NOT NULL,
  `ModuleCode` VARCHAR(20) NOT NULL,
  `MetricCode` VARCHAR(50) NOT NULL,
  `ConfigId` BIGINT DEFAULT NULL,
  `VersionNo` INT DEFAULT NULL,
  `EngineType` VARCHAR(20) NOT NULL,
  `DataSourceCode` VARCHAR(100) DEFAULT NULL,
  `BizDate` DATE NOT NULL,
  `StartedAt` DATETIME NOT NULL,
  `FinishedAt` DATETIME DEFAULT NULL,
  `DurationMs` BIGINT NOT NULL DEFAULT 0,
  `Status` VARCHAR(20) NOT NULL,
  `RowCount` INT NOT NULL DEFAULT 0,
  `MetricValue` DECIMAL(18,4) DEFAULT NULL,
  `NumeratorValue` DECIMAL(18,4) DEFAULT NULL,
  `DenominatorValue` DECIMAL(18,4) DEFAULT NULL,
  `ErrorCode` VARCHAR(50) DEFAULT NULL,
  `ErrorMessage` VARCHAR(500) DEFAULT NULL,
  `SqlHash` VARCHAR(64) DEFAULT NULL,
  `ParameterSnapshot` TEXT DEFAULT NULL,
  `TriggerType` VARCHAR(20) NOT NULL,
  `CreateTime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`Id`),
  UNIQUE KEY `uk_kpi_calc_run_metric_batch` (`MetricCode`, `BatchId`),
  KEY `idx_kpi_calc_run_metric_time` (`MetricCode`, `StartedAt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='KPI 计算 SQL 运行日志';

-- 种子 S5_L1_001 LEGACY_CODE v1（幂等：存在则跳过）。列名 PascalCase（EnableUnderLine=false）。
INSERT INTO ado_smart_ops_kpi_calc_config
  (`TenantId`, `MetricCode`, `ModuleCode`, `VersionNo`, `CalcEngineType`, `TimeoutSeconds`, `PublishStatus`, `IsCurrent`, `Remark`, `CreatedBy`, `CreatedAt`)
SELECT 797403760988229, 'S5_L1_001', 'S5', 1, 'LEGACY_CODE', 30, 'PUBLISHED', 1, 'S5_L1_001 初始 legacy 版本（向后兼容+回滚基线）', 'system', NOW()
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM ado_smart_ops_kpi_calc_config
  WHERE `MetricCode`='S5_L1_001' AND `TenantId`=797403760988229 AND `VersionNo`=1
);
