diff --git a/api/task/v1/task.go b/api/task/v1/task.go index 94d7a52..8183616 100644 --- a/api/task/v1/task.go +++ b/api/task/v1/task.go @@ -51,10 +51,8 @@ type GetLoginTaskListRes struct { } type ListReq struct { - g.Meta `path:"/task/list" method:"get" tags:"Task" summary:"(PC)任务列表"` - //StoreId int `json:"storeId" dc:"门店 id"` + g.Meta `path:"/task/completed/list" method:"get" tags:"Task" summary:"(PC)用户任务已完成列表"` StoreId int `json:"storeId" dc:"门店 id"` - Gid int `json:"gid" dc:"游戏唯一id"` Page int `json:"page" dc:"页数"` Size int `json:"size" dc:"条数"` } @@ -75,9 +73,11 @@ type SelectorRes struct { // GetTaskReq 添加任务记录 type GetTaskReq struct { - g.Meta `path:"/task/get" method:"post" tags:"Task" summary:"(PC)任务领取"` - TaskId int `json:"taskId" v:"required#任务id不能为空" dc:"任务id"` - StoreId int `json:"storeId" v:"required#门店 id不能为空" dc:"门店 id"` + g.Meta `path:"/task/get" method:"post" tags:"Task" summary:"(PC)任务领取"` + TaskId int `json:"taskId" 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 { diff --git a/internal/controller/task/task_v1_list.go b/internal/controller/task/task_v1_completed_list.go similarity index 70% rename from internal/controller/task/task_v1_list.go rename to internal/controller/task/task_v1_completed_list.go index 3ea86e2..189cf42 100644 --- a/internal/controller/task/task_v1_list.go +++ b/internal/controller/task/task_v1_completed_list.go @@ -10,7 +10,7 @@ import ( 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 { return nil, err diff --git a/internal/controller/task/task_v1_get_task.go b/internal/controller/task/task_v1_get_task.go index 3122e90..5a30cab 100644 --- a/internal/controller/task/task_v1_get_task.go +++ b/internal/controller/task/task_v1_get_task.go @@ -13,9 +13,11 @@ func (c *ControllerV1) GetTask(ctx context.Context, req *v1.GetTaskReq) (res *v1 userId := g.RequestFromCtx(ctx).GetCtxVar("id").Int() out, err := service.Task().GetTask(ctx, &model.GetTaskIn{ - TaskId: req.TaskId, - StoreId: req.StoreId, - UserId: userId, + TaskId: req.TaskId, + StoreId: req.StoreId, + UserId: userId, + GameId: req.GameId, + TaskName: req.TaskName, }) if err != nil { return nil, err diff --git a/internal/dao/internal/user_tasks.go b/internal/dao/internal/user_tasks.go index 302440b..257329e 100644 --- a/internal/dao/internal/user_tasks.go +++ b/internal/dao/internal/user_tasks.go @@ -31,6 +31,8 @@ type UserTasksColumns struct { CompletedAt string // 任务完成时间 DeletedAt string // 软删除时间戳 StoreId string // 门店 id + TaskName string // 任务名称 + GameId string // 游戏 id } // userTasksColumns holds the columns for the table user_tasks. @@ -45,6 +47,8 @@ var userTasksColumns = UserTasksColumns{ CompletedAt: "completed_at", DeletedAt: "deleted_at", StoreId: "store_id", + TaskName: "task_name", + GameId: "game_id", } // NewUserTasksDao creates and returns a new DAO object for table data access. diff --git a/internal/logic/task/task.go b/internal/logic/task/task.go index e2fd8ef..bdea58a 100644 --- a/internal/logic/task/task.go +++ b/internal/logic/task/task.go @@ -210,6 +210,7 @@ func (s *sTask) GetLoginTaskList(ctx context.Context, in *model.GetTaskListIn) ( QqNetbarTargetTime: task.TargetTimes, StartTime: task.CycleStart, EndTime: task.CycleEnd, + Status: task.Status, } data.UserTaskResult.Usertimes = task.UserTimes // 组装门店奖励数据 @@ -228,29 +229,27 @@ func (s *sTask) GetLoginTaskList(ctx context.Context, in *model.GetTaskListIn) ( }, 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 - m := dao.Tasks.Ctx(ctx) - - if in.StoreId != 0 { - m = m.Where(do.Tasks{StoreId: in.StoreId}) + if in.StoreId > 0 { + m = m.Where(dao.UserTasks.Columns().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 { - 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{ List: data, 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) { 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 { 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, Status: 1, SerialNumber: serialNumber, + TaskName: in.TaskName, + GameId: in.GameId, }) if err != nil { diff --git a/internal/model/do/user_tasks.go b/internal/model/do/user_tasks.go index 63e47a5..da69e39 100644 --- a/internal/model/do/user_tasks.go +++ b/internal/model/do/user_tasks.go @@ -22,4 +22,6 @@ type UserTasks struct { CompletedAt *gtime.Time // 任务完成时间 DeletedAt *gtime.Time // 软删除时间戳 StoreId interface{} // 门店 id + TaskName interface{} // 任务名称 + GameId interface{} // 游戏 id } diff --git a/internal/model/entity/user_tasks.go b/internal/model/entity/user_tasks.go index a088f29..3d4575d 100644 --- a/internal/model/entity/user_tasks.go +++ b/internal/model/entity/user_tasks.go @@ -20,4 +20,6 @@ type UserTasks struct { CompletedAt *gtime.Time `json:"completedAt" orm:"completed_at" description:"任务完成时间"` // 任务完成时间 DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳 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 } diff --git a/internal/model/game.go b/internal/model/game.go index 196dc54..728d635 100644 --- a/internal/model/game.go +++ b/internal/model/game.go @@ -1,6 +1,9 @@ package model +import "github.com/gogf/gf/v2/frame/g" + type Game struct { + g.Meta `orm:"table:games"` GameId int64 `json:"gameId" orm:"game_id"` // 腾讯游戏 id GameName string `json:"gameName" orm:"game_name"` // 游戏名称 GameCode string `json:"gameCode" orm:"game_code"` // 游戏代号 diff --git a/internal/model/store.go b/internal/model/store.go index fc0a3f2..2cb973c 100644 --- a/internal/model/store.go +++ b/internal/model/store.go @@ -14,7 +14,7 @@ type Store struct { ContactName string `json:"contactName" orm:"contact_name" dc:"联系人姓名"` ContactPhone string `json:"contactPhone" orm:"contact_phone" dc:"联系人电话"` 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 { diff --git a/internal/model/task.go b/internal/model/task.go index db0bd86..edc56d8 100644 --- a/internal/model/task.go +++ b/internal/model/task.go @@ -12,7 +12,7 @@ type Task struct { DeletedAt *gtime.Time `json:"-" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳 GameId int64 `json:"-" orm:"game_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 QqNetbarTaskRules string `json:"qqNetbarTaskRules" orm:"qq_netbar_task_rules" description:"任务规则"` // 任务规则 QqNetbarTaskMemo string `json:"qqNetbarTaskMemo" orm:"qq_netbar_task_memo" description:"任务描述"` // 任务描述 @@ -110,8 +110,9 @@ type SelectorOut struct { } type StoreData struct { - g.Meta `orm:"table:stores"` - Id int `json:"id" orm:"id"` - MerchantId int `json:"merchantId" orm:"merchant_id"` - StoreName string `json:"storeName" orm:"name"` + g.Meta `orm:"table:stores"` + Id int `json:"id" orm:"id"` + MerchantId int `json:"merchantId" orm:"merchant_id"` + StoreName string `json:"storeName" orm:"name"` + NetbarAccount string `json:"netbarAccount" orm:"netbar_account"` } diff --git a/internal/model/user.go b/internal/model/user.go index 8c2130c..c050002 100644 --- a/internal/model/user.go +++ b/internal/model/user.go @@ -1,6 +1,7 @@ package model import ( + "github.com/gogf/gf/v2/frame/g" "time" "github.com/gogf/gf/v2/os/gtime" @@ -8,6 +9,7 @@ import ( // User 用户信息 type User struct { + g.Meta `orm:"table:users"` Id int64 `json:"id" orm:"id,primary"` // 用户ID Username string `json:"username" orm:"username,not null"` // 用户名 Nickname string `json:"nickname" orm:"nickname"` // 昵称 diff --git a/internal/model/userTask.go b/internal/model/userTask.go index 502faae..f20a479 100644 --- a/internal/model/userTask.go +++ b/internal/model/userTask.go @@ -7,16 +7,21 @@ import ( type UserTask struct { g.Meta `orm:"table:task"` - Id int `orm:"column:id" json:"id"` // - UserId int `orm:"column:user_id" json:"userId"` // 用户 id - TaskId int `orm:"column:task_id" json:"taskId"` // 任务 id - Status int `orm:"column:status" json:"status"` // 状态 1:待完成 2:完成 - SerialNumber string `orm:"column:serial_number" json:"serialNumber"` // 流水号 - StoreId int `orm:"column:store_id" json:"storeId"` // 门店 id - CreatedAt *gtime.Time `orm:"column:created_at" json:"createdAt"` - UpdatedAt *gtime.Time `orm:"column:updated_at" json:"updatedAt"` - CompletedAT *gtime.Time `orm:"column:completed_at" json:"completedAt"` - DeletedAt *gtime.Time `orm:"column:deleted_at" json:"deletedAt"` + Id int64 `json:"id" orm:"id" description:"用户任务唯一标识符"` // 用户任务唯一标识符 + UserId int64 `json:"userId" orm:"user_id" description:"用户ID"` // 用户ID + TaskId string `json:"taskId" orm:"task_id" description:"腾讯任务ID"` // 腾讯任务ID + Status int `json:"status" orm:"status" description:"任务状态:1=进行中,2=已完成中,3=未完成"` // 任务状态:1=进行中,2=已完成中,3=未完成 + SerialNumber string `json:"serialNumber" orm:"serial_number" description:"流水号,确保用户任务唯一性"` // 流水号,确保用户任务唯一性 + CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"` // 创建时间 + UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间 + CompletedAt *gtime.Time `json:"completedAt" orm:"completed_at" description:"任务完成时间"` // 任务完成时间 + DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳 + 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 任务排行榜入参 @@ -53,9 +58,11 @@ type LoginUserRankingNum struct { // GetTaskIn 添加任务记录入参 type GetTaskIn struct { - TaskId int `json:"taskId"` - StoreId int `json:"storeId"` - UserId int `json:"userId"` + TaskId int `json:"taskId"` + StoreId int `json:"storeId"` + UserId int `json:"userId"` + TaskName string `json:"taskName"` + GameId int `json:"gid"` } type GetTaskOut struct { diff --git a/internal/service/task.go b/internal/service/task.go index ca395c1..abec86d 100644 --- a/internal/service/task.go +++ b/internal/service/task.go @@ -16,7 +16,8 @@ type ( // GetNonLoginTaskList 获取下发到指定网吧的任务列表(未登录) GetNonLoginTaskList(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) // GetTask 完成任务 GetTask(ctx context.Context, in *model.GetTaskIn) (out *model.GetTaskOut, err error) diff --git a/utility/myCasbin/casbin.go b/utility/myCasbin/casbin.go index 218086f..5e0326c 100644 --- a/utility/myCasbin/casbin.go +++ b/utility/myCasbin/casbin.go @@ -46,7 +46,7 @@ func init() { // 游戏列表 enforcer.AddPolicy("guest", "/x/game", "GET", "获取游戏列表") - enforcer.AddPolicy("guest", "/x/task/list", "GET", "获取游戏列表") + enforcer.AddPolicy("guest", "/x/task/completed/list", "GET", "获取游戏列表") } // 用户 {