feat: 完成任务异步领取等级

This commit is contained in:
Blizzard
2026-02-12 15:41:38 +08:00
parent 0405968597
commit bbc8e127f7
3 changed files with 44 additions and 7 deletions
+2 -1
View File
@@ -150,7 +150,8 @@ func (a *MyPlantApi) CompleteTask(c *gin.Context) {
response.FailWithMsg("请求参数错误", c) response.FailWithMsg("请求参数错误", c)
return return
} }
err = plantService.CompleteTask(req) userId := auth.GetUserId(c)
err = plantService.CompleteTask(req, userId)
if err != nil { if err != nil {
global.Logger.Error("完成任务失败", zap.Error(err)) global.Logger.Error("完成任务失败", zap.Error(err))
response.FailWithMsg("完成任务失败", c) response.FailWithMsg("完成任务失败", c)
+1 -1
View File
@@ -25,7 +25,7 @@ func (c *MyPlantRouter) InitPlantRouter(Router *gin.RouterGroup) {
myPlantRouter.POST("completeTask", myPlantApi.CompleteTask) // 完成任务 myPlantRouter.POST("completeTask", myPlantApi.CompleteTask) // 完成任务
//成长记录 //成长记录
myPlantRouter.POST("/growth/add", myPlantApi.AddGrowthRecord) myPlantRouter.POST("/growth/add", myPlantApi.AddGrowthRecord) // 添加成长记录
} }
+41 -5
View File
@@ -10,6 +10,7 @@ import (
"sundynix-go/utils/timer" "sundynix-go/utils/timer"
"time" "time"
"go.uber.org/zap"
"gorm.io/gorm" "gorm.io/gorm"
) )
@@ -18,7 +19,7 @@ type MyPlantService struct{}
var MyPlantServiceApp = new(MyPlantService) var MyPlantServiceApp = new(MyPlantService)
// AddPlant 添加植物 // AddPlant 添加植物
func (s *MyPlantService) AddPlant(req plantReq.CreateMyPlant, id string) error { func (s *MyPlantService) AddPlant(req plantReq.CreateMyPlant, userId string) error {
err := global.DB.Transaction(func(tx *gorm.DB) error { err := global.DB.Transaction(func(tx *gorm.DB) error {
//1. 验证oss是否存在 //1. 验证oss是否存在
var ossList []*system.Oss var ossList []*system.Oss
@@ -31,7 +32,7 @@ func (s *MyPlantService) AddPlant(req plantReq.CreateMyPlant, id string) error {
var carePlans []*plant.CarePlan var carePlans []*plant.CarePlan
for _, v := range req.CarePlans { for _, v := range req.CarePlans {
carePlans = append(carePlans, &plant.CarePlan{ carePlans = append(carePlans, &plant.CarePlan{
UserId: id, UserId: userId,
Name: v.Name, Name: v.Name,
Icon: v.Icon, Icon: v.Icon,
Period: v.Period, Period: v.Period,
@@ -39,7 +40,7 @@ func (s *MyPlantService) AddPlant(req plantReq.CreateMyPlant, id string) error {
} }
//3.保存数据 //3.保存数据
myPlant := plant.MyPlant{ myPlant := plant.MyPlant{
UserId: id, UserId: userId,
Name: req.Name, Name: req.Name,
PlantTime: bgTime, PlantTime: bgTime,
Status: 1, Status: 1,
@@ -69,6 +70,12 @@ func (s *MyPlantService) AddPlant(req plantReq.CreateMyPlant, id string) error {
return err return err
} }
} }
//5.更新用户中心数据
err = tx.Model(&plant.UserProfile{}).Where("user_id = ?", userId).
Update("plant_count", gorm.Expr("plant_count + 1")).Error
if err != nil {
return err
}
return nil return nil
}) })
return err return err
@@ -227,8 +234,8 @@ func (s *MyPlantService) TodayTask(userId string) ([]plantRes.PlantTaskVO, error
} }
// CompleteTask 完成任务 // CompleteTask 完成任务
func (s *MyPlantService) CompleteTask(req plantReq.CompleteTask) error { func (s *MyPlantService) CompleteTask(req plantReq.CompleteTask, userId string) error {
return global.DB.Transaction(func(tx *gorm.DB) error { err := global.DB.Transaction(func(tx *gorm.DB) error {
var task plant.CareTask var task plant.CareTask
if err := tx.Where("id = ?", req.TaskId).First(&task).Error; err != nil { if err := tx.Where("id = ?", req.TaskId).First(&task).Error; err != nil {
return err return err
@@ -275,6 +282,35 @@ func (s *MyPlantService) CompleteTask(req plantReq.CompleteTask) error {
} }
return nil return nil
}) })
if err == nil {
go func() {
//5.更新用户profile
var profile plant.UserProfile
if asyncErr := global.DB.Where("user_id = ?", userId).First(&profile).Error; err != nil {
global.Logger.Error("完成任务异步操作-----查询用户profile失败", zap.Error(asyncErr))
}
totalSunlight := profile.TotalSunlight + 50
updateData := map[string]interface{}{
"care_count": profile.CareCount + 1,
"current_sunlight": profile.CurrentSunlight + 50,
"total_sunlight": totalSunlight,
}
//5.1 判断是否到达下个等级
var currentLevel plant.LevelConfig
levelErr := global.DB.Where("min_sunlight <= ?", totalSunlight).Order("min_sunlight DESC").First(&currentLevel).Error
if levelErr != nil {
global.Logger.Error("完成任务异步操作-----查询用户等级失败", zap.Error(levelErr))
}
updateData["level_id"] = currentLevel.Id
//5.2 更新用户profile
updateProfileErr := global.DB.Model(&plant.UserProfile{}).Where("user_id = ?", userId).Updates(updateData).Error
if updateProfileErr != nil {
global.Logger.Error("完成任务异步操作-----更新用户profile失败", zap.Error(updateProfileErr))
}
}()
}
return err
} }
// DeletePlants 删除植物 // DeletePlants 删除植物