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

8.7 KiB
Raw Blame History

06 · 开发计划

按「先跑通核心闭环,再做沉淀与增长」的顺序。每阶段可独立验收。


进度总览(截至 2026-06-25

V1 开发主体(阶段 0 → 4全部完成并部署。

环境cloud1-d0gmb6bjde8af3266 · AppId wx6cfaffb865048e83 · 部署方式 CloudBase CLItcb,配置见根目录 cloudbaserc.json)。

已部署云函数7logindogManagewalkSavewalkManualgetDogDetailgetHistorysendReminder+ 每日 19:00 定时触发器 dailyReminder)。

数据库集合4已建usersdogswalksdog_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-业务规则 审查现网代码,发现并修正以下逻辑漏洞:

1. 补记无法维持连续打卡(违反 R8 / R10

  • 问题walkSave/walkManual 的连续天数只依据 lastWalkDate + currentStreak 做增量推算。当用户「先实时遛了今天 → 再补记昨天」时,补记日期早于 lastWalkDate,算法走 diff<=0 分支原样返回,连续天数不会向前补全,直接违背 R8「补记可维持连续打卡不断签」。
  • 修正:新增 computeStreak(openid, dogId),落库后从该狗全部 walkDate 历史重算连续天数(Set 去重同日多次、以最新日期为锚向前数连续日、遇断签停止)。补记以任意顺序插入都能正确续签/断签。walkSavewalkManual 均改用此函数,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.jsensureAttached 在字段为空时即把 _attachedtrue。若用户先点「分享」(此时未填)再补填天气/备注/照片后点「完成」,回写被提前锁定跳过,选填字段与「雨天战士」成就一并丢失
  • 修正:空内容时仅 return 不置位,只有真正成功回写后才锁定 _attached,保证后续补填仍能写入。

数据兼容:旧狗档无 earlyWalks 字段,云函数与前端均以 || 0 兜底;连续天数在下一次遛狗/补记时按历史自动重算修正,无需迁移。


待你手动处理

  1. 订阅消息模板 ID — 公众平台创建后填入 utils/config.jssendReminder/index.js,重新部署。
  2. (可选)数据库索引与权限收紧 — 见 02-数据模型 §5/§6当前客户端不直读库默认管理端权限不影响功能。
  3. (可选)存量旧狗数据迁移 — 阶段1建的狗无 sizeLevel/stride进编辑页重存即可补齐walkSave 已兜底 0.35m 不报错)。

阶段 0 · 工程搭建(地基)

目标:能在微信开发者工具里跑起空壳,云开发环境就绪。

  • 创建小程序 + 开通云开发,建环境(实际 env cloud1-d0gmb6bjde8af3266)。
  • 初始化目录结构(见 01-架构设计)。
  • app.js 初始化 wx.cloudapp.wxss 落地设计 token。
  • 纯手写基础 UI不引第三方库全局 .btn/.card 等 + 组件 custom-tab-bar/manual-add-sheetdog-card/stat-grid 等暂内联在页面,未抽独立组件)。
  • 建 4 个数据库集合CLI 建好)。 ⚠️ 索引未建、权限为默认管理端(客户端不直读,暂不影响)—— 见 02-数据模型 §5/§6。
  • utils/cloud.js 封装 callFunction统一错误/loading

验收 工程可在开发者工具导入运行;云函数经 tcb fn deploy 部署可调通。


阶段 1 · 账号与建档闭环

对应屏0a 登录 → 0b 建档 → 1 我的

  • login 云函数 + 登录页R1 分流)。
  • dogManage 云函数create/update/listR2
  • 建档/编辑页(复用表单,犬种 pickerchip 单选)。
  • 首页:用户卡 + 狗狗卡 + 功能入口列表。
  • 自定义 tabBar中央状态化 FABidle/walking/paused 三态变色)。

验收 新用户登录→建档→进首页看到自己的狗;编辑能预填回写。


阶段 2 · 遛狗核心闭环V1 重点)

对应屏2/2b 遛狗中 → 3 成果卡 → 4 狗狗主页

  • 遛狗会话状态机walking/paused时间戳计时后台恢复R5
  • 多狗选择弹层R4
  • 便便打卡、暂停/继续、结束二次确认R5
  • 定位增强 + 降级处理R6授权时累计 GPS 距离并换算狗步;未授权时距离/狗步存 null 且界面隐藏。
    • 狗步模型按 R3 落地体型档位→步幅→体重±15%校准(utils/dogStep.js + dogManage);未知犬种建档强制选体型档位。
    • walkSaveaction:'finish'、收 distanceMeters、按每只狗 stride 算狗步walk 增 source 字段。
  • walkSave 云函数:落库 + stats 更新 + 连续天数R10+ 成就判定R11finish/attach 动作回写选填字段 + 雨天战士。
  • 成果卡页(全选填 R7新成就提示三宫格统计
  • getDogDetail + 狗狗主页(累计 R9、成就墙、近期记录

验收:完整走通「点遛狗→计时/距离/狗步(定位授权时)→结束→成果卡→记录沉淀进狗狗主页」;未授权定位时只保留时长,连续天数与统计正确累加。


阶段 3 · 沉淀与激励

对应屏5 历史 → 6/6b 记录 → 7 成就

  • 遛狗历史页(按周分组,补记标识)。
  • walkManual 补记云函数 + 补记弹层组件R8
  • 新增 getHistory 云函数(跨全部狗狗的历史列表,附狗名)。
  • 记录 Tab成就概览 + 历史;空状态 6b 引导)。
  • 完整成就页(已解锁/未解锁含进度,两入口共用)。
  • 成就定义表 utils/achievements.js 全量落地。

验收:补记不计排行但维持连续;成就解锁与进度展示正确;新用户空状态引导生效。


阶段 4 · 增长

  • 成果卡 Canvas 生成分享图(canvas type=2dshowShareImageMenu+ onShareAppMessage/onShareTimeline 转发。
  • 头像/照片云存储上传与压缩(utils/media.jschooseMedia 压缩 → cloud.uploadFile头像在首页/狗狗主页/成果卡显示。
  • 连续打卡订阅消息:sendReminder 云函数 + 每日 19:00 定时触发器;成果卡「完成」时 requestSubscribeMessage
    • ⚠️ 需手动:公众平台创建订阅消息模板 → 把模板 ID 填入 miniprogram/utils/config.jscloudfunctions/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排行榜/广场等)需先做产品设计再排期。