Files
biz-api-cloud-zax/db/20261110_add_third_transfer.sql
T
dzc 6017f56a40 feat:支付宝转账
feat:支付宝适配证书模式和密钥模式
2026-11-10 15:03:57 +08:00

97 lines
6.1 KiB
SQL

-- 通用转账一期业务迁移。先部署既有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;