# ROADMAP — 君鸿卡管系统 v1.0 **Project:** 君鸿卡管系统 **Milestone:** v1.0 — MVP 上线准备 **Created:** 2026-03-27 **Granularity:** Standard (6 phases) **Coverage:** 46/46 requirements mapped ✓ --- ## Phases - [x] **Phase 1: P0 紧急修复** — 修复所有阻塞主链路的 P0 Bug,使充值→购包→佣金→实名激活全链路可跑通 (completed 2026-03-27) - [x] **Phase 2: 权限/财务/实名/轮询修复** — 补全企业权限、提现财务流程、实名激活架构重构、轮询系统小修 (completed 2026-03-28) - [x] **Phase 3: 设备体系完善** — 扩展设备模型字段、对接 Gateway sync-info、完善绑卡标识 (completed 2026-03-28) - [ ] **Phase 4: 退款 + 支付 + 运营修复** — 实现退款完整流程、补全富友支付接口、修复运营逻辑 - [ ] **Phase 5: 代码质量清理** — 消除技术债务:佣金断链可观测、删废弃代码、修复权限不一致、迁移分层 - [ ] **Phase 6: 流量体系改革(低峰期)** — 破坏性变更:日粒度流量表 + Redis 增量缓存 + 每日落盘任务 --- ## Phase Details ### Phase 1: P0 紧急修复 **Goal**: 修复所有已知的主链路断点,使"充值→自动购包→佣金计算→实名激活"的完整业务链路可端到端跑通,消除数据写入混乱(实名状态常量)和并发安全漏洞(提现重复创建) **Depends on**: 无(基础) **Requirements**: CRITICAL-01, CRITICAL-02, CRITICAL-03, CRITICAL-04, CRITICAL-05, CRITICAL-06, CRITICAL-07, CRITICAL-08 **Success Criteria** (what must be TRUE): 1. C 端用户完成实名后,实名状态正确写入 DB(值为常量 1,不再是 2),实名激活任务正确触发 2. C 端用户钱包充值成功后,自动购包任务入队并被消费,佣金计算任务被正确触发 3. 代理代购下级场景(场景 5)的订单金额正确使用 operatorCostPrice,佣金链计算正常 4. 批量导入设备 Excel 后,设备记录中含 IMEI 字段,Gateway 调用不再因 IMEI 缺失而失败 5. 并发提交提现申请时,RowsAffected 检查生效,不会创建重复提现单 **Plans**: 5 plans Plans: - [x] 01-01-PLAN.md — CRITICAL-01/02:实名状态常量统一 + C 端实名校验修复(Wave 1) - [x] 01-02-PLAN.md — CRITICAL-03:实名激活任务断链(PollingHandler 注入 asynqClient)(Wave 2) - [x] 01-03-PLAN.md — CRITICAL-04/05:充值回调触发自动购包 + 佣金链补全(Wave 2,parallel) - [x] 01-04-PLAN.md — CRITICAL-06:代购订单 sellerCostPrice 6 处语义审查修正(Wave 1,parallel) - [x] 01-05-PLAN.md — CRITICAL-07/08:设备导入 IMEI + 提现冻结并发校验(Wave 1,parallel) --- ### Phase 2: 权限/财务/实名/轮询修复 **Goal**: 补全企业账号权限边界(可查但不可刷新)、修复提现流程数据完整性(审批人字段/remark 必填/激活配置并发锁)、重构实名激活判断架构(从布尔字段改为 expiry_base 枚举)、修复轮询调度和安全漏洞 **Depends on**: Phase 1(CRITICAL-01 先统一实名常量,REALNAME 重构再依此展开) **Requirements**: PERM-01, PERM-02, FIN-01, FIN-02, FIN-03, REALNAME-01, REALNAME-02, REALNAME-03, REALNAME-04, REALNAME-05, POLL-01, POLL-02, POLL-03, POLL-04 **Success Criteria** (what must be TRUE): 1. 企业账号可以调用 Resolve 接口查询被授权资产,但无法触发 Refresh 刷新运营商数据 2. 提现审批通过后,approved_by 和 approved_at 字段正确填充;拒绝时若 remark 为空则返回校验错误 3. 同时激活两个提现配置时,数据库行锁生效,不会出现两条 active=true 的记录 4. 数据库中 tb_package 表不再有 enable_realname_activation 字段,改为 expiry_base 字段(值为 from_activation 或 from_purchase) 5. C 端购买普通号卡套餐时,实名检查按卡类型(card_category == "normal")判断,逻辑简洁正确 6. polling:protect 任务正确进入调度器,停复机时若 gatewayClient 为 nil 返回业务错误而非静默成功 **Plans**: 2 plans Plans: - [x] 02-01-PLAN.md — PERM-01/02 + FIN-01/02/03 + POLL-01/02/03/04:权限/财务/轮询小修合并(Wave 1) - [x] 02-02-PLAN.md — REALNAME-01~05:实名激活架构重构,原子执行(Wave 1,parallel) --- ### Phase 3: 设备体系完善 **Goal**: 扩展设备数据模型,对接 Gateway sync-info 接口实现设备在线状态/固件版本实时同步,建立"当前使用卡"标识,使设备详情页展示真实状态 **Depends on**: Phase 1(设备导入 IMEI 修复在 CRITICAL-07 完成) **Requirements**: DEVICE-01, DEVICE-02, DEVICE-03, DEVICE-04 **Success Criteria** (what must be TRUE): 1. tb_device 表含 online_status / last_online_time / software_version / switch_mode / last_gateway_sync_at 字段(DB 迁移已执行) 2. 调用设备刷新接口后,设备的在线状态、固件版本、当前使用卡(is_current)从 Gateway 实时更新 3. tb_device_sim_binding 表含 is_current 字段,同一设备同一时刻只有一条 is_current=true 的绑定记录 4. 设备详情接口返回数据包含 online_status、software_version 等字段,值与 Gateway 同步结果一致 **Plans**: 2 plans Plans: - [x] 03-01-PLAN.md — DEVICE-01/02/03:DB 迁移 + 模型扩展 + Gateway SyncDeviceInfo + DTO 字段(Wave 1) - [x] 03-02-PLAN.md — DEVICE-04:Asset Service 接入 sync-info,Refresh 追加设备状态同步(Wave 2) --- ### Phase 03.1: 设备 sync-info 读取链路修复:补全 Phase 3 新增字段在查询接口的 DTO 映射缺口 (INSERTED) **Goal:** 补全 Phase 3 完成的设备数据写入链路在读取侧的缺口:修复 DTO 字段映射遗漏(5个 DB 缓存字段 + 2处 IsCurrent)+ 建立设备实时状态的 Gateway 查询链路(替换 mock → 真实 Gateway 数据) **Requirements**: DEVICE-02, DEVICE-03, DEVICE-04 **Depends on:** Phase 3 **Plans:** 1/1 plans complete Plans: - [ ] 03.1-01-PLAN.md — 补全静态 DTO 映射缺口 + 建立 GetRealtimeStatus Gateway 实时调用 + C 端 stub 替换(Wave 1) ### Phase 4: 退款 + 支付 + 运营修复 **Goal**: 实现完整退款流程(申请→审批→佣金回扣),补全富友支付 JSAPI/小程序接口(替换留桩),修复运营逻辑断点(卡状态 3/4 触发、payment_status 枚举统一) **Depends on**: Phase 2(佣金链路稳定后再做退款佣金回扣) **Requirements**: REFUND-01, REFUND-02, REFUND-03, PAY-01, PAY-02, PAY-03, PAY-04, OPS-01, OPS-02 **Success Criteria** (what must be TRUE): 1. tb_refund_request 表存在,退款申请/列表/详情/审批/拒绝/退回/重提共 7 个接口可正常调用 2. 退款审批通过后,代理佣金钱包按比例扣减(使用整数算术,无 float64 精度误差),负向交易流水写入 3. 富友支付 JSAPI 和小程序接口可正常发起支付,返回前端所需调起参数(FuiouPayJSAPIResponse DTO) 4. 平台代理使用钱包代购资产时,正确使用资产所属代理成本价,绕过代理身份检查 5. IoT 卡/设备在套餐激活成功后 status 更新为 3,最后一个 active 套餐到期后 status 更新为 4 6. C 端和管理端 payment_status 枚举值一致(1/2/3/4),不再存在独立的 C 端映射函数 **Plans**: TBD --- ### Phase 5: 代码质量清理 **Goal**: 消除技术债务:使佣金断链可观测(创建零额待审记录),删除废弃的 sim:status:sync 任务代码,修复错误被吞、分层违规、权限不一致等问题,确保 bootstrap 完整注入所有回调 **Depends on**: Phase 4(所有业务功能稳定后集中清理) **Requirements**: CLEAN-01, CLEAN-02, CLEAN-03, CLEAN-04, CLEAN-05, CLEAN-06 **Success Criteria** (what must be TRUE): 1. 佣金链计算遇到断链时,创建 status=99(amount=0)的待审记录,日志可见,不再静默跳过 2. 代码库中不再有 sim:status:sync 任务相关代码(注册行、常量、sim.go、sync/service.go) 3. asset/service.go 中的 cards 错误被记录为 Warn 日志,不再被 `_` 吞掉 4. client_order Handler 订单查询通过 Service 层调用,不再直接访问 DB 5. 停复机回调(StopResumeCallback / ResumeCallback)在 bootstrap 中正确注入,套餐联动触发正常 **Plans**: TBD --- ### Phase 6: 流量体系改革(低峰期) **Goal**: 重构流量统计架构为"日粒度 DB 落盘 + Redis 增量缓存"模式,解决运营商自然月归零覆盖问题,提供今日 Redis + 历史 DB 两段数据的统一查询层 **Depends on**: Phase 5(代码清理完成,系统稳定,降低破坏性变更风险) **Requirements**: TRAFFIC-01, TRAFFIC-02, TRAFFIC-03, TRAFFIC-04, TRAFFIC-05 **Success Criteria** (what must be TRUE): 1. tb_card_daily_usage 表存在,含唯一约束 (iot_card_id, date)(DB 迁移已执行) 2. 流量轮询写入时,仅在有增量时写 Redis,不再直接覆盖 current_month_usage_mb 3. 每日凌晨 2 点 Asynq Scheduler 任务执行:SCAN Redis Key → UPSERT tb_card_daily_usage → 删 Key,日志可验证 4. current_month_usage_mb 使用增量累加而非覆盖,运营商自然月归零不会影响 DB 中的历史累计值 5. GetDailyUsage 接口返回"今日 Redis 数据 + 历史 DB 日粒度数据"合并结果,兼容两段数据 **Plans**: TBD **⚠️ 部署警告**: 此 Phase 涉及 DB 迁移 + Redis 架构变更,必须在低峰期(凌晨 2~5 点)独立部署 --- ## Progress | Phase | Plans Complete | Status | Completed | |-------|----------------|--------|-----------| | 1. P0 紧急修复 | 5/5 | Complete | 2026-03-27 | | 2. 权限/财务/实名/轮询修复 | 2/2 | Complete | 2026-03-28 | | 3. 设备体系完善 | 2/2 | Complete | 2026-03-28 | | 4. 退款 + 支付 + 运营修复 | 0/TBD | Not started | - | | 5. 代码质量清理 | 0/TBD | Not started | - | | 6. 流量体系改革(低峰期)| 0/TBD | Not started | - | --- ## Requirement Coverage **Total v1 requirements:** 46 **Mapped:** 46 ✓ | Category | Count | Phase | |----------|-------|-------| | CRITICAL | 8 | Phase 1 | | PERM | 2 | Phase 2 | | FIN | 3 | Phase 2 | | REALNAME | 5 | Phase 2 | | POLL | 4 | Phase 2 | | DEVICE | 4 | Phase 3 | | REFUND | 3 | Phase 4 | | PAY | 4 | Phase 4 | | OPS | 2 | Phase 4 | | CLEAN | 6 | Phase 5 | | TRAFFIC | 5 | Phase 6 | --- *Roadmap created: 2026-03-27*