新增获取用户完成任务列表,修改领取任务

This commit is contained in:
chy
2025-06-19 15:34:20 +08:00
parent 9d41358f83
commit 64f63e6b28
14 changed files with 73 additions and 48 deletions

View File

@ -51,10 +51,8 @@ type GetLoginTaskListRes struct {
} }
type ListReq struct { type ListReq struct {
g.Meta `path:"/task/list" method:"get" tags:"Task" summary:"(PC)任务列表"` g.Meta `path:"/task/completed/list" method:"get" tags:"Task" summary:"(PC)用户任务已完成列表"`
//StoreId int `json:"storeId" dc:"门店 id"`
StoreId int `json:"storeId" dc:"门店 id"` StoreId int `json:"storeId" dc:"门店 id"`
Gid int `json:"gid" dc:"游戏唯一id"`
Page int `json:"page" dc:"页数"` Page int `json:"page" dc:"页数"`
Size int `json:"size" dc:"条数"` Size int `json:"size" dc:"条数"`
} }
@ -75,9 +73,11 @@ type SelectorRes struct {
// GetTaskReq 添加任务记录 // GetTaskReq 添加任务记录
type GetTaskReq struct { type GetTaskReq struct {
g.Meta `path:"/task/get" method:"post" tags:"Task" summary:"(PC)任务领取"` g.Meta `path:"/task/get" method:"post" tags:"Task" summary:"(PC)任务领取"`
TaskId int `json:"taskId" v:"required#任务id不能为空" dc:"任务id"` TaskId int `json:"taskId" v:"required#任务id不能为空" dc:"任务id"`
StoreId int `json:"storeId" v:"required#门店 id不能为空" dc:"门店 id"` StoreId int `json:"storeId" v:"required#门店 id不能为空" dc:"门店 id"`
GameId int `json:"gid" v:"required#游戏唯一id不能为空" dc:"游戏唯一id"`
TaskName string `json:"taskName" v:"required#任务名称不能为空" dc:"任务名称"`
} }
type GetTaskRes struct { type GetTaskRes struct {

View File

@ -10,7 +10,7 @@ import (
func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) { func (c *ControllerV1) List(ctx context.Context, req *v1.ListReq) (res *v1.ListRes, err error) {
out, err := service.Task().GetTaskList(ctx, &model.TaskListIn{Gid: req.Gid, StoreId: req.StoreId, Page: req.Page, Size: req.Size}) out, err := service.Task().GetTaskCompletedList(ctx, &model.TaskListIn{StoreId: req.StoreId, Page: req.Page, Size: req.Size})
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -13,9 +13,11 @@ func (c *ControllerV1) GetTask(ctx context.Context, req *v1.GetTaskReq) (res *v1
userId := g.RequestFromCtx(ctx).GetCtxVar("id").Int() userId := g.RequestFromCtx(ctx).GetCtxVar("id").Int()
out, err := service.Task().GetTask(ctx, &model.GetTaskIn{ out, err := service.Task().GetTask(ctx, &model.GetTaskIn{
TaskId: req.TaskId, TaskId: req.TaskId,
StoreId: req.StoreId, StoreId: req.StoreId,
UserId: userId, UserId: userId,
GameId: req.GameId,
TaskName: req.TaskName,
}) })
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -31,6 +31,8 @@ type UserTasksColumns struct {
CompletedAt string // 任务完成时间 CompletedAt string // 任务完成时间
DeletedAt string // 软删除时间戳 DeletedAt string // 软删除时间戳
StoreId string // 门店 id StoreId string // 门店 id
TaskName string // 任务名称
GameId string // 游戏 id
} }
// userTasksColumns holds the columns for the table user_tasks. // userTasksColumns holds the columns for the table user_tasks.
@ -45,6 +47,8 @@ var userTasksColumns = UserTasksColumns{
CompletedAt: "completed_at", CompletedAt: "completed_at",
DeletedAt: "deleted_at", DeletedAt: "deleted_at",
StoreId: "store_id", StoreId: "store_id",
TaskName: "task_name",
GameId: "game_id",
} }
// NewUserTasksDao creates and returns a new DAO object for table data access. // NewUserTasksDao creates and returns a new DAO object for table data access.

View File

@ -210,6 +210,7 @@ func (s *sTask) GetLoginTaskList(ctx context.Context, in *model.GetTaskListIn) (
QqNetbarTargetTime: task.TargetTimes, QqNetbarTargetTime: task.TargetTimes,
StartTime: task.CycleStart, StartTime: task.CycleStart,
EndTime: task.CycleEnd, EndTime: task.CycleEnd,
Status: task.Status,
} }
data.UserTaskResult.Usertimes = task.UserTimes data.UserTaskResult.Usertimes = task.UserTimes
// 组装门店奖励数据 // 组装门店奖励数据
@ -228,29 +229,27 @@ func (s *sTask) GetLoginTaskList(ctx context.Context, in *model.GetTaskListIn) (
}, err }, err
} }
func (s *sTask) GetTaskList(ctx context.Context, in *model.TaskListIn) (out *model.TaskListOut, err error) { // GetTaskCompletedList 获取用户任务完成列表
func (s *sTask) GetTaskCompletedList(ctx context.Context, in *model.TaskListIn) (out *model.TaskListOut, err error) {
var data []model.Task m := dao.UserTasks.Ctx(ctx)
var data []model.UserTask
var total int var total int
m := dao.Tasks.Ctx(ctx) if in.StoreId > 0 {
m = m.Where(dao.UserTasks.Columns().StoreId, in.StoreId)
if in.StoreId != 0 {
m = m.Where(do.Tasks{StoreId: in.StoreId})
} }
err = m.Page(in.Page, in.Size).Where(do.Tasks{GameId: in.Gid}).ScanAndCount(&data, &total, false) //err = m.Page(in.Page, in.Size).Fields(fmt.Sprintf("%s.*, %s.*,%s.*, %s.*", dao.UserTasks.Table(), dao.Users.Table(), dao.Stores.Table(), dao.Games.Table())).
// LeftJoin(dao.Users.Table(), fmt.Sprintf("`%s`.`id` = `%s`.`user_id`", dao.Users.Table(), dao.UserTasks.Table())).
// LeftJoin(dao.Stores.Table(), fmt.Sprintf("`%s`.`id` = `%s`.`store_id`", dao.Stores.Table(), dao.UserTasks.Table())).
// LeftJoin(dao.Games.Table(), fmt.Sprintf("`%s`.`game_id` = `%s`.`game_id`", dao.Games.Table(), dao.UserTasks.Table())).WithAll().ScanAndCount(&data, &total, false)
err = m.Page(in.Page, in.Size).WithAll().ScanAndCount(&data, &total, false)
if err != nil { if err != nil {
return nil, ecode.Fail.Sub("任务列表获取失败") return nil, ecode.Fail.Sub("获取已完成任务列表失败")
} }
for i, v := range data {
if err = dao.StoreTaskRewards.Ctx(ctx).Where(do.StoreTaskRewards{TaskId: v.Id, StoreId: in.StoreId}).LeftJoin(
dao.Rewards.Table(),
fmt.Sprintf("%s.%s = %s.%s", dao.Rewards.Table(), dao.Rewards.Columns().Id, dao.StoreTaskRewards.Table(), dao.StoreTaskRewards.Columns().RewardId),
).Fields(fmt.Sprintf("%s.*", dao.Rewards.Table())).Scan(&data[i].NetbarRewards); err != nil {
return nil, ecode.Fail.Sub("任务奖励获取失败")
}
}
return &model.TaskListOut{ return &model.TaskListOut{
List: data, List: data,
Total: total, Total: total,
@ -280,7 +279,7 @@ func (s *sTask) GetSelectorList(ctx context.Context, in *model.SelectorIn) (out
func (s *sTask) GetTask(ctx context.Context, in *model.GetTaskIn) (out *model.GetTaskOut, err error) { func (s *sTask) GetTask(ctx context.Context, in *model.GetTaskIn) (out *model.GetTaskOut, err error) {
var userTask []*model.UserTask var userTask []*model.UserTask
err = dao.UserTasks.Ctx(ctx).Where(do.UserTasks{UserId: in.UserId, TaskId: in.TaskId, StoreId: in.StoreId}).WhereNot("status", 3).Scan(&userTask) err = dao.UserTasks.Ctx(ctx).Where(do.UserTasks{UserId: in.UserId, TaskId: in.TaskId, StoreId: in.StoreId, GameId: in.GameId}).WhereNot("status", 3).Scan(&userTask)
if err != nil { if err != nil {
return nil, ecode.Fail.Sub("查询用户该任务记录失败") return nil, ecode.Fail.Sub("查询用户该任务记录失败")
} }
@ -302,6 +301,8 @@ func (s *sTask) GetTask(ctx context.Context, in *model.GetTaskIn) (out *model.Ge
StoreId: in.StoreId, StoreId: in.StoreId,
Status: 1, Status: 1,
SerialNumber: serialNumber, SerialNumber: serialNumber,
TaskName: in.TaskName,
GameId: in.GameId,
}) })
if err != nil { if err != nil {

View File

@ -22,4 +22,6 @@ type UserTasks struct {
CompletedAt *gtime.Time // 任务完成时间 CompletedAt *gtime.Time // 任务完成时间
DeletedAt *gtime.Time // 软删除时间戳 DeletedAt *gtime.Time // 软删除时间戳
StoreId interface{} // 门店 id StoreId interface{} // 门店 id
TaskName interface{} // 任务名称
GameId interface{} // 游戏 id
} }

View File

@ -20,4 +20,6 @@ type UserTasks struct {
CompletedAt *gtime.Time `json:"completedAt" orm:"completed_at" description:"任务完成时间"` // 任务完成时间 CompletedAt *gtime.Time `json:"completedAt" orm:"completed_at" description:"任务完成时间"` // 任务完成时间
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳 DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
StoreId int64 `json:"storeId" orm:"store_id" description:"门店 id"` // 门店 id StoreId int64 `json:"storeId" orm:"store_id" description:"门店 id"` // 门店 id
TaskName string `json:"taskName" orm:"task_name" description:"任务名称"` // 任务名称
GameId int64 `json:"gameId" orm:"game_id" description:"游戏 id"` // 游戏 id
} }

View File

@ -1,6 +1,9 @@
package model package model
import "github.com/gogf/gf/v2/frame/g"
type Game struct { type Game struct {
g.Meta `orm:"table:games"`
GameId int64 `json:"gameId" orm:"game_id"` // 腾讯游戏 id GameId int64 `json:"gameId" orm:"game_id"` // 腾讯游戏 id
GameName string `json:"gameName" orm:"game_name"` // 游戏名称 GameName string `json:"gameName" orm:"game_name"` // 游戏名称
GameCode string `json:"gameCode" orm:"game_code"` // 游戏代号 GameCode string `json:"gameCode" orm:"game_code"` // 游戏代号

View File

@ -14,7 +14,7 @@ type Store struct {
ContactName string `json:"contactName" orm:"contact_name" dc:"联系人姓名"` ContactName string `json:"contactName" orm:"contact_name" dc:"联系人姓名"`
ContactPhone string `json:"contactPhone" orm:"contact_phone" dc:"联系人电话"` ContactPhone string `json:"contactPhone" orm:"contact_phone" dc:"联系人电话"`
Status int `json:"status" orm:"status,default:1" dc:"状态1=正常营业2=暂停营业3=已关闭"` Status int `json:"status" orm:"status,default:1" dc:"状态1=正常营业2=暂停营业3=已关闭"`
NetbarAccount string `json:"netbarAccount" orm:"netbar_account" dc:"网吧网关账号"` NetbarAccount string `json:"netbarAccount" orm:"netbar_account" dc:"网吧网关账号"`
} }
type StoreCreateIn struct { type StoreCreateIn struct {

View File

@ -12,7 +12,7 @@ type Task struct {
DeletedAt *gtime.Time `json:"-" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳 DeletedAt *gtime.Time `json:"-" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
GameId int64 `json:"-" orm:"game_id" description:"游戏唯一id"` // 游戏唯一id GameId int64 `json:"-" orm:"game_id" description:"游戏唯一id"` // 游戏唯一id
StoreId int64 `json:"-" orm:"store_id" description:"门店 id"` // 门店 id StoreId int64 `json:"-" orm:"store_id" description:"门店 id"` // 门店 id
Status int `json:"-" orm:"status" description:"1启用 2禁用"` // 1启用 2禁用 Status int `json:"status" orm:"status" description:"1启用 2禁用"` //用户奖励状态1 未完成2 未领取3 已领取4-奖励限量且已抢光5用户限量
QqNetbarTaskId string `json:"qqNetbarTaskId" orm:"qq_netbar_task_id" description:"QQ网吧任务ID"` // QQ网吧任务ID QqNetbarTaskId string `json:"qqNetbarTaskId" orm:"qq_netbar_task_id" description:"QQ网吧任务ID"` // QQ网吧任务ID
QqNetbarTaskRules string `json:"qqNetbarTaskRules" orm:"qq_netbar_task_rules" description:"任务规则"` // 任务规则 QqNetbarTaskRules string `json:"qqNetbarTaskRules" orm:"qq_netbar_task_rules" description:"任务规则"` // 任务规则
QqNetbarTaskMemo string `json:"qqNetbarTaskMemo" orm:"qq_netbar_task_memo" description:"任务描述"` // 任务描述 QqNetbarTaskMemo string `json:"qqNetbarTaskMemo" orm:"qq_netbar_task_memo" description:"任务描述"` // 任务描述
@ -110,8 +110,9 @@ type SelectorOut struct {
} }
type StoreData struct { type StoreData struct {
g.Meta `orm:"table:stores"` g.Meta `orm:"table:stores"`
Id int `json:"id" orm:"id"` Id int `json:"id" orm:"id"`
MerchantId int `json:"merchantId" orm:"merchant_id"` MerchantId int `json:"merchantId" orm:"merchant_id"`
StoreName string `json:"storeName" orm:"name"` StoreName string `json:"storeName" orm:"name"`
NetbarAccount string `json:"netbarAccount" orm:"netbar_account"`
} }

View File

@ -1,6 +1,7 @@
package model package model
import ( import (
"github.com/gogf/gf/v2/frame/g"
"time" "time"
"github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/os/gtime"
@ -8,6 +9,7 @@ import (
// User 用户信息 // User 用户信息
type User struct { type User struct {
g.Meta `orm:"table:users"`
Id int64 `json:"id" orm:"id,primary"` // 用户ID Id int64 `json:"id" orm:"id,primary"` // 用户ID
Username string `json:"username" orm:"username,not null"` // 用户名 Username string `json:"username" orm:"username,not null"` // 用户名
Nickname string `json:"nickname" orm:"nickname"` // 昵称 Nickname string `json:"nickname" orm:"nickname"` // 昵称

View File

@ -7,16 +7,21 @@ import (
type UserTask struct { type UserTask struct {
g.Meta `orm:"table:task"` g.Meta `orm:"table:task"`
Id int `orm:"column:id" json:"id"` // Id int64 `json:"id" orm:"id" description:"用户任务唯一标识符"` // 用户任务唯一标识符
UserId int `orm:"column:user_id" json:"userId"` // 用户 id UserId int64 `json:"userId" orm:"user_id" description:"用户ID"` // 用户ID
TaskId int `orm:"column:task_id" json:"taskId"` // 任务 id TaskId string `json:"taskId" orm:"task_id" description:"腾讯任务ID"` // 腾讯任务ID
Status int `orm:"column:status" json:"status"` // 状态 1:待完成 2:完成 Status int `json:"status" orm:"status" description:"任务状态1=进行中2=已完成中3=未完成"` // 任务状态1=进行中2=已完成中3=未完成
SerialNumber string `orm:"column:serial_number" json:"serialNumber"` // 流水号 SerialNumber string `json:"serialNumber" orm:"serial_number" description:"流水号,确保用户任务唯一性"` // 流水号,确保用户任务唯一性
StoreId int `orm:"column:store_id" json:"storeId"` // 门店 id CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"` // 创建时间
CreatedAt *gtime.Time `orm:"column:created_at" json:"createdAt"` UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
UpdatedAt *gtime.Time `orm:"column:updated_at" json:"updatedAt"` CompletedAt *gtime.Time `json:"completedAt" orm:"completed_at" description:"任务完成时间"` // 任务完成时间
CompletedAT *gtime.Time `orm:"column:completed_at" json:"completedAt"` DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
DeletedAt *gtime.Time `orm:"column:deleted_at" json:"deletedAt"` StoreId int64 `json:"storeId" orm:"store_id" description:"门店 id"` // 门店 id
TaskName string `json:"taskName" orm:"task_name" description:"任务名称"` // 任务名称
GameId int64 `json:"gameId" orm:"game_id" description:"游戏 id"` // 游戏 id
User User `json:"user" orm:"with:id=user_id"`
Game Game `json:"game" orm:"with:game_id=game_id"`
// Store Store `json:"store" orm:"with:id=store_id"`
} }
// UserTaskRankingIn 任务排行榜入参 // UserTaskRankingIn 任务排行榜入参
@ -53,9 +58,11 @@ type LoginUserRankingNum struct {
// GetTaskIn 添加任务记录入参 // GetTaskIn 添加任务记录入参
type GetTaskIn struct { type GetTaskIn struct {
TaskId int `json:"taskId"` TaskId int `json:"taskId"`
StoreId int `json:"storeId"` StoreId int `json:"storeId"`
UserId int `json:"userId"` UserId int `json:"userId"`
TaskName string `json:"taskName"`
GameId int `json:"gid"`
} }
type GetTaskOut struct { type GetTaskOut struct {

View File

@ -16,7 +16,8 @@ type (
// GetNonLoginTaskList 获取下发到指定网吧的任务列表(未登录) // GetNonLoginTaskList 获取下发到指定网吧的任务列表(未登录)
GetNonLoginTaskList(ctx context.Context, in *model.GetTaskListIn) (out *model.GetTaskListOut, err error) GetNonLoginTaskList(ctx context.Context, in *model.GetTaskListIn) (out *model.GetTaskListOut, err error)
GetLoginTaskList(ctx context.Context, in *model.GetTaskListIn) (out *model.GetTaskListOut, err error) GetLoginTaskList(ctx context.Context, in *model.GetTaskListIn) (out *model.GetTaskListOut, err error)
GetTaskList(ctx context.Context, in *model.TaskListIn) (out *model.TaskListOut, err error) // GetTaskCompletedList 获取用户任务完成列表
GetTaskCompletedList(ctx context.Context, in *model.TaskListIn) (out *model.TaskListOut, err error)
GetSelectorList(ctx context.Context, in *model.SelectorIn) (out *[]model.SelectorOut, err error) GetSelectorList(ctx context.Context, in *model.SelectorIn) (out *[]model.SelectorOut, err error)
// GetTask 完成任务 // GetTask 完成任务
GetTask(ctx context.Context, in *model.GetTaskIn) (out *model.GetTaskOut, err error) GetTask(ctx context.Context, in *model.GetTaskIn) (out *model.GetTaskOut, err error)

View File

@ -46,7 +46,7 @@ func init() {
// 游戏列表 // 游戏列表
enforcer.AddPolicy("guest", "/x/game", "GET", "获取游戏列表") enforcer.AddPolicy("guest", "/x/game", "GET", "获取游戏列表")
enforcer.AddPolicy("guest", "/x/task/list", "GET", "获取游戏列表") enforcer.AddPolicy("guest", "/x/task/completed/list", "GET", "获取游戏列表")
} }
// 用户 // 用户
{ {