6.0 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 编译后即可使用。
五、已完成的修复清单
| # | 修复项 | 文件 | 状态 |
|---|---|---|---|
| 2 | UpdateOnboardingProgress 方法 |
onboarding_repo.go | ✅ 已完成 |
| 3 | ListCompletedDailyTasks 方法 |
daily_task_repo.go | ✅ 已完成 |
| 5 | guide.vue isTaskCompleted | guide.vue | ✅ 已完成 |
| 6 | onboarding_service.go 死代码 | service 层重构 | ✅ 已解决(新建服务文件) |
| 7 | ClaimAllDailyTasks 错误处理 | daily_task_service.go | ✅ 已完成 |
| 9 | Service 层创建 | service/*.go | ✅ 已完成 |
| 10 | gorm.NowFunc() 修复 | revenue_repo.go, onboarding_repo.go | ✅ 已完成 |
| 11 | Proto 编译 | pkg/proto/task/*.go | ✅ 已完成 |
| 12 | main.go Dubbo 注册代码 | main.go | ✅ 已完成 |
六、已完成的操作清单
所有计划中的任务已完成!TaskService 现已可以成功编译。
七、编译验证
cd backend && go build ./services/taskService/...
# ✅ BUILD SUCCESS