Files
rui-docs/backend/design/支付模块数据库设计.md
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

803 lines
42 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 支付模块数据库设计
> **来源**: `~/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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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)
```sql
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='对账差异表';
```
---