diff --git a/api/v1/plant/my_plant.go b/api/v1/plant/my_plant.go index e9bf384..3b8e63e 100644 --- a/api/v1/plant/my_plant.go +++ b/api/v1/plant/my_plant.go @@ -150,7 +150,8 @@ func (a *MyPlantApi) CompleteTask(c *gin.Context) { response.FailWithMsg("请求参数错误", c) return } - err = plantService.CompleteTask(req) + userId := auth.GetUserId(c) + err = plantService.CompleteTask(req, userId) if err != nil { global.Logger.Error("完成任务失败", zap.Error(err)) response.FailWithMsg("完成任务失败", c) diff --git a/router/plant/plant_router.go b/router/plant/plant_router.go index a96fb71..a902e39 100644 --- a/router/plant/plant_router.go +++ b/router/plant/plant_router.go @@ -25,7 +25,7 @@ func (c *MyPlantRouter) InitPlantRouter(Router *gin.RouterGroup) { myPlantRouter.POST("completeTask", myPlantApi.CompleteTask) // 完成任务 //成长记录 - myPlantRouter.POST("/growth/add", myPlantApi.AddGrowthRecord) + myPlantRouter.POST("/growth/add", myPlantApi.AddGrowthRecord) // 添加成长记录 } diff --git a/service/plant/my_plant.go b/service/plant/my_plant.go index 5946ae2..e6e64f3 100644 --- a/service/plant/my_plant.go +++ b/service/plant/my_plant.go @@ -10,6 +10,7 @@ import ( "sundynix-go/utils/timer" "time" + "go.uber.org/zap" "gorm.io/gorm" ) @@ -18,7 +19,7 @@ type MyPlantService struct{} var MyPlantServiceApp = new(MyPlantService) // 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 { //1. 验证oss是否存在 var ossList []*system.Oss @@ -31,7 +32,7 @@ func (s *MyPlantService) AddPlant(req plantReq.CreateMyPlant, id string) error { var carePlans []*plant.CarePlan for _, v := range req.CarePlans { carePlans = append(carePlans, &plant.CarePlan{ - UserId: id, + UserId: userId, Name: v.Name, Icon: v.Icon, Period: v.Period, @@ -39,7 +40,7 @@ func (s *MyPlantService) AddPlant(req plantReq.CreateMyPlant, id string) error { } //3.保存数据 myPlant := plant.MyPlant{ - UserId: id, + UserId: userId, Name: req.Name, PlantTime: bgTime, Status: 1, @@ -69,6 +70,12 @@ func (s *MyPlantService) AddPlant(req plantReq.CreateMyPlant, id string) error { 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 err @@ -227,8 +234,8 @@ func (s *MyPlantService) TodayTask(userId string) ([]plantRes.PlantTaskVO, error } // CompleteTask 完成任务 -func (s *MyPlantService) CompleteTask(req plantReq.CompleteTask) error { - return global.DB.Transaction(func(tx *gorm.DB) error { +func (s *MyPlantService) CompleteTask(req plantReq.CompleteTask, userId string) error { + err := global.DB.Transaction(func(tx *gorm.DB) error { var task plant.CareTask if err := tx.Where("id = ?", req.TaskId).First(&task).Error; err != nil { return err @@ -275,6 +282,35 @@ func (s *MyPlantService) CompleteTask(req plantReq.CompleteTask) error { } 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(¤tLevel).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 删除植物