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;