SET NAMES utf8mb4; USE baiyue_firstleg; -- 既有二期数据库增量:先确保 phase2-inbound-schema.sql 中的测量和幂等表已存在。 CREATE TABLE IF NOT EXISTS fl_third_party_call_log ( id BIGINT UNSIGNED NOT NULL COMMENT '第三方调用日志ID(雪花ID)', tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '第三方未知/未解析主体哨兵值;不是平台客户记录或平台作用域,不得用于业务数据授权', app_key VARCHAR(128) NULL COMMENT '第三方应用标识', signature_subject VARCHAR(128) NULL COMMENT '签名主体快照', request_method VARCHAR(8) NOT NULL COMMENT 'HTTP方法', request_path VARCHAR(255) NOT NULL COMMENT '签名使用的规范路径', request_timestamp VARCHAR(32) NULL COMMENT '请求头Unix毫秒时间戳原值', nonce VARCHAR(128) NULL COMMENT '请求Nonce', idempotency_key VARCHAR(128) NULL COMMENT 'HTTP幂等键,查询接口为空', idempotency_anchor TINYINT UNSIGNED NULL COMMENT '签名通过后首个请求为1,重复调用为空', signature_value VARCHAR(128) NULL COMMENT '第三方签名原值', request_hash CHAR(64) NOT NULL COMMENT '原始请求体SHA-256小写十六进制', raw_payload LONGTEXT NOT NULL COMMENT '未经重新序列化的UTF-8原始请求体', processing_status VARCHAR(16) NOT NULL COMMENT 'PROCESSING、ACCEPTED或REJECTED', result_code VARCHAR(32) NULL COMMENT '统一响应业务码', result_message VARCHAR(1000) NULL COMMENT '处理结果或失败原因', result_json JSON NULL COMMENT '首次成功结果快照', requested_at DATETIME(3) NOT NULL COMMENT '服务端接收时间', processed_at DATETIME(3) NULL COMMENT '处理完成时间', PRIMARY KEY (id), KEY idx_third_call_app_time (tenant_id, app_key, requested_at), KEY idx_third_call_idempotency (tenant_id, app_key, idempotency_key), KEY idx_third_call_nonce (tenant_id, app_key, nonce), UNIQUE KEY uk_third_call_idempotency_owner (tenant_id, app_key, idempotency_key, idempotency_anchor) ) ENGINE=InnoDB COMMENT='第三方测量开放接口原始请求、签名主体和处理结果留档'; -- 既有表也要同步未知主体 0 的语义,避免历史注释继续误导为真实租户。 SET @third_party_tenant_comment = '第三方未知/未解析主体哨兵值;不是平台客户记录或平台作用域,不得用于业务数据授权'; SET @ddl = IF( (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'fl_third_party_call_log' AND column_name = 'tenant_id' AND column_comment = @third_party_tenant_comment) = 1, 'SELECT 1', 'ALTER TABLE fl_third_party_call_log MODIFY COLUMN tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ''第三方未知/未解析主体哨兵值;不是平台客户记录或平台作用域,不得用于业务数据授权''' ); PREPARE statement FROM @ddl; EXECUTE statement; DEALLOCATE PREPARE statement;