-- ---------------------------- -- 支付应用表 -- ---------------------------- DROP TABLE IF EXISTS `pay_app`; CREATE TABLE `pay_app` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '应用ID', `name` varchar(64) NOT NULL COMMENT '应用名', `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0开启 1关闭)', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `pay_notify_url` varchar(1024) NOT NULL COMMENT '支付结果回调地址', `refund_notify_url` varchar(1024) NOT NULL COMMENT '退款结果回调地址', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='支付应用信息'; -- ---------------------------- -- 支付渠道表 -- ---------------------------- DROP TABLE IF EXISTS `pay_channel`; CREATE TABLE `pay_channel` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '渠道ID', `code` varchar(32) NOT NULL COMMENT '渠道编码(alipay_pc, wx_pub)', `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0开启 1关闭)', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `fee_rate` double NOT NULL DEFAULT '0' COMMENT '渠道费率(%)', `app_id` bigint NOT NULL COMMENT '应用ID', `config` text NOT NULL COMMENT '支付渠道配置(JSON)', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='支付渠道'; -- ---------------------------- -- 支付订单表 -- ---------------------------- DROP TABLE IF EXISTS `pay_order`; CREATE TABLE `pay_order` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单ID', `app_id` bigint NOT NULL COMMENT '应用ID', `channel_id` bigint DEFAULT NULL COMMENT '渠道ID', `channel_code` varchar(32) DEFAULT NULL COMMENT '渠道编码', `merchant_order_id` varchar(64) NOT NULL COMMENT '商户订单编号', `subject` varchar(32) NOT NULL COMMENT '商品标题', `body` varchar(128) DEFAULT NULL COMMENT '商品描述', `notify_url` varchar(1024) NOT NULL COMMENT '异步通知地址', `price` int NOT NULL COMMENT '支付金额(分)', `channel_fee_rate` double DEFAULT '0' COMMENT '渠道费率', `channel_fee_price` int DEFAULT '0' COMMENT '渠道手续费(分)', `status` tinyint NOT NULL COMMENT '状态(0未支付 10已支付 20已退款 30已关闭)', `user_ip` varchar(50) NOT NULL COMMENT '用户IP', `expire_time` datetime NOT NULL COMMENT '订单失效时间', `success_time` datetime DEFAULT NULL COMMENT '支付成功时间', `extension_id` bigint DEFAULT NULL COMMENT '拓展业务ID (如扫码支付的记录ID)', `no` varchar(32) DEFAULT NULL COMMENT '支付单号(内部生成)', `channel_order_no` varchar(64) DEFAULT NULL COMMENT '渠道订单号(微信/支付宝)', `channel_user_id` varchar(64) DEFAULT NULL COMMENT '渠道用户OpenId', `channel_extras` varchar(1024) DEFAULT NULL COMMENT '渠道额外参数(JSON)', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_merchant_order_id` (`merchant_order_id`) ) ENGINE=InnoDB COMMENT='支付订单'; -- ---------------------------- -- 退款订单表 -- ---------------------------- DROP TABLE IF EXISTS `pay_refund`; CREATE TABLE `pay_refund` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '退款ID', `no` varchar(32) NOT NULL COMMENT '退款单号', `app_id` bigint NOT NULL COMMENT '应用ID', `channel_id` bigint NOT NULL COMMENT '渠道ID', `channel_code` varchar(32) NOT NULL COMMENT '渠道编码', `order_id` bigint NOT NULL COMMENT '支付订单ID', `order_no` varchar(32) NOT NULL COMMENT '支付订单no', `merchant_order_id` varchar(64) NOT NULL COMMENT '商户订单编号', `merchant_refund_id` varchar(64) NOT NULL COMMENT '商户退款编号', `notify_url` varchar(1024) NOT NULL COMMENT '回调地址', `status` tinyint NOT NULL COMMENT '状态(0等待 10成功 20失败)', `pay_price` int NOT NULL COMMENT '支付金额(分)', `refund_price` int NOT NULL COMMENT '退款金额(分)', `reason` varchar(256) NOT NULL COMMENT '退款原因', `user_ip` varchar(50) DEFAULT NULL COMMENT '用户IP', `channel_order_no` varchar(64) NOT NULL COMMENT '渠道订单号', `channel_refund_no` varchar(64) DEFAULT NULL COMMENT '渠道退款单号', `success_time` datetime DEFAULT NULL COMMENT '退款成功时间', `error_code` varchar(32) DEFAULT NULL COMMENT '渠道错误码', `error_msg` varchar(128) DEFAULT NULL COMMENT '渠道错误描述', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB COMMENT='退款订单'; -- ---------------------------- -- 支付通知日志表 -- ---------------------------- DROP TABLE IF EXISTS `pay_notify_log`; CREATE TABLE `pay_notify_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID', `app_id` bigint NOT NULL COMMENT '应用ID', `channel_id` bigint NOT NULL COMMENT '渠道ID', `order_id` bigint NOT NULL COMMENT '支付订单ID', `notify_type` varchar(32) NOT NULL COMMENT '通知类型(pay, refund)', `status` tinyint NOT NULL COMMENT '处理状态(0处理中 10成功 20失败)', `request_params` text COMMENT '请求参数', `response_body` text COMMENT '响应结果', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_order_id` (`order_id`) ) ENGINE=InnoDB COMMENT='支付通知日志'; -- ---------------------------- -- 支付通知任务表 -- ---------------------------- DROP TABLE IF EXISTS `pay_notify_task`; CREATE TABLE `pay_notify_task` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID', `order_id` bigint NOT NULL COMMENT '订单ID', `order_no` varchar(32) NOT NULL COMMENT '订单号', `notify_url` varchar(1024) NOT NULL COMMENT '通知地址', `notify_body` text COMMENT '通知内容', `retry_count` int NOT NULL DEFAULT '0' COMMENT '重试次数', `max_retry` int NOT NULL DEFAULT '5' COMMENT '最大重试次数', `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0进行中 1成功 2失败)', `next_notify_time` datetime NOT NULL COMMENT '下次通知时间', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_next_notify_time` (`next_notify_time`) ) ENGINE=InnoDB COMMENT='支付通知任务';