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

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

@ -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"`
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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"`
}