跳到主要内容

PRD-019 拍卖行

文档编号:PRD-019
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:AuctionManager、RecordServer、BillServer

1. 背景与目标​

拍卖行为玩家提供非绑定物品的流通渠道。当前存在挂单重复、竞价后下架、成交不扣手续费等问题。本 PRD 统一挂单、竞价、一口价、结算、过期与手续费。

2. 核心规则​

2.1 交易方式​

方式规则
拍卖起拍价 + 加价幅度,到时最高价成交
一口价买家直接按一口价成交
拍卖 + 一口价竞价期间可被一口价直接买走

2.2 挂单​

  • 仅非绑定、可交易物品可挂单。
  • 挂单时长 12/24/48 小时,可配置。
  • 收取上架费(固定 + 按价格比例),下架不退。
  • 同一物品可拆分成多单,单笔数量受堆叠限制。

2.3 竞价与结算​

  • 竞价需高于当前价 + 最小加价,冻结买家货币。
  • 被超价后,前一位买家货币解冻。
  • 成交后扣除卖家手续费,剩余货币邮件发放。
  • 到期无人出价,物品邮件退回;一口价成交立即结算。

2.4 价格限制​

  • 设置最低/最高单价,防止异常转移。
  • 同一买卖双方频繁交易触发风控标记。
  • 异常价格订单进入人工审核(可配置)。

3. 服务端设计​

3.1 数据结构​

struct AuctionOrder {
uint64_t order_id;
uint64_t seller_id;
uint32_t item_id;
uint32_t count;
uint64_t start_price;
uint64_t buyout_price;
uint64_t current_price;
uint64_t current_bidder;
uint32_t expire_ms;
uint8_t state; // LISTED/BIDDING/SOLD/EXPIRED/CANCELED
};

3.2 协议​

方向协议说明
C→SCS_AuctionList上架
C→SCS_AuctionCancel下架
C→SCS_AuctionBid出价
C→SCS_AuctionBuyout一口价
C→SCS_AuctionQuery搜索/筛选
S→CSC_AuctionList列表
S→CSC_AuctionResult竞价/成交结果

3.3 结算流程​

出价/一口价
→ 校验订单状态、价格、余额
→ 冻结买家货币
→ 解冻前一位买家
→ 更新当前价/买家
→ 到期/一口价 → 成交
→ 扣手续费、邮件发卖家、物品入买家
→ 写 auction_log

3.4 一致性与风控​

  • 货币冻结/解冻/结算使用事务,失败回滚。
  • 订单状态机单向流转,禁止回退。
  • 同一 order_id 的结算幂等。
  • 记录买卖双方 IP/设备/交易频次,异常自动下架。

4. 客户端设计​

  • 搜索:物品名/品质/等级/价格区间/剩余时间排序。
  • 列表:单价、总价、当前价、一口价、剩余时间。
  • 出价:显示最小加价、当前最高价、冻结金额。
  • 我的挂单:状态、被出价次数、下架/改价(未出价时)。
  • 成交/过期通过邮件通知,点击跳转邮件。

5. 配置​

Auction.xml:duration、listing_fee_rate、fee_rate、min_increment、price_min、price_max、max_orders。

6. 边界与异常​

场景处理
竞价相同价格拒绝,需高于最小加价
卖家竞价自己的物品拒绝
下架时已有出价拒绝或需赔偿(配置)
成交时背包满物品转邮件
服务器重启从 DB 恢复订单,冻结货币对账
重复结算幂等,按订单状态返回

7. 验收标准​

  • 挂单/竞价/一口价/下架/过期全流程正确。
  • 货币冻结、解冻、手续费、邮件发放一致。
  • 订单状态不可逆向,重复请求不重复结算。
  • 搜索/排序/剩余时间准确。
  • 异常价格与自买自卖被拦截。