Files
junhong_cmp_fiber/openspec/changes/archive/2026-03-28-add-refund-system/proposal.md
huang f339fb1987
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m8s
fix: 资产钱包自动创建机制 — 修复C端购买时钱包不存在报错
- client_order: 新增 getOrCreateWallet 兜底,钱包不存在时自动创建
- device_import: 设备导入事务内同步创建设备钱包
- iot_card_import: IoT卡批量导入后批量创建卡钱包
- queue/handler: 传递 AssetWalletStore 给两个导入 handler
- migration 000098: 为存量IoT卡和设备补建资产钱包
2026-03-30 11:37:41 +08:00

33 lines
3.4 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.
## Why
系统目前没有退款功能。当已支付的套餐购买订单需要退款时,只能线下处理,无法追踪退款状态,也无法自动回扣已发放的佣金、停掉已激活的套餐和资产。需要一套完整的退款审批流程:人工申请 → 审批/拒绝/退回 → 审批通过后自动停掉套餐和资产、全额回扣佣金、更新订单状态。
## What Changes
- **I-1 退款数据模型**:新建 `tb_refund_request`定义退款单的完整生命周期字段退款单号、关联订单、店铺ID、实收金额、申请退款金额、审批金额、状态流转、审批人/审批时间、佣金回扣标记、资产重置标记)。新建 `internal/model/refund.go` GORM Model。
- **I-2 退款接口设计**:新建完整的 Handler + Service + Store 三层实现,提供 7 个 API 接口发起申请、列表查询、详情查询、审批通过、审批拒绝、退回申请、重新提交。仅平台账号可操作。状态流转1(待审批) → 2(已通过)/3(已拒绝)/4(已退回)4(已退回) → 1(待审批)。创建时检查同一订单不能重复退款(已拒绝的除外)。
- **I-3 审批通过后的佣金全额回扣**:审批通过后,自动查找该订单产生的所有已入账佣金记录,全额从各代理的佣金钱包中扣减(允许余额为负),写入交易流水。
- **I-4 审批通过后的资产处理**审批通过后自动失效该资产所有套餐、停机单卡调停机接口、设备调停设备接口停所有绑定卡、世代重置generation+1、累计充值清零、asset_status 回到"在库"、清理客户绑定和资产钱包),参照换货模块逻辑。最后更新订单状态为已退款。
## Capabilities
### New Capabilities
- `refund-request`: 退款申请数据模型和状态流转
- `refund-api`: 退款审批流程的 7 个 API 接口(仅平台账号可操作)
- `refund-commission-deduct`: 退款审批通过后的佣金全额回扣机制
- `refund-asset-reset`: 退款审批通过后的资产处理(套餐失效 + 停机 + 世代重置 + 订单状态更新)
### Modified Capabilities
_无需修改现有能力的接口签名。需在 `package/activation_service.go` 中新增 `InvalidateAllPackagesByAsset` 方法。_
## Impact
- **新增文件**`internal/model/refund.go``internal/model/dto/refund_dto.go``internal/store/postgres/refund_store.go``internal/service/refund/service.go``internal/handler/admin/refund.go`、路由注册文件 `internal/routes/refund.go`
- **修改文件**`internal/bootstrap/stores.go``internal/bootstrap/services.go``internal/bootstrap/handlers.go``internal/routes/routes.go``cmd/api/docs.go``cmd/gendocs/main.go``internal/service/package/activation_service.go`(新增方法)
- **DB 迁移**:新建 `tb_refund_request`
- **新增常量**退款状态常量RefundStatusPending=1, Approved=2, Rejected=3, Returned=4、交易类型 `AgentTransactionTypeCommissionDeduct`、关联业务类型 `ReferenceTypeRefund`
- **跨模块依赖**:退款 Service 需注入 orderStore、commissionRecordStore、agentWalletStore、agentWalletTransactionStore、stopResumeService、deviceService、packageActivationService、iotCardStore、deviceStore、assetWalletStore参照换货模块的资产重置
- **前端影响**:管理端需新增退款管理页面;佣金明细需展示 `commission_deduct` 类型流水