Files
junhong_cmp_fiber/openspec/changes/archive/2026-03-28-fix-business-completion/tasks.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

47 lines
4.1 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.
# 任务清单fix-business-completion
> 5 项业务逻辑补全。F-1、F-4、J-3 各自独立J-1 和 J-2 涉及同一文件,建议 J-2 先做。
## 任务组 1F-1 佣金链断裂改为零额待审记录
- [x] 1.1 在 `pkg/constants/` 中新增常量 `CommissionStatusPendingReview = 99`,注释"待人工修正(链路断裂,需平台处理)"
- [x] 1.2 在 `internal/service/commission_calculation/service.go` 中,找到佣金链断裂处(`getCostPrice` 返回无配置后 `break` 的位置),在 `break` 前创建零额待审记录:`CommissionRecord{OrderID, ShopID, SeriesID, Amount: 0, Status: CommissionStatusPendingReview, Remark: "套餐系列[%d]未分配给该代理,请人工核查"}`
- [x] 1.3 记录失败不阻断主流程(`_ = store.Create()`),同时记录 Warn 日志
- [x] 1.4 确认佣金记录列表查询(`commission_record` 相关 Store/Service已支持按 status 筛选(如已有 status 过滤则无需改动)
- [x] 1.5 验证:`go build ./...` 编译通过
## 任务组 2F-4 C端订单 Handler 迁移 Service 层
- [x] 2.1 在 `internal/service/client_order/service.go` 中新增 `ListOrders(ctx context.Context, req *dto.ClientOrderListRequest) (*dto.ClientOrderListResponse, error)` 方法,将 Handler 中的 DB 查询逻辑迁移过来,使用正常数据权限(不用 SkipPermissionCtx
- [x] 2.2 在 `internal/service/client_order/service.go` 中新增 `GetOrderDetail(ctx context.Context, orderID uint) (*dto.ClientOrderDetailResponse, error)` 方法
- [x] 2.3 修改 `internal/handler/app/client_order.go`,将直接 DB 查询替换为 Service 方法调用,删除 `h.db` 字段引用和 `SkipPermissionCtx` 用法
- [x] 2.4 如果 Handler struct 中 `db` 字段因此变为未使用,从 struct 和构造函数中移除
- [x] 2.5 验证:`rg "SkipPermissionCtx" internal/handler/app/client_order.go` 无残留,`go build ./...` 编译通过
## 任务组 3J-2 平台钱包代购
- [x] 3.1 在 `internal/service/order/service.go:CreateLegacy` 的钱包支付分支中,新增 `buyerType == "" && resourceShopID != nil` 的条件分支
- [x] 3.2 该分支内:`orderBuyerType = model.BuyerTypeAgent``orderBuyerID = *resourceShopID`,成本价和钱包都使用 `*resourceShopID` 对应的代理
- [x] 3.3 无归属代理时(`resourceShopID == nil`)返回 `errors.New(errors.CodeInvalidParam, "不支持的钱包支付场景")`
- [x] 3.4 验证:`go build ./...` 编译通过
## 任务组 4J-1 富友支付实现
- [x] 4.1 在 `internal/model/dto/` 中新增(或确认已存在)`FuiouPayJSAPIResponse` DTO`AppID, TimeStamp, NonceStr, Package, SignType, PaySign`
- [x] 4.2 修改 `internal/service/order/service.go:FuiouPayJSAPI`,替换留桩为真实实现:查订单 → 校验状态 → 加载富友配置 → 构造 `fuiou.Client` → 调用 `WxPreCreate(JSAPI)` → 返回 JS-SDK 参数
- [x] 4.3 修改 `internal/service/order/service.go:FuiouPayMiniApp`,与 JSAPI 相同,`tradeType` 改为 `LETPAY``subAppid` 改为 `config.MiniappAppID`
- [ ] 4.4 通过 DBHub 向 `tb_wechat_config` 插入富友支付凭证数据(`provider_type='fuiou'`,凭证见方案文档 J-1 节)
- [x] 4.5 验证:`rg "暂未实现" internal/service/order/service.go` 确认富友相关留桩已全部替换,`go build ./...` 编译通过
## 任务组 5J-3 卡/设备 status 3/4 触发
- [x] 5.1 确认 `pkg/constants/iot.go` 中存在 `IotCardStatusActivated = 3``IotCardStatusDeactivated = 4`(或类似常量),不存在则新增
- [x] 5.2 在套餐激活成功后(`activation_service.go``PackageActivationHandler`),追加条件更新:`UPDATE tb_iot_card SET status = 3 WHERE id = ? AND status < 3`
- [x] 5.3 如果是设备套餐,同时更新 `tb_device``UPDATE tb_device SET status = 3 WHERE id = ? AND status < 3`
- [x] 5.4 在套餐到期处理逻辑中(`OrderExpireHandler` 或类似),套餐过期后检查该卡/设备是否还有其他 active 套餐,无则更新 `status = 4`
- [x] 5.5 验证:`go build ./...` 编译通过
## 收尾验证
- [x] 6.1 执行 `go build ./...`,确认全量编译通过