会员钱包
会员钱包是一个预付资金余额系统,允许会员预先为网吧服务充值。会员无需每次上机时支付现金,而是将资金充入钱包,系统在使用 PC、主机或订购商品时自动扣款。
基于余额条目的架构
钱包使用余额条目系统而非单一流水余额。每次向会员钱包充入资金时,系统创建一条新的钱包余额条目。每条记录是独立的,拥有自己的余额、来源、过期时间和设备限制。此设计提供:
- 每单位余额来源的完整可追溯性。
- 按条目独立设置过期日期。
- 设备特定限制(某些条目只能在 PC 上使用,其他只能在主机上使用)。
- 付费资金与推广赠送的清晰分离。
会员的钱包总余额是所有活跃余额条目剩余值的总和。
余额类型
每条钱包余额有一个余额类型标识资金的来源:
| 余额类型 | 说明 |
|---|---|
| 付费 | 会员支付了这些资金(现金、刷卡或其他支付方式)。购买金额类活动套餐时创建。 |
| 赠送 | 作为套餐购买的一部分授予的推广资金。例如"充值 100 分钟,赠送价值 20 分钟的余额"。 |
| 手动 | 收银员或管理员手动充入。用于善意补偿或特殊安排。 |
| 修正 | 管理性调整,用于修复会员余额中的错误。 |
| 迁移 | 数据迁移期间从旧系统导入的资金。 |
| 退款冲回 | 之前发放的退款被冲回时恢复的资金。 |
余额类型在创建时设定,之后不可更改。它作为永久的审计追踪记录。
余额状态
每条钱包余额经历以下生命周期状态:
- 活跃:条目有剩余资金且未过期。可以从此条目中消费。
- 已过期:条目的过期日期已过。剩余资金不再可用。
- 已消费:通过正常消费,条目的剩余余额已降至零。
- 已取消:管理员手动取消了条目,作废所有剩余余额。
钱包消费
当会员钱包被扣款时(用于时段、订单或其他计费项目),系统创建一条钱包消费记录,关联到特定余额条目并精确记录扣除金额。
每条消费记录包含标识触发扣除原因的上下文:
| 上下文 | 说明 |
|---|---|
| 时段使用 | 为支付时段使用时间而消费的资金。系统在时段运行时从钱包中扣除。 |
| 钱包支付 | 从钱包直接支付(例如会员使用钱包余额支付商品订单)。 |
| 订单 | 为支付在收银台或送到会员 PC 的商品订单而消费的资金。 |
| 退款 | 处理退款时创建的负向调整,将资金返回到余额条目。 |
每条消费记录关联回导致它的具体时段、订单或交易,实现完整的审计追溯。
余额日志
除了余额条目级别的消费记录外,系统维护一个会员余额日志,记录每个改变会员钱包总余额的事件:
| 事件类型 | 说明 |
|---|---|
load |
向钱包充入资金(创建新余额条目或对现有条目充值)。 |
spend |
从钱包消费资金(时段付款、订单付款)。 |
refund |
向钱包退回资金(订单退款、时段退款)。 |
adjustment |
对余额进行管理性变更(修正、核销)。 |
每条余额日志记录变动金额和结果余额,因此您可以通过按时间顺序阅读日志来重建会员在任何时间点的余额。
设备限制
每条钱包余额有一个设备限制控制哪些类型的设备可以消费:
| 限制 | 含义 |
|---|---|
| 客户端 | 可在客户端 PC 上使用。除非明确限制,也可在主机上使用。 |
| 主机 | 可在游戏主机上使用。除非明确限制,也可在 PC 上使用。 |
| 仅 PC | 仅可在客户端 PC 上使用。主机时段无法从中消费。 |
| 仅主机 | 仅可在游戏主机上使用。PC 时段无法从中消费。 |
| 两者 | 无设备类型限制,可在任何设备上使用。这是默认值。 |
系统需要从会员钱包中扣款时,按设备限制筛选可用的余额条目,确保只对符合条件的条目扣费。
钱包类别和跨类别消费
钱包余额可以标记钱包类别(例如"游戏"或"通用")。这允许网吧创建隔离的余额池,只能在特定上下文中消费。
每条余额上的跨类别消费选项控制其资金是否可以在指定类别之外使用:
- 禁用(默认)时,余额只能在其自身类别中消费。
- 启用时,余额也可以被其他类别的交易消费。
如果余额未分配钱包类别,则视为通用余额,可被任何类别的交易消费。
充值方式
钱包资金可通过以下方式添加:
活动套餐购买:会员从活动中购买金额类套餐时,系统根据套餐定义自动创建钱包余额。一次套餐购买可能创建多条余额(一条用于付费部分,一条用于赠送部分)。
手动充值:收银员可以从会员详情面板手动向会员钱包充值。创建类型为"手动"的余额条目。
迁移:系统部署期间,来自旧系统的现有余额可以作为"迁移"类型的余额条目导入。
时段期间钱包的消费方式
当拥有钱包余额的会员开始时段时,系统可以自动从钱包中支付时段费用:
- 定价引擎根据当前定价档位和适用的等级折扣计算每分钟费用。
- 时段运行期间,系统定期从会员符合条件的钱包余额中扣除累积费用。
- 按过期日期顺序消费余额条目(最先过期的优先使用),以最大限度减少过期造成的浪费。
- 如果钱包余额在时段结束前耗尽,剩余费用在时段关闭时作为现金收款处理。
- 每次扣除创建一条关联到时段的"时段使用"消费记录。