修改查询当前登录用户排名接口

This commit is contained in:
chy
2025-06-10 10:56:17 +08:00
parent 81c2769b92
commit 4f9dc24100
4 changed files with 38 additions and 25 deletions

View File

@ -15,4 +15,6 @@ type RankingReq struct {
type RankingRes struct { type RankingRes struct {
List interface{} `json:"list"` List interface{} `json:"list"`
Total int `json:"total"` Total int `json:"total"`
CompletedNum int `json:"completedNum"`
RankingNum int `json:"rankingNum"`
} }

View File

@ -26,5 +26,7 @@ func (c *ControllerV1) Ranking(ctx context.Context, req *v1.RankingReq) (res *v1
return &v1.RankingRes{ return &v1.RankingRes{
List: out.List, List: out.List,
Total: out.Total, Total: out.Total,
CompletedNum: out.CompletedNum,
RankingNum: out.RankingNum,
}, nil }, nil
} }

View File

@ -8,6 +8,8 @@ import (
"server/internal/service" "server/internal/service"
"server/utility/ecode" "server/utility/ecode"
"sort" "sort"
"strconv"
"strings"
"time" "time"
) )
@ -81,26 +83,28 @@ func (s *sTask) UserTaskRankingList(ctx context.Context, in *model.UserTaskRanki
// SELECT `uid`,`nickname` FROM `user` ORDER BY `uid` asc // 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())). 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). 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) ScanAndCount(&list, &total, false)
if err != nil { if err != nil {
return nil, ecode.Fail.Sub("查询排行榜失败") return nil, ecode.Fail.Sub("查询排行榜失败")
} }
// 判断登录查询当前任务完成数量,排名 // 判断登录查询当前任务完成数量,排名
var completedDay, rankingDay int var rankingNum int
var loginUserRanking []model.LoginUserRanking var loginUserRanking []model.LoginUserRanking
var loginUserRankingNum model.LoginUserRankingNum
if in.OperatorId != 0 { 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). 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"). WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).Group("user_id").
Scan(&completedDay) Scan(&loginUserRankingNum)
if err != nil { if err != nil {
return nil, ecode.Fail.Sub("查询当前登录用户完成数失败") return nil, ecode.Fail.Sub("查询当前登录用户完成数失败")
} }
err = dao.UserTasks.Ctx(ctx).Fields("user_id,count(*) num").Where(dao.UserTasks.Columns().Status, 3). err = dao.UserTasks.Ctx(ctx).LeftJoin(dao.Users.Table(), fmt.Sprintf("`%s`.`id` = `%s`.`user_id`", dao.Users.Table(), dao.UserTasks.Table())).
WhereBetween(dao.UserTasks.Columns().CompletedAt, start, end).OrderDesc(dao.UserTasks.Columns().CompletedAt).Group("user_id"). 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) Scan(&loginUserRanking)
if err != nil { 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 { //index := sort.Search(len(loginUserRanking), func(i int) bool {
return loginUserRanking[i].Num >= completedDay // 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 { if flag {
// rankingDay = index + 1 rankingNum = index + 1
// break }
// }
//}
rankingDay = index + 1
} }
return &model.UserTaskRankingOut{ return &model.UserTaskRankingOut{
List: list, List: list,
Total: total, Total: total,
CompletedDay: completedDay, CompletedNum: loginUserRankingNum.Num,
RankingDay: rankingDay, RankingNum: rankingNum,
}, nil }, nil
} }

View File

@ -32,8 +32,8 @@ type UserTaskRankingIn struct {
type UserTaskRankingOut struct { type UserTaskRankingOut struct {
List []UserTaskRankingArgs List []UserTaskRankingArgs
Total int Total int
CompletedDay int CompletedNum int
RankingDay int RankingNum int
} }
type UserTaskRankingArgs struct { type UserTaskRankingArgs struct {
@ -43,6 +43,10 @@ type UserTaskRankingArgs struct {
} }
type LoginUserRanking struct { type LoginUserRanking struct {
UserId int `orm:"user_id" json:"user_id"` UserName string `orm:"username" json:"username"`
Num int `orm:"num" json:"num"`
}
type LoginUserRankingNum struct {
Num int `orm:"num" json:"num"` Num int `orm:"num" json:"num"`
} }