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卡和设备补建资产钱包
47 lines
4.1 KiB
Markdown
47 lines
4.1 KiB
Markdown
# 任务清单:fix-business-completion
|
||
|
||
> 5 项业务逻辑补全。F-1、F-4、J-3 各自独立;J-1 和 J-2 涉及同一文件,建议 J-2 先做。
|
||
|
||
## 任务组 1:F-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 ./...` 编译通过
|
||
|
||
## 任务组 2:F-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 ./...` 编译通过
|
||
|
||
## 任务组 3:J-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 ./...` 编译通过
|
||
|
||
## 任务组 4:J-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 ./...` 编译通过
|
||
|
||
## 任务组 5:J-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 ./...`,确认全量编译通过
|