80 lines
5.4 KiB
SQL
80 lines
5.4 KiB
SQL
USE `pjcloudx_thirdparty`;
|
|
|
|
-- 商户默认平台分佣关系。微信关系由 sub_mchid 区分,支付宝关系由调用应用、授权商户和接收账号共同确定。
|
|
-- 表中只保存渠道标识和脱敏调用快照,不保存私钥、公钥或完整 app_auth_token。
|
|
CREATE TABLE IF NOT EXISTS `third_mch_fz_relation`
|
|
(
|
|
`id` bigint NOT NULL COMMENT '关系主键,应用侧雪花算法生成',
|
|
`tenant_id` bigint NOT NULL COMMENT '租户ID,与 mch_manage 所属租户一致',
|
|
`mch_id` bigint NOT NULL COMMENT 'mch_manage 商户主键',
|
|
`pay_setting_id` bigint NOT NULL COMMENT 'mch_pay_setting 支付配置主键',
|
|
`platform_type` varchar(32) NOT NULL COMMENT '支付平台类型:10微信、20支付宝',
|
|
`relation_scene` varchar(64) NOT NULL COMMENT '本地关系场景,默认平台分佣为 DEFAULT_PLATFORM_COMMISSION',
|
|
`channel_app_id` varchar(64) NOT NULL COMMENT '微信服务商AppID或支付宝平台AppID快照',
|
|
`channel_sub_mch_id` varchar(64) NOT NULL COMMENT '微信子商户号或支付宝直付通smid/ip_role_id',
|
|
`account_key` varchar(64) DEFAULT NULL COMMENT '支付宝命名平台账号键;默认账号及微信为空',
|
|
`receiver_type` varchar(32) NOT NULL COMMENT '渠道接收方类型,如MERCHANT_ID、userId、loginName',
|
|
`receiver_account` varchar(128) NOT NULL COMMENT '平台分佣接收账号;管理端展示时必须脱敏',
|
|
`receiver_name` varchar(128) DEFAULT NULL COMMENT '平台分佣接收方名称快照',
|
|
`channel_relation_type` varchar(64) DEFAULT NULL COMMENT '渠道关系类型;微信默认SERVICE_PROVIDER,支付宝为空',
|
|
`out_request_no` varchar(64) NOT NULL COMMENT '支付宝绑定稳定幂等请求号;微信作为本地稳定审计号',
|
|
`status` varchar(32) NOT NULL COMMENT 'PENDING_BIND、BINDING、BOUND、BIND_FAILED或SUPERSEDED',
|
|
`is_default` char(1) NOT NULL DEFAULT '1' COMMENT '是否为当前支付配置的默认平台分佣关系:0否、1是',
|
|
`bind_req` text DEFAULT NULL COMMENT '脱敏后的关系绑定请求快照',
|
|
`bind_res` text DEFAULT NULL COMMENT '渠道关系绑定或查询响应快照',
|
|
`bind_error` varchar(1000) DEFAULT NULL COMMENT '最近一次绑定错误摘要,不含凭据',
|
|
`last_external_status` varchar(128) DEFAULT NULL COMMENT '最近一次渠道结果码或外部状态',
|
|
`last_query_time` datetime DEFAULT NULL COMMENT '最近一次关系绑定或查询时间',
|
|
`bound_time` datetime DEFAULT NULL COMMENT '渠道明确确认关系已绑定的时间',
|
|
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
|
|
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
|
`update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
|
|
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
|
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标记:0正常、1删除',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_third_mch_fz_relation_identity`
|
|
(`tenant_id`, `pay_setting_id`, `platform_type`, `channel_app_id`, `channel_sub_mch_id`,
|
|
`receiver_type`, `receiver_account`, `relation_scene`),
|
|
KEY `idx_third_mch_fz_relation_default`
|
|
(`tenant_id`, `mch_id`, `platform_type`, `is_default`, `status`, `del_flag`),
|
|
KEY `idx_third_mch_fz_relation_task`
|
|
(`status`, `is_default`, `update_time`, `id`)
|
|
) ENGINE = InnoDB
|
|
DEFAULT CHARSET = utf8mb4
|
|
COLLATE = utf8mb4_general_ci
|
|
COMMENT ='商户第三方支付分账关系';
|
|
|
|
-- 支付任务通过结构化主键定位关系事实,禁止从 task_key 字符串反解析业务主键。
|
|
SET @relation_task_column_exists = (
|
|
SELECT COUNT(1)
|
|
FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND TABLE_NAME = 'third_payment_task'
|
|
AND COLUMN_NAME = 'fz_relation_id'
|
|
);
|
|
SET @relation_task_column_sql = IF(
|
|
@relation_task_column_exists = 0,
|
|
'ALTER TABLE `third_payment_task` ADD COLUMN `fz_relation_id` bigint DEFAULT NULL COMMENT ''商户分账关系主键'' AFTER `fz_order_id`, ADD INDEX `idx_third_payment_task_relation` (`tenant_id`, `fz_relation_id`)',
|
|
'SELECT 1'
|
|
);
|
|
PREPARE relation_task_column_stmt FROM @relation_task_column_sql;
|
|
EXECUTE relation_task_column_stmt;
|
|
DEALLOCATE PREPARE relation_task_column_stmt;
|
|
|
|
-- 支付订单固定引用创建时使用的已绑定关系,后续分账不跟随平台接收账号配置漂移。
|
|
SET @pay_relation_column_exists = (
|
|
SELECT COUNT(1)
|
|
FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND TABLE_NAME = 'third_pay_order'
|
|
AND COLUMN_NAME = 'fz_relation_id'
|
|
);
|
|
SET @pay_relation_column_sql = IF(
|
|
@pay_relation_column_exists = 0,
|
|
'ALTER TABLE `third_pay_order` ADD COLUMN `fz_relation_id` bigint DEFAULT NULL COMMENT ''支付创建时绑定的平台分佣关系主键'' AFTER `mch_pay_setting_json`, ADD INDEX `idx_third_pay_order_fz_relation` (`tenant_id`, `fz_relation_id`)',
|
|
'SELECT 1'
|
|
);
|
|
PREPARE pay_relation_column_stmt FROM @pay_relation_column_sql;
|
|
EXECUTE pay_relation_column_stmt;
|
|
DEALLOCATE PREPARE pay_relation_column_stmt;
|