USE youlai_admin;

-- 订单支付对外适配升级脚本
-- 说明：
-- 1. 新增订单支付记录表，承接支付中台 / 自研支付的统一支付单。
-- 2. 新增支付回调日志表，保留异步通知原文和处理结果。
-- 3. 当前主订单表已存在 payment_type 字段，本脚本不重复新增。

CREATE TABLE IF NOT EXISTS `xxk_proxy_order_pay` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `pay_order_no` VARCHAR(64) NOT NULL COMMENT '支付单号',
  `order_id` BIGINT NOT NULL COMMENT '业务订单ID',
  `order_no` VARCHAR(64) NOT NULL COMMENT '业务订单号',
  `payment_type` VARCHAR(32) NOT NULL COMMENT '支付方式(BALANCE/ALIPAY/WECHAT/EXTERNAL)',
  `pay_status` VARCHAR(32) NOT NULL DEFAULT 'INIT' COMMENT '支付单状态(INIT/PAYING/PAID/FAIL/CLOSED/REFUNDED)',
  `channel_order_no` VARCHAR(128) DEFAULT NULL COMMENT '渠道支付单号',
  `channel_response` TEXT DEFAULT NULL COMMENT '渠道原始响应',
  `client_type` VARCHAR(32) DEFAULT NULL COMMENT '客户端类型(PC/H5/APP/MINI_PROGRAM)',
  `return_url` VARCHAR(500) DEFAULT NULL COMMENT '支付完成跳转地址',
  `amount` DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '支付金额',
  `currency` VARCHAR(16) DEFAULT NULL COMMENT '币种',
  `paid_time` DATETIME DEFAULT NULL COMMENT '支付成功时间',
  `expire_time` DATETIME DEFAULT NULL COMMENT '支付过期时间',
  `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_xxk_proxy_order_pay_no` (`pay_order_no`),
  KEY `idx_xxk_proxy_order_pay_order_no` (`order_no`),
  KEY `idx_xxk_proxy_order_pay_status` (`pay_status`, `update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单支付记录表';

CREATE TABLE IF NOT EXISTS `xxk_proxy_payment_notify_log` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `pay_order_no` VARCHAR(64) DEFAULT NULL COMMENT '支付单号',
  `order_no` VARCHAR(64) DEFAULT NULL COMMENT '业务订单号',
  `payment_type` VARCHAR(32) DEFAULT NULL COMMENT '支付方式',
  `notify_type` VARCHAR(32) DEFAULT NULL COMMENT '通知类型(PAY/REFUND/CLOSE)',
  `notify_body` MEDIUMTEXT DEFAULT NULL COMMENT '通知原文',
  `verify_status` VARCHAR(16) NOT NULL DEFAULT 'INIT' COMMENT '验签状态(INIT/SUCCESS/FAIL)',
  `process_status` VARCHAR(16) NOT NULL DEFAULT 'INIT' COMMENT '处理状态(INIT/SUCCESS/FAIL)',
  `error_message` VARCHAR(500) DEFAULT NULL COMMENT '失败原因',
  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除(0否 1是)',
  PRIMARY KEY (`id`),
  KEY `idx_xxk_proxy_payment_notify_order_no` (`order_no`),
  KEY `idx_xxk_proxy_payment_notify_status` (`verify_status`, `process_status`, `update_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付回调日志表';
