All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m8s
- client_order: 新增 getOrCreateWallet 兜底,钱包不存在时自动创建 - device_import: 设备导入事务内同步创建设备钱包 - iot_card_import: IoT卡批量导入后批量创建卡钱包 - queue/handler: 传递 AssetWalletStore 给两个导入 handler - migration 000098: 为存量IoT卡和设备补建资产钱包
33 lines
3.4 KiB
Markdown
33 lines
3.4 KiB
Markdown
## 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` 类型流水
|