99 lines
2.5 KiB
Go
99 lines
2.5 KiB
Go
package questionnreser
|
|
|
|
import (
|
|
"time"
|
|
|
|
"91porn-server/common/stderr"
|
|
"91porn-server/models/v/exchcodemod"
|
|
"91porn-server/models/v/idmod"
|
|
"91porn-server/models/v/questionnremod"
|
|
"91porn-server/models/v/usermod"
|
|
"91porn-server/web/service/exchcodeser"
|
|
)
|
|
|
|
var QuestionnaireGiftGold = []int{50, 100, 200}
|
|
var BatchNum = "YS-dzwj"
|
|
var Remark = "调查问卷活动奖励兑换码"
|
|
var InvalidTime = time.Hour * 24 * 3
|
|
|
|
// 生成活动兑换码 reward 奖励天数 count生成兑换码数
|
|
func makeExchangeCode(reward int, count int) ([]string, error) {
|
|
now := time.Now()
|
|
exchangeCodes := make([]exchcodemod.ExchCode, count)
|
|
codes := make([]string, count)
|
|
for i := 0; i < count; i++ {
|
|
var exchangeCode = exchcodeser.ProduceExchangeCode(0)
|
|
codes[i] = exchangeCode
|
|
exchangeCodes[i] = exchcodemod.ExchCode{
|
|
BatchNum: BatchNum,
|
|
App: exchcodemod.AppTypeYSVideo,
|
|
Code: exchangeCode,
|
|
Authority: exchcodemod.AuthorityShortVideoVip,
|
|
Status: exchcodemod.StatusUnused,
|
|
Reward: reward,
|
|
Operator: exchcodemod.SystemOperator,
|
|
Remark: Remark,
|
|
EffectiveAt: now,
|
|
InvalidAt: now.Add(InvalidTime),
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
}
|
|
}
|
|
return codes, exchcodemod.BulkWrite(exchangeCodes)
|
|
}
|
|
|
|
func Submit(q questionnremod.Questionnaire) (code stderr.Code, res questionnremod.SubmitRes) {
|
|
code = stderr.Success
|
|
qid, err := idmod.GetQuestionnaireId()
|
|
if err != nil {
|
|
code = stderr.ErrNetWorkBusy
|
|
return
|
|
}
|
|
q.QuestionId = qid
|
|
u, err := usermod.FindUserByUID(q.UID)
|
|
if err != nil {
|
|
code = stderr.ErrNetWorkBusy
|
|
return
|
|
}
|
|
if u == nil {
|
|
code = stderr.UserIsNotExists
|
|
return
|
|
}
|
|
//不是vip||vip过期||vip小于试卷允许最小等级||vip越界
|
|
if u.VipLevel < 1 || u.VipExpireDate.Before(time.Now()) || u.VipLevel < q.Level || u.VipLevel > 3 {
|
|
code = stderr.ErrAccessForbid
|
|
return
|
|
}
|
|
q.Gold = QuestionnaireGiftGold[q.Level-1]
|
|
switch q.Level {
|
|
case 1:
|
|
q.Codes, _ = makeExchangeCode(7, 1)
|
|
case 2:
|
|
//30天会员
|
|
q.Codes, _ = makeExchangeCode(30, 1)
|
|
case 3:
|
|
//30天会员*2
|
|
q.Codes, _ = makeExchangeCode(30, 2)
|
|
default:
|
|
|
|
}
|
|
if err = questionnremod.Insert(q); err != nil {
|
|
code = stderr.ErrNetWorkBusy
|
|
return
|
|
}
|
|
res.Gold = q.Gold
|
|
res.Codes = q.Codes
|
|
res.QuestionId = q.QuestionnaireId
|
|
return
|
|
}
|
|
|
|
func GetByUID(uid uint64) (int, []questionnremod.Questionnaire, error) {
|
|
vipLevel := 0
|
|
u, _ := usermod.FindUserByUID(uid)
|
|
if u != nil && u.VipExpireDate.After(time.Now()) {
|
|
vipLevel = u.VipLevel
|
|
}
|
|
data, err := questionnremod.GetByUID(uid)
|
|
return vipLevel, data, err
|
|
}
|