支付域新表设计(前缀:t_payx_)
总体说明
- 目的:替换旧支付域表,统一金额/币种精度、状态枚举、幂等键和审计字段。
- 方案:只保留一张支付订单表
t_payx_order,用product_type区分一次性/订阅(旧的t_subscripe_order、t_record_servicebag_order、t_storage_servicebag_order直接淘汰,不再新建)。 - 替代关系:
t_payx_interest_record← 用户权益流水表(新增,用于权益变动记录和审计)t_payx_bill← 平台账单流水表(新增,用于对账和财务核算)t_payx_order←t_user_order(并取代上述订阅/服务包旧表)t_payx_refund←t_user_order_refund(旧表淘汰)t_payx_notify← 回调/通知日志(t_pay_apply_notify_log、t_pay_apply_notify_log_bk、t_pay_google_notify_log等)t_payx_request← 第三方请求日志(t_app_third_server_request_log、t_app_request_log_apple等)
- 索引:暂不做性能索引,仅保留主键。
- 金额:DECIMAL(18,6);币种:
VARCHAR(16)(预留 ISO4217 + 数字货币/试运营代号);时间:DATETIME(3);表前缀统一t_payx_。
枚举建议(应用层)
- channel: 0=WeChat, 1=Alipay, 2=Apple, 3=Google, 4=Stripe, 5=Other
- pay_status: 0=INIT, 1=PAYING, 2=SUCCESS, 3=FAILED, 4=CLOSED, 5=REFUNDING, 6=REFUNDED
- refund_status: 0=INIT, 1=PROCESSING, 2=SUCCESS, 3=FAILED
- notify.status: 0=RECEIVED, 1=PROCESSED, 2=IGNORED, 3=FAILED
- bill.txn_type: 0=新购, 1=续费, 2=退款
- bill.income_type: 0=收入, 1=支出
- bill.status: 0=INIT, 1=SUCCESS, 2=FAILED, 3=CANCELLED
- interest_record.interest_type: 0=会员, 1=资源
- interest_record.change_type: 0=发放, 1=消耗, 2=收回, 3=过期, 4=变更
- interest_record.status: 0=待执行, 1=执行成功, 2=执行失败, 3=已冲正
DDL 草案(无二级索引,仅主键;订阅/服务包表不再创建)
可直接执行的 MySQL 8 建表 SQL:
-- -1) 用户权益流水表
-- 作用:记录用户权益变动流水,用于权益发放、消耗、收回、过期等操作的审计和追溯
-- 关键:支持冲正操作,关联业务单号,记录完整的权益变动历史
CREATE TABLE t_payx_interest_record (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID',
reverse_record_id BIGINT NULL COMMENT '关联冲正流水ID(当流水状态为已冲正时,记录用于冲正的那条新流水ID)',
interest_name VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权益名称',
interest_type TINYINT NOT NULL COMMENT '权益类型:0=会员,1=资源',
change_type TINYINT NOT NULL COMMENT '变动类型:0=发放,1=消耗,2=收回,3=过期,4=变更',
interest_content VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '权益内容(如:会员(新购)、会员(续订)、会员(过期)、会员(收回))',
status TINYINT NOT NULL DEFAULT 0 COMMENT '流水状态:0=待执行,1=执行成功,2=执行失败,3=已冲正',
error_code VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '失败原因代码',
error_msg VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '失败原因文本',
business_no VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联业务单号(订单号/任务ID)',
operator VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'system' COMMENT '操作人(system表示系统自动处理,其他为后台操作账号)',
completed_at DATETIME(3) NULL COMMENT '完成时间(流水状态变为执行成功或执行失败的时间)',
business_desc VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '业务描述(权益流程执行的动作描述)',
remark VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
del_flag CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志:0=存在,2=删除',
version BIGINT NOT NULL DEFAULT 0 COMMENT '行版本号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户权益流水表';
-- 0) 平台账单表
-- 作用:记录平台账单流水,用于对账、统计和财务核算
-- 关键:账单流水号唯一,交易类型和收入类型区分,支持多平台对账
CREATE TABLE t_payx_bill (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关联订单ID',
user_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID',
interest_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联权益ID',
bill_no VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '账单流水号',
product_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '商品/套餐ID',
product_name VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '商品名称',
txn_type TINYINT NOT NULL COMMENT '交易类型:0=新购,1=续费,2=退款',
income_type TINYINT NOT NULL COMMENT '收入类型:0=收入,1=支出',
amt DECIMAL(18,6) NOT NULL COMMENT '应付金额',
amt_paid DECIMAL(18,6) NOT NULL COMMENT '支付金额',
amt_discount DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '优惠金额',
currency VARCHAR(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '币种(ISO4217 或兼容代号)',
pay_type TINYINT NOT NULL COMMENT '支付方式:0=WeChat,1=Alipay,2=Apple,3=Google,4=Stripe,5=Other',
platform TINYINT NOT NULL DEFAULT 0 COMMENT '平台:0=iOS,1=Android,2=Web,3=微信小程序,4=其他',
platform_txn_id VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '第三方交易单号',
paid_at DATETIME(3) NULL COMMENT '支付时间',
status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0=INIT,1=SUCCESS,2=FAILED,3=CANCELLED',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
del_flag CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志:0=存在,2=删除',
version BIGINT NOT NULL DEFAULT 0 COMMENT '行版本号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='平台账单表';
-- 1) 支付订单
-- 作用:替代 t_user_order,记录支付订单主数据与支付结果
-- 关键:order_no/平台交易号唯一,金额币种标准化,状态枚举化
CREATE TABLE t_payx_order (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_no VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内部订单号',
order_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内部订单ID,唯一、幂等/对账主键',
user_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID',
interest_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关联权益ID',
product_type TINYINT NOT NULL DEFAULT 0 COMMENT '产品类型:0=一次性/消费,1=订阅',
product_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '商品/套餐ID',
product_name VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '商品名称',
amt DECIMAL(18,6) NOT NULL COMMENT '应付金额',
amt_paid DECIMAL(18,6) NULL COMMENT '实付金额',
amt_discount DECIMAL(18,6) NOT NULL COMMENT '优惠金额',
amt_refunded DECIMAL(18,6) NOT NULL DEFAULT 0 COMMENT '累计退款金额',
currency VARCHAR(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '币种(ISO4217 或兼容代号)',
original_txn_id VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '原始交易号(微信/支付宝/苹果/谷歌/Stripe)',
platform_txn_id VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '第三方交易号(微信/支付宝/苹果/谷歌/Stripe)',
pay_type TINYINT NOT NULL COMMENT '支付方式:0=WeChat,1=Alipay,2=Apple,3=Google,4=Stripe,5=Other',
platform TINYINT NOT NULL DEFAULT 0 COMMENT '渠道:ios、andriod、web、微信小程序',
pay_status TINYINT NOT NULL COMMENT '支付状态:0=SUCCESS(成功),1=FAILED(支付失败),2=CLOSED(已取消),3=REFUNDING(退款中),4=REFUNDED(已退款)',
grant_status TINYINT NOT NULL DEFAULT 0 COMMENT '发放状态:0=INIT,1=GRANTING,2=GRANTED,3=FAILED',
subject VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '标题/摘要',
description TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '描述/备注',
is_aboard_flag VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '国内/海外标识,如 0/1',
expired_at DATETIME(3) NULL COMMENT '支付超时',
paid_at DATETIME(3) NULL COMMENT '支付成功时间',
failed_at DATETIME(3) NULL COMMENT '失败时间',
client_ip VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '客户端IP',
country VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '国家/地区',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
del_flag CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志:0=存在,2=删除',
version BIGINT NOT NULL DEFAULT 0 COMMENT '行版本号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='支付订单表(兼容订阅/一次性)';
-- 2) 退款
-- 作用:替代 t_user_order_refund,记录退款请求与结果
CREATE TABLE t_payx_refund (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
refund_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '内部退款单号',
order_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '关联订单号',
user_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户ID',
refund_amt DECIMAL(18,6) NOT NULL COMMENT '退款金额',
currency VARCHAR(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '币种',
platform_refund_id VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '第三方退款号',
refund_status TINYINT NOT NULL COMMENT '退款状态:0=INIT,1=PROCESSING,2=SUCCESS,3=FAILED',
reason VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '退款原因',
requested_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '请求时间',
completed_at DATETIME(3) NULL COMMENT '完成时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
del_flag CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志:0=存在,2=删除',
version BIGINT NOT NULL DEFAULT 0 COMMENT '行版本号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='退款表';
-- 3) 通知/回调日志
-- 作用:替代 t_pay_apply_notify_log / _bk / t_pay_google_notify_log 等回调日志,统一渠道与幂等键
CREATE TABLE t_payx_notify (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
notify_id VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'ID',
order_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联订单号',
message_id VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '通知ID/请求ID(幂等键)',
channel TINYINT NOT NULL COMMENT '渠道:0=WeChat,1=Alipay,2=Apple,3=Google,4=Stripe,5=Other',
platform_txn_id VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联第三方交易号',
status TINYINT NOT NULL COMMENT '通知处理状态:0=RECEIVED,1=PROCESSED,2=IGNORED,3=FAILED',
payload TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '通知内容',
headers TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '通知头',
error_msg VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '错误信息',
received_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '收到时间',
processed_at DATETIME(3) NULL COMMENT '处理完成时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
del_flag CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志:0=存在,2=删除'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='支付回调/通知日志';
-- 4) 第三方请求日志
-- 作用:替代 t_app_third_server_request_log / t_app_request_log_apple 等第三方请求日志
CREATE TABLE t_payx_request (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
request_id VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '本地请求ID(幂等/防重放)',
channel TINYINT NOT NULL COMMENT '渠道',
order_id VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '关联订单号',
request_url VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求URL',
req_body TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求报文',
resp_body TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '响应报文',
status TINYINT NOT NULL DEFAULT 0 COMMENT '请求状态:0=OK,1=ERROR',
duration_ms INT NULL COMMENT '耗时ms',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
del_flag CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志:0=存在,2=删除'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='支付请求日志';
-- 5) 支付凭证表
CREATE TABLE `t_payx_receipt` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`receipt_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '凭证id',
`order_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '订单id',
`user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户 ID(用于审计)',
`receipt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Apple/Google 交易凭证',
`platform` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '支付平台(APPLE/GOOGLE)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
del_flag CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '删除标志:0=存在,2=删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '订单支付凭证表(Apple/Google)';