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.
127 lines
3.5 KiB
127 lines
3.5 KiB
package client
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/ouxuanserver/osmanthuswine/src/core"
|
|
"hudongzhuanjia/controllers"
|
|
"hudongzhuanjia/models"
|
|
"hudongzhuanjia/utils/code"
|
|
"time"
|
|
)
|
|
|
|
type VoteCtl struct {
|
|
controllers.AuthorCtl
|
|
}
|
|
|
|
//投票
|
|
func (t *VoteCtl) Vote() {
|
|
uid := t.MustGetUID()
|
|
ladderId := t.MustGetInt64("vote_activity_ladder_id")
|
|
|
|
//检查是否可以投票
|
|
ladder := new(models.NewVoteActivityLadder)
|
|
exist, err := models.Get(ladder, ladderId)
|
|
t.CheckErr(err)
|
|
t.Assert(exist, code.MSG_VOTE_LADDER_NOT_EXIST, "投票人不存在")
|
|
|
|
vote := new(models.NewVoteActivity)
|
|
exist, err = models.Get(vote, ladder.VoteActivityId)
|
|
t.CheckErr(err)
|
|
t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "投票活动不存在")
|
|
t.CheckRunning(vote.VoteStatus)
|
|
|
|
activity := new(models.Activity)
|
|
exist, err = models.Get(activity, vote.ActivityId)
|
|
t.CheckErr(err)
|
|
t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
|
|
t.CheckRunning(activity.Status)
|
|
|
|
history := new(models.NewVoteActivityHistory)
|
|
exist, err = history.ExistByLadderId(uid, ladderId, activity.RehearsalId)
|
|
t.CheckErr(err)
|
|
t.Assert(!exist, code.MSG_VOTE_HISTORY_EXIST, "您已经投过票了")
|
|
|
|
if vote.Model == "单选" {
|
|
//检查是否已经投过票了
|
|
exist, err = history.ExistByVoteId(uid, vote.Id, activity.RehearsalId)
|
|
t.CheckErr(err)
|
|
t.Assert(!exist, code.MSG_VOTE_HISTORY_EXIST, "您已经投过票了")
|
|
} else {
|
|
num, err := history.CountUser(uid, activity.RehearsalId, vote.Id)
|
|
t.CheckErr(err)
|
|
if num >= vote.ModelNum {
|
|
t.ERROR(fmt.Sprintf("您投票人数已超过%d人", vote.ModelNum), code.MSG_ERR)
|
|
}
|
|
}
|
|
// done: 增加人数限制
|
|
history.UserId = uid
|
|
history.RehearsalId = activity.RehearsalId
|
|
history.VoteActivityId = vote.Id
|
|
history.VoteActivityLadderId = ladderId
|
|
history.IsDelete = false
|
|
history.CreatedAt = time.Now()
|
|
history.UpdatedAt = time.Now()
|
|
_, err = models.Add(history)
|
|
t.CheckErr(err)
|
|
|
|
// vote ladder total_number + 1
|
|
_, err = ladder.Incr(ladderId, 1)
|
|
t.CheckErr(err)
|
|
|
|
t.SUCCESS("投票成功")
|
|
}
|
|
|
|
// 投票活动列表
|
|
func (t *VoteCtl) List() {
|
|
activityId := t.MustGetInt64("activity_id")
|
|
|
|
// 该活动是否进行中
|
|
activity := new(models.Activity)
|
|
exist, err := models.Get(activity, activityId)
|
|
t.CheckErr(err)
|
|
t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
|
|
t.CheckRunning(activity.Status)
|
|
|
|
votes, err := models.GetVoteListByActivityId(activity.Id)
|
|
t.CheckErr(err)
|
|
|
|
t.JSON(map[string]interface{}{
|
|
"total": len(votes),
|
|
"votes": votes,
|
|
})
|
|
}
|
|
|
|
func (t *VoteCtl) Detail() {
|
|
voteActivityId := t.MustGetInt64("vote_activity_id")
|
|
uid := t.MustGetUID()
|
|
activityId := t.MustGetInt64("activity_id")
|
|
|
|
activity := new(models.Activity)
|
|
exist, err := models.Get(activity, activityId)
|
|
t.CheckErr(err)
|
|
t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
|
|
|
|
ladders := make([]*models.NewVoteActivityLadder, 0)
|
|
err = core.GetXormAuto().Where("is_delete=0 and vote_activity_id=?", voteActivityId).
|
|
Desc("total_number").Asc("updated_at").Find(&ladders)
|
|
t.CheckErr(err)
|
|
|
|
histories := make([]*models.NewVoteActivityHistory, 0)
|
|
err = core.GetXormAuto().Where("is_delete=0 and user_id=? and rehearsal_id=? and vote_activity_id=?",
|
|
uid, activity.RehearsalId, voteActivityId).Find(&histories)
|
|
t.CheckErr(err)
|
|
|
|
for i := range ladders {
|
|
for j := range histories {
|
|
if ladders[i].Id == histories[j].VoteActivityLadderId {
|
|
ladders[i].IsVote = true
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
t.JSON(map[string]interface{}{
|
|
"total": len(ladders),
|
|
"members": ladders,
|
|
})
|
|
}
|