修改查询当前登录用户排名接口
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user