fix: 资产钱包自动创建机制 — 修复C端购买时钱包不存在报错
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卡和设备补建资产钱包
This commit is contained in:
2026-03-30 11:37:41 +08:00
parent 40809d11c5
commit f339fb1987
36 changed files with 1811 additions and 26 deletions

View File

@@ -0,0 +1,32 @@
## Why
修正业务方案审查后,发现 5 处代码质量问题仍未修复废弃代码残留、错误被吞、权限前置校验缺失、停复机回调未注入、C端状态枚举映射冗余。这些问题不影响核心链路运行但会导致排查困难错误被吞、文档/代码不一致(废弃代码)、潜在越权(权限缺失)、联动功能失效(回调未注入)。趁当前无大功能并行,集中清理。
## What Changes
- **F-2 删除废弃 SIM 状态同步代码**:删除 `internal/task/sim.go` 整个文件、`pkg/queue/handler.go` 中的注册行、`pkg/constants/constants.go` 中的 `TaskTypeSIMStatusSync` 常量。该功能已被轮询系统完全覆盖,消费者核心是 `time.Sleep`,生产者全局零调用。
- **F-3 修复资产服务错误吞没**`internal/service/asset/service.go` 中至少 2 处 `cards, _ := s.iotCardStore.GetByIDs(...)` 吞掉了数据库错误,改为记录日志但不中断主流程。
- **F-5 后台订单 Handler 钱包权限补齐**`internal/handler/admin/order.go` 创建订单时,钱包支付缺少"仅代理可用"的前置校验,与 Service 层的校验不一致,补齐 Handler 层拦截。
- **F-6 停复机回调注入**`internal/bootstrap/` 初始化时未调用 `SetStopResumeCallback` / `SetResumeCallback`,导致停复机后套餐联动回调不触发。在 bootstrap 初始化完成后补充调用。
- **J-4 删除 C端支付状态映射函数**`internal/service/client_order/service.go``orderStatusToClientStatus()` 将管理端 1/2/3/4 映射为 C端 0/1/2造成前后端枚举不一致。删除该函数C端直接使用管理端枚举。**BREAKING**C端前端需同步更新状态枚举解析1=待支付, 2=已支付, 3=已取消, 4=已退款)。
## Capabilities
### New Capabilities
_无新增能力,全部为现有代码的修正和清理。_
### Modified Capabilities
- `asset-queries`: 修复错误吞没,查询失败时记录日志
- `asset-suspend-resume`: 注入停复机回调,停复机后套餐联动生效
- `admin-order-creation`: Handler 层补齐钱包支付权限前置校验
- `client-order-purchase`: 移除 C端支付状态映射统一枚举
## Impact
- **代码删除**`internal/task/sim.go``internal/service/sync/service.go`(如存在)、相关常量和注册行
- **修改文件**`internal/service/asset/service.go``internal/handler/admin/order.go``internal/bootstrap/services.go``internal/service/client_order/service.go``pkg/queue/handler.go``pkg/constants/constants.go`
- **前端影响**C端需将支付状态枚举从 0/1/2 改为 1/2/3/4J-4BREAKING
- **无 DB 迁移**
- **无新增依赖**