153 lines
3.3 KiB
Go
153 lines
3.3 KiB
Go
|
package newcomer
|
|||
|
|
|||
|
import (
|
|||
|
"context"
|
|||
|
"fmt"
|
|||
|
"go-common/app/interface/main/creative/model/newcomer"
|
|||
|
"go-common/library/ecode"
|
|||
|
"go-common/library/log"
|
|||
|
)
|
|||
|
|
|||
|
// H5TaskList for H5 detail task list
|
|||
|
func (s *Service) H5TaskList(c context.Context, mid int64, from string) (res *newcomer.H5TaskRewardList, err error) {
|
|||
|
var (
|
|||
|
u *UserTaskInfo
|
|||
|
tasks []*newcomer.Task
|
|||
|
taskTypeMap = make(map[int8][]*newcomer.Task) // taskType-task
|
|||
|
taskGroupMap = make(map[int64][]*newcomer.Task) // groupID-task
|
|||
|
)
|
|||
|
|
|||
|
// get user tasks
|
|||
|
userTasks, err := s.newc.UserTasks(c, mid)
|
|||
|
if err != nil {
|
|||
|
log.Error("TaskList s.newc.UserTasks mid(%d)|error(%v)", mid, err)
|
|||
|
return
|
|||
|
}
|
|||
|
if len(userTasks) == 0 {
|
|||
|
// return:User did not receive the task
|
|||
|
res = &newcomer.H5TaskRewardList{
|
|||
|
TaskReceived: newcomer.NoBindTask,
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// get user info
|
|||
|
u, err = s.getUserTaskInfo(c, mid, userTasks)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// get tasks
|
|||
|
tasks = s.getTasksInfoByType(userTasks, newcomer.DefualtTaskType)
|
|||
|
if len(tasks) == 0 {
|
|||
|
err = ecode.CreativeNewcomerNoTask
|
|||
|
log.Error("TaskList s.GetTaskByType len(tasks) == 0")
|
|||
|
return
|
|||
|
}
|
|||
|
// group by groupID & taskType
|
|||
|
taskGroupMap, taskTypeMap = s.groupByTasks(tasks)
|
|||
|
|
|||
|
// add task label & redirect
|
|||
|
s.addLabelRedirect(tasks, from)
|
|||
|
|
|||
|
// task_gift
|
|||
|
taskGift, err := s.getTaskGiftData(c, mid, taskTypeMap, newcomer.FromH5)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// task_groups
|
|||
|
tgs, err := s.getTaskGroupData(c, mid, taskGroupMap)
|
|||
|
if err != nil {
|
|||
|
return
|
|||
|
}
|
|||
|
// if userLevel == UserTaskLevel01 , set unlock state
|
|||
|
if u.UserTaskLevel == newcomer.UserTaskLevel01 {
|
|||
|
for _, v := range tgs {
|
|||
|
if v.TaskType == newcomer.AdvancedTaskType {
|
|||
|
v.RewardState = newcomer.RewardUnlock
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// add tips
|
|||
|
s.addTaskGroupTip(tgs)
|
|||
|
s.addGiftTip(taskGift, taskTypeMap)
|
|||
|
|
|||
|
res = &newcomer.H5TaskRewardList{
|
|||
|
TaskReceived: newcomer.BindTask,
|
|||
|
TaskGroups: tgs,
|
|||
|
TaskGift: taskGift,
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// addLabelRedirect add label & redirect
|
|||
|
func (s *Service) addLabelRedirect(tasks []*newcomer.Task, from string) {
|
|||
|
if len(tasks) == 0 {
|
|||
|
return
|
|||
|
}
|
|||
|
for _, v := range tasks {
|
|||
|
if v == nil {
|
|||
|
continue
|
|||
|
}
|
|||
|
t, ok := s.TaskMapCache[v.ID]
|
|||
|
if !ok {
|
|||
|
continue
|
|||
|
}
|
|||
|
m, ook := newcomer.H5RedirectMap[from][t.TargetType]
|
|||
|
if !ook || len(m) == 0 {
|
|||
|
continue
|
|||
|
}
|
|||
|
v.Label = m[0]
|
|||
|
v.Redirect = m[1]
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// addGiftTip get gift tip
|
|||
|
func (s *Service) addGiftTip(tg []*newcomer.TaskGift, kindMap map[int8][]*newcomer.Task) {
|
|||
|
for _, v := range tg {
|
|||
|
if v == nil {
|
|||
|
continue
|
|||
|
}
|
|||
|
if v.State != newcomer.RewardUnlock {
|
|||
|
if tip, ok := newcomer.GiftTipMap[v.State][v.Type]; ok {
|
|||
|
v.Tip = tip
|
|||
|
} else {
|
|||
|
v.Tip = ""
|
|||
|
}
|
|||
|
continue
|
|||
|
}
|
|||
|
|
|||
|
// 判断还需要完成奖几个任务
|
|||
|
if len(kindMap[v.Type]) == 0 {
|
|||
|
v.Tip = ""
|
|||
|
continue
|
|||
|
}
|
|||
|
unfinished := 0
|
|||
|
for _, v := range kindMap[v.Type] {
|
|||
|
if v == nil {
|
|||
|
continue
|
|||
|
}
|
|||
|
if v.CompleteSate == newcomer.TaskIncomplete {
|
|||
|
unfinished++
|
|||
|
}
|
|||
|
}
|
|||
|
v.Tip = fmt.Sprintf("再完成%d个任务就能领取了呢", unfinished)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// addTaskGroupTip get taskGroup tip
|
|||
|
func (s *Service) addTaskGroupTip(tr []*newcomer.TaskRewardGroup) {
|
|||
|
for _, v := range tr {
|
|||
|
if v == nil {
|
|||
|
continue
|
|||
|
}
|
|||
|
if tip, ok := newcomer.TaskGroupTipMap[v.RewardState][v.GroupID]; ok {
|
|||
|
v.Tip = tip
|
|||
|
} else {
|
|||
|
v.Tip = ""
|
|||
|
}
|
|||
|
}
|
|||
|
}
|