-- 通用转账一期业务迁移。先部署既有third_payment_task,再执行本文件。 -- 业务迁移可重复执行。菜单和按钮权限由配套Markdown表格手工维护。 CREATE TABLE IF NOT EXISTS third_transfer_order ( id BIGINT NOT NULL COMMENT '雪花主键', tenant_id BIGINT NOT NULL COMMENT '所属租户', transfer_no VARCHAR(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '全局唯一转账号', request_no VARCHAR(64) COLLATE utf8mb4_bin NOT NULL COMMENT '租户内稳定请求号', request_hash VARCHAR(64) NOT NULL COMMENT '规范化参数SHA256摘要', biz_type VARCHAR(64) COLLATE utf8mb4_bin NOT NULL COMMENT '登记的业务类型', biz_id VARCHAR(128) NOT NULL COMMENT '关联业务ID', platform_type VARCHAR(16) NOT NULL COMMENT '渠道编码', amount_fen BIGINT NOT NULL COMMENT '原始金额,单位分', currency VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '币种', owner_dept_id BIGINT NOT NULL COMMENT '业务归属部门快照', owner_dept_name VARCHAR(200) DEFAULT NULL COMMENT '部门名称快照', initiator_user_id BIGINT NOT NULL COMMENT '原业务发起用户快照', initiator_name VARCHAR(200) DEFAULT NULL COMMENT '发起用户名称快照', mch_id BIGINT DEFAULT NULL COMMENT '可选关联商户', mch_name VARCHAR(200) DEFAULT NULL COMMENT '商户名称快照', payer_app_id VARCHAR(64) NOT NULL COMMENT '实际付款AppID快照', payload_ciphertext TEXT NOT NULL COMMENT '加密原始指令,含收款身份', receiver_type VARCHAR(64) NOT NULL COMMENT '收款标识类型', receiver_account_masked VARCHAR(200) NOT NULL COMMENT '脱敏收款账号', receiver_name_masked VARCHAR(200) DEFAULT NULL COMMENT '脱敏收款姓名', title VARCHAR(128) NOT NULL COMMENT '账单标题', remark VARCHAR(200) DEFAULT NULL COMMENT '付款理由', scene_name VARCHAR(64) NOT NULL COMMENT '已申报转账场景', request_snapshot TEXT NOT NULL COMMENT '脱敏请求摘要JSON', status VARCHAR(32) NOT NULL COMMENT '独立资金状态', channel_status VARCHAR(64) DEFAULT NULL COMMENT '最近渠道状态', channel_order_no VARCHAR(64) DEFAULT NULL COMMENT '渠道转账单号', pay_fund_order_no VARCHAR(64) DEFAULT NULL COMMENT '渠道支付资金流水号', paid_time DATETIME DEFAULT NULL COMMENT '渠道付款完成时间', last_error_code VARCHAR(100) DEFAULT NULL COMMENT '安全渠道错误码', last_error_message VARCHAR(500) DEFAULT NULL COMMENT '安全渠道错误摘要', needs_attention TINYINT(1) NOT NULL DEFAULT 0 COMMENT '事实异常核对标记', notify_service_id VARCHAR(128) NOT NULL COMMENT '登记的接收服务快照', notify_id VARCHAR(64) DEFAULT NULL COMMENT '稳定结果通知ID', notify_status VARCHAR(32) NOT NULL DEFAULT 'NOT_READY' COMMENT '业务通知状态', notify_last_error VARCHAR(500) DEFAULT NULL COMMENT '安全通知错误摘要', result_version INT NOT NULL DEFAULT 0 COMMENT '最终结果通知版本', version INT NOT NULL DEFAULT 0 COMMENT '状态行版本', submit_started_time DATETIME DEFAULT NULL COMMENT '首次开始提交时间', create_by VARCHAR(128) DEFAULT NULL COMMENT '审计创建人', create_time DATETIME NOT NULL COMMENT '本地受理时间', update_by VARCHAR(128) DEFAULT NULL COMMENT '审计修改人', update_time DATETIME NOT NULL COMMENT '本地更新时间', PRIMARY KEY (id), UNIQUE KEY uk_transfer_no (transfer_no), UNIQUE KEY uk_tenant_request (tenant_id, request_no), KEY idx_tenant_created (tenant_id, create_time, id), KEY idx_tenant_status (tenant_id, status, update_time, id), KEY idx_tenant_business (tenant_id, biz_type, biz_id), KEY idx_tenant_department (tenant_id, owner_dept_id, create_time, id), KEY idx_tenant_initiator (tenant_id, initiator_user_id, create_time, id), KEY idx_tenant_merchant (tenant_id, mch_id, create_time, id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='第三方转账资金事实'; CREATE TABLE IF NOT EXISTS third_transfer_event ( id BIGINT NOT NULL COMMENT '事件雪花主键', tenant_id BIGINT NOT NULL COMMENT '所属租户', transfer_order_id BIGINT NOT NULL COMMENT '关联转账主键', event_type VARCHAR(64) NOT NULL COMMENT '业务事件类型', event_key VARCHAR(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '外部通知等事件的去重键', from_status VARCHAR(32) DEFAULT NULL COMMENT '事件前资金状态', to_status VARCHAR(32) DEFAULT NULL COMMENT '事件后资金状态', summary VARCHAR(500) NOT NULL COMMENT '安全业务摘要', snapshot TEXT DEFAULT NULL COMMENT '白名单脱敏JSON', actor VARCHAR(128) DEFAULT NULL COMMENT '操作人或系统身份', create_time DATETIME NOT NULL COMMENT '本地事件时间', PRIMARY KEY (id), UNIQUE KEY uk_transfer_event (tenant_id, transfer_order_id, event_key), KEY idx_transfer_events (tenant_id, transfer_order_id, create_time, id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='第三方转账追加式业务事件'; SET @third_transfer_column_exists = ( SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'third_payment_task' AND column_name = 'transfer_order_id' ); SET @third_transfer_ddl = IF(@third_transfer_column_exists = 0, 'ALTER TABLE third_payment_task ADD COLUMN transfer_order_id BIGINT NULL COMMENT ''关联转账单主键'' AFTER pay_order_id', 'SELECT ''transfer_order_id already exists'''); PREPARE third_transfer_stmt FROM @third_transfer_ddl; EXECUTE third_transfer_stmt; DEALLOCATE PREPARE third_transfer_stmt; SET @third_transfer_index_exists = ( SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = 'third_payment_task' AND index_name = 'idx_tenant_transfer_order' ); SET @third_transfer_ddl = IF(@third_transfer_index_exists = 0, 'ALTER TABLE third_payment_task ADD INDEX idx_tenant_transfer_order (tenant_id, transfer_order_id, id)', 'SELECT ''idx_tenant_transfer_order already exists'''); PREPARE third_transfer_stmt FROM @third_transfer_ddl; EXECUTE third_transfer_stmt; DEALLOCATE PREPARE third_transfer_stmt;