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

4.1 KiB
Raw Blame History

任务清单fix-business-completion

5 项业务逻辑补全。F-1、F-4、J-3 各自独立J-1 和 J-2 涉及同一文件,建议 J-2 先做。

任务组 1F-1 佣金链断裂改为零额待审记录

  • 1.1 在 pkg/constants/ 中新增常量 CommissionStatusPendingReview = 99,注释"待人工修正(链路断裂,需平台处理)"
  • 1.2 在 internal/service/commission_calculation/service.go 中,找到佣金链断裂处(getCostPrice 返回无配置后 break 的位置),在 break 前创建零额待审记录:CommissionRecord{OrderID, ShopID, SeriesID, Amount: 0, Status: CommissionStatusPendingReview, Remark: "套餐系列[%d]未分配给该代理,请人工核查"}
  • 1.3 记录失败不阻断主流程(_ = store.Create()),同时记录 Warn 日志
  • 1.4 确认佣金记录列表查询(commission_record 相关 Store/Service已支持按 status 筛选(如已有 status 过滤则无需改动)
  • 1.5 验证:go build ./... 编译通过

任务组 2F-4 C端订单 Handler 迁移 Service 层

  • 2.1 在 internal/service/client_order/service.go 中新增 ListOrders(ctx context.Context, req *dto.ClientOrderListRequest) (*dto.ClientOrderListResponse, error) 方法,将 Handler 中的 DB 查询逻辑迁移过来,使用正常数据权限(不用 SkipPermissionCtx
  • 2.2 在 internal/service/client_order/service.go 中新增 GetOrderDetail(ctx context.Context, orderID uint) (*dto.ClientOrderDetailResponse, error) 方法
  • 2.3 修改 internal/handler/app/client_order.go,将直接 DB 查询替换为 Service 方法调用,删除 h.db 字段引用和 SkipPermissionCtx 用法
  • 2.4 如果 Handler struct 中 db 字段因此变为未使用,从 struct 和构造函数中移除
  • 2.5 验证:rg "SkipPermissionCtx" internal/handler/app/client_order.go 无残留,go build ./... 编译通过

任务组 3J-2 平台钱包代购

  • 3.1 在 internal/service/order/service.go:CreateLegacy 的钱包支付分支中,新增 buyerType == "" && resourceShopID != nil 的条件分支
  • 3.2 该分支内:orderBuyerType = model.BuyerTypeAgentorderBuyerID = *resourceShopID,成本价和钱包都使用 *resourceShopID 对应的代理
  • 3.3 无归属代理时(resourceShopID == nil)返回 errors.New(errors.CodeInvalidParam, "不支持的钱包支付场景")
  • 3.4 验证:go build ./... 编译通过

任务组 4J-1 富友支付实现

  • 4.1 在 internal/model/dto/ 中新增(或确认已存在)FuiouPayJSAPIResponse DTOAppID, TimeStamp, NonceStr, Package, SignType, PaySign
  • 4.2 修改 internal/service/order/service.go:FuiouPayJSAPI,替换留桩为真实实现:查订单 → 校验状态 → 加载富友配置 → 构造 fuiou.Client → 调用 WxPreCreate(JSAPI) → 返回 JS-SDK 参数
  • 4.3 修改 internal/service/order/service.go:FuiouPayMiniApp,与 JSAPI 相同,tradeType 改为 LETPAYsubAppid 改为 config.MiniappAppID
  • 4.4 通过 DBHub 向 tb_wechat_config 插入富友支付凭证数据(provider_type='fuiou',凭证见方案文档 J-1 节)
  • 4.5 验证:rg "暂未实现" internal/service/order/service.go 确认富友相关留桩已全部替换,go build ./... 编译通过

任务组 5J-3 卡/设备 status 3/4 触发

  • 5.1 确认 pkg/constants/iot.go 中存在 IotCardStatusActivated = 3IotCardStatusDeactivated = 4(或类似常量),不存在则新增
  • 5.2 在套餐激活成功后(activation_service.goPackageActivationHandler),追加条件更新:UPDATE tb_iot_card SET status = 3 WHERE id = ? AND status < 3
  • 5.3 如果是设备套餐,同时更新 tb_deviceUPDATE tb_device SET status = 3 WHERE id = ? AND status < 3
  • 5.4 在套餐到期处理逻辑中(OrderExpireHandler 或类似),套餐过期后检查该卡/设备是否还有其他 active 套餐,无则更新 status = 4
  • 5.5 验证:go build ./... 编译通过

收尾验证

  • 6.1 执行 go build ./...,确认全量编译通过