feat: 完成任务异步领取等级
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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) // 添加成长记录
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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 删除植物
|
||||
|
||||
Reference in New Issue
Block a user