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.
152 lines
3.3 KiB
152 lines
3.3 KiB
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 = "" |
|
} |
|
} |
|
}
|
|
|