Files
junhong_cmp_fiber/.planning/phases/01-p0/01-CONTEXT.md
2026-03-27 21:52:09 +08:00

128 lines
6.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.
# Phase 1: P0 紧急修复 - Context
**Gathered:** 2026-03-27
**Status:** Ready for planning
<domain>
## Phase Boundary
修复 8 个已知的代码路径断点CRITICAL-01~08使"充值→自动购包→佣金计算→实名激活"的主链路可端到端跑通。无新功能,无 API 新增,只改现有文件。
</domain>
<decisions>
## Implementation Decisions
### CRITICAL-06 修复范围sellerCostPrice
- **D-01:** 对 `internal/service/order/service.go` 中 6 处 `sellerCostPrice = buyerCostPrice` 逐一语义审查,按场景决定是否修改
- **D-02:** 语义审查依据:修正业务完整方案中的五种购买场景对应表(`.sisyphus/plans/修正业务-完整方案.md` 方案 A-5 段落)
- **D-03:** 不做模式匹配式全量替换,有些场景使用 `buyerCostPrice` 可能是正确的
### 执行顺序与分组
- **D-04:** 分 2 批执行:
- 第 1 批主链路CRITICAL-01 → CRITICAL-02 → CRITICAL-03 → CRITICAL-04 → CRITICAL-05
- 第 2 批(独立 BugCRITICAL-06 → CRITICAL-07 → CRITICAL-08
- **D-05:** 每个 Bug 修复后独立一个 commit回滚粒度细便于定位问题
- **D-06:** 依赖约束CRITICAL-02 必须在 CRITICAL-01 之后执行CRITICAL-05 必须在 CRITICAL-04 之后执行
### Bootstrap 依赖注入
- **D-07:** CRITICAL-03PollingHandler 注入 asynqClient和 CRITICAL-04recharge.Service 注入 queueClient + 注册 AutoPurchaseHandler分开处理各自一个 commit
- **D-08:** CRITICAL-04 涉及两个修改点:
- API 侧:`internal/bootstrap/services.go``rechargeSvc.New()` 调用新增 `deps.QueueClient` 参数(`QueueClient` 已在 `deps` 中,无需新增字段)
- Worker 侧:`pkg/queue/handler.go` 新增 `registerAutoPurchaseHandler()` 方法并在 `RegisterHandlers()` 中调用
- **D-09:** 无需修改 `worker_services.go`recharge.Service 不在 Worker bootstrap 链路中)
### 验证策略
- **D-10:** 每个 Bug 修复后执行 `go build ./...` 确认编译通过,然后提交
- **D-11:** 不要求自动化测试,人工验收方式:`rg` 确认代码路径 + DBHub 验证数据 + 日志关键字
- **D-12:** 方案文档中每个 Bug 都有"人工验收清单",按清单逐一核对
### the Agent's Discretion
- 具体代码片段已在 `.sisyphus/plans/修正业务-完整方案.md` 中提供agent 应直接按文档实现,不需要重新设计
- 日志消息使用中文(项目规范)
- 所有注释使用中文
</decisions>
<canonical_refs>
## Canonical References
**Downstream agents MUST read these before planning or implementing.**
### 修复规格(核心参考)
- `.sisyphus/plans/修正业务-完整方案.md` — 完整修复规格书:每个 Bug 的业务背景、代码现状(含文件路径+行号)、完整代码片段、人工验收清单
- 方案 A-1CRITICAL-01第 59-128 行
- 方案 A-2CRITICAL-02第 132-163 行
- 方案 A-3CRITICAL-03第 165-299 行
- 方案 A-4 P0-3CRITICAL-04第 301-441 行
- 方案 A-4 P0-4CRITICAL-05第 442-575 行
- 方案 A-5CRITICAL-06第 579-618 行
- 方案 A-6CRITICAL-07第 621-670 行
- 方案 A-7CRITICAL-08第 673-705 行
### 需要修改的核心文件
- `internal/task/polling_handler.go` — CRITICAL-01 (parseRealnameStatus), CRITICAL-03 (asynqClient 注入)
- `internal/model/iot_card.go` — CRITICAL-01 (注释修正)
- `pkg/constants/iot.go` — CRITICAL-01 (常量确认)
- `internal/service/client_order/service.go` — CRITICAL-02 (实名判断)
- `internal/bootstrap/services.go` — CRITICAL-04 (rechargeSvc.New() 添加 queueClient)
- `internal/service/recharge/service.go` — CRITICAL-04 (HandlePaymentCallback 触发购包)
- `pkg/queue/handler.go` — CRITICAL-03 (NewPollingHandler asynqClient), CRITICAL-04 (registerAutoPurchaseHandler)
- `internal/task/auto_purchase.go` — CRITICAL-05 (ProcessTask 触发佣金)
- `internal/service/order/service.go` — CRITICAL-06 (sellerCostPrice 6 处审查)
- `pkg/utils/excel.go` — CRITICAL-07 (DeviceRow IMEI 字段)
- `internal/task/device_import.go` — CRITICAL-07 (导入时填充 IMEI)
- `internal/service/my_commission/service.go` — CRITICAL-08 (RowsAffected 校验)
### 项目规范
- `AGENTS.md` — 语言要求(中文注释/日志)、错误处理规范、架构分层规范
- `.planning/research/PITFALLS.md` — 已知陷阱sellerCostPrice 6 处全量检查要求
</canonical_refs>
<code_context>
## Existing Code Insights
### 已确认的代码现状
- `sellerCostPrice = buyerCostPrice`6 处确认order/service.go 第 187, 262, 472, 548, 734, 809 行)
- RPush 降级 + `_ = task`polling_handler.go 第 1101-1114 行确认
- `AutoPurchaseHandler`:已存在于 `internal/task/auto_purchase.go`,但 `pkg/queue/handler.go` 未注册
- `QueueClient`:已在 `internal/bootstrap/dependencies.go:24` 中定义,已传入 Order、IotCardImport、DeviceImport 服务
### Established Patterns
- 错误处理Service 层用 `errors.New(code)` / `errors.Wrap(code, err)`,禁止 `fmt.Errorf`
- Asynq 任务提交Worker 内直接用 `h.asynqClient.EnqueueContext()`Service 层用 `deps.QueueClient.EnqueueTask()`
- 日志:`zap.Logger`,字段用具体类型(`zap.Uint``zap.Error` 等),消息用中文
### Integration Points
- Worker bootstrap`pkg/queue/handler.go:RegisterHandlers()` → 任务注册
- API bootstrap`internal/bootstrap/services.go:initServices()` → 服务初始化
- 轮询调度:`internal/polling/scheduler.go` 驱动,不直接受此次改动影响
</code_context>
<specifics>
## Specific Ideas
- CRITICAL-04 的 AutoPurchaseHandler 注入参数列表中有多个 nil 占位符(见方案 A-4 代码片段agent 应检查当前 `NewAutoPurchaseHandler` 的签名,确保传入参数与现有定义匹配,而非照搬规格书里可能过时的 nil 列表
- CRITICAL-06 修复时,需对照"五种购买场景表"逐一确认每个分支的"卖家"身份(场景 1/2/3/4/5不要只看变量名
</specifics>
<deferred>
## Deferred Ideas
None — discussion stayed within phase scope
</deferred>
---
*Phase: 01-p0*
*Context gathered: 2026-03-27*