新增本地获取任务列表,对接任务列表加入存储数据库功能

This commit is contained in:
chy
2025-06-17 09:06:41 +08:00
parent 76671693a4
commit ba2e44fb21
29 changed files with 592 additions and 144 deletions

View File

@ -2,9 +2,11 @@ package task
import (
"context"
"encoding/json"
"fmt"
"server/internal/dao"
"server/internal/model"
"server/internal/model/do"
"server/internal/service"
"server/utility/ecode"
"server/utility/tencent"
@ -144,7 +146,54 @@ func (s *sTask) GetNonLoginTaskList(ctx context.Context, in *model.GetNonLoginTa
return nil, err
}
var store *model.Store
// 获取网吧账号 id用作存储task
err = dao.Stores.Ctx(ctx).Where(dao.Stores.Columns().NetbarAccount, in.NetBarAccount).Scan(&store)
if err != nil {
return nil, ecode.Fail.Sub("查找网吧失败")
}
if store == nil {
return nil, ecode.Fail.Sub("当前网吧不存在")
}
// TODO 任务列表数据处理
if jsonData, ok := data.(map[string]interface{}); ok {
// 现在可以访问 jsonData 中的字段
list := jsonData["task_list"]
// 将 interface{} 转换为结构体
var result []model.MyData
jsonBytes, err := json.Marshal(list)
if err != nil {
return nil, ecode.Fail.Sub("JSON序列化失败")
}
err = json.Unmarshal(jsonBytes, &result)
if err != nil {
return nil, ecode.Fail.Sub("JSON反序列化失败")
}
for _, v := range result {
exist, err := dao.Tasks.Ctx(ctx).Where(dao.Tasks.Columns().QqNetbarTaskId, v.TaskId).Exist()
if err != nil {
return nil, ecode.Fail.Sub("查询该任务失败")
}
// 数据库是否存在,无则添加
if !exist {
_, err := dao.Tasks.Ctx(ctx).Insert(do.Tasks{
QqNetbarTaskId: v.TaskId,
QqNetbarTaskMemo: v.QQNetBarTaskMemo,
QqNetbarTaskName: v.QQNetBarTaskName,
QqNetbarTaskRules: v.QQNetBarTaskRules,
GameId: in.Gid,
StoreId: store.Id,
})
if err != nil {
return nil, ecode.Fail.Sub("添加任务失败")
}
}
}
}
return &model.GetNonLoginTaskListOut{
Data: data,
@ -161,8 +210,24 @@ func (s *sTask) GetLoginTaskList(ctx context.Context, in *model.GetLoginTaskList
}
// TODO 任务列表数据处理
return &model.GetLoginTaskListOut{
Data: data,
}, err
}
func (s *sTask) GetTaskList(ctx context.Context, in *model.TaskListIn) (out *model.TaskListOut, err error) {
var data []model.Tasks
var total int
m := dao.Tasks.Ctx(ctx)
//err = m.Page(in.Page, in.Size).Where(do.Tasks{GameId: in.Gid, StoreId: in.StoreId}).LeftJoin(dao.StoreTaskRewards.Table(), fmt.Sprintf("`%s`.`id` = `%s`.`task_id`", dao.Tasks.Table(), dao.StoreTaskRewards.Table())).ScanAndCount(&data, &total, false)
err = m.Page(in.Page, in.Size).Where(do.Tasks{GameId: in.Gid, StoreId: in.StoreId}).WithAll().ScanAndCount(&data, &total, false)
if err != nil {
return nil, ecode.Fail.Sub("任务列表获取失败")
}
return &model.TaskListOut{
List: data,
Total: total,
}, nil
}