From 4f9dc24100234bb1c27aed1e3f9792c05da6a88b Mon Sep 17 00:00:00 2001 From: chy <2463300564@qq.com> Date: Tue, 10 Jun 2025 10:56:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9F=A5=E8=AF=A2=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E7=99=BB=E5=BD=95=E7=94=A8=E6=88=B7=E6=8E=92=E5=90=8D?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/task/v1/task.go | 6 ++-- internal/controller/task/task_v1_ranking.go | 6 ++-- internal/logic/task/task.go | 39 ++++++++++++--------- internal/model/userTask.go | 12 ++++--- 4 files changed, 38 insertions(+), 25 deletions(-) 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"` }