调整任务存储,任务查询

This commit is contained in:
chy
2025-07-01 14:14:26 +08:00
parent c56b96b0c2
commit 0c1f2568e7
9 changed files with 316 additions and 115 deletions

View File

@ -2,6 +2,7 @@ package task
import (
"context"
"encoding/json"
"fmt"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/os/glog"
@ -170,36 +171,36 @@ func (s *sTask) GetNonLoginTaskList(ctx context.Context, in *model.GetTaskListIn
// 剔除不需要的任务数据
var tasks []model.Task
idx := result.PageIdx
for _, task := range result.TaskList {
data := model.Task{
QqNetbarTaskId: task.TaskID,
QqNetbarTaskName: task.Title,
QqNetbarTaskMemo: task.TaskDesc,
QqNetbarTaskRules: task.RuleDesc,
QqNetbarTargetName: task.TargetName,
QqNetbarTargetTime: task.TargetTimes,
StartTime: task.CycleStart,
EndTime: task.CycleEnd,
}
// 组装奖励数据
err := dao.TaskRewards.Ctx(ctx).
LeftJoin(dao.Rewards.Table(),
fmt.Sprintf("`%s`.`%s` = `%s`.`%s` ",
dao.Rewards.Table(), dao.Rewards.Columns().Id,
dao.TaskRewards.Table(), dao.TaskRewards.Columns().RewardId,
),
).Fields(
fmt.Sprintf(
"%s.*",
dao.Rewards.Table(),
),
).Where(dao.TaskRewards.Columns().TaskId, task.TaskID).Scan(&data.Rewards)
if err != nil {
return nil, err
}
tasks = append(tasks, data)
}
//for _, task := range result.TaskList {
// //data := model.Task{
// // QqNetbarTaskId: task.TaskID,
// // QqNetbarTaskName: task.Title,
// // QqNetbarTaskMemo: task.TaskDesc,
// // QqNetbarTaskRules: task.RuleDesc,
// // QqNetbarTargetName: task.TargetName,
// // QqNetbarTargetTime: task.TargetTimes,
// // StartTime: task.CycleStart,
// // EndTime: task.CycleEnd,
// //}
//
// // 组装奖励数据
// err := dao.TaskRewards.Ctx(ctx).
// LeftJoin(dao.Rewards.Table(),
// fmt.Sprintf("`%s`.`%s` = `%s`.`%s` ",
// dao.Rewards.Table(), dao.Rewards.Columns().Id,
// dao.TaskRewards.Table(), dao.TaskRewards.Columns().RewardId,
// ),
// ).Fields(
// fmt.Sprintf(
// "%s.*",
// dao.Rewards.Table(),
// ),
// ).Where(dao.TaskRewards.Columns().TaskId, task.TaskID).Scan(&data.Rewards)
// if err != nil {
// return nil, err
// }
// tasks = append(tasks, data)
//}
return &model.GetTaskListOut{
PageIdx: idx,
@ -222,67 +223,67 @@ func (s *sTask) GetLoginTaskList(ctx context.Context, in *model.GetTaskListIn) (
pageIdx := result.PageIdx
// 剔除不需要的任务数据
var tasks []model.Task
for _, task := range result.TaskList {
data := model.Task{
QqNetbarTaskId: task.TaskID,
QqNetbarTaskName: task.Title,
QqNetbarTaskMemo: task.TaskDesc,
QqNetbarTaskRules: task.RuleDesc,
QqNetbarTargetName: task.TargetName,
QqNetbarTargetTime: task.TargetTimes,
StartTime: task.CycleStart,
EndTime: task.CycleEnd,
//Status: task.Status,
}
data.UserTaskResult.Usertimes = task.UserTimes
// 组装门店奖励数据
err := dao.TaskRewards.Ctx(ctx).
LeftJoin(dao.Rewards.Table(),
fmt.Sprintf("`%s`.`%s` = `%s`.`%s`",
dao.Rewards.Table(), dao.Rewards.Columns().Id,
dao.TaskRewards.Table(), dao.TaskRewards.Columns().RewardId)).
LeftJoin(dao.RewardTypes.Table(),
fmt.Sprintf("`%s`.`%s` = `%s`.`%s`",
dao.RewardTypes.Table(), dao.RewardTypes.Columns().Id,
dao.Rewards.Table(), dao.Rewards.Columns().RewardTypeId)).
Fields(
fmt.Sprintf("%s.*, `%s`.`%s` AS %s",
dao.Rewards.Table(),
dao.RewardTypes.Table(), dao.RewardTypes.Columns().Name,
"reward_type_name",
),
).Where(dao.TaskRewards.Columns().TaskId, task.TaskID).Scan(&data.Rewards)
if err != nil {
return nil, err
}
// 任务状态=1或者2不做操作其他查询门店奖励是否全部领取
if task.Status != 1 && task.Status != 2 {
count, err := dao.UserTasks.Ctx(ctx).Where(dao.UserTasks.Columns().TaskId, task.TaskID).Where(dao.UserTasks.Columns().UserId, in.UserId).LeftJoin(dao.UserTaskRewards.Table(),
fmt.Sprintf("%s.user_tasks_id = %s.id", dao.UserTaskRewards.Table(), dao.UserTasks.Table())).LeftJoin(dao.Rewards.Table(), fmt.Sprintf("%s.id = %s.reward_id",
dao.Rewards.Table(), dao.UserTaskRewards.Table())).Where(dao.Rewards.Columns().Source, 2).Where(dao.UserTaskRewards.Columns().Status, 2).Count()
if err != nil {
return nil, ecode.Fail.Sub("查询用户门店任务奖励失败")
}
if count > 0 {
data.Status = 2
} else {
data.Status = 3
}
} else {
data.Status = task.Status
}
tasks = append(tasks, data)
// 根据用户完成次数和任务指标次数判任务是否完成,修改任务记录状态为 3
if int(task.UserTimes) >= task.TargetTimes {
_, err := dao.UserTasks.Ctx(ctx).Where(do.UserTasks{TaskId: task.TaskID}).Where(do.UserTasks{UserId: in.UserId}).Data(do.UserTasks{Status: 3}).Update()
if err != nil {
return nil, ecode.Fail.Sub("更新用户任务记录状态异常")
}
}
}
//for _, task := range result.TaskList {
// data := model.Task{
// QqNetbarTaskId: task.TaskID,
// QqNetbarTaskName: task.Title,
// QqNetbarTaskMemo: task.TaskDesc,
// QqNetbarTaskRules: task.RuleDesc,
// QqNetbarTargetName: task.TargetName,
// QqNetbarTargetTime: task.TargetTimes,
// StartTime: task.CycleStart,
// EndTime: task.CycleEnd,
// //Status: task.Status,
// }
// data.UserTaskResult.Usertimes = task.UserTimes
// // 组装门店奖励数据
// err := dao.TaskRewards.Ctx(ctx).
// LeftJoin(dao.Rewards.Table(),
// fmt.Sprintf("`%s`.`%s` = `%s`.`%s`",
// dao.Rewards.Table(), dao.Rewards.Columns().Id,
// dao.TaskRewards.Table(), dao.TaskRewards.Columns().RewardId)).
// LeftJoin(dao.RewardTypes.Table(),
// fmt.Sprintf("`%s`.`%s` = `%s`.`%s`",
// dao.RewardTypes.Table(), dao.RewardTypes.Columns().Id,
// dao.Rewards.Table(), dao.Rewards.Columns().RewardTypeId)).
// Fields(
// fmt.Sprintf("%s.*, `%s`.`%s` AS %s",
// dao.Rewards.Table(),
// dao.RewardTypes.Table(), dao.RewardTypes.Columns().Name,
// "reward_type_name",
// ),
// ).Where(dao.TaskRewards.Columns().TaskId, task.TaskID).Scan(&data.Rewards)
// if err != nil {
// return nil, err
// }
//
// // 任务状态=1或者2不做操作其他查询门店奖励是否全部领取
// if task.Status != 1 && task.Status != 2 {
// count, err := dao.UserTasks.Ctx(ctx).Where(dao.UserTasks.Columns().TaskId, task.TaskID).Where(dao.UserTasks.Columns().UserId, in.UserId).LeftJoin(dao.UserTaskRewards.Table(),
// fmt.Sprintf("%s.user_tasks_id = %s.id", dao.UserTaskRewards.Table(), dao.UserTasks.Table())).LeftJoin(dao.Rewards.Table(), fmt.Sprintf("%s.id = %s.reward_id",
// dao.Rewards.Table(), dao.UserTaskRewards.Table())).Where(dao.Rewards.Columns().Source, 2).Where(dao.UserTaskRewards.Columns().Status, 2).Count()
// if err != nil {
// return nil, ecode.Fail.Sub("查询用户门店任务奖励失败")
// }
//
// if count > 0 {
// data.Status = 2
// } else {
// data.Status = 3
// }
// } else {
// data.Status = task.Status
// }
// tasks = append(tasks, data)
//
// // 根据用户完成次数和任务指标次数判任务是否完成,修改任务记录状态为 3
// if int(task.UserTimes) >= task.TargetTimes {
// _, err := dao.UserTasks.Ctx(ctx).Where(do.UserTasks{TaskId: task.TaskID}).Where(do.UserTasks{UserId: in.UserId}).Data(do.UserTasks{Status: 3}).Update()
// if err != nil {
// return nil, ecode.Fail.Sub("更新用户任务记录状态异常")
// }
// }
//}
return &model.GetTaskListOut{
Data: tasks,
@ -439,6 +440,114 @@ func (s *sTask) GetUserTaskRecordsList(ctx context.Context, in *model.UserTaskRe
}, nil
}
// GetTaskList PC-WEB获取任务列表
func (s *sTask) GetTaskList(ctx context.Context, in *model.GetTaskListV2In) (out *model.GetTaskListV2Out, err error) {
var tasks []model.Task
var pageIdx string
var data []model.GameTask
if in.IsBound == 0 {
// 未绑定游戏查询自己数据库
err := dao.Tasks.Ctx(ctx).Where(do.Tasks{GameId: in.Gid, StoreId: in.StoreId, NetbarAcconut: in.NetBarAccount}).WithAll().WithAll().Scan(&tasks)
if err != nil {
return nil, ecode.Fail.Sub("获取任务列表失败")
}
for i, v := range tasks {
err := json.Unmarshal([]byte(v.Task), &tasks[i].GameTask)
if err != nil {
return nil, ecode.Fail.Sub("解析任务信息失败")
}
tasks[i].Task = ""
}
return &model.GetTaskListV2Out{
Data: tasks,
}, nil
} else {
// 已绑定
// 调用外部接口
activity, err := gamelife.GetGamelifeClient(ctx).RequestActivity(ctx, &model.QQNetbarActivityIn{ServiceName: consts.GetTaskList, PopenId: in.PopenId, BindType: in.BindType, TaskParam: model.TaskParam{Gid: in.Gid, NetBarAccount: in.NetBarAccount, Num: in.Num, Pageidx: in.Pageidx}})
if err != nil {
return nil, err
}
result, ok := activity.(*model.GameTaskResponse)
if !ok {
return nil, ecode.Fail.Sub("数据类型转换失败")
}
pageIdx = result.PageIdx
// 剔除不需要的任务数据
for i, task := range result.TaskList {
//data := model.Task{
// QqNetbarTaskId: task.TaskID,
// QqNetbarTaskName: task.Title,
// QqNetbarTaskMemo: task.TaskDesc,
// QqNetbarTaskRules: task.RuleDesc,
// QqNetbarTargetName: task.TargetName,
// QqNetbarTargetTime: task.TargetTimes,
// StartTime: task.CycleStart,
// EndTime: task.CycleEnd,
// //Status: task.Status,
//}
//data.UserTaskResult.Usertimes = task.UserTimes
// 组装门店奖励数据
err := dao.TaskRewards.Ctx(ctx).
LeftJoin(dao.Rewards.Table(),
fmt.Sprintf("`%s`.`%s` = `%s`.`%s`",
dao.Rewards.Table(), dao.Rewards.Columns().Id,
dao.TaskRewards.Table(), dao.TaskRewards.Columns().RewardId)).
LeftJoin(dao.RewardTypes.Table(),
fmt.Sprintf("`%s`.`%s` = `%s`.`%s`",
dao.RewardTypes.Table(), dao.RewardTypes.Columns().Id,
dao.Rewards.Table(), dao.Rewards.Columns().RewardTypeId)).
Fields(
fmt.Sprintf("%s.*, `%s`.`%s` AS %s",
dao.Rewards.Table(),
dao.RewardTypes.Table(), dao.RewardTypes.Columns().Name,
"reward_type_name",
),
).Where(dao.TaskRewards.Columns().TaskId, task.TaskID).Scan(&result.TaskList[i].Reward)
if err != nil {
return nil, err
}
//任务状态=1或者2不做操作其他查询门店奖励是否全部领取
if task.Status != 1 && task.Status != 2 {
count, err := dao.UserTasks.Ctx(ctx).Where(dao.UserTasks.Columns().TaskId, task.TaskID).Where(dao.UserTasks.Columns().UserId, in.UserId).LeftJoin(dao.UserTaskRewards.Table(),
fmt.Sprintf("%s.user_tasks_id = %s.id", dao.UserTaskRewards.Table(), dao.UserTasks.Table())).LeftJoin(dao.Rewards.Table(), fmt.Sprintf("%s.id = %s.reward_id",
dao.Rewards.Table(), dao.UserTaskRewards.Table())).Where(dao.Rewards.Columns().Source, 2).Where(dao.UserTaskRewards.Columns().Status, 2).Count()
if err != nil {
return nil, ecode.Fail.Sub("查询用户门店任务奖励失败")
}
if count > 0 {
tasks[i].Status = 2
} else {
tasks[i].Status = 3
}
}
//else {
// data.Status = task.Status
//}
//tasks = append(tasks, data)
// 根据用户完成次数和任务指标次数判任务是否完成,修改任务记录状态为 3
if int(task.UserTimes) >= task.TargetTimes {
_, err := dao.UserTasks.Ctx(ctx).Where(do.UserTasks{TaskId: task.TaskID}).Where(do.UserTasks{UserId: in.UserId}).Data(do.UserTasks{Status: 3}).Update()
if err != nil {
return nil, ecode.Fail.Sub("更新用户任务记录状态异常")
}
}
}
data = result.TaskList
return &model.GetTaskListV2Out{
Data: data,
PageIdx: pageIdx,
}, nil
}
}
func (s *sTask) SyncTaskFromGamelife(ctx context.Context) (out *model.SyncTaskOut, err error) {
stores, err := dao.Stores.Ctx(ctx).Fields(dao.Stores.Columns().Id, dao.Stores.Columns().NetbarAccount).All()
if err != nil {
@ -504,6 +613,7 @@ func (s *sTask) SyncTaskFromGamelife(ctx context.Context) (out *model.SyncTaskOu
taskMap := gconv.Map(task)
delete(taskMap, "PrizeList")
delete(taskMap, "prize_list")
delete(taskMap, "reward")
_, err = dao.Tasks.Ctx(ctx).Data(do.Tasks{
TaskId: task.TaskID,