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.
100 lines
2.2 KiB
100 lines
2.2 KiB
package app |
|
|
|
import ( |
|
"server/call" |
|
"server/common" |
|
"server/db" |
|
"server/modules/web/values" |
|
"sort" |
|
"time" |
|
) |
|
|
|
// 从数据库中读取数据 |
|
func (g *Gin) CheckActivityExpire(id int) (pass bool) { |
|
act := call.GetConfigActivityByID(id) |
|
if act == nil { |
|
pass = false |
|
g.Code = values.CodeActivityExpire |
|
return |
|
} |
|
pass = act.IsValid() |
|
if !pass { |
|
g.Code = values.CodeActivityExpire |
|
} |
|
return |
|
} |
|
|
|
func (a *Gin) GetUserTaskStatus() (ret []*values.OneTask) { |
|
tasks := call.GetConfigTask() |
|
for _, v := range tasks { |
|
one := &values.OneTask{ |
|
ID: v.ID, |
|
TaskID: v.TaskID, |
|
Target: v.Target, |
|
Reward: v.Reward, |
|
Kind: v.Kind, |
|
Type: v.Type, |
|
Icon: v.Icon, |
|
Title: common.GetTaskTitle(v), |
|
Action: v.Action, |
|
} |
|
// 非次数任务,需转换目标数值 |
|
if !common.IsNumTaskType(v.Type) { |
|
one.Target /= common.DecimalDigits |
|
} |
|
ret = append(ret, one) |
|
} |
|
if a.UID <= 0 { |
|
return |
|
} |
|
|
|
task := call.GetUserTaskData(a.UID) |
|
now := time.Now().Unix() |
|
for _, v := range ret { |
|
tag := false |
|
for _, k := range task { |
|
if v.TaskID == k.TaskID { |
|
v.Progess = k.Progress |
|
tag = true |
|
break |
|
} |
|
} |
|
if !tag { |
|
if v.Type == common.TaskTypeRegist { // 已注册且注册任务还没标记完成 |
|
db.Mysql().Create(&common.TaskData{UID: a.UID, TaskID: v.TaskID, Progress: v.Target, Time: now}) |
|
v.Progess = v.Target |
|
} else if v.Type == common.TaskTypeDownload { // 已下载直接标记为完成 |
|
if a.DeviceType == common.DeviceTypeWebview || a.DeviceType == common.DeviceTypePWA { |
|
db.Mysql().Create(&common.TaskData{UID: a.UID, TaskID: v.TaskID, Progress: v.Target, Time: now}) |
|
v.Progess = v.Target |
|
} |
|
} |
|
} |
|
|
|
// 非次数任务,需转换目标数值 |
|
if !common.IsNumTaskType(v.Type) && v.Progess > 0 { |
|
v.Progess /= common.DecimalDigits |
|
} |
|
|
|
if v.Progess < 0 { |
|
v.Progess = v.Target |
|
v.Status = 2 |
|
} else if v.Progess >= v.Target { |
|
v.Progess = v.Target |
|
v.Status = 1 |
|
} |
|
} |
|
sort.SliceStable(ret, func(i, j int) bool { |
|
return ret[i].Status > ret[j].Status |
|
}) |
|
// 完成的任务隐藏 |
|
index := 0 |
|
for i := range ret { |
|
if ret[i].Status != 2 { |
|
index = i |
|
break |
|
} |
|
} |
|
ret = ret[index:] |
|
return |
|
}
|
|
|