# 展示基线方案(Display Seed Baseline) ## 背景 worksheet 的 `likes`(收藏)和 `downloads`(下载)初始值为 0,对用户缺乏吸引力。 之前的做法是直接修改数据库真实字段,导致无法区分哪些是运营配置的底数、哪些是真实用户行为。 ## 方案概述 **数据层拆开:真实 + 展示基线。** | 字段 | 含义 | 谁在写 | 初始值 | |------|------|--------|--------| | `likes` | 真实用户收藏累加 | 云函数 `worksheetsStatsUpdate` / `userFavorites` 的 `inc(1)` | 0 | | `downloads` | 真实用户下载累加 | 云函数 `worksheetsStatsUpdate` / `userDownloadLogs` 的 `inc(1)` | 0 | | `likes_seed` | 运营配置的收藏基线 | worksheetSync 页面一键同步 | 0 | | `downloads_seed` | 运营配置的下载基线 | worksheetSync 页面一键同步 | 0 | **展示值** = `likes + likes_seed`(或 `downloads + downloads_seed`) **运营看板** 只看 `likes` / `downloads`(真实值),不受 seed 污染。 ## 涉及改动 ### 1. 数据库 `worksheets` 集合 每条 worksheet 新增两个字段: ```json { "likes_seed": 20, "downloads_seed": 15 } ``` ### 2. Seed 数据来源 文件路径:`miniprogram/supportPages/worksheetSync/mockLikes.ts` 导出 `MOCK_SEED_COUNTS`,以 worksheet id 为 key,值为 `{ downloads, likes }`。 ### 3. worksheetSync 管理页 新增「同步 Seed 数据」按钮,点击后: 1. 读取 `MOCK_SEED_COUNTS` 2. 构建 patches:`[{ id, likes_seed, downloads_seed }, ...]` 3. 调用 `worksheetsBatchPatch` 批量写入 ### 4. 云函数改动 所有对外返回 `likes` / `downloads` 的云函数,在返回前合并 seed 值: ```js item.likes = (item.likes || 0) + (item.likes_seed || 0); item.downloads = (item.downloads || 0) + (item.downloads_seed || 0); ``` 涉及的云函数: | 云函数 | 改动点 | |--------|--------| | `worksheetsQuery` | 返回数据前合并 seed | | `ageRecommendedQuery` | 合并 seed 后再排序和取 Top N | | `homeAutoRefresh` | 改为全量查询 + 合并 seed + 内存排序 | | `pageContentBuild` | `toDisplayItem` 中合并 seed | ### 5. 不需要改动的部分 | 模块 | 原因 | |------|------| | `worksheetsStatsUpdate` | 只 `inc(1)` 真实字段,不涉及 seed | | `userDownloadLogs` | 只 `inc(1)` downloads,不涉及 seed | | `userFavorites` | 只 `inc(1)` likes,不涉及 seed | | `worksheetsPublish` | 发布时设置真实初始值,不涉及 seed | | 用户端收藏/下载交互 | 保持现有行为不变 | ## 优势 1. **真实数据干净**:`likes` / `downloads` 永远只反映真实用户行为 2. **全站一致**:所有出口在云端统一计算展示值,端上无需额外逻辑 3. **调整无需发版**:修改 seed 后通过管理页一键同步,不用重新构建小程序 4. **运营可判断**:直接查 DB 的 `likes` / `downloads` 字段即为真实数据