当前项目中:
需求:将在线小游戏作为任务分类的一种形式("小游戏类"),统一到任务系统中管理
| 设计点 | 选择 |
|---|---|
| 字段添加 | 新增minigameCode字段 |
| category值 | 小游戏类 |
| 积分计算 | 使用MiniGame规则(现有MiniGameService逻辑) |
-- 添加minigameCode字段
ALTER TABLE tasks ADD COLUMN minigame_code VARCHAR(50) DEFAULT NULL COMMENT '小游戏代码: schulte/1a2b/sudoku';
-- 添加索引
CREATE INDEX idx_tasks_minigame ON tasks(minigame_code) WHERE minigame_code IS NOT NULL;
| 字段 | 类型 | 说明 |
|---|---|---|
| category | String | '小游戏类' |
| minigameCode | String | 小游戏代码,category='小游戏类'时必填 |
| points | Integer | 基准积分,为空时使用MiniGame.defaultPoints |
| status | String | pending/completed/canceled |
| completedAt | Date | 完成时间 |
POST /api/tasks
{
"title": "完成舒尔特方格",
"category": "小游戏类",
"minigameCode": "schulte",
"childId": 2,
"deadline": "2026-04-20T18:00:00",
"points": 5, // 可选,为空时使用MiniGame.defaultPoints
"needReview": 0
}
POST /api/mini-game/list
POST /api/tasks/{id}/complete
{
"childId": 2,
"completionTime": 45, // 完成时间(秒)
"score": 80 // 得分,可选
}
家长选择"小游戏类" ↓
可选小游戏列表(舒尔特方格/猜数字/数独) ↓
选择具体小游戏 ↓
设置任务名称、截止时间 ↓
保存任务(category='小游戏类',minigameCode='schulte')
孩子完成任务 ↓
校验任务存在且属于该孩子 ↓
判断category='小游戏类' ↓
调用MiniGameService.completeGame()计算积分 ↓
更新任务状态为completed ↓
记录PointsLog(类型: earn) ↓
更新孩子总积分
// 新增字段
private String minigameCode; // 小游戏代码: schulte/1a2b/sudoku
// createTask方法中增加校验
if ("小游戏类".equals(category) && minigameCode == null) {
throw new BusinessException("小游戏类任务必须选择具体游戏");
}
// completeTask方法中小游戏任务处理
if ("小游戏类".equals(task.getCategory())) {
// 调用MiniGameService计算积分
Map<String, Object> result = miniGameService.completeGame(
childId,
task.getMinigameCode(),
completionTime,
score
);
pointsEarned = (Integer) result.get("pointsEarned");
}
// 获取可选择的小游戏列表(创建任务时使用)
@PostMapping("/minigame-options")
public Result<List<MiniGame>> getMinigameOptions()
| 用例ID | 描述 | 预期结果 |
|---|---|---|
| MINITASK-001 | 家长创建小游戏任务 | 任务创建成功,category='小游戏类' |
| MINITASK-002 | 孩子完成小游戏任务 | 积分按MiniGame规则计算 |
| MINITASK-003 | 小游戏任务记录到任务历史 | 历史中可查询 |
| MINITASK-004 | 积分记录到PointsLog | 积分流水正确 |
| 序号 | 任务 | 预估工作量 |
|---|---|---|
| 1 | 数据库迁移脚本 | 0.5h |
| 2 | Task实体添加字段 | 0.5h |
| 3 | TaskService逻辑变更 | 2h |
| 4 | TaskController API变更 | 1h |
| 5 | 前端创建任务页面 | 2h |
| 6 | 前端任务列表/详情页 | 1h |
| 7 | 测试验证 | 1h |
总计: 约8小时
设计日期: 2026-04-17 设计人: Sisyphus 状态: 待用户确认后启动实施