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