Appearance
里程挑战模块 (Mileage Challenge)
文档版本: V1.0 更新日期: 2024-05-20 状态: 评审中
0. 背景与目标 (Context & Goals)
问题陈述 (Problem Statement)
- 活跃度激励: 仅仅记录滑雪轨迹缺乏显性的激励机制,用户容易流失。
- 社群凝聚力: 俱乐部缺乏组织线上比赛的工具,传统的"晒数据截图"方式统计繁琐且难以验证真伪。
- 官方运营: 平台需要通过全网挑战赛(如"百万落差挑战")来维持雪季期间的 DAU。
成功指标 (Success Metrics)
- 参与度: 挑战赛的报名人数与完赛率。
- 粘性: 参与挑战赛用户的周均启动次数提升 20%。
一、 核心逻辑与业务规则
1.1 双重身份 (Dual Identity)
本模块同时服务于 官方 (Official) 和 俱乐部 (Club)。
- 官方: 发起全网活动,具备最高权重,奖品通常由品牌赞助。
- 俱乐部: 发起私域活动,可限制仅本俱乐部成员参加,增强社群归属感。
1.2 数据来源 (Data Source)
- 自动采集: 依托 APP 内置的 GPS 轨迹记录功能。
- 有效性校验: 仅统计挑战赛时间范围内且数据有效(非车载/缆车异常数据)的滑行记录。
二、 详细功能定义
2.1 发布端 (官方/Club管理台)
| 板块 | 字段/功能 | 说明/规则 |
|---|---|---|
| 基础信息 | 挑战名称 | e.g., "崇礼开板首滑挑战" |
| 挑战时间 | 开始时间 ~ 结束时间。 | |
| 排名规则 | 统计维度 | 单选: 1. 累计里程 (KM) 2. 累计落差 (Vertical Drop) 3. 最高滑行速度 (需谨慎,并在前端提示安全风险) |
| 范围限制 | 可选指定雪场 (e.g., 仅限"万龙滑雪场"的数据)。 | |
| 奖励配置 | 排名奖 | 前 [3] 名的奖品描述 (支持图文)。 |
| 参与奖 | 完赛(达到基础门槛)即可获得的奖励。通常为积分/勋章。 | |
| 参与门槛 | 达标数据 | 设定最低有效数据 (e.g., 累计滑行 > 10km) 才算"完赛"。 |
| 权限控制 | 参与范围 | 1. 全网公开 (仅官方可发) 2. 仅限俱乐部成员 (Club 默认) 3. 指定群组 (关联 IM 群) |
2.2 用户端 (C-Side Flow)
A. 挑战列表
- 我的挑战: 展示已报名且进行中的挑战进度条。
- 发现挑战: 推荐官方热门挑战及用户所在俱乐部的挑战。
B. 挑战详情与排行榜
- 实时榜单: 动态刷新 Top 100 排名。
- 显示:头像、昵称、所属俱乐部、成绩数值。
- 我的战绩:
- 当前排名。
- 距离上一名/获奖区的差距 ("再滑 2km 即可超越/获奖") -> 核心激励点。
C. 数据同步逻辑
mermaid
sequenceDiagram
participant U as 用户 (App)
participant S as 服务端 (Challenge Svc)
U->>U: 结束滑行,上传轨迹
U->>S: 提交 Track Data
S->>S: 校验数据有效性 (去噪)
S->>S: 检索用户参与的所有"进行中"挑战
loop 遍历挑战
S->>S: 过滤是否符合挑战规则 (时间/雪场)
S->>S: 累加成绩 (Increment Score)
end
S->>S: 更新排行榜 (Redis ZSet)
S-->>U: 返回本次滑行更新的挑战进度三、 验收标准 (Acceptance Criteria)
- 俱乐部隔离: 俱乐部 A 发起的内部挑战,非成员无法报名(或报名时提示加入俱乐部)。
- 数据过滤:
- 验证时间范围: 挑战开始前或结束后的滑行数据不计入。
- 验证雪场限制: 若挑战限定"北大壶",在"松花湖"的滑行数据不计入。
- 榜单更新: 上传一条 5km 的轨迹后,关联的"里程挑战"个人成绩应增加 5km,排名相应变动。
- 奖励发放: 模拟挑战结束,系统应自动向达标用户发放"参与奖"(如积分),并生成排名报表供管理员核对"排名奖"。
四、 不做范围 (Out-of-Scope)
- 组队挑战: MVP 仅支持个人参赛,不支持"战队PK"模式。
- 实物物流: 排名奖的实物发放由管理员线下联系或通过消息系统收集地址,不开发内置物流系统。
