You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.4 KiB
83 lines
2.4 KiB
package client
|
|
|
|
import (
|
|
"github.com/ouxuanserver/osmanthuswine/src/core"
|
|
"hudongzhuanjia/controllers"
|
|
"hudongzhuanjia/models"
|
|
"hudongzhuanjia/utils/code"
|
|
"hudongzhuanjia/utils/define"
|
|
)
|
|
|
|
type CalorieCtl struct {
|
|
controllers.AuthorCtl
|
|
}
|
|
|
|
// h5 1/s
|
|
func (t *CalorieCtl) Shake() {
|
|
calorieId := t.MustGetInt64("calorie_id")
|
|
score := t.DefaultInt("score", 0)
|
|
uid := t.MustGetUID()
|
|
|
|
calorie := new(models.Calorie)
|
|
exist, err := models.GetById(calorie, calorieId)
|
|
t.CheckErr(err)
|
|
t.Assert(exist, code.MSG_CALORIE_NOT_EXIST, "卡路里不存在")
|
|
|
|
activity := new(models.Activity)
|
|
exist, err = models.GetById(activity, calorie.ActivityId)
|
|
t.CheckErr(err)
|
|
t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
|
|
t.CheckRunning(activity.Status)
|
|
|
|
calorieUser := new(models.CalorieUser)
|
|
exist, err = calorieUser.GetByCalorieIdAndUserId(calorieId, uid, activity.RehearsalId)
|
|
t.CheckErr(err)
|
|
t.Assert(exist, code.MSG_DATA_NOT_EXIST, "您尚未参与卡路里活动")
|
|
|
|
// 增加score
|
|
if calorie.Status == define.StatusRunning && score > 0 {
|
|
_, err = calorieUser.IncrScore(score)
|
|
t.CheckErr(err)
|
|
calorieUser.Score += int64(score) // 增加
|
|
}
|
|
|
|
count, err := core.GetXormAuto().Where("is_delete=0 and calorie_id=? and rehearsal_id=?", calorie.Id, activity.RehearsalId).Count(new(models.CalorieUser))
|
|
t.CheckErr(err)
|
|
|
|
users := make([]*models.CalorieUser, 0)
|
|
err = core.GetXormAuto().Where("is_delete=0 and calorie_id=? and rehearsal_id=? and score<=?",
|
|
calorie.Id, activity.RehearsalId, calorieUser.Score).Desc("score").Asc("join_time").Find(&users)
|
|
t.CheckErr(err)
|
|
|
|
var rank int
|
|
for index, user := range users {
|
|
if user.Id == calorieUser.Id {
|
|
rank = int(count) - len(users) + index + 1
|
|
break
|
|
}
|
|
}
|
|
|
|
// 活动时长
|
|
//duration := calorie.GameDuration - (time.Now().Unix() - calorie.StartTime) + 6 // 加上倒计时的6s
|
|
//if calorie.StartTime == 0 {
|
|
// duration = calorie.GameDuration
|
|
//}
|
|
// 3s 倒计时
|
|
//var countDown float64 = 0
|
|
//if duration-calorie.GameDuration > 0 {
|
|
// countDown = math.Ceil(float64(duration-calorie.GameDuration) / 2.0)
|
|
//}
|
|
|
|
//// 活动结束
|
|
//if calorie.Status == define.StatusEnding || duration <= 0 {
|
|
// duration = 0
|
|
//}
|
|
|
|
t.JSON(map[string]interface{}{
|
|
"rank": rank,
|
|
"score": calorieUser.Score, // 分数
|
|
//"time": duration - 2*int64(countDown), //时长
|
|
//"count_down": countDown, // 倒计时
|
|
//"status": calorie.Status, // 状态
|
|
})
|
|
}
|