42 lines
2.4 KiB
SQL
42 lines
2.4 KiB
SQL
-- 审计快照功能: 订单快照表和回滚日志表
|
||
-- 用于记录用户消费时刻的完整状态快照,支持数据回滚
|
||
|
||
-- 订单快照表
|
||
CREATE TABLE IF NOT EXISTS `order_snapshots` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
`order_id` BIGINT NOT NULL COMMENT '订单ID',
|
||
`order_no` VARCHAR(64) NOT NULL COMMENT '订单号',
|
||
`user_id` BIGINT NOT NULL COMMENT '用户ID',
|
||
`snapshot_type` TINYINT NOT NULL COMMENT '快照类型:1=消费前 2=消费后',
|
||
`snapshot_data` JSON NOT NULL COMMENT '完整状态快照(JSON)',
|
||
`snapshot_hash` VARCHAR(64) DEFAULT NULL COMMENT '快照数据Hash(可选,用于校验)',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_order_id` (`order_id`),
|
||
KEY `idx_user_id_created` (`user_id`, `created_at`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单快照表';
|
||
|
||
-- 审计回滚日志表
|
||
CREATE TABLE IF NOT EXISTS `audit_rollback_logs` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
`order_id` BIGINT NOT NULL COMMENT '订单ID',
|
||
`order_no` VARCHAR(64) NOT NULL COMMENT '订单号',
|
||
`user_id` BIGINT NOT NULL COMMENT '用户ID',
|
||
`operator_id` BIGINT NOT NULL COMMENT '操作人ID(管理员)',
|
||
`operator_name` VARCHAR(64) DEFAULT NULL COMMENT '操作人名称',
|
||
`rollback_type` TINYINT NOT NULL DEFAULT 1 COMMENT '回滚类型:1=完整回滚',
|
||
`before_snapshot_id` BIGINT DEFAULT NULL COMMENT '回滚前快照ID(消费后快照)',
|
||
`after_snapshot_id` BIGINT DEFAULT NULL COMMENT '回滚目标快照ID(消费前快照)',
|
||
`changes_applied` JSON DEFAULT NULL COMMENT '实际执行的变更明细',
|
||
`reason` VARCHAR(512) DEFAULT NULL COMMENT '回滚原因',
|
||
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1=成功 2=失败',
|
||
`error_msg` TEXT DEFAULT NULL COMMENT '失败原因',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_order_id` (`order_id`),
|
||
KEY `idx_operator` (`operator_id`, `created_at`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审计回滚操作日志';
|
||
|
||
-- 更新订单状态注释,增加状态5=已回滚
|
||
-- ALTER TABLE `orders` MODIFY COLUMN `status` INT NOT NULL DEFAULT 1 COMMENT '订单状态:1待支付 2已支付 3已取消 4已退款 5已回滚';
|