Appearance
数据模型设计
**本文引用的文件** - [决策变更清单.md](file://决策变更清单.md) - [待确认决策清单.md](file://待确认决策清单.md) - [承兑平台产品方案文档.md](file://承兑平台产品方案文档.md) - [综合审查报告.md](file://综合审查报告.md)目录
简介
本文件围绕“承兑平台”的数据模型设计展开,结合决策变更清单与产品方案文档中的数据相关条款,系统梳理核心数据实体、实体关系、数据字典、主键/外键与索引设计、约束与验证规则、业务规则与数据完整性、数据访问模式与缓存策略、性能与容量规划、数据生命周期与归档策略、数据迁移与版本管理、数据安全与隐私要求等。旨在为数据库设计、API与服务实现提供可落地的数据蓝图。
项目结构
- 仓库包含产品方案、决策变更、待确认决策、综合审查报告以及原型文件等,为数据模型设计提供了充分的业务背景与约束条件。
- 数据模型设计以“订单、用户(商户/交易员)、汇率、风控规则、钱包与资金流水”为核心,围绕“做市商+撮合平台”的价差盈利模型构建。
mermaid
graph TB
subgraph "业务域"
Orders["订单域<br/>入金/出金/批量"]
Users["用户域<br/>商户/交易员/代理/介绍人"]
Rates["汇率与费率域<br/>基准/偏移/加点/手续费"]
Risk["风控域<br/>KYC/限额/反欺诈/旅行规则"]
Wallet["钱包域<br/>地址/链上交互/多签"]
Notify["通知域<br/>站内信/短信/邮件/Webhook"]
end
subgraph "数据存储"
DB["数据库(中心化)"]
Cache["缓存(Redis)"]
Chain["链上节点/钱包"]
end
Orders --> DB
Users --> DB
Rates --> DB
Risk --> DB
Wallet --> Chain
DB --> Cache
DB --> Orders
DB --> Users
DB --> Rates
DB --> Risk
DB --> Wallet
DB --> Notify章节来源
- [承兑平台产品方案文档.md:1-800](file://承兑平台产品方案文档.md#L1-L800)
核心组件
- 订单中心:入金/出金/批量订单、状态机、指派与异常处理。
- 账户中心:商户账户、交易员账户、冻结余额管理、资金流水。
- 费率引擎:基准报价、交易员偏移、商户加点、手续费与点差计算。
- 风控中心:KYC/限额/反欺诈/旅行规则/制裁名单。
- 钱包中心:地址管理、链上交互、冷热钱包、多签管理。
- 通知中心:站内信、短信/邮件、Webhook。
章节来源
- [承兑平台产品方案文档.md:295-495](file://承兑平台产品方案文档.md#L295-L495)
架构总览
- 数据流:终端用户→商户→平台→交易员,平台内部以USDT记账,不直接持有法币。
- 资金流:入金锁定交易员USDT,出金锁定商户USDT,风控审核通过后释放。
- 技术栈:PostgreSQL + Redis;链上节点/钱包服务;短信/邮件/通知服务;Webhook回调。
mermaid
graph LR
U["终端用户"] --> M["商户(外汇平台)"]
M --> P["承兑平台"]
P --> T["交易员"]
P --> D["数据库"]
P --> L["链上钱包服务"]
P --> N["通知服务"]
D --> C["缓存(Redis)"]
L --> D
N --> M
N --> U章节来源
- [承兑平台产品方案文档.md:497-595](file://承兑平台产品方案文档.md#L497-L595)
详细组件分析
订单实体设计
- 实体:订单(入金/出金/批量)、订单状态、订单指派记录。
- 关键属性:订单ID(幂等)、类型、状态、金额、汇率、手续费、创建/更新时间、指派/完成/取消时间。
- 约束与规则:
- 幂等性:商户侧订单ID幂等,重复请求返回相同结果。
- 指派规则:交易员余额充足、在线、未超接单量。
- 超时处理:阶梯超时(用户确认→交易员确认),超时自动释放并重新指派。
- 批量出金:支持Excel模板导入,批次释放需考虑汇率波动与U池锁定安全边际。
- 索引建议:
- 订单ID(唯一)
- 商户ID/交易员ID/状态/创建时间
- 汇率/手续费字段建立二级索引以支持查询与报表
- 业务规则:
- 入金:USDT从交易员冻结余额划转至商户账户,平台留存差额。
- 出金:USDT从商户冻结余额划转至交易员账户,风控审核通过后释放。
mermaid
erDiagram
ORDER {
uuid id PK
string merchant_order_id UK
enum type
enum status
decimal amount_usdt
decimal amount_cny
decimal exchange_rate
decimal fee_usdt
uuid merchant_id FK
uuid trader_id FK
uuid batch_id FK
timestamp created_at
timestamp updated_at
}
MERCHANT {
uuid id PK
string name
string account_no
decimal balance_usdt
decimal frozen_balance_usdt
enum status
}
TRADER {
uuid id PK
string real_name
string id_card_no
string bank_account_no
decimal balance_usdt
decimal frozen_balance_usdt
enum status
}
BATCH_OUT {
uuid id PK
int total_count
int success_count
enum status
timestamp settle_at
}
ORDER }|--|| MERCHANT : "属于"
ORDER }|--|| TRADER : "指派/完成"
ORDER }|--|| BATCH_OUT : "属于"图表来源
- [承兑平台产品方案文档.md:1718-1746](file://承兑平台产品方案文档.md#L1718-L1746)
章节来源
- [承兑平台产品方案文档.md:156-295](file://承兑平台产品方案文档.md#L156-L295)
- [决策变更清单.md:67-105](file://决策变更清单.md#L67-L105)
用户实体设计
- 实体:商户、交易员、代理、介绍人。
- 关键属性:主体信息、账户余额、冻结余额、状态、KYC/KYB信息、收款账户、接单限额、等级/分润比例。
- 约束与规则:
- 交易员需预存保证金(可配置),绑定有效收款账户,通过风控审核。
- 商户可配置专属费率、交易员点差、加点上限。
- 代理/介绍人无资金操作,仅统计与返佣。
- 索引建议:
- 用户ID(唯一)
- 身份证/银行卡号(唯一性约束)
- 商户/交易员等级/状态
- 业务规则:
- 交易员收益=买卖价差+补助,平台通过点差与手续费抽成。
- 商户加点用于调节流动性,不得超过上限。
mermaid
erDiagram
MERCHANT {
uuid id PK
string name
string legal_entity_no
decimal balance_usdt
decimal frozen_balance_usdt
enum status
}
TRADER {
uuid id PK
string real_name
string id_card_no UK
string bank_account_no
decimal balance_usdt
decimal frozen_balance_usdt
enum status
enum level
}
AGENT {
uuid id PK
string name
decimal commission_ratio
}
INTRODUCER {
uuid id PK
string name
decimal reward_ratio
}图表来源
- [承兑平台产品方案文档.md:83-143](file://承兑平台产品方案文档.md#L83-L143)
章节来源
- [承兑平台产品方案文档.md:83-143](file://承兑平台产品方案文档.md#L83-L143)
- [决策变更清单.md:13-36](file://决策变更清单.md#L13-L36)
汇率与费率实体设计
- 实体:基准报价、交易员偏移、商户加点、手续费规则、点差分级。
- 关键属性:基准bid/ask、交易员bid/ask偏移、商户入金加点/出金减点、手续费率、分级阈值。
- 约束与规则:
- 价格关系:对外ask > 交易员ask > 交易员bid > 对外bid。
- 商户加点上限(默认1%,超0.5%提醒)。
- 报价偏离仅告警,不自动干预。
- 索引建议:
- 基准报价时间戳
- 商户ID/交易员等级
- 业务规则:
- 汇率查询返回含商户加点后的最终汇率;不提供独立纯基准汇率接口。
- 费率变更立即生效,仅对新订单有效。
mermaid
erDiagram
RATE_BASE {
uuid id PK
decimal bid
decimal ask
timestamp updated_at
}
TRADER_OFFSET {
uuid id PK
uuid trader_level
decimal bid_offset
decimal ask_offset
}
MERCHANT_MARKUP {
uuid id PK
uuid merchant_id FK
decimal inbound_markup
decimal outbound_discount
decimal max_markup
}
FEE_RULE {
uuid id PK
enum category
decimal rate_percent
decimal fixed_usdt
}图表来源
- [承兑平台产品方案文档.md:346-461](file://承兑平台产品方案文档.md#L346-L461)
- [决策变更清单.md:46-62](file://决策变更清单.md#L46-L62)
章节来源
- [承兑平台产品方案文档.md:346-461](file://承兑平台产品方案文档.md#L346-L461)
- [决策变更清单.md:46-62](file://决策变更清单.md#L46-L62)
风控规则实体设计
- 实体:KYC/限额/反欺诈/旅行规则/制裁名单。
- 关键属性:用户画像、风险等级、限额阈值、反欺诈规则、旅行规则字段、制裁名单匹配结果。
- 约束与规则:
- V1采用OFAC SDN List本地匹配。
- 旅行规则V1实现数据采集框架,记录发收方信息。
- 单卡风控:24h收款人上限、可配置释放间隔、同地区优先。
- 索引建议:
- 身份证/银行卡号/国家/地区
- 风控规则ID/阈值
- 业务规则:
- 报价偏离仅告警;U池锁定105%+锁定期间冻结商户提现;挂起超4h告警。
mermaid
erDiagram
KYC_PROFILE {
uuid id PK
uuid user_id FK
string id_card_no
string face_photo_url
enum risk_level
}
RISK_LIMIT {
uuid id PK
uuid role_type
decimal daily_max
decimal monthly_max
}
TRAVEL_RULE {
uuid id PK
uuid order_id FK
json sender_info
json receiver_info
}
SANCTIONS_LIST {
uuid id PK
string entity_name
string entity_type
string list_type
}图表来源
- [综合审查报告.md:173-247](file://综合审查报告.md#L173-L247)
- [决策变更清单.md:142-164](file://决策变更清单.md#L142-L164)
章节来源
- [综合审查报告.md:173-247](file://综合审查报告.md#L173-L247)
- [决策变更清单.md:142-164](file://决策变更清单.md#L142-L164)
钱包与资金流水实体设计
- 实体:钱包地址、链上交互、内部划转、提现审核。
- 关键属性:链类型(TRC20/ERC20/BEP20)、地址、链上状态、内部余额、冻结余额、提现申请与审核。
- 约束与规则:
- 独立地址(HD Wallet),每用户每链独立地址,无需Memo。
- 热钱包日常周转,冷钱包多签大额储备。
- 冷热分离、多签管理、限额与归集策略。
- 索引建议:
- 地址/链类型/用户ID
- 提现申请状态/审核时间
- 业务规则:
- 充值确认链上确认后更新数据库余额;提现审核通过后链上转账。
mermaid
erDiagram
WALLET_ADDRESS {
uuid id PK
uuid user_id FK
string chain_type
string address
enum status
}
CHAIN_TXN {
uuid id PK
string tx_hash
string chain_type
string from_address
string to_address
decimal amount_usdt
int confirmations
timestamp confirmed_at
}
INTERNAL_TRANSFER {
uuid id PK
uuid from_user_id FK
uuid to_user_id FK
decimal amount_usdt
enum direction
timestamp created_at
}
WITHDRAW_APPLY {
uuid id PK
uuid user_id FK
decimal amount_usdt
enum status
timestamp reviewed_at
}图表来源
- [承兑平台产品方案文档.md:485-495](file://承兑平台产品方案文档.md#L485-L495)
- [决策变更清单.md:109-118](file://决策变更清单.md#L109-L118)
章节来源
- [承兑平台产品方案文档.md:485-495](file://承兑平台产品方案文档.md#L485-L495)
- [决策变更清单.md:109-118](file://决策变更清单.md#L109-L118)
数据字典(核心字段)
- 订单
- 字段:id、merchant_order_id(幂等)、type、status、amount_usdt、amount_cny、exchange_rate、fee_usdt、merchant_id、trader_id、batch_id、created_at、updated_at
- 约束:唯一索引(merchant_order_id),外键(merchant_id、trader_id、batch_id)
- 用户
- 字段:id、real_name、id_card_no(唯一)、bank_account_no、balance_usdt、frozen_balance_usdt、status、level
- 约束:唯一索引(id_card_no),外键(无)
- 汇率与费率
- 字段:id、bid、ask、updated_at(基准报价);trader_level、bid_offset、ask_offset(交易员偏移);inbound_markup、outbound_discount、max_markup(商户加点)
- 约束:价格关系约束、加点上限约束
- 风控
- 字段:risk_level(KYC)、daily_max/monthly_max(限额)、sender_info/receiver_info(旅行规则)、制裁名单字段
- 约束:匹配阈值与规则
- 钱包
- 字段:chain_type、address、tx_hash、confirmations、confirmed_at(链上交易)
- 约束:链类型与地址唯一性
章节来源
- [承兑平台产品方案文档.md:1718-1746](file://承兑平台产品方案文档.md#L1718-L1746)
- [承兑平台产品方案文档.md:346-461](file://承兑平台产品方案文档.md#L346-L461)
- [综合审查报告.md:173-247](file://综合审查报告.md#L173-L247)
数据访问模式与缓存策略
- 订单查询:按商户ID/交易员ID/状态/时间范围分页查询;热点订单可缓存。
- 账户余额:高频读取,Redis缓存可用/冻结余额,数据库落盘;写操作采用分布式锁。
- 汇率与费率:基准报价定期刷新,Redis缓存bid/ask;商户加点按商户ID缓存。
- 钱包:链上交易监听写入数据库,地址余额定期归集;提现申请状态变更写入通知队列。
- 缓存策略:
- 读多写少:订单、汇率、用户基础信息缓存;写少读多:交易员等级、手续费规则。
- 缓存失效:订单状态变更、余额变更、费率变更触发失效。
章节来源
- [承兑平台产品方案文档.md:1829-1859](file://承兑平台产品方案文档.md#L1829-L1859)
数据流与处理逻辑
- 入金流程:商户下单→平台锁定交易员USDT→交易员确认收款→平台内部划转→商户入金完成。
- 出金流程:商户下单→锁定商户USDT→平台指派交易员→交易员转账→上传凭证→风控审核→释放USDT→回调商户。
- 异常处理:超时自动释放、争议仲裁、挂起超时告警、单卡风控友好策略。
mermaid
flowchart TD
Start(["开始"]) --> CreateOrder["创建订单"]
CreateOrder --> AssignTrader["指派交易员"]
AssignTrader --> LockFund["锁定资金"]
LockFund --> ConfirmCNY["交易员确认收款/转账"]
ConfirmCNY --> InternalTransfer["平台内部USDT划转"]
InternalTransfer --> ReleaseFund["释放资金"]
ReleaseFund --> NotifyMerchant["回调商户"]
NotifyMerchant --> End(["结束"])
CreateOrder --> Timeout{"超时?"}
Timeout --> |是| AutoRelease["自动释放并重新指派"]
AutoRelease --> End
Timeout --> |否| ConfirmCNY图表来源
- [承兑平台产品方案文档.md:156-295](file://承兑平台产品方案文档.md#L156-L295)
章节来源
- [承兑平台产品方案文档.md:156-295](file://承兑平台产品方案文档.md#L156-L295)
数据完整性与约束
- 主键/外键:订单、用户、钱包、批次等实体建立主外键关系。
- 唯一性:商户订单ID、交易员身份证号、钱包地址(链+地址)。
- 业务完整性:价格关系、加点上限、冻结余额与可用余额联动、链上确认与数据库状态一致。
- 一致性:T+1结算批次号+数据库事务+乐观锁,确保幂等性。
章节来源
- [综合审查报告.md:109-129](file://综合审查报告.md#L109-L129)
- [决策变更清单.md:119-126](file://决策变更清单.md#L119-L126)
性能与容量规划
- 查询热点:订单状态、用户余额、汇率缓存命中率。
- 写入热点:订单创建、资金冻结/释放、链上交易确认。
- 容量:按月订单量与峰值QPS估算,数据库读写分离、缓存分层、异步通知。
- 索引:复合索引(商户ID+状态+时间)、(交易员ID+状态+时间)、(链类型+地址)。
章节来源
- [综合审查报告.md:589-587](file://综合审查报告.md#L589-L587)
数据生命周期、保留与归档
- 订单:完成/取消后保留30天,批量出金批次完成后保留90天。
- 账户与KYC:永久保留,按合规要求销毁或匿名化。
- 链上交易:保留历史哈希与确认记录,按合规要求归档。
- 日志与审计:操作日志保留180天,支持对账与追溯。
章节来源
- [综合审查报告.md:660-673](file://综合审查报告.md#L660-L673)
数据迁移路径、版本管理与API演进
- 数据迁移:地址方案从共享地址迁移到独立地址,需批量生成HD Wallet地址并迁移历史充值记录。
- API版本:/api/v1 → /api/v2(破坏性变更需兼容期),Header版本与URL版本并行。
- 版本策略:破坏性变更需提前30天公告,兼容变更滚动发布。
章节来源
- [综合审查报告.md:549-557](file://综合审查报告.md#L549-L557)
- [决策变更清单.md:200-209](file://决策变更清单.md#L200-L209)
数据安全与隐私
- 数据安全:敏感字段加密存储(身份证号、银行卡号)、传输加密(TLS)、访问鉴权(商户/交易员令牌)。
- 隐私保护:遵循PDPO/GDPR,提供数据访问与删除权;旅行规则数据最小化采集。
- 合规:KYC/AML/制裁名单筛查、SAR/STR上报流程、税务合规章节。
章节来源
- [综合审查报告.md:173-247](file://综合审查报告.md#L173-L247)
- [决策变更清单.md:142-164](file://决策变更清单.md#L142-L164)
依赖分析
- 组件耦合:
- 订单中心依赖费率引擎与风控中心。
- 账户中心依赖钱包中心与通知中心。
- 钱包中心依赖链上节点与多签服务。
- 外部依赖:
- 链上节点(QuickNode/Alchemy)、短信/邮件服务、合规服务(制裁名单、AML)。
- 循环依赖规避:通过领域事件与异步解耦,避免直接循环调用。
mermaid
graph TB
Orders["订单中心"] --> Rates["费率引擎"]
Orders --> Risk["风控中心"]
Accounts["账户中心"] --> Wallet["钱包中心"]
Accounts --> Notify["通知中心"]
Wallet --> Chain["链上节点"]
Risk --> Compliance["合规服务"]图表来源
- [承兑平台产品方案文档.md:295-495](file://承兑平台产品方案文档.md#L295-L495)
章节来源
- [承兑平台产品方案文档.md:295-495](file://承兑平台产品方案文档.md#L295-L495)
性能考量
- 读写分离:热点读取走缓存,写入走数据库;批量结算使用事务+乐观锁。
- 异步化:Webhook回调、通知、链上监听采用消息队列。
- 监控与告警:订单超时、链上确认延迟、风控阈值触发、结算批次异常。
- 资源规划:数据库连接池、缓存容量、链上节点并发限制。
章节来源
- [综合审查报告.md:109-129](file://综合审查报告.md#L109-L129)
故障排查指南
- 订单卡住:检查指派锁、冻结余额、状态机;查看链上确认记录。
- 出金异常:核查交易员凭证、风控审核结果、U池锁定与释放。
- 汇率异常:核对基准报价来源、偏移与加点配置、缓存一致性。
- 钱包问题:检查链上交易哈希、确认数、归集阈值与多签状态。
章节来源
- [综合审查报告.md:250-298](file://综合审查报告.md#L250-L298)
结论
本数据模型以“价差盈利+撮合平台”为核心,围绕订单、用户、汇率、风控、钱包与通知六大域构建。通过幂等订单ID、冻结余额与内部USDT划转、独立地址方案、风控与合规框架,确保业务闭环与合规安全。建议在开发前完成数据库DDL与索引设计、缓存策略与异步化改造,并制定数据迁移与版本演进方案。
附录
- API参考(仅路径与字段说明)
- GET /api/v1/exchange-rate:返回当前bid/ask(不含偏移)
- GET /api/v1/balance:返回可用余额、冻结余额、总余额
- GET /api/v1/transactions:返回充值、出金、手续费等明细
- GET /api/v1/orders:支持时间/状态/类型筛选,分页
章节来源
- [承兑平台产品方案文档.md:1829-1859](file://承兑平台产品方案文档.md#L1829-L1859)
- [决策变更清单.md:200-209](file://决策变更清单.md#L200-L209)