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