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 }