badge-requirements.md 9.2 KB

勋章系统模块需求分析

版本: V1.2 更新时间: 2026-04-15


一、需求清单概览

需求ID 描述 优先级 状态
BADGE-001 勋章定义与分类 P1 ❌ 未实现
BADGE-002 勋章解锁条件设置 P1 ❌ 未实现
BADGE-003 勋章自动授予逻辑 P1 ❌ 未实现
BADGE-004 勋章展示与收藏 P1 ❌ 未实现
BADGE-005 勋章有效期与过期 P1 ❌ 未实现
BADGE-006 勋章统计与排行 P1 ❌ 未实现

二、需求详细描述

2.1 勋章定义与分类(BADGE-001)

BADGE-001: 勋章定义与分类

  • 描述:系统支持定义多种勋章类型,每种勋章有唯一的标识、名称、图标、等级和分类
  • 字段
    • badgeId:勋章唯一标识
    • name:勋章名称
    • description:勋章描述
    • icon:勋章图标
    • category:勋章分类(学习类/运动类/家务类/打卡类/综合类)
    • level:勋章等级(铜/银/金/钻石)
    • rarity:稀有度(普通/稀有/史诗/传说)
  • 可选值
    • 分类:学习 / 运动 / 家务 / 阅读 / 打卡 / 综合
    • 等级:铜牌 / 银牌 / 金牌 / 钻石
    • 稀有度:普通 / 稀有 / 史诗 / 传说

2.2 勋章解锁条件设置(BADGE-002)

BADGE-002: 勋章解锁条件设置

  • 描述:每种勋章可以设置解锁条件,达到条件后自动或手动解锁
  • 字段
    • triggerType:触发类型(任务完成次数 / 连续打卡天数 / 积分累计 / 兑换次数)
    • threshold:阈值
    • childOnly:是否仅孩子可解锁
  • 可选值
    • 触发类型:task_count / streak_days / points_total / reward_count / custom
    • 阈值:整数,根据类型定义

2.3 勋章自动授予逻辑(BADGE-003)

BADGE-003: 勋章自动授予逻辑

  • 描述:系统根据解锁条件自动判断是否授予勋章,支持即时授予和家长审批后授予
  • 实现
    • 定时任务扫描孩子的解锁条件
    • 或在关键动作(任务完成、打卡)时触发检查
    • 支持自动授予或需要审批
  • 状态记录
    • badgeId:勋章ID
    • childId:获得者
    • earnedAt:获得时间
    • status:有效/已过期/已撤销

2.4 勋章展示与收藏(BADGE-004)

BADGE-004: 勋章展示与收藏

  • 描述:孩子在个人主页或勋章墙展示已获得勋章,支持收藏功能
  • 前端页面
    • 勋章墙:展示所有已获得勋章,按分类/时间排列
    • 勋章详情:查看勋章名称、描述、获得时间、稀有度
    • 收藏功能:将喜欢的勋章置顶
  • 展示规则
    • 未获得的勋章显示为锁定状态
    • 已获得的勋章显示正常图标和名称
    • 收藏的勋章显示在最前

2.5 勋章有效期与过期(BADGE-005)

BADGE-005: 勋章有效期与过期

  • 描述:部分勋章可以设置有效期,过期后变为过期状态,但仍保留展示
  • 字段
    • expireDays:有效期天数(-1 表示永久有效)
    • expireAt:过期时间
  • 逻辑
    • 定时任务每日检查勋章有效期
    • 过期后勋章仍保留在展示页,但状态标记为“已过期”
    • 可设置续期条件,重新激活勋章

2.6 勋章统计与排行(BADGE-006)

BADGE-006: 勋章统计与排行

  • 描述:提供勋章统计功能,包括个人勋章数量、分类统计、全家排行等
  • 统计维度
    • 个人获得勋章总数
    • 各分类勋章数量
    • 各等级勋章数量
    • 稀有度分布
  • 排行功能
    • 家庭内排行:按勋章数量或积分排序
    • 街道/区域排行(可选)

三、勋章数据模型

3.1 Badge 勋章定义实体

// 基础字段
private Long id;
private String badgeId;      // 勋章唯一标识
private String name;         // 勋章名称
private String description;  // 勋章描述
private String icon;         // 勋章图标URL
private String category;     // 勋章分类
private String level;        // 勋章等级
private String rarity;       // 稀有度

// 解锁条件
private String triggerType;  // 触发类型
private Integer threshold;    // 阈值
private Boolean needApproval; // 是否需要审批
private Integer expireDays;  // 有效期天数

// 系统字段
private Integer sortOrder;   // 排序
private Integer isActive;    // 是否启用
private Date createdAt;
private Date updatedAt;

3.2 ChildBadge 儿童勋章关联实体

// 关联字段
private Long id;
private Long childId;        // 孩子ID
private Long badgeId;        // 勋章ID(对应Badge.id)

// 获得信息
private Date earnedAt;       // 获得时间
private Date expireAt;       // 过期时间
private Integer status;      // 状态:1-有效 0-过期 -1-已撤销
private Boolean isFavorite;  // 是否收藏

// 系统字段
private Date createdAt;
private Date updatedAt;

3.3 状态说明

状态码 含义 说明
1 有效 勋章正常使用
0 已过期 已超过有效期
-1 已撤销 被管理员撤销

四、勋章流程说明

4.1 勋章生命周期

定义勋章 → 设置解锁条件 → 孩子达成条件 → 系统判断 → 授予勋章 → 展示/收藏 → 过期/续期

4.2 阶段与角色

阶段 家长/管理员 孩子 系统
定义阶段 创建/编辑勋章模板 不参与 校验字段
解锁阶段 设置解锁条件 执行任务/打卡 检查触发条件
授予阶段 审批(如需要) 等待/获得 写入获得记录
展示阶段 查看全家勋章 查看/收藏个人勋章 渲染勋章墙
过期阶段 查看统计 查看过期勋章 检查并标记过期

五、API接口设计

5.1 勋章管理

方法 路径 功能 权限
POST /api/badges 创建勋章定义 管理员
GET /api/badges 获取勋章列表 公开
GET /api/badges/{id} 获取勋章详情 公开
PUT /api/badges/{id} 编辑勋章定义 管理员
DELETE /api/badges/{id} 删除勋章 管理员

5.2 勋章授予

方法 路径 功能 权限
POST /api/badges/grant 手动授予勋章 家长/管理员
POST /api/badges/check 检查并授予勋章 系统
GET /api/badges/child/{childId} 获取孩子的勋章 孩子/家长
PUT /api/badges/{id}/favorite 收藏/取消收藏 孩子

5.3 勋章统计

方法 路径 功能 权限
GET /api/badges/statistics/child/{childId} 孩子勋章统计 孩子/家长
GET /api/badges/statistics/family/{familyId} 家庭勋章统计 家长
GET /api/badges/ranking/family/{familyId} 家庭内排行 家长

六、前端页面设计

页面 路径 功能
勋章墙 /pages/badges/badges 展示已获得勋章
勋章详情 /pages/badges/detail 勋章详细信息
勋章库 /pages/badges/library 浏览所有勋章定义
勋章统计 /pages/badges/statistics 统计与排行

七、待完善事项

功能 优先级 说明
勋章定义CRUD P1 后端实体与API
解锁条件引擎 P1 定时任务+事件触发
勋章墙前端 P1 小程序/WEB展示
勋章过期逻辑 P1 定时任务
勋章统计排行 P1 统计API

八、数据库设计建议

8.1 勋章定义表

CREATE TABLE badge (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    badge_id VARCHAR(50) UNIQUE NOT NULL,
    name VARCHAR(100) NOT NULL,
    description TEXT,
    icon VARCHAR(255),
    category VARCHAR(20),
    level VARCHAR(20),
    rarity VARCHAR(20),
    trigger_type VARCHAR(20),
    threshold INT DEFAULT 0,
    need_approval TINYINT DEFAULT 0,
    expire_days INT DEFAULT -1,
    sort_order INT DEFAULT 0,
    is_active TINYINT DEFAULT 1,
    created_at DATETIME,
    updated_at DATETIME
);

8.2 儿童勋章关联表

CREATE TABLE child_badge (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    child_id BIGINT NOT NULL,
    badge_id BIGINT NOT NULL,
    earned_at DATETIME,
    expire_at DATETIME,
    status TINYINT DEFAULT 1,
    is_favorite TINYINT DEFAULT 0,
    created_at DATETIME,
    updated_at DATETIME,
    UNIQUE KEY uk_child_badge (child_id, badge_id)
);

九、后续开发建议

9.1 第一阶段:基础功能

  1. Badge 实体与 CRUD API
  2. ChildBadge 关联表与授予逻辑
  3. 勋章墙前端展示

9.2 第二阶段:解锁与过期

  1. 解锁条件引擎(定时任务)
  2. 勋章过期检查定时任务
  3. 收藏功能

9.3 第三阶段:统计与扩展

  1. 勋章统计 API
  2. 家庭内排行
  3. 勋章续期与活动勋章