Files
olons_admin/server/storage/data/migrations/20261008_001_governance.sql
T
2026-10-10 20:56:17 +08:00

162 lines
10 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- S1 基础治理:审批、审计、幂等、Outbox 与看板汇总
-- MySQL 8.0+
CREATE TABLE IF NOT EXISTS `hg_approval_request` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '租户ID',
`approval_no` varchar(32) NOT NULL COMMENT '审批单号',
`approval_type` varchar(32) NOT NULL COMMENT '审批类型',
`target_type` varchar(32) NOT NULL COMMENT '目标类型',
`target_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '目标ID',
`action` varchar(64) NOT NULL COMMENT '拟执行动作',
`title` varchar(200) NOT NULL COMMENT '审批标题',
`payload_json` json NOT NULL COMMENT '待执行数据快照',
`diff_json` json DEFAULT NULL COMMENT '前后差异',
`risk_level` tinyint NOT NULL DEFAULT 1 COMMENT '风险级别',
`required_approvals` int unsigned NOT NULL DEFAULT 1 COMMENT '需要通过数',
`approval_status` tinyint NOT NULL DEFAULT 1 COMMENT '审批状态',
`applicant_id` bigint unsigned NOT NULL COMMENT '申请人',
`submitted_at` datetime(3) DEFAULT NULL COMMENT '提交时间',
`decided_at` datetime(3) DEFAULT NULL COMMENT '决定时间',
`executed_at` datetime(3) DEFAULT NULL COMMENT '执行时间',
`expire_at` datetime(3) DEFAULT NULL COMMENT '超时时间',
`version` int unsigned NOT NULL DEFAULT 0 COMMENT '乐观锁',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`created_by` bigint unsigned NOT NULL DEFAULT 0 COMMENT '创建者',
`updated_by` bigint unsigned 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 '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_approval_no` (`approval_no`),
KEY `idx_approval_type_status` (`tenant_id`,`approval_type`,`approval_status`,`created_at`,`id`),
KEY `idx_approval_target` (`tenant_id`,`target_type`,`target_id`,`created_at`),
KEY `idx_approval_applicant` (`tenant_id`,`applicant_id`,`created_at`),
KEY `idx_approval_expire` (`approval_status`,`expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='治理_审批请求';
CREATE TABLE IF NOT EXISTS `hg_approval_action` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '租户ID',
`approval_request_id` bigint unsigned NOT NULL COMMENT '审批请求ID',
`step_no` int unsigned NOT NULL COMMENT '节点顺序',
`actor_id` bigint unsigned NOT NULL COMMENT '操作人',
`action` tinyint NOT NULL COMMENT '审批动作',
`reason_code` varchar(64) DEFAULT NULL COMMENT '原因编码',
`comment` varchar(1000) DEFAULT NULL COMMENT '审批意见',
`snapshot_json` json NOT NULL COMMENT '操作时快照',
`actor_ip_cipher` varchar(512) DEFAULT NULL COMMENT '操作IP密文',
`mfa_verified` tinyint NOT NULL DEFAULT 0 COMMENT '是否二次认证',
`created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_approval_step_actor` (`approval_request_id`,`step_no`,`actor_id`),
KEY `idx_approval_action_request` (`tenant_id`,`approval_request_id`,`created_at`),
KEY `idx_approval_action_actor` (`tenant_id`,`actor_id`,`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='治理_审批动作';
CREATE TABLE IF NOT EXISTS `hg_sensitive_access_log` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '租户ID',
`access_no` varchar(32) NOT NULL COMMENT '查看流水号',
`actor_id` bigint unsigned NOT NULL COMMENT '管理员ID',
`target_type` varchar(32) NOT NULL COMMENT '目标类型',
`target_id` bigint unsigned NOT NULL COMMENT '目标ID',
`field_set` json NOT NULL COMMENT '查看字段集',
`purpose_code` varchar(64) NOT NULL COMMENT '用途编码',
`purpose_text` varchar(500) NOT NULL COMMENT '用途说明',
`authorization_no` varchar(64) DEFAULT NULL COMMENT '授权号',
`mfa_verified` tinyint NOT NULL DEFAULT 0 COMMENT '是否二次认证',
`result` tinyint NOT NULL COMMENT '查看结果',
`trace_id` varchar(64) NOT NULL COMMENT '链路ID',
`created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_sensitive_access_no` (`access_no`),
KEY `idx_sensitive_actor` (`tenant_id`,`actor_id`,`created_at`),
KEY `idx_sensitive_target` (`tenant_id`,`target_type`,`target_id`,`created_at`),
KEY `idx_sensitive_trace` (`trace_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='治理_敏感数据查看日志';
CREATE TABLE IF NOT EXISTS `hg_biz_audit_log` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '租户ID',
`audit_no` varchar(32) NOT NULL COMMENT '审计号',
`actor_type` tinyint NOT NULL COMMENT '操作人类型',
`actor_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '操作人ID',
`module` varchar(64) NOT NULL COMMENT '业务模块',
`action` varchar(64) NOT NULL COMMENT '操作动作',
`target_type` varchar(64) NOT NULL COMMENT '目标类型',
`target_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '目标ID',
`before_digest` char(64) DEFAULT NULL COMMENT '变更前摘要',
`after_digest` char(64) DEFAULT NULL COMMENT '变更后摘要',
`change_json` json DEFAULT NULL COMMENT '已脱敏差异',
`reason` varchar(500) DEFAULT NULL COMMENT '操作原因',
`approval_no` varchar(32) DEFAULT NULL COMMENT '审批单号',
`trace_id` varchar(64) NOT NULL COMMENT '链路ID',
`prev_hash` char(64) DEFAULT NULL COMMENT '前一条哈希',
`row_hash` char(64) NOT NULL COMMENT '当前行哈希',
`created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_biz_audit_no` (`audit_no`),
KEY `idx_biz_audit_actor` (`tenant_id`,`actor_id`,`created_at`),
KEY `idx_biz_audit_target` (`tenant_id`,`target_type`,`target_id`,`created_at`),
KEY `idx_biz_audit_module` (`tenant_id`,`module`,`action`,`created_at`),
KEY `idx_biz_audit_trace` (`trace_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='治理_业务审计日志';
CREATE TABLE IF NOT EXISTS `hg_idempotency_record` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '租户ID',
`scope` varchar(64) NOT NULL COMMENT '业务作用域',
`idempotency_key` varchar(128) NOT NULL COMMENT '幂等键',
`request_digest` char(64) NOT NULL COMMENT '请求摘要',
`resource_type` varchar(64) DEFAULT NULL COMMENT '资源类型',
`resource_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '资源ID',
`process_status` tinyint NOT NULL DEFAULT 1 COMMENT '处理状态',
`response_code` int DEFAULT NULL COMMENT '响应码',
`response_digest` char(64) DEFAULT NULL COMMENT '响应摘要',
`expire_at` datetime(3) NOT NULL 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 '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_idempotency_scope_key` (`tenant_id`,`scope`,`idempotency_key`),
KEY `idx_idempotency_expire` (`expire_at`),
KEY `idx_idempotency_resource` (`tenant_id`,`resource_type`,`resource_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='治理_幂等记录';
CREATE TABLE IF NOT EXISTS `hg_outbox_event` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '租户ID',
`event_no` varchar(32) NOT NULL COMMENT '事件号',
`aggregate_type` varchar(64) NOT NULL COMMENT '聚合根类型',
`aggregate_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '聚合根ID',
`event_type` varchar(128) NOT NULL COMMENT '事件类型',
`payload_json` json NOT NULL COMMENT '已脱敏事件数据',
`publish_status` tinyint NOT NULL DEFAULT 1 COMMENT '发送状态',
`retry_count` int unsigned NOT NULL DEFAULT 0 COMMENT '重试次数',
`next_retry_at` datetime(3) DEFAULT NULL COMMENT '下次重试时间',
`last_error` varchar(1000) DEFAULT NULL COMMENT '最后错误',
`created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
`published_at` datetime(3) DEFAULT NULL COMMENT '发送时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_outbox_event_no` (`event_no`),
KEY `idx_outbox_publish` (`publish_status`,`next_retry_at`,`id`),
KEY `idx_outbox_aggregate` (`tenant_id`,`aggregate_type`,`aggregate_id`,`created_at`),
KEY `idx_outbox_event_type` (`tenant_id`,`event_type`,`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='治理_事件出站箱';
CREATE TABLE IF NOT EXISTS `hg_dashboard_daily_stat` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` bigint unsigned NOT NULL DEFAULT 0 COMMENT '租户ID',
`stat_date` date NOT NULL COMMENT '统计日期',
`dimension_type` varchar(32) NOT NULL COMMENT '维度类型',
`dimension_value` varchar(64) NOT NULL COMMENT '维度值',
`metric_code` varchar(64) NOT NULL COMMENT '指标编码',
`metric_count` bigint NOT NULL DEFAULT 0 COMMENT '指标数量',
`metric_amount` bigint NOT NULL DEFAULT 0 COMMENT '指标金额(最小货币单位)',
`calculated_at` datetime(3) NOT NULL 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 '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dashboard_metric` (`tenant_id`,`stat_date`,`dimension_type`,`dimension_value`,`metric_code`),
KEY `idx_dashboard_date_metric` (`tenant_id`,`stat_date`,`metric_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='治理_看板日汇总';