diff --git a/api/task/v1/task.go b/api/task/v1/task.go index 20f140e..ee04d45 100644 --- a/api/task/v1/task.go +++ b/api/task/v1/task.go @@ -13,6 +13,8 @@ type RankingReq struct { } type RankingRes struct { - List interface{} `json:"list"` - Total int `json:"total"` + List interface{} `json:"list"` + Total int `json:"total"` + CompletedNum int `json:"completedNum"` + RankingNum int `json:"rankingNum"` } diff --git a/internal/controller/task/task_v1_ranking.go b/internal/controller/task/task_v1_ranking.go index f91661f..f8cb751 100644 --- a/internal/controller/task/task_v1_ranking.go +++ b/internal/controller/task/task_v1_ranking.go @@ -24,7 +24,9 @@ func (c *ControllerV1) Ranking(ctx context.Context, req *v1.RankingReq) (res *v1 return nil, err } return &v1.RankingRes{ - List: out.List, - Total: out.Total, + List: out.List, + Total: out.Total, + CompletedNum: out.CompletedNum, + RankingNum: out.RankingNum, }, nil } diff --git a/internal/logic/task/task.go b/internal/logic/task/task.go index a8bfe8e..5e40ecc 100644 --- a/internal/logic/task/task.go +++ b/internal/logic/task/task.go @@ -8,6 +8,8 @@ import ( "server/internal/service" "server/utility/ecode" "sort" + "strconv" + "strings" "time" ) @@ -81,26 +83,28 @@ func (s *sTask) UserTaskRankingList(ctx context.Context, in *model.UserTaskRanki // SELECT `uid`,`nickname` FROM `user` ORDER BY `uid` asc err = m.Page(in.Page, in.Size).LeftJoin(dao.Users.Table(), fmt.Sprintf("`%s`.`id` = `%s`.`user_id`", dao.Users.Table(), dao.UserTasks.Table())). Fields("username,avatar,count(*) num").Where(dao.UserTasks.Columns().Status, 3). - WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc(dao.UserTasks.Columns().CompletedAt).Group("user_id"). + WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc("num").OrderDesc("username").Group("user_id"). ScanAndCount(&list, &total, false) if err != nil { return nil, ecode.Fail.Sub("查询排行榜失败") } // 判断登录查询当前任务完成数量,排名 - var completedDay, rankingDay int + var rankingNum int var loginUserRanking []model.LoginUserRanking + var loginUserRankingNum model.LoginUserRankingNum if in.OperatorId != 0 { err := dao.UserTasks.Ctx(ctx).Fields("count(*) num").Where(dao.UserTasks.Columns().UserId, in.OperatorId).Where(dao.UserTasks.Columns().Status, 3). - WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc(dao.UserTasks.Columns().CompletedAt).Group("user_id"). - Scan(&completedDay) + WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).Group("user_id"). + Scan(&loginUserRankingNum) if err != nil { return nil, ecode.Fail.Sub("查询当前登录用户完成数失败") } - err = dao.UserTasks.Ctx(ctx).Fields("user_id,count(*) num").Where(dao.UserTasks.Columns().Status, 3). - WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc(dao.UserTasks.Columns().CompletedAt).Group("user_id"). + err = dao.UserTasks.Ctx(ctx).LeftJoin(dao.Users.Table(), fmt.Sprintf("`%s`.`id` = `%s`.`user_id`", dao.Users.Table(), dao.UserTasks.Table())). + Fields("username,count(*) num").Where(dao.UserTasks.Columns().Status, 3). + WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc("num").OrderDesc("username").Group("user_id"). Scan(&loginUserRanking) if err != nil { @@ -108,22 +112,23 @@ func (s *sTask) UserTaskRankingList(ctx context.Context, in *model.UserTaskRanki } // 查找当前登录用户排名 - index := sort.Search(len(loginUserRanking), func(i int) bool { - return loginUserRanking[i].Num >= completedDay + //index := sort.Search(len(loginUserRanking), func(i int) bool { + // return loginUserRanking[i].Num <= loginUserRankingNum.Num + //}) + + index, flag := sort.Find(len(loginUserRanking), func(i int) int { + return strings.Compare(strconv.Itoa(loginUserRanking[i].Num), strconv.Itoa(loginUserRankingNum.Num)) }) - //for index, ranking := range loginUserRanking { - // if ranking.UserId == in.OperatorId { - // rankingDay = index + 1 - // break - // } - //} - rankingDay = index + 1 + + if flag { + rankingNum = index + 1 + } } return &model.UserTaskRankingOut{ List: list, Total: total, - CompletedDay: completedDay, - RankingDay: rankingDay, + CompletedNum: loginUserRankingNum.Num, + RankingNum: rankingNum, }, nil } diff --git a/internal/model/userTask.go b/internal/model/userTask.go index be828a6..677d417 100644 --- a/internal/model/userTask.go +++ b/internal/model/userTask.go @@ -32,8 +32,8 @@ type UserTaskRankingIn struct { type UserTaskRankingOut struct { List []UserTaskRankingArgs Total int - CompletedDay int - RankingDay int + CompletedNum int + RankingNum int } type UserTaskRankingArgs struct { @@ -43,6 +43,10 @@ type UserTaskRankingArgs struct { } type LoginUserRanking struct { - UserId int `orm:"user_id" json:"user_id"` - Num int `orm:"num" json:"num"` + UserName string `orm:"username" json:"username"` + Num int `orm:"num" json:"num"` +} + +type LoginUserRankingNum struct { + Num int `orm:"num" json:"num"` }