Files
rui-docs/backend/design/支付模块数据库设计.md
T
vifo 7b2f3d77ca docs: 支付模块开发文档 + git 域名更新
- 新增 backend/design/支付模块架构概览.md
- 新增 backend/design/支付模块数据库设计.md (21张表 DDL)
- 新增 backend/design/支付模块接口设计.md
- git.dev.vifo.cc → git.vifo.cc 全局替换
2026-06-09 01:54:29 +08:00

42 KiB
Raw Blame History

支付模块数据库设计

来源: ~/rui/支付模块架构设计.md v1.0 创建日期: 2026-06-08 模块: rui-payment 表数量: 21 张


ER 关系概览

pay_order ──→ pay_record ──→ pay_channel_merchant
    │               │
    ↓               ↓
pay_refund    pay_channel

pay_merchant ──→ pay_merchant_qualification ──→ pay_merchant_audit
      │
      ↓
pay_merchant_channel ──→ pay_merchant_settle

pay_split_order ──→ pay_split_detail ──→ pay_split_receiver

pay_agent ──→ pay_agent_merchant ──→ pay_agent_commission ──→ pay_agent_settlement

pay_account ──→ pay_account_record
      │
      ↓
pay_account_freeze

pay_reconcile ──→ pay_reconcile_diff

3.1 支付核心表

3.1.1 支付订单表 (pay_order)

CREATE TABLE pay_order (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    order_no VARCHAR(64) NOT NULL COMMENT '支付订单号(系统生成)',
    biz_order_no VARCHAR(64) NOT NULL COMMENT '业务订单号(外部传入)',
    biz_type TINYINT NOT NULL DEFAULT 1 COMMENT '业务类型 1:订单支付 2:充值 3:转账',
    subject VARCHAR(256) NOT NULL COMMENT '订单标题',
    body VARCHAR(500) DEFAULT NULL COMMENT '订单描述',
    total_amount DECIMAL(19,4) NOT NULL COMMENT '订单总金额',
    pay_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '实际支付金额',
    discount_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '优惠金额',
    fee_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '手续费金额',
    currency VARCHAR(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
    payer_id BIGINT DEFAULT NULL COMMENT '付款人ID',
    payer_type TINYINT NOT NULL DEFAULT 1 COMMENT '付款人类型 1:用户 2:商户',
    payer_name VARCHAR(100) DEFAULT NULL COMMENT '付款人名称',
    payee_id BIGINT NOT NULL COMMENT '收款人ID(商户ID',
    payee_type TINYINT NOT NULL DEFAULT 1 COMMENT '收款人类型 1:商户 2:平台',
    payee_name VARCHAR(100) DEFAULT NULL COMMENT '收款人名称',
    channel_id BIGINT DEFAULT NULL COMMENT '支付渠道ID',
    channel_code VARCHAR(50) DEFAULT NULL COMMENT '支付渠道编码',
    pay_status TINYINT NOT NULL DEFAULT 0 COMMENT '支付状态 0:待支付 1:支付中 2:支付成功 3:支付失败 4:已关闭 5:已退款',
    pay_time DATETIME(3) DEFAULT NULL COMMENT '支付成功时间',
    expire_time DATETIME(3) NOT NULL COMMENT '订单过期时间',
    client_ip VARCHAR(128) DEFAULT NULL COMMENT '客户端IP',
    device VARCHAR(100) DEFAULT NULL COMMENT '设备信息',
    notify_url VARCHAR(500) DEFAULT NULL COMMENT '异步通知地址',
    return_url VARCHAR(500) DEFAULT NULL COMMENT '同步跳转地址',
    extra_params JSON DEFAULT NULL COMMENT '扩展参数(渠道特定参数)',
    error_code VARCHAR(100) DEFAULT NULL COMMENT '错误码',
    error_msg VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:禁用 1:启用',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除 0:正常 1:删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_order_no (tenant_id, order_no),
    UNIQUE KEY uk_biz_order_no (tenant_id, biz_order_no, biz_type),
    INDEX idx_pay_status (pay_status),
    INDEX idx_payee_id (payee_id),
    INDEX idx_payer_id (payer_id),
    INDEX idx_channel_id (channel_id),
    INDEX idx_pay_time (pay_time),
    INDEX idx_created_at (created_at),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='支付订单表';

3.1.2 支付流水表 (pay_record)

CREATE TABLE pay_record (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    record_no VARCHAR(64) NOT NULL COMMENT '流水号',
    order_id BIGINT NOT NULL COMMENT '支付订单ID',
    order_no VARCHAR(64) NOT NULL COMMENT '支付订单号',
    channel_id BIGINT NOT NULL COMMENT '支付渠道ID',
    channel_code VARCHAR(50) NOT NULL COMMENT '渠道编码',
    channel_merchant_no VARCHAR(100) DEFAULT NULL COMMENT '渠道商户号',
    channel_order_no VARCHAR(128) DEFAULT NULL COMMENT '渠道订单号',
    pay_amount DECIMAL(19,4) NOT NULL COMMENT '支付金额',
    fee_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '手续费',
    currency VARCHAR(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
    pay_status TINYINT NOT NULL DEFAULT 0 COMMENT '支付状态 0:待支付 1:支付中 2:支付成功 3:支付失败 4:已关闭',
    pay_time DATETIME(3) DEFAULT NULL COMMENT '支付成功时间',
    payer_info JSON DEFAULT NULL COMMENT '付款人信息(openid、银行卡号等)',
    notify_status TINYINT NOT NULL DEFAULT 0 COMMENT '通知状态 0:未通知 1:通知成功 2:通知失败',
    notify_times INT NOT NULL DEFAULT 0 COMMENT '通知次数',
    notify_last_time DATETIME(3) DEFAULT NULL COMMENT '最后通知时间',
    error_code VARCHAR(100) DEFAULT NULL COMMENT '错误码',
    error_msg VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_record_no (tenant_id, record_no),
    UNIQUE KEY uk_channel_order (tenant_id, channel_id, channel_order_no),
    INDEX idx_order_id (order_id),
    INDEX idx_order_no (order_no),
    INDEX idx_pay_status (pay_status),
    INDEX idx_pay_time (pay_time),
    INDEX idx_created_at (created_at),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='支付流水表';

3.1.3 退款单表 (pay_refund)

CREATE TABLE pay_refund (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    refund_no VARCHAR(64) NOT NULL COMMENT '退款单号',
    order_id BIGINT NOT NULL COMMENT '支付订单ID',
    order_no VARCHAR(64) NOT NULL COMMENT '支付订单号',
    record_id BIGINT NOT NULL COMMENT '支付流水ID',
    record_no VARCHAR(64) NOT NULL COMMENT '支付流水号',
    channel_id BIGINT NOT NULL COMMENT '支付渠道ID',
    channel_refund_no VARCHAR(128) DEFAULT NULL COMMENT '渠道退款单号',
    refund_amount DECIMAL(19,4) NOT NULL COMMENT '退款金额',
    total_amount DECIMAL(19,4) NOT NULL COMMENT '订单总金额',
    refund_status TINYINT NOT NULL DEFAULT 0 COMMENT '退款状态 0:待退款 1:退款中 2:退款成功 3:退款失败',
    refund_time DATETIME(3) DEFAULT NULL COMMENT '退款成功时间',
    refund_reason VARCHAR(500) DEFAULT NULL COMMENT '退款原因',
    operator_id BIGINT DEFAULT NULL COMMENT '操作人ID',
    operator_name VARCHAR(100) DEFAULT NULL COMMENT '操作人名称',
    notify_status TINYINT NOT NULL DEFAULT 0 COMMENT '通知状态',
    error_code VARCHAR(100) DEFAULT NULL COMMENT '错误码',
    error_msg VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_refund_no (tenant_id, refund_no),
    INDEX idx_order_id (order_id),
    INDEX idx_order_no (order_no),
    INDEX idx_refund_status (refund_status),
    INDEX idx_created_at (created_at),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='退款单表';

3.2 支付渠道表

3.2.1 支付渠道表 (pay_channel)

CREATE TABLE pay_channel (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    channel_code VARCHAR(50) NOT NULL COMMENT '渠道编码 如:alipay_app,wx_jsapi',
    channel_name VARCHAR(100) NOT NULL COMMENT '渠道名称',
    channel_type TINYINT NOT NULL DEFAULT 1 COMMENT '渠道类型 1:支付宝 2:微信支付 3:银联 4:其他',
    payment_type TINYINT NOT NULL DEFAULT 1 COMMENT '支付方式 1:扫码 2:App 3:H5 4:JSAPI 5:小程序 6:刷脸',
    config_json JSON NOT NULL COMMENT '渠道配置(JSON格式)',
    fee_rate DECIMAL(5,4) NOT NULL DEFAULT 0.0060 COMMENT '手续费率(如0.0060=0.6%',
    fee_type TINYINT NOT NULL DEFAULT 1 COMMENT '手续费类型 1:百分比 2:固定金额',
    min_amount DECIMAL(19,4) DEFAULT NULL COMMENT '单笔最小金额',
    max_amount DECIMAL(19,4) DEFAULT NULL COMMENT '单笔最大金额',
    day_limit_amount DECIMAL(19,4) DEFAULT NULL COMMENT '单日限额',
    sort_no INT NOT NULL DEFAULT 0 COMMENT '排序号',
    is_default TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认渠道 0:否 1:是',
    weight INT NOT NULL DEFAULT 100 COMMENT '权重(用于路由)',
    success_rate DECIMAL(5,2) NOT NULL DEFAULT 100.00 COMMENT '成功率(%',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:禁用 1:启用',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_channel_code (tenant_id, channel_code),
    INDEX idx_channel_type (channel_type),
    INDEX idx_status (status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='支付渠道表';

3.2.2 渠道商户配置表 (pay_channel_merchant)

CREATE TABLE pay_channel_merchant (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    channel_id BIGINT NOT NULL COMMENT '支付渠道ID',
    merchant_id BIGINT NOT NULL COMMENT '商户ID',
    merchant_no VARCHAR(100) NOT NULL COMMENT '渠道商户号',
    app_id VARCHAR(100) DEFAULT NULL COMMENT '应用ID',
    private_key TEXT DEFAULT NULL COMMENT '商户私钥',
    public_key TEXT DEFAULT NULL COMMENT '商户公钥',
    api_key VARCHAR(500) DEFAULT NULL COMMENT 'API密钥',
    cert_path VARCHAR(500) DEFAULT NULL COMMENT '证书路径',
    cert_password VARCHAR(100) DEFAULT NULL COMMENT '证书密码',
    notify_url VARCHAR(500) DEFAULT NULL COMMENT '异步通知地址',
    return_url VARCHAR(500) DEFAULT NULL COMMENT '同步跳转地址',
    fee_rate DECIMAL(5,4) NOT NULL DEFAULT 0.0060 COMMENT '商户自定义费率',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_channel_merchant (tenant_id, channel_id, merchant_id),
    INDEX idx_merchant_id (merchant_id),
    INDEX idx_channel_id (channel_id),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='渠道商户配置表';

3.3 商户进件表

3.3.1 商户表 (pay_merchant)

CREATE TABLE pay_merchant (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    merchant_no VARCHAR(64) NOT NULL COMMENT '商户编号',
    merchant_name VARCHAR(200) NOT NULL COMMENT '商户名称',
    merchant_short_name VARCHAR(100) DEFAULT NULL COMMENT '商户简称',
    merchant_type TINYINT NOT NULL DEFAULT 1 COMMENT '商户类型 1:企业 2:个体户 3:个人',
    agent_id BIGINT DEFAULT NULL COMMENT '所属代理ID',
    contact_name VARCHAR(100) NOT NULL COMMENT '联系人姓名',
    contact_phone VARCHAR(20) NOT NULL COMMENT '联系人电话',
    contact_email VARCHAR(100) DEFAULT NULL COMMENT '联系人邮箱',
    province_code VARCHAR(20) DEFAULT NULL COMMENT '省份编码',
    city_code VARCHAR(20) DEFAULT NULL COMMENT '城市编码',
    district_code VARCHAR(20) DEFAULT NULL COMMENT '区县编码',
    address VARCHAR(500) DEFAULT NULL COMMENT '详细地址',
    logo_url VARCHAR(500) DEFAULT NULL COMMENT '商户Logo',
    website VARCHAR(500) DEFAULT NULL COMMENT '商户网站',
    business_scope VARCHAR(500) DEFAULT NULL COMMENT '经营范围',
    audit_status TINYINT NOT NULL DEFAULT 0 COMMENT '审核状态 0:待提交 1:待审核 2:审核中 3:审核通过 4:审核驳回',
    audit_remark VARCHAR(500) DEFAULT NULL COMMENT '审核备注',
    audit_time DATETIME(3) DEFAULT NULL COMMENT '审核时间',
    merchant_status TINYINT NOT NULL DEFAULT 0 COMMENT '商户状态 0:未激活 1:正常 2:冻结 3:注销',
    activate_time DATETIME(3) DEFAULT NULL COMMENT '激活时间',
    total_transaction_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '累计交易金额',
    total_transaction_count INT NOT NULL DEFAULT 0 COMMENT '累计交易笔数',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_merchant_no (tenant_id, merchant_no),
    INDEX idx_agent_id (agent_id),
    INDEX idx_audit_status (audit_status),
    INDEX idx_merchant_status (merchant_status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='商户表';

3.3.2 商户资质表 (pay_merchant_qualification)

CREATE TABLE pay_merchant_qualification (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    merchant_id BIGINT NOT NULL COMMENT '商户ID',
    qual_type TINYINT NOT NULL DEFAULT 1 COMMENT '资质类型 1:营业执照 2:法人身份证正面 3:法人身份证反面 4:开户许可证 5:门头照 6:店内照 7:结算银行卡 8:特殊资质',
    qual_name VARCHAR(100) NOT NULL COMMENT '资质名称',
    qual_no VARCHAR(100) DEFAULT NULL COMMENT '资质编号(如营业执照号)',
    qual_image_url VARCHAR(500) NOT NULL COMMENT '资质图片URL',
    qual_image_url2 VARCHAR(500) DEFAULT NULL COMMENT '资质图片URL2(反面)',
    valid_start_date DATE DEFAULT NULL COMMENT '有效期开始',
    valid_end_date DATE DEFAULT NULL COMMENT '有效期结束',
    is_permanent TINYINT NOT NULL DEFAULT 0 COMMENT '是否永久有效 0:否 1:是',
    verify_status TINYINT NOT NULL DEFAULT 0 COMMENT '核验状态 0:未核验 1:核验通过 2:核验失败',
    verify_result VARCHAR(500) DEFAULT NULL COMMENT '核验结果',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    INDEX idx_merchant_id (merchant_id),
    INDEX idx_qual_type (qual_type),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='商户资质表';

3.3.3 商户审核记录表 (pay_merchant_audit)

CREATE TABLE pay_merchant_audit (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    merchant_id BIGINT NOT NULL COMMENT '商户ID',
    audit_type TINYINT NOT NULL DEFAULT 1 COMMENT '审核类型 1:入驻审核 2:资质变更 3:费率变更 4:结算变更',
    audit_level TINYINT NOT NULL DEFAULT 1 COMMENT '审核层级 1:初审 2:复审',
    audit_status TINYINT NOT NULL DEFAULT 0 COMMENT '审核状态 0:待审核 1:审核通过 2:审核驳回',
    audit_remark VARCHAR(500) DEFAULT NULL COMMENT '审核意见',
    auditor_id BIGINT DEFAULT NULL COMMENT '审核人ID',
    auditor_name VARCHAR(100) DEFAULT NULL COMMENT '审核人姓名',
    audit_time DATETIME(3) DEFAULT NULL COMMENT '审核时间',
    pre_data JSON DEFAULT NULL COMMENT '变更前数据',
    post_data JSON DEFAULT NULL COMMENT '变更后数据',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    INDEX idx_merchant_id (merchant_id),
    INDEX idx_audit_type (audit_type),
    INDEX idx_audit_status (audit_status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='商户审核记录表';

3.3.4 商户渠道配置表 (pay_merchant_channel)

CREATE TABLE pay_merchant_channel (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    merchant_id BIGINT NOT NULL COMMENT '商户ID',
    channel_id BIGINT NOT NULL COMMENT '支付渠道ID',
    channel_code VARCHAR(50) NOT NULL COMMENT '渠道编码',
    channel_merchant_no VARCHAR(100) DEFAULT NULL COMMENT '渠道子商户号',
    channel_app_id VARCHAR(100) DEFAULT NULL COMMENT '渠道应用ID',
    channel_status TINYINT NOT NULL DEFAULT 0 COMMENT '渠道状态 0:未申请 1:申请中 2:已通过 3:已驳回 4:已停用',
    apply_time DATETIME(3) DEFAULT NULL COMMENT '申请时间',
    audit_time DATETIME(3) DEFAULT NULL COMMENT '渠道审核时间',
    audit_remark VARCHAR(500) DEFAULT NULL COMMENT '渠道审核备注',
    fee_rate DECIMAL(5,4) NOT NULL DEFAULT 0.0060 COMMENT '商户渠道费率',
    day_limit_amount DECIMAL(19,4) DEFAULT NULL COMMENT '单日限额',
    single_limit_amount DECIMAL(19,4) DEFAULT NULL COMMENT '单笔限额',
    config_json JSON DEFAULT NULL COMMENT '渠道特定配置(JSON',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_merchant_channel (tenant_id, merchant_id, channel_id),
    INDEX idx_merchant_id (merchant_id),
    INDEX idx_channel_id (channel_id),
    INDEX idx_channel_status (channel_status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='商户渠道配置表';

3.3.5 商户结算配置表 (pay_merchant_settle)

CREATE TABLE pay_merchant_settle (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    merchant_id BIGINT NOT NULL COMMENT '商户ID',
    settle_type TINYINT NOT NULL DEFAULT 1 COMMENT '结算方式 1:自动结算 2:手动结算',
    settle_cycle TINYINT NOT NULL DEFAULT 1 COMMENT '结算周期 1:T+0 2:T+1 3:T+7 4:T+30',
    min_settle_amount DECIMAL(19,4) NOT NULL DEFAULT 1.0000 COMMENT '最低结算金额',
    settle_account_type TINYINT NOT NULL DEFAULT 1 COMMENT '结算账户类型 1:对公账户 2:对私账户 3:支付宝 4:微信',
    settle_account_name VARCHAR(100) NOT NULL COMMENT '结算账户名',
    settle_account_no VARCHAR(200) NOT NULL COMMENT '结算账号',
    settle_bank_code VARCHAR(50) DEFAULT NULL COMMENT '结算银行编码',
    settle_bank_name VARCHAR(100) DEFAULT NULL COMMENT '结算银行名称',
    settle_bank_branch VARCHAR(200) DEFAULT NULL COMMENT '开户支行',
    settle_bank_province VARCHAR(50) DEFAULT NULL COMMENT '开户省份',
    settle_bank_city VARCHAR(50) DEFAULT NULL COMMENT '开户城市',
    is_default TINYINT NOT NULL DEFAULT 1 COMMENT '是否默认结算配置',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_merchant_settle (tenant_id, merchant_id),
    INDEX idx_merchant_id (merchant_id),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='商户结算配置表';

3.4 分账表

3.3.1 分账订单表 (pay_split_order)

CREATE TABLE pay_split_order (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    split_no VARCHAR(64) NOT NULL COMMENT '分账订单号',
    order_id BIGINT NOT NULL COMMENT '支付订单ID',
    order_no VARCHAR(64) NOT NULL COMMENT '支付订单号',
    record_id BIGINT NOT NULL COMMENT '支付流水ID',
    total_amount DECIMAL(19,4) NOT NULL COMMENT '分账总金额',
    split_status TINYINT NOT NULL DEFAULT 0 COMMENT '分账状态 0:待分账 1:分账中 2:分账成功 3:分账失败 4:已回退',
    split_type TINYINT NOT NULL DEFAULT 1 COMMENT '分账类型 1:实时分账 2:延迟分账',
    split_mode TINYINT NOT NULL DEFAULT 1 COMMENT '分账模式 1:按比例 2:按固定金额',
    split_time DATETIME(3) DEFAULT NULL COMMENT '分账成功时间',
    finish_time DATETIME(3) DEFAULT NULL COMMENT '分账完成时间',
    return_url VARCHAR(500) DEFAULT NULL COMMENT '异步通知地址',
    error_code VARCHAR(100) DEFAULT NULL COMMENT '错误码',
    error_msg VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_split_no (tenant_id, split_no),
    INDEX idx_order_id (order_id),
    INDEX idx_order_no (order_no),
    INDEX idx_split_status (split_status),
    INDEX idx_created_at (created_at),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='分账订单表';

3.3.2 分账明细表 (pay_split_detail)

CREATE TABLE pay_split_detail (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    split_order_id BIGINT NOT NULL COMMENT '分账订单ID',
    split_no VARCHAR(64) NOT NULL COMMENT '分账订单号',
    receiver_id BIGINT NOT NULL COMMENT '接收方ID',
    receiver_type TINYINT NOT NULL DEFAULT 1 COMMENT '接收方类型 1:商户 2:平台 3:代理商 4:个人',
    receiver_name VARCHAR(100) DEFAULT NULL COMMENT '接收方名称',
    split_amount DECIMAL(19,4) NOT NULL COMMENT '分账金额',
    split_rate DECIMAL(5,4) DEFAULT NULL COMMENT '分账比例',
    split_status TINYINT NOT NULL DEFAULT 0 COMMENT '分账状态 0:待分账 1:分账中 2:分账成功 3:分账失败',
    split_time DATETIME(3) DEFAULT NULL COMMENT '分账成功时间',
    channel_detail_no VARCHAR(128) DEFAULT NULL COMMENT '渠道分账明细单号',
    error_code VARCHAR(100) DEFAULT NULL COMMENT '错误码',
    error_msg VARCHAR(500) DEFAULT NULL COMMENT '错误信息',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    INDEX idx_split_order_id (split_order_id),
    INDEX idx_split_no (split_no),
    INDEX idx_receiver_id (receiver_id),
    INDEX idx_split_status (split_status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='分账明细表';

3.3.3 分账接收方表 (pay_split_receiver)

CREATE TABLE pay_split_receiver (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    receiver_type TINYINT NOT NULL DEFAULT 1 COMMENT '接收方类型 1:商户 2:平台 3:代理商 4:个人',
    receiver_id BIGINT NOT NULL COMMENT '接收方业务ID',
    receiver_name VARCHAR(100) NOT NULL COMMENT '接收方名称',
    channel_type TINYINT NOT NULL DEFAULT 1 COMMENT '渠道类型 1:支付宝 2:微信 3:银行卡',
    account_type VARCHAR(50) DEFAULT NULL COMMENT '账户类型 如:login_name(支付宝登录号),openid(微信)',
    account_no VARCHAR(200) NOT NULL COMMENT '接收账号',
    account_name VARCHAR(100) DEFAULT NULL COMMENT '账号真实姓名',
    relation_type TINYINT NOT NULL DEFAULT 1 COMMENT '关系类型 1:服务商 2:门店 3:员工 4:个人',
    channel_relation_json JSON DEFAULT NULL COMMENT '渠道关系配置(JSON',
    is_default TINYINT NOT NULL DEFAULT 0 COMMENT '是否默认接收方',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_receiver (tenant_id, receiver_type, receiver_id, channel_type),
    INDEX idx_receiver_id (receiver_id),
    INDEX idx_account_no (account_no),
    INDEX idx_status (status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='分账接收方表';

3.5 代理商表

3.4.1 代理商表 (pay_agent)

CREATE TABLE pay_agent (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    agent_no VARCHAR(64) NOT NULL COMMENT '代理商编号',
    agent_name VARCHAR(200) NOT NULL COMMENT '代理商名称',
    agent_type TINYINT NOT NULL DEFAULT 1 COMMENT '代理商类型 1:个人 2:企业',
    parent_id BIGINT DEFAULT 0 COMMENT '上级代理ID 0:顶级代理',
    level TINYINT NOT NULL DEFAULT 1 COMMENT '代理层级 1:一级 2:二级 3:三级',
    level_path VARCHAR(500) DEFAULT NULL COMMENT '层级路径 如: /1/5/10/',
    contact_name VARCHAR(100) DEFAULT NULL COMMENT '联系人',
    contact_phone VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
    contact_email VARCHAR(100) DEFAULT NULL COMMENT '联系邮箱',
    id_card VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
    business_license VARCHAR(100) DEFAULT NULL COMMENT '营业执照号',
    address VARCHAR(500) DEFAULT NULL COMMENT '地址',
    commission_rate DECIMAL(5,4) NOT NULL DEFAULT 0.0000 COMMENT '默认佣金比例',
    min_settle_amount DECIMAL(19,4) NOT NULL DEFAULT 100.0000 COMMENT '最低结算金额',
    settle_type TINYINT NOT NULL DEFAULT 1 COMMENT '结算类型 1:自动结算 2:手动结算',
    settle_cycle TINYINT NOT NULL DEFAULT 1 COMMENT '结算周期 1:T+1 2:T+7 3:T+30',
    settle_account_id BIGINT DEFAULT NULL COMMENT '结算账户ID',
    merchant_count INT NOT NULL DEFAULT 0 COMMENT '拓展商户数',
    total_transaction_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '累计交易金额',
    total_commission_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '累计佣金金额',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:禁用 1:启用 2:审核中',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_agent_no (tenant_id, agent_no),
    INDEX idx_parent_id (parent_id),
    INDEX idx_level (level),
    INDEX idx_status (status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='代理商表';

3.4.2 代理商户关系表 (pay_agent_merchant)

CREATE TABLE pay_agent_merchant (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    agent_id BIGINT NOT NULL COMMENT '代理商ID',
    merchant_id BIGINT NOT NULL COMMENT '商户ID',
    merchant_name VARCHAR(200) DEFAULT NULL COMMENT '商户名称',
    commission_rate DECIMAL(5,4) NOT NULL DEFAULT 0.0000 COMMENT '佣金比例(覆盖代理默认比例)',
    bind_time DATETIME(3) DEFAULT NULL COMMENT '绑定时间',
    unbind_time DATETIME(3) DEFAULT NULL COMMENT '解绑时间',
    is_bind TINYINT NOT NULL DEFAULT 1 COMMENT '是否绑定 0:解绑 1:绑定',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_agent_merchant (tenant_id, agent_id, merchant_id),
    INDEX idx_agent_id (agent_id),
    INDEX idx_merchant_id (merchant_id),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='代理商户关系表';

3.4.3 代理佣金记录表 (pay_agent_commission)

CREATE TABLE pay_agent_commission (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    commission_no VARCHAR(64) NOT NULL COMMENT '佣金记录号',
    agent_id BIGINT NOT NULL COMMENT '代理商ID',
    merchant_id BIGINT NOT NULL COMMENT '商户ID',
    order_id BIGINT NOT NULL COMMENT '支付订单ID',
    order_no VARCHAR(64) NOT NULL COMMENT '支付订单号',
    record_id BIGINT NOT NULL COMMENT '支付流水ID',
    transaction_amount DECIMAL(19,4) NOT NULL COMMENT '交易金额',
    commission_rate DECIMAL(5,4) NOT NULL COMMENT '佣金比例',
    commission_amount DECIMAL(19,4) NOT NULL COMMENT '佣金金额',
    commission_status TINYINT NOT NULL DEFAULT 0 COMMENT '佣金状态 0:待结算 1:已结算 2:已取消',
    settle_time DATETIME(3) DEFAULT NULL COMMENT '结算时间',
    settle_batch_no VARCHAR(64) DEFAULT NULL COMMENT '结算批次号',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_commission_no (tenant_id, commission_no),
    INDEX idx_agent_id (agent_id),
    INDEX idx_merchant_id (merchant_id),
    INDEX idx_order_id (order_id),
    INDEX idx_commission_status (commission_status),
    INDEX idx_settle_batch_no (settle_batch_no),
    INDEX idx_created_at (created_at),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='代理佣金记录表';

3.4.4 代理结算表 (pay_agent_settlement)

CREATE TABLE pay_agent_settlement (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    settlement_no VARCHAR(64) NOT NULL COMMENT '结算单号',
    agent_id BIGINT NOT NULL COMMENT '代理商ID',
    settlement_type TINYINT NOT NULL DEFAULT 1 COMMENT '结算类型 1:佣金结算 2:退款扣回',
    start_time DATETIME(3) NOT NULL COMMENT '结算开始时间',
    end_time DATETIME(3) NOT NULL COMMENT '结算结束时间',
    total_count INT NOT NULL DEFAULT 0 COMMENT '结算笔数',
    total_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '结算总金额',
    fee_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '手续费金额',
    actual_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '实际结算金额',
    settlement_status TINYINT NOT NULL DEFAULT 0 COMMENT '结算状态 0:待结算 1:结算中 2:结算成功 3:结算失败',
    settlement_time DATETIME(3) DEFAULT NULL COMMENT '结算成功时间',
    settlement_method TINYINT NOT NULL DEFAULT 1 COMMENT '结算方式 1:转账到余额 2:银行转账 3:支付宝 4:微信',
    settlement_account VARCHAR(200) DEFAULT NULL COMMENT '结算账户',
    settlement_account_name VARCHAR(100) DEFAULT NULL COMMENT '结算账户名',
    settlement_batch_no VARCHAR(128) DEFAULT NULL COMMENT '渠道结算批次号',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_settlement_no (tenant_id, settlement_no),
    INDEX idx_agent_id (agent_id),
    INDEX idx_settlement_status (settlement_status),
    INDEX idx_start_time (start_time),
    INDEX idx_end_time (end_time),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='代理结算表';

3.6 资金账户表

3.5.1 资金账户表 (pay_account)

CREATE TABLE pay_account (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    account_no VARCHAR(64) NOT NULL COMMENT '账户号',
    account_type TINYINT NOT NULL DEFAULT 1 COMMENT '账户类型 1:用户 2:商户 3:平台 4:代理',
    owner_id BIGINT NOT NULL COMMENT '账户所有者ID',
    owner_name VARCHAR(100) DEFAULT NULL COMMENT '账户所有者名称',
    balance DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '账户余额',
    available_balance DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '可用余额',
    frozen_balance DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '冻结余额',
    total_income DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '累计收入',
    total_expenditure DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '累计支出',
    currency VARCHAR(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
    password_hash VARCHAR(255) DEFAULT NULL COMMENT '支付密码',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态 0:冻结 1:正常',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_account_no (tenant_id, account_no),
    UNIQUE KEY uk_owner (tenant_id, account_type, owner_id),
    INDEX idx_owner_id (owner_id),
    INDEX idx_status (status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='资金账户表';

3.5.2 账户流水表 (pay_account_record)

CREATE TABLE pay_account_record (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    record_no VARCHAR(64) NOT NULL COMMENT '流水号',
    account_id BIGINT NOT NULL COMMENT '账户ID',
    account_no VARCHAR(64) NOT NULL COMMENT '账户号',
    record_type TINYINT NOT NULL DEFAULT 1 COMMENT '流水类型 1:收入 2:支出 3:冻结 4:解冻 5:充值 6:提现',
    biz_type TINYINT NOT NULL DEFAULT 1 COMMENT '业务类型 1:支付 2:退款 3:分账 4:佣金 5:结算 6:提现 7:充值',
    biz_id BIGINT DEFAULT NULL COMMENT '业务ID',
    biz_no VARCHAR(64) DEFAULT NULL COMMENT '业务单号',
    amount DECIMAL(19,4) NOT NULL COMMENT '变动金额',
    before_balance DECIMAL(19,4) NOT NULL COMMENT '变动前余额',
    after_balance DECIMAL(19,4) NOT NULL COMMENT '变动后余额',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_record_no (tenant_id, record_no),
    INDEX idx_account_id (account_id),
    INDEX idx_biz_id (biz_id),
    INDEX idx_biz_no (biz_no),
    INDEX idx_record_type (record_type),
    INDEX idx_created_at (created_at),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='账户流水表';

3.5.3 资金冻结表 (pay_account_freeze)

CREATE TABLE pay_account_freeze (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    freeze_no VARCHAR(64) NOT NULL COMMENT '冻结单号',
    account_id BIGINT NOT NULL COMMENT '账户ID',
    freeze_amount DECIMAL(19,4) NOT NULL COMMENT '冻结金额',
    freeze_type TINYINT NOT NULL DEFAULT 1 COMMENT '冻结类型 1:退款保障 2:争议处理 3:合规审查',
    freeze_status TINYINT NOT NULL DEFAULT 0 COMMENT '冻结状态 0:冻结中 1:已解冻 2:已扣款',
    biz_type TINYINT NOT NULL DEFAULT 1 COMMENT '业务类型 1:订单 2:提现',
    biz_id BIGINT NOT NULL COMMENT '业务ID',
    biz_no VARCHAR(64) NOT NULL COMMENT '业务单号',
    expire_time DATETIME(3) DEFAULT NULL COMMENT '过期自动解冻时间',
    unfreeze_time DATETIME(3) DEFAULT NULL COMMENT '实际解冻时间',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_freeze_no (tenant_id, freeze_no),
    INDEX idx_account_id (account_id),
    INDEX idx_biz_id (biz_id),
    INDEX idx_freeze_status (freeze_status),
    INDEX idx_expire_time (expire_time),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='资金冻结表';

3.7 对账结算表

3.6.1 对账单表 (pay_reconcile)

CREATE TABLE pay_reconcile (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    reconcile_no VARCHAR(64) NOT NULL COMMENT '对账单号',
    channel_id BIGINT NOT NULL COMMENT '支付渠道ID',
    channel_code VARCHAR(50) NOT NULL COMMENT '渠道编码',
    reconcile_date DATE NOT NULL COMMENT '对账日期',
    reconcile_type TINYINT NOT NULL DEFAULT 1 COMMENT '对账类型 1:支付对账 2:退款对账',
    total_count INT NOT NULL DEFAULT 0 COMMENT '总笔数',
    total_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '总金额',
    success_count INT NOT NULL DEFAULT 0 COMMENT '对平笔数',
    success_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '对平金额',
    fail_count INT NOT NULL DEFAULT 0 COMMENT '差异笔数',
    fail_amount DECIMAL(19,4) NOT NULL DEFAULT 0.0000 COMMENT '差异金额',
    missing_count INT NOT NULL DEFAULT 0 COMMENT '漏单笔数(平台有渠道无)',
    extra_count INT NOT NULL DEFAULT 0 COMMENT '多渠道笔数(渠道有平台无)',
    amount_diff_count INT NOT NULL DEFAULT 0 COMMENT '金额差异笔数',
    status TINYINT NOT NULL DEFAULT 0 COMMENT '状态 0:对账中 1:对账成功 2:对账失败 3:已处理',
    file_url VARCHAR(500) DEFAULT NULL COMMENT '对账文件URL',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status_record TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_reconcile (tenant_id, channel_id, reconcile_date, reconcile_type),
    INDEX idx_reconcile_date (reconcile_date),
    INDEX idx_status (status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='对账单表';

3.6.2 对账差异表 (pay_reconcile_diff)

CREATE TABLE pay_reconcile_diff (
    id BIGINT NOT NULL COMMENT '主键ID',
    tenant_id BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
    reconcile_id BIGINT NOT NULL COMMENT '对账单ID',
    diff_type TINYINT NOT NULL DEFAULT 1 COMMENT '差异类型 1:平台漏单 2:多渠道 3:金额不符 4:状态不符',
    order_id BIGINT DEFAULT NULL COMMENT '平台订单ID',
    order_no VARCHAR(64) DEFAULT NULL COMMENT '平台订单号',
    channel_order_no VARCHAR(128) DEFAULT NULL COMMENT '渠道订单号',
    platform_amount DECIMAL(19,4) DEFAULT NULL COMMENT '平台金额',
    channel_amount DECIMAL(19,4) DEFAULT NULL COMMENT '渠道金额',
    platform_status TINYINT DEFAULT NULL COMMENT '平台状态',
    channel_status TINYINT DEFAULT NULL COMMENT '渠道状态',
    handle_status TINYINT NOT NULL DEFAULT 0 COMMENT '处理状态 0:待处理 1:已处理',
    handle_result TINYINT DEFAULT NULL COMMENT '处理结果 1:补单 2:退款 3:挂账 4:忽略',
    handle_remark VARCHAR(500) DEFAULT NULL COMMENT '处理备注',
    handler_id BIGINT DEFAULT NULL COMMENT '处理人ID',
    handler_name VARCHAR(100) DEFAULT NULL COMMENT '处理人',
    handle_time DATETIME(3) DEFAULT NULL COMMENT '处理时间',
    remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
    deleted TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
    created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
    updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
    PRIMARY KEY (id),
    INDEX idx_reconcile_id (reconcile_id),
    INDEX idx_order_id (order_id),
    INDEX idx_handle_status (handle_status),
    INDEX idx_tenant_id (tenant_id)
) COMMENT='对账差异表';