Files
Pet3/docs/06-开发计划.md
2026-06-25 18:24:29 +08:00

146 lines
8.7 KiB
Markdown
Raw Permalink 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.
# 06 · 开发计划
按「先跑通核心闭环,再做沉淀与增长」的顺序。每阶段可独立验收。
---
## ✅ 进度总览(截至 2026-06-25
V1 开发主体(阶段 0 → 4全部完成并部署。
**环境**`cloud1-d0gmb6bjde8af3266` · AppId `wx6cfaffb865048e83` · 部署方式 CloudBase CLI`tcb`,配置见根目录 `cloudbaserc.json`)。
**已部署云函数7**`login``dogManage``walkSave``walkManual``getDogDetail``getHistory``sendReminder`+ 每日 19:00 定时触发器 `dailyReminder`)。
**数据库集合4已建**`users``dogs``walks``dog_achievements`
**页面9全部真实功能**login / dog-edit / home / walking / summary / dog-detail / history / records / achievements组件custom-tab-bar、manual-add-sheet。
| 阶段 | 状态 |
|------|------|
| 0 工程搭建 | ✅ 完成 |
| 1 账号与建档闭环 | ✅ 完成 |
| 2 遛狗核心闭环 | ✅ 完成 |
| 2.5 定位与狗步 | ✅ 完成 |
| 3 沉淀与激励 | ✅ 完成 |
| 4 增长 | ✅ 完成(订阅消息待填模板 ID |
| 5 Pending | ⏸ 未启动(不在 V1 |
---
## 🐛 逻辑漏洞修正2026-06-25 代码审查)
对照 [05-业务规则](./05-业务规则.md) 审查现网代码,发现并修正以下逻辑漏洞:
### 1. 补记无法维持连续打卡(违反 R8 / R10
- **问题**`walkSave`/`walkManual` 的连续天数只依据 `lastWalkDate + currentStreak` 做增量推算。当用户「先实时遛了今天 → 再补记昨天」时,补记日期早于 `lastWalkDate`,算法走 `diff<=0` 分支原样返回,**连续天数不会向前补全**,直接违背 R8「补记可维持连续打卡不断签」。
- **修正**:新增 `computeStreak(openid, dogId)`,落库后**从该狗全部 `walkDate` 历史重算**连续天数(`Set` 去重同日多次、以最新日期为锚向前数连续日、遇断签停止)。补记以任意顺序插入都能正确续签/断签。`walkSave``walkManual` 均改用此函数,`lastWalkDate` 也取自重算结果。
### 2. 「早起鸟」成就永不可解锁(违反 R11
- **问题**`utils/achievements.js` 定义了 6 个成就且 `getDogDetail` 也按 6 统计,但「早起鸟」(早遛 10 次) **在任何云函数中都没有解锁逻辑、也无计数字段**,导致用户永远停在 5/6成就墙存在一个不可达成项。
- **修正**`walkSave`(仅实时遛狗,场景类不计补记)按开始时间本地小时 `<7` 累加 `stats.earlyWalks`,达 10 次解锁;`STAT_ACHIEVEMENTS` 增加 `early_bird` 判定。前端 `achievements.js` 进度与「还差 X 次」文案改为基于 `earlyWalks` 真实计算。
### 3. 成果卡选填字段「先分享后补填」会丢失(违反 R7
- **问题**`summary.js``ensureAttached` 在字段为空时即把 `_attached``true`。若用户先点「分享」(此时未填)再补填天气/备注/照片后点「完成」,回写被提前锁定跳过,**选填字段与「雨天战士」成就一并丢失**。
- **修正**:空内容时仅 `return` 不置位,只有真正成功回写后才锁定 `_attached`,保证后续补填仍能写入。
> 数据兼容:旧狗档无 `earlyWalks` 字段,云函数与前端均以 `|| 0` 兜底;连续天数在下一次遛狗/补记时按历史自动重算修正,无需迁移。
---
**待你手动处理**
1. 订阅消息模板 ID — 公众平台创建后填入 `utils/config.js``sendReminder/index.js`,重新部署。
2. (可选)数据库索引与权限收紧 — 见 [02-数据模型](./02-数据模型.md) §5/§6当前客户端不直读库默认管理端权限不影响功能。
3. (可选)存量旧狗数据迁移 — 阶段1建的狗无 `sizeLevel/stride`进编辑页重存即可补齐walkSave 已兜底 0.35m 不报错)。
---
## 阶段 0 · 工程搭建(地基)
**目标**:能在微信开发者工具里跑起空壳,云开发环境就绪。
- [x] 创建小程序 + 开通云开发,建环境(实际 env `cloud1-d0gmb6bjde8af3266`)。
- [x] 初始化目录结构(见 [01-架构设计](./01-架构设计.md))。
- [x] `app.js` 初始化 `wx.cloud``app.wxss` 落地设计 token。
- [x] 纯手写基础 UI不引第三方库全局 `.btn/.card` 等 + 组件 `custom-tab-bar`/`manual-add-sheet``dog-card`/`stat-grid` 等暂内联在页面,未抽独立组件)。
- [x] 建 4 个数据库集合CLI 建好)。 ⚠️ 索引未建、权限为默认管理端(客户端不直读,暂不影响)—— 见 [02-数据模型](./02-数据模型.md) §5/§6。
- [x] `utils/cloud.js` 封装 callFunction统一错误/loading
**验收**:✅ 工程可在开发者工具导入运行;云函数经 `tcb fn deploy` 部署可调通。
---
## 阶段 1 · 账号与建档闭环
**对应屏**0a 登录 → 0b 建档 → 1 我的
- [x] `login` 云函数 + 登录页R1 分流)。
- [x] `dogManage` 云函数create/update/listR2
- [x] 建档/编辑页(复用表单,犬种 pickerchip 单选)。
- [x] 首页:用户卡 + 狗狗卡 + 功能入口列表。
- [x] 自定义 tabBar中央状态化 FABidle/walking/paused 三态变色)。
**验收**:✅ 新用户登录→建档→进首页看到自己的狗;编辑能预填回写。
---
## 阶段 2 · 遛狗核心闭环V1 重点)⭐
**对应屏**2/2b 遛狗中 → 3 成果卡 → 4 狗狗主页
- [x] 遛狗会话状态机walking/paused时间戳计时后台恢复R5
- [x] 多狗选择弹层R4
- [x] 便便打卡、暂停/继续、结束二次确认R5
- [x] 定位增强 + 降级处理R6授权时累计 GPS 距离并换算狗步;未授权时距离/狗步存 null 且界面隐藏。
- 狗步模型按 R3 落地体型档位→步幅→体重±15%校准(`utils/dogStep.js` + `dogManage`);未知犬种建档强制选体型档位。
- `walkSave``action:'finish'`、收 `distanceMeters`、按每只狗 stride 算狗步walk 增 `source` 字段。
- [x] `walkSave` 云函数:落库 + stats 更新 + 连续天数R10+ 成就判定R11`finish/attach` 动作回写选填字段 + 雨天战士。
- [x] 成果卡页(全选填 R7新成就提示三宫格统计
- [x] `getDogDetail` + 狗狗主页(累计 R9、成就墙、近期记录
**验收**:完整走通「点遛狗→计时/距离/狗步(定位授权时)→结束→成果卡→记录沉淀进狗狗主页」;未授权定位时只保留时长,连续天数与统计正确累加。
---
## 阶段 3 · 沉淀与激励
**对应屏**5 历史 → 6/6b 记录 → 7 成就
- [x] 遛狗历史页(按周分组,补记标识)。
- [x] `walkManual` 补记云函数 + 补记弹层组件R8
- [x] 新增 `getHistory` 云函数(跨全部狗狗的历史列表,附狗名)。
- [x] 记录 Tab成就概览 + 历史;空状态 6b 引导)。
- [x] 完整成就页(已解锁/未解锁含进度,两入口共用)。
- [x] 成就定义表 `utils/achievements.js` 全量落地。
**验收**:补记不计排行但维持连续;成就解锁与进度展示正确;新用户空状态引导生效。
---
## 阶段 4 · 增长
- [x] 成果卡 Canvas 生成分享图(`canvas type=2d``showShareImageMenu`+ `onShareAppMessage/onShareTimeline` 转发。
- [x] 头像/照片云存储上传与压缩(`utils/media.js`chooseMedia 压缩 → cloud.uploadFile头像在首页/狗狗主页/成果卡显示。
- [x] 连续打卡订阅消息:`sendReminder` 云函数 + 每日 19:00 定时触发器;成果卡「完成」时 `requestSubscribeMessage`
- ⚠️ 需手动:公众平台创建订阅消息模板 → 把模板 ID 填入 `miniprogram/utils/config.js``cloudfunctions/sendReminder/index.js`,并按模板字段改 `data`。未配置时该功能静默跳过。
**验收**:成果卡能生成带数据的分享图并分享;头像/照片可上传并展示;模板配置后定时提醒可发。
---
## 阶段 5 · 后置 / Pending不在 V1
- 地图轨迹回放、GPS 去噪与更精细的轨迹纠偏。
- 广场、附近、排行榜、信息站。
- 排行榜需新增定时聚合云函数,按 `countsForRanking=true` 统计。
---
## 里程碑建议
| 里程碑 | 含阶段 | 可交付 | 状态 |
|--------|--------|--------|------|
| **M1 可建档** | 0 + 1 | 登录建档跑通 | ✅ 达成 |
| **M2 可遛狗** ⭐ | 2 + 2.5 | 核心闭环可用(含 GPS/狗步),可内测 | ✅ 达成 |
| **M3 可沉淀** | 3 | 完整 V1 体验 | ✅ 达成 |
| **M4 可传播** | 4 | 上线 + 拉新 | ✅ 达成(订阅消息待填模板 ID |
> 下一步建议:真机全流程联调 → 处理上方「待你手动」三项 → 提审上线。阶段 5排行榜/广场等)需先做产品设计再排期。