5.8 KiB
TaskService 未完成事项
生成时间:2026-04-14
一、阻塞性问题(阻断编译/运行)
1. Proto 编译未执行
问题:编译脚本已修改但未执行,pkg/proto/ 下无生成代码。
影响:go build ./... 会失败,找不到 task.pb.go 和 task.triple.go。
操作:
cd backend && sh scripts/compile-proto.sh
前提:环境需安装 go 和 protoc。git
2. Dubbo Server 注册代码被注释
文件:backend/services/taskService/main.go:120-124
// 注意:这里需要 TaskMobileService 和 TaskInternalService 的 RegisterHandler
// 这些会在 proto 编译后生成。在 proto 编译之前,这里会报编译错误。
// Task 15 完成 proto 编译后,需要将下面的注释替换为实际的注册代码。
logger.Logger.Info(fmt.Sprintf("taskService configured on port %d, awaiting proto registration", *port))
影响:服务启动后没有注册任何 RPC handler,客户端无法调用。
修复:proto 编译后需添加类似以下代码:
pb.RegisterTaskMobileServiceHandler(srv, mobileProvider)
pb.RegisterTaskInternalServiceHandler(srv, internalProvider)
二、代码缺陷(运行时 Bug)
3. UpdateOnboardingProgress 方法缺失
文件:backend/services/taskService/repository/onboarding_repo.go
问题:
- 接口
OnboardingRepository缺少UpdateOnboardingProgress方法 onboarding_service.go:172-176的updateOnboardingProgress直接返回nil,未实际更新数据
func (s *onboardingService) updateOnboardingProgress(progress *model.UserOnboardingProgress) error {
// 需要在 repository 中添加 UpdateOnboardingProgress 方法
// 这里暂时用 GORM 直接更新
return nil // ← BUG: 没有真正更新
}
影响:CompleteGuide 完成任务后进度状态不会更新。
修复:在 onboarding_repo.go 添加:
// OnboardingRepository 接口添加:
UpdateOnboardingProgress(progress *model.UserOnboardingProgress) error
// 实现:
func (r *onboardingRepository) UpdateOnboardingProgress(progress *model.UserOnboardingProgress) error {
progress.UpdatedAt = gorm.NowFunc().Unix()
return r.db.Save(progress).Error
}
然后 onboarding_service.go 中调用 s.onboardingRepo.UpdateOnboardingProgress(progress)。
4. ListCompletedDailyTasks 方法缺失
文件:backend/services/taskService/repository/daily_task_repo.go
问题:daily_task_service.go:204 调用 s.dailyRepo.ListCompletedDailyTasks(),但该方法不存在。
影响:ClaimAllDailyTasks 调用会编译报错。
修复:在 daily_task_repo.go 添加:
// DailyTaskRepository 接口添加:
ListCompletedDailyTasks(userID, starID int64) ([]*model.UserDailyTaskProgress, error)
// 实现:
func (r *dailyTaskRepository) ListCompletedDailyTasks(userID, starID int64) ([]*model.UserDailyTaskProgress, error) {
var progressList []*model.UserDailyTaskProgress
err := r.db.Where("user_id = ? AND star_id = ? AND status = ?", userID, starID, "completed").
Find(&progressList).Error
return progressList, err
}
5. CompleteGuide 中死代码
文件:backend/services/taskService/onboarding_service.go:154-156
if err := s.onboardingRepo.UpdateOnboardingStatus(&model.UserOnboardingStatus{UserID: userID}); err != nil {
// UpdateOnboardingStatus is for status table, not progress
} // ← 无意义的空调用,应该删除
影响:代码冗余,不影响功能但影响可读性。
修复:删除第 154-156 行。
三、前端缺陷
6. guide.vue 任务完成状态判断错误
文件:frontend/pages/tasks/guide.vue:129-134
function isTaskCompleted(stage, taskKey) {
// 这里需要根据实际数据结构判断
// 假设 completed 状态的任务 key 会被标记
// 暂时返回 false,实际需要后端返回更详细的状态
return false // ← BUG: 永远返回 false
}
影响:引导页面的任务永远显示为未完成,用户无法正确看到进度。
修复:参考后端 GetOnboardingStatus 的逻辑,从 stage.required_task_keys 和进度数据判断。
7. daily_task_service.go 错误被忽略
文件:backend/services/taskService/service/daily_task_service.go:229,234
// 发放水晶奖励
if def.CrystalReward > 0 {
s.userClient.UpdateCrystalBalance(ctx, userID, starID, def.CrystalReward) // ← 错误被忽略
}
// 发放经验奖励
if def.ExpReward > 0 {
s.userClient.AddExperience(ctx, userID, starID, def.ExpReward) // ← 错误被忽略
}
影响:ClaimAllDailyTasks 中奖励发放失败时不报错,可能导致用户未收到奖励。
修复:添加错误处理和日志。
四、已完成的修复
8. AddExperience RPC 已添加
- user.proto:已添加
AddExperienceRequest/Response消息和 RPC 定义 - user_rpc_client.go:已有完整实现
等待 proto 编译后即可使用。
五、待执行的操作清单
| # | 操作 | 优先级 | 依赖 |
|---|---|---|---|
| 1 | 执行 sh scripts/compile-proto.sh |
P0 | go + protoc 环境 |
| 2 | 添加 UpdateOnboardingProgress 到 onboarding_repo |
P0 | 无 |
| 3 | 添加 ListCompletedDailyTasks 到 daily_task_repo |
P0 | 无 |
| 4 | 修复 main.go Dubbo 注册代码 | P0 | #1 |
| 5 | 修复 guide.vue isTaskCompleted | P1 | 无 |
| 6 | 删除 onboarding_service.go 死代码 | P2 | 无 |
| 7 | 修复 ClaimAllDailyTasks 错误处理 | P2 | 无 |
六、执行顺序建议
1. 先执行 proto 编译(#1)
↓
2. 修复 onboarding_repo + daily_task_repo(#2, #3)
↓
3. 修复 main.go 注册代码(#4)
↓
4. 编译验证:go build ./...
↓
5. 修复前端 guide.vue(#5)
↓
6. 可选优化(#6, #7)