DROP TABLE IF EXISTS `pay_withdrawal_config`;
CREATE TABLE `pay_withdrawal_config` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID（主键）',
  `user_type` tinyint DEFAULT NULL COMMENT '用户类型（关联user.user_type：1-个人，2-企业）',
  `min_withdrawal_amount` decimal(10,2) NOT NULL DEFAULT '1.00' COMMENT '最低提现金额（元，个人≥1元，企业≥100元）',
  `max_withdrawal_amount` decimal(12,2) NOT NULL COMMENT '单日最高提现金额（元：个人≤50000，企业≤1000000）',
  `platform_fee_rate` decimal(5,2) NOT NULL DEFAULT '0.50' COMMENT '平台手续费比例（%，如0.5%即100元收0.5元）',
  `platform_fee_threshold` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '平台手续费起征金额（元，提现金额超过该值时才收取平台手续费，0表示任何金额都收取）',
  `platform_fee_charge_mode` tinyint NOT NULL DEFAULT '1' COMMENT '平台手续费收费模式：1-按单次提现金额收费，2-按累计提现总额收费',
  `tax_rate` decimal(5,2) DEFAULT NULL COMMENT '税费比例（%：个人20%，企业13%，免税则为0）',
  `monthly_tax_free_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '每月免税金额（元，超过该金额部分按tax_rate计税）',
  `withdrawal_cycle` varchar(16) NOT NULL DEFAULT 'T+1' COMMENT '到账周期（线下转账：T+1=次日到账）',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '配置状态：1-启用，0-禁用（调整规则时先禁用再修改）',
  `deleted` tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_type` (`user_type`) COMMENT '每种用户类型唯一配置'
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='提现规则配置表';

DROP TABLE IF EXISTS `pay_merchant_account`;
CREATE TABLE `pay_merchant_account` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID（主键）',
  `user_id` bigint NOT NULL COMMENT '关联user表主键（用户ID）',
  `available_balance` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '可提现余额（分）',
  `frozen_balance` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '冻结余额（分），提现中的金额 + 用户退货订单的退款金额',
  `total_settled_amount` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '累计已结算佣金（分）',
  `total_withdrawn_amount` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '累计已提现金额（分）',
  `total_amount` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '总金额（分）',
  `version` bigint NOT NULL COMMENT '版本号',
  `is_block` tinyint(1) NOT NULL COMMENT '是否被锁定(0-正常，1-被锁定)',
  `deleted` tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`) COMMENT '每个用户唯一余额记录，避免重复计算',
  KEY `idx_available_balance` (`available_balance`) COMMENT '筛选可提现用户'
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商家账户表';

DROP TABLE IF EXISTS `pay_merchant_revenue_detail`;
CREATE TABLE `pay_merchant_revenue_detail` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '记录ID（主键）',
  `merchant_user_id` BIGINT NOT NULL COMMENT '商家用户ID',
  `order_id` VARCHAR(50) NOT NULL COMMENT '订单ID',
  `child_order_id` VARCHAR(50) NOT NULL COMMENT '子订单ID',
  `child_order_sn` VARCHAR(50) NOT NULL COMMENT '子订单sn',
  `pay_order_sn` varchar(50) NULL DEFAULT NULL COMMENT '支付模块的原支付订单号',
  `pay_channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '渠道编码',
  `sku_id` VARCHAR(50) NOT NULL COMMENT '商品SKU ID',
  `user_id` VARCHAR(50) NOT NULL COMMENT '购买用户ID',
  `settlement_status` TINYINT NOT NULL DEFAULT 0 COMMENT '结算状态：0-未结算，1-已结算',
  `transaction_time` DATETIME NOT NULL COMMENT '交易时间',
  `quantity` INT NOT NULL DEFAULT '1' COMMENT '购买数量',
  `unit_price` DECIMAL(18, 2)  NULL DEFAULT '0.00' COMMENT '单价(学豆)',
  `exchange_ratio` DECIMAL(18, 2) NULL COMMENT '兑换比例',
  `actual_revenue` DECIMAL(18, 2)  NULL DEFAULT '0.00' COMMENT '实际收入金额(商品单价*购买数量/兑换比例,单位为分)',
  `channel_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '渠道编码',
  `transaction_status` VARCHAR(20)  NULL DEFAULT 'PAID' COMMENT '交易状态(PAID:已支付,REFUNDED:已退款)',
  `platform_fee_rate` DECIMAL(5, 2)  NULL DEFAULT '0.00' COMMENT '平台费率(百分比)',
  `platform_fee` DECIMAL(18, 2)  NULL DEFAULT '0.00' COMMENT '平台手续费',
  `refund_amount` DECIMAL(18, 2) NULL DEFAULT '0.00' COMMENT '退款金额',
  `refund_time` DATETIME NULL COMMENT '退款时间',
  `withdraw_status` TINYINT NOT NULL DEFAULT 0 COMMENT '提现状态：0-未提现，1-部分提现，2-已提现',
  `deleted`  tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '租户id',
   PRIMARY KEY (`id`),
   KEY `idx_merchant_user_id` (`merchant_user_id`),
   KEY `idx_child_order_id` (`child_order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商家收益流水明细表';

DROP TABLE IF EXISTS `pay_merchant_revenue_usage`;
CREATE TABLE `pay_merchant_revenue_usage` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
  `revenue_detail_id` BIGINT NOT NULL COMMENT '关联的收益流水ID',
  `withdrawal_apply_id` VARCHAR(50) NOT NULL COMMENT '提现申请单ID',
  `used_amount` DECIMAL(18, 2) NOT NULL DEFAULT '0.00' COMMENT '本次使用的收益金额',
  `available_amount_before` DECIMAL(18, 2) NOT NULL DEFAULT '0.00' COMMENT '使用前可用余额（快照）',
  `available_amount_after` DECIMAL(18, 2) NOT NULL DEFAULT '0.00' COMMENT '使用后可用余额（快照）',
  `status` VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '状态：PENDING-待处理, SUCCESS-成功, FAILED-失败, CANCELLED-取消',
  `remark` VARCHAR(255) NULL COMMENT '备注',
  `deleted`  tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`),
  KEY `idx_revenue_detail_id` (`revenue_detail_id`),
  KEY `idx_withdrawal_apply_id` (`withdrawal_apply_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收益使用记录表（支持拆分提现）';

DROP TABLE IF EXISTS `pay_merchant_withdrawal_apply`;
CREATE TABLE `pay_merchant_withdrawal_apply` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
  `withdrawal_no` VARCHAR(32) NOT NULL COMMENT '提现订单号',
  `user_id` BIGINT NOT NULL COMMENT '申请人ID',
  `account_id` BIGINT NOT NULL COMMENT '关联收款账户表user_bank_account的account_id',
  `apply_amount` DECIMAL(12,2) NOT NULL COMMENT '申请提现金额（元）',
  `apply_time` datetime NOT NULL COMMENT '申请提现时间',
  `platform_fee` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '平台手续费（元）',
  `tax_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '待缴税费（元）',
  `actual_amount` DECIMAL(12,2) NOT NULL COMMENT '实际到账金额（元）',
  `amount_split_desc` VARCHAR(512) DEFAULT NULL COMMENT '提现金额拆分说明',
  `settlement_ids` VARCHAR(4000) NOT NULL COMMENT '关联的结算记录ID（多个用逗号分隔，如1001,1002，需与订单一一对应）',
  `apply_status` TINYINT NOT NULL DEFAULT 0 COMMENT '申请状态：0-待审核，1-审核通过，2-审核拒绝，3-待转账，4-转账中，5-提现完成，6-转账失败，7-已撤销',
  `audit_user_id` BIGINT DEFAULT NULL COMMENT '审核人ID（关联user表，财务用户ID）',
  `audit_time` DATETIME DEFAULT NULL COMMENT '审核时间）',
  `audit_remark` VARCHAR(255) DEFAULT NULL COMMENT '审核备注（拒绝时必填原因，如“账户信息不一致”）',
  `transfer_voucher_url` VARCHAR(255) DEFAULT NULL COMMENT '转账凭证URL',
  `transfer_time` DATETIME DEFAULT NULL COMMENT '转账时间',
  `deleted` tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_withdrawal_no` (`withdrawal_no`) COMMENT '提现订单号唯一，用于对账与追溯',
  KEY `idx_user_status` (`user_id`, `apply_status`) COMMENT '按用户+状态查提现记录',
  KEY `idx_audit_time` (`audit_time`) COMMENT '按审核时间对账'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提现申请表';


DROP TABLE IF EXISTS `pay_merchant_withdrawal_operation_log`;
CREATE TABLE `pay_merchant_withdrawal_operation_log` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '日志ID（主键）',
  `withdrawal_no` VARCHAR(32) NOT NULL COMMENT '关联提现订单号（withdrawal_apply.withdrawal_no）',
  `operator_type` TINYINT NOT NULL COMMENT '操作人类型：1-用户，2-财务，3-系统',
  `operator_id` BIGINT NOT NULL COMMENT '操作人ID（用户ID/财务ID/系统标识：0=系统）',
  `operation_content` VARCHAR(255) NOT NULL COMMENT '操作内容（如“发起提现申请”“审核通过”“上传转账凭证”）',
  `related_settlement_ids` VARCHAR(255) DEFAULT NULL COMMENT '涉及的佣金ID（如1001,1002，审核时关联的佣金）',
  `related_order_nos` VARCHAR(4000) DEFAULT NULL COMMENT '涉及的订单编号（如ORD20250917001,ORD20250917002，审计时快速定位）',
  `operation_ip` VARCHAR(64) DEFAULT NULL COMMENT '操作IP（用户操作时记录，如192.168.1.1，财务操作记录内网IP）',
  `operation_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  `deleted` tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`),
  KEY `idx_withdrawal_no` (`withdrawal_no`) COMMENT '按提现订单号查全流程操作日志',
  KEY `idx_operation_time` (`operation_time`) COMMENT '按时间范围查操作记录'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提现操作日志表';

DROP TABLE IF EXISTS `pay_merchant_bank_account`;
CREATE TABLE `pay_merchant_bank_account` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '收款账户ID（主键）',
  `user_id` BIGINT NOT NULL COMMENT '关联user表主键（用户ID）',
  `account_type` TINYINT NOT NULL COMMENT '账户类型：1-银行卡，2-支付宝，3-微信',
  `account_name` VARCHAR(64) NOT NULL COMMENT '开户名（需与user.real_name一致，防冒领）',
  `account_no` VARCHAR(64) NOT NULL COMMENT '账号（脱敏存储：银行卡显后4位，支付宝/微信显前2后4）',
  `bank_name` VARCHAR(64) DEFAULT NULL COMMENT '开户银行（account_type=1必填，如中国工商银行）',
  `branch_bank_name` VARCHAR(128) DEFAULT NULL COMMENT '开户支行（account_type=1可选，如工行北京朝阳支行）',
  `is_default` TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认账户：0-否，1-是（一个用户仅一个默认账户）',
  `account_status` TINYINT NOT NULL DEFAULT 1 COMMENT '账户状态：1-正常，0-禁用（如账号错误被驳回）',
  `deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记(0-正常,1-已删除)',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT 'Default' COMMENT '租户id',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`) COMMENT '按用户查询所有绑定账户'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户收款账户表';

DROP TABLE IF EXISTS `pay_offline_transfer_record`;
CREATE TABLE `pay_offline_transfer_record` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '转账记录ID（主键）',
  `withdrawal_no` varchar(32) NOT NULL COMMENT '关联提现订单号',
  `transfer_type` tinyint DEFAULT NULL COMMENT '转账方式：1-企业网银，2-银行柜台，3-手机银行',
  `payer_account` varchar(64) DEFAULT NULL COMMENT '付款账户（平台企业账户）',
  `payee_account_id` bigint NOT NULL COMMENT '收款账户ID（用户账户ID，）',
  `transfer_amount` decimal(12,2) NOT NULL COMMENT '转账金额（分，与withdrawal_apply.actual_amount一致）',
  `bank_flow_no` varchar(64) DEFAULT NULL COMMENT '银行流水号',
  `transfer_time` datetime DEFAULT NULL COMMENT '转账时间（财务操作时间，如2025-09-17 14:30:00）',
  `operator_id` bigint DEFAULT NULL COMMENT '转账操作人ID（关联user表，财务用户ID）',
  `transfer_status` tinyint NOT NULL DEFAULT '1' COMMENT '0-待转账， 1-已发起， 2-银行确认，3-转账失败',
  `failure_reason` varchar(255) DEFAULT NULL COMMENT '失败原因（如“账号错误被银行退回”“开户行填写错误”）',
  `voucher_url` varchar(255) DEFAULT NULL COMMENT '转账凭证（如网银截图、柜台回执照片，OSS存储链接）',
  `deleted` tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_withdrawal_no` (`withdrawal_no`) COMMENT '一个提现订单对应一条线下转账记录，避免重复转账',
  KEY `idx_bank_flow_no` (`bank_flow_no`) COMMENT '按银行流水号对账（匹配银行账单）',
  KEY `idx_transfer_time` (`transfer_time`) COMMENT '按转账时间查记录（如查当月线下转账总和）'
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='线下转账流水表';

DROP TABLE IF EXISTS `pay_financial_reconciliation`;
CREATE TABLE `pay_financial_reconciliation` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '对账ID（主键）',
  `reconciliation_no` VARCHAR(32) NOT NULL COMMENT '对账单号',
  `reconciliation_type` TINYINT NOT NULL COMMENT '对账类型：1-佣金对账，2-提现对账，3-全量对账（佣金+提现）',
  `reconciliation_cycle` VARCHAR(16) NOT NULL COMMENT '对账周期',
  `start_time` DATETIME NOT NULL COMMENT '对账开始时间',
  `end_time` DATETIME NOT NULL COMMENT '对账结束时间',
  `reconciliation_status` TINYINT NOT NULL DEFAULT 0 COMMENT '对账状态：0-待对账，1-对账中，2-对账完成（无差异），3-对账差异',
  `reconciliation_user_id` BIGINT DEFAULT NULL COMMENT '对账人ID（关联user表，财务用户ID）',
  `reconciliation_time` DATETIME DEFAULT NULL COMMENT '对账完成时间',
  `total_platform_amount` DECIMAL(15,2) DEFAULT 0.00 COMMENT '平台记录总金额（元：佣金/提现的平台统计总和）',
  `total_third_amount` DECIMAL(15,2) DEFAULT 0.00 COMMENT '第三方记录总金额（元：银行流水/支付平台统计总和）',
  `difference_amount` DECIMAL(15,2) DEFAULT 0.00 COMMENT '差异金额（元）= total_platform_amount - total_third_amount',
  `difference_remark` VARCHAR(512) DEFAULT NULL COMMENT '差异说明（reconciliation_status=3时填写，如“9月25日银行漏记1笔500元转账”）',
  `deleted` tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_reconciliation_no` (`reconciliation_no`) COMMENT '对账单号唯一，用于归档与查询',
  KEY `idx_cycle_type` (`reconciliation_cycle`, `reconciliation_type`) COMMENT '按周期+类型查对账任务（如查9月提现对账）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='财务对账主表';

DROP TABLE IF EXISTS `pay_financial_reconciliation_detail`;
CREATE TABLE `pay_financial_reconciliation_detail` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '明细ID（主键）',
  `reconciliation_id` BIGINT NOT NULL COMMENT '关联对账主表ID（financial_reconciliation.reconciliation_id）',
  `target_type` TINYINT NOT NULL COMMENT '对账对象类型：1-佣金记录，2-提现记录',
  `target_id` BIGINT NOT NULL COMMENT '对账对象ID（commission_id/withdrawal_id）',
  `target_no` VARCHAR(32) DEFAULT NULL COMMENT '对账对象编号（佣金无编号填“-”，提现填withdrawal_no）',
  `platform_amount` DECIMAL(12,2) NOT NULL COMMENT '平台记录金额（元：佣金=commission_amount，提现=actual_amount）',
  `platform_time` DATETIME NOT NULL COMMENT '平台记录时间（佣金=settlement_time，提现=transfer_time）',
  `third_party_amount` DECIMAL(12,2) DEFAULT NULL COMMENT '第三方记录金额（元：银行流水/支付平台的金额）',
  `third_party_time` DATETIME DEFAULT NULL COMMENT '第三方记录时间（如银行转账时间、支付平台结算时间）',
  `third_party_no` VARCHAR(64) DEFAULT NULL COMMENT '第三方流水号（如银行流水号、支付平台订单号）',
  `reconciliation_result` TINYINT NOT NULL COMMENT '对账结果：1-一致，2-差异（金额/时间不符），3-平台有第三方无，4-第三方有平台无',
  `difference_reason` VARCHAR(255) DEFAULT NULL COMMENT '差异原因（如“银行到账延迟1天”“系统漏记佣金”）',
  `deleted` tinyint(1) NOT NULL COMMENT '逻辑删除标记(0-正常，1-已删除)',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_german2_ci NULL DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`),
  KEY `idx_reconciliation_id` (`reconciliation_id`) COMMENT '按对账ID查所有明细（如查某对账单的差异明细）',
  KEY `idx_target_type_id` (`target_type`, `target_id`) COMMENT '按对象类型+ID查明细（如查某佣金的对账结果）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='财务对账明细表';


DROP TABLE IF EXISTS `pay_refund_order`;
CREATE TABLE `pay_refund_order`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_id` int NULL DEFAULT NULL COMMENT '用户ID',
  `refund_id` varchar(64) NULL DEFAULT NULL COMMENT '渠道商的退款成功全局唯一标识（如微信的退款编号refund_id，支付宝的notify_id）',
  `refund_sn` varchar(50) NULL DEFAULT NULL COMMENT '渠道商的退款号（如微信的退款编号，支付宝的退款编号）',
  `pay_order_sn` varchar(50) NULL DEFAULT NULL COMMENT '支付模块的原支付订单号',
  `merchant_order_sn` varchar(50) NOT NULL COMMENT '外部系统的商户原订单SN',
  `merchant_refund_sn` varchar(50) NOT NULL  COMMENT '外部系统的商户订原退款单号',
  `channel_code` varchar(20) NULL DEFAULT NULL COMMENT '支付渠道编码',
  `refund_reason` varchar(200) NULL DEFAULT NULL COMMENT '退款原因',
  `refund_amount` bigint NULL DEFAULT NULL COMMENT '退款金额（分）',
  `total_amount` bigint NULL DEFAULT NULL COMMENT '原订单总金额（分）',
  `transaction_id` varchar(255) DEFAULT NULL COMMENT '渠道方的交易流水号,微信支付返回的交易流水号',
  `status` int NULL DEFAULT NULL COMMENT '退款状态（0处理中，1成功，2失败，3关闭）',
  `success_time` datetime NULL DEFAULT NULL COMMENT '退款成功时间',
  `remark` varchar(200) NULL DEFAULT NULL COMMENT '备注',
  `response_json` text COMMENT '响应原始数据',
  `deleted` tinyint(1) NOT NULL COMMENT '逻辑删除标记（0-正常，1-已删除）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_by` varchar(20) NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(20) NULL DEFAULT NULL COMMENT '修改人',
  `tenant_id` varchar(20) NULL DEFAULT NULL COMMENT '租户id',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '用户ID',
  INDEX `idx_refund_sn`(`refund_sn` ASC) USING BTREE COMMENT '退款订单号',
  INDEX `idx_pay_order_sn`(`pay_order_sn` ASC) USING BTREE COMMENT '原支付订单号',
  INDEX `idx_merchant_order_sn` (`merchant_order_sn`),
  INDEX `idx_merchant_refund_sn` (`merchant_refund_sn`)
) ENGINE = InnoDB COMMENT='退款订单表';;