Files
junhong_cmp_fiber/openspec/specs/wallet/spec.md
huang 18daeae65a
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m17s
feat: 钱包系统分离 - 代理钱包与卡钱包完全隔离
## 变更概述
将统一钱包系统拆分为代理钱包和卡钱包两个独立系统,实现数据表和代码层面的完全隔离。

## 数据库变更
- 新增 6 张表:tb_agent_wallet、tb_agent_wallet_transaction、tb_agent_recharge_record、tb_card_wallet、tb_card_wallet_transaction、tb_card_recharge_record
- 删除 3 张旧表:tb_wallet、tb_wallet_transaction、tb_recharge_record
- 代理钱包:按 (shop_id, wallet_type) 唯一标识,支持主钱包和分佣钱包
- 卡钱包:按 (resource_type, resource_id) 唯一标识,支持物联网卡和设备

## 代码变更
- Model 层:新增 AgentWallet、AgentWalletTransaction、AgentRechargeRecord、CardWallet、CardWalletTransaction、CardRechargeRecord 模型
- Store 层:新增 6 个独立 Store,支持事务、乐观锁、Redis 缓存
- Service 层:重构 commission_calculation、commission_withdrawal、order、recharge 等 8 个服务
- Bootstrap 层:更新 Store 和 Service 依赖注入
- 常量层:按钱包类型重新组织常量和 Redis Key 生成函数

## 技术特性
- 乐观锁:使用 version 字段防止并发冲突
- 多租户:支持 shop_id_tag 和 enterprise_id_tag 过滤
- 事务管理:所有余额变动使用事务保证 ACID
- 缓存策略:Cache-Aside 模式,余额变动后删除缓存

## 业务影响
- 代理钱包和卡钱包业务完全隔离,互不影响
- 为独立监控、优化、扩展打下基础
- 提升代理钱包的稳定性和独立性

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-25 09:51:00 +08:00

89 lines
3.8 KiB
Markdown
Raw 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.
# wallet Specification (DEPRECATED)
## Purpose
**⚠️ 此规范已废弃**
钱包系统已重构,废弃统一钱包设计,拆分为 `agent-wallet`(代理钱包)和 `card-wallet`(卡钱包)两个完全独立的系统,实现数据层和代码层的完全隔离。
**请参阅新规范:**
- 代理钱包系统:[agent-wallet/spec.md](../agent-wallet/spec.md)
- 卡钱包系统:[card-wallet/spec.md](../card-wallet/spec.md)
---
## REMOVED Requirements
### Requirement: 钱包实体定义
**⚠️ 已废弃** - 废弃统一钱包设计拆分为代理钱包AgentWallet和卡钱包CardWallet两个独立实体使用独立的数据表。
**迁移指南**
- 代理钱包shop 类型)→ `tb_agent_wallet` 表,参见 [agent-wallet spec](../agent-wallet/spec.md)
- 卡钱包iot_card 和 device 类型)→ `tb_card_wallet` 表,参见 [card-wallet spec](../card-wallet/spec.md)
- 代码层使用新的 Model`model.AgentWallet``model.CardWallet`
- 代码层使用新的 Store`AgentWalletStore``CardWalletStore`
---
### Requirement: 钱包明细记录
**⚠️ 已废弃** - 废弃统一交易记录表拆分为代理钱包交易记录tb_agent_wallet_transaction和卡钱包交易记录tb_card_wallet_transaction两个独立表。
**迁移指南**
- 代理钱包交易记录 → `tb_agent_wallet_transaction` 表,参见 [agent-wallet spec](../agent-wallet/spec.md)
- 卡钱包交易记录 → `tb_card_wallet_transaction` 表,参见 [card-wallet spec](../card-wallet/spec.md)
- 代码层使用新的 Model`model.AgentWalletTransaction``model.CardWalletTransaction`
---
### Requirement: 充值记录管理
**⚠️ 已废弃** - 废弃统一充值记录表拆分为代理充值记录tb_agent_recharge_record和卡充值记录tb_card_recharge_record两个独立表。
**迁移指南**
- 代理充值记录 → `tb_agent_recharge_record` 表,参见 [agent-wallet spec](../agent-wallet/spec.md)
- 卡充值记录 → `tb_card_recharge_record` 表,参见 [card-wallet spec](../card-wallet/spec.md)
- 代码层使用新的 Model`model.AgentRechargeRecord``model.CardRechargeRecord`
- 充值服务拆分为独立的代理充值和卡充值逻辑
---
### Requirement: 钱包余额操作
**⚠️ 已废弃** - 余额操作逻辑拆分到代理钱包和卡钱包两个独立系统,使用各自的 Store 实现。
**迁移指南**
- 代理钱包余额操作 → 使用 `AgentWalletStore`,参见 [agent-wallet spec](../agent-wallet/spec.md)
- 卡钱包余额操作 → 使用 `CardWalletStore`,参见 [card-wallet spec](../card-wallet/spec.md)
- 并发控制(乐观锁)机制保持不变,继续使用 `version` 字段
---
### Requirement: 钱包数据校验
**⚠️ 已废弃** - 数据校验规则拆分到代理钱包和卡钱包两个独立系统,针对各自的字段设计优化。
**迁移指南**
- 代理钱包数据校验:使用 `shop_id` + `wallet_type`,参见 [agent-wallet spec](../agent-wallet/spec.md)
- 卡钱包数据校验:使用 `resource_type` + `resource_id`,参见 [card-wallet spec](../card-wallet/spec.md)
---
### Requirement: 钱包归属资源规则
**⚠️ 已废弃** - 归属规则拆分到代理钱包和卡钱包两个独立系统,业务语义更清晰。
**迁移指南**
- 代理钱包归属店铺shop_id不支持转手参见 [agent-wallet spec](../agent-wallet/spec.md)
- 卡钱包归属资源iot_card / device支持转手参见 [card-wallet spec](../card-wallet/spec.md)
---
## 变更历史
- **2026-02-25**: 钱包系统重构,废弃统一钱包设计,拆分为 agent-wallet 和 card-wallet 两个独立系统
- 旧的 3 张表tb_wallet、tb_wallet_transaction、tb_recharge_record已删除
- 新的 6 张表已创建并投入使用
---