162 lines
10 KiB
Go
162 lines
10 KiB
Go
-- 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='治理_看板日汇总';
|