|
@@ -12,7 +12,8 @@ func (s *Server) RankList(c *gin.Context) {
|
|
|
db := s.DB()
|
|
db := s.DB()
|
|
|
userId := ctx.UserId()
|
|
userId := ctx.UserId()
|
|
|
|
|
|
|
|
- rankType := ctx.QueryString("type", "daily") // daily/weekly/monthly/total
|
|
|
|
|
|
|
+ rankType := ctx.QueryString("type", "task") // task任务排行/invite邀请排行
|
|
|
|
|
+ timeType := ctx.QueryString("timeType", "daily") // daily/weekly/monthly
|
|
|
limit := ctx.QueryInt64("limit", 50)
|
|
limit := ctx.QueryInt64("limit", 50)
|
|
|
|
|
|
|
|
if limit > 100 {
|
|
if limit > 100 {
|
|
@@ -20,101 +21,73 @@ func (s *Server) RankList(c *gin.Context) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
type RankInfo struct {
|
|
type RankInfo struct {
|
|
|
- Rank int `json:"rank"`
|
|
|
|
|
- UserId int64 `json:"userId"`
|
|
|
|
|
- Uid string `json:"uid"`
|
|
|
|
|
- Nickname string `json:"nickname"`
|
|
|
|
|
- Avatar string `json:"avatar"`
|
|
|
|
|
- Amount float64 `json:"amount"`
|
|
|
|
|
|
|
+ Rank int `json:"rank"`
|
|
|
|
|
+ UserId int64 `json:"userId"`
|
|
|
|
|
+ Uid string `json:"uid"`
|
|
|
|
|
+ Nickname string `json:"nickname"`
|
|
|
|
|
+ Avatar string `json:"avatar"`
|
|
|
|
|
+ Count int `json:"count"`
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
ranks := make([]*RankInfo, 0)
|
|
ranks := make([]*RankInfo, 0)
|
|
|
|
|
|
|
|
- // 根据类型查询不同的排行榜
|
|
|
|
|
- switch rankType {
|
|
|
|
|
|
|
+ // 时间条件
|
|
|
|
|
+ var timeCondition string
|
|
|
|
|
+ switch timeType {
|
|
|
case "daily":
|
|
case "daily":
|
|
|
- // 今日收益排行
|
|
|
|
|
- today := time.Now().Format("2006-01-02")
|
|
|
|
|
- db.Raw(`
|
|
|
|
|
- SELECT
|
|
|
|
|
- @rank := @rank + 1 as rank,
|
|
|
|
|
- u.id as user_id,
|
|
|
|
|
- u.uid,
|
|
|
|
|
- u.nickname,
|
|
|
|
|
- u.avatar,
|
|
|
|
|
- COALESCE(SUM(bl.amount), 0) as amount
|
|
|
|
|
- FROM dt_user u
|
|
|
|
|
- LEFT JOIN dt_balance_log bl ON u.id = bl.user_id
|
|
|
|
|
- AND bl.type IN (?, ?)
|
|
|
|
|
- AND DATE(FROM_UNIXTIME(bl.created_at)) = ?
|
|
|
|
|
- CROSS JOIN (SELECT @rank := 0) r
|
|
|
|
|
- WHERE u.status = 1
|
|
|
|
|
- GROUP BY u.id
|
|
|
|
|
- HAVING amount > 0
|
|
|
|
|
- ORDER BY amount DESC
|
|
|
|
|
- LIMIT ?
|
|
|
|
|
- `, entity.BalanceLogTypeTaskIncome, entity.BalanceLogTypeCommission, today, limit).Scan(&ranks)
|
|
|
|
|
-
|
|
|
|
|
|
|
+ timeCondition = "DATE(FROM_UNIXTIME(t.created_at)) = '" + time.Now().Format("2006-01-02") + "'"
|
|
|
case "weekly":
|
|
case "weekly":
|
|
|
- // 本周收益排行
|
|
|
|
|
weekStart := time.Now().AddDate(0, 0, -int(time.Now().Weekday())).Format("2006-01-02")
|
|
weekStart := time.Now().AddDate(0, 0, -int(time.Now().Weekday())).Format("2006-01-02")
|
|
|
|
|
+ timeCondition = "DATE(FROM_UNIXTIME(t.created_at)) >= '" + weekStart + "'"
|
|
|
|
|
+ case "monthly":
|
|
|
|
|
+ month := time.Now().Format("2006-01")
|
|
|
|
|
+ timeCondition = "DATE_FORMAT(FROM_UNIXTIME(t.created_at), '%Y-%m') = '" + month + "'"
|
|
|
|
|
+ default:
|
|
|
|
|
+ timeCondition = "DATE(FROM_UNIXTIME(t.created_at)) = '" + time.Now().Format("2006-01-02") + "'"
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 根据类型查询不同的排行榜
|
|
|
|
|
+ switch rankType {
|
|
|
|
|
+ case "task":
|
|
|
|
|
+ // 任务完成数量排行
|
|
|
db.Raw(`
|
|
db.Raw(`
|
|
|
SELECT
|
|
SELECT
|
|
|
- @rank := @rank + 1 as rank,
|
|
|
|
|
|
|
+ @rank := @rank + 1 as `+"`rank`"+`,
|
|
|
u.id as user_id,
|
|
u.id as user_id,
|
|
|
u.uid,
|
|
u.uid,
|
|
|
u.nickname,
|
|
u.nickname,
|
|
|
u.avatar,
|
|
u.avatar,
|
|
|
- COALESCE(SUM(bl.amount), 0) as amount
|
|
|
|
|
|
|
+ COUNT(t.id) as count
|
|
|
FROM dt_user u
|
|
FROM dt_user u
|
|
|
- LEFT JOIN dt_balance_log bl ON u.id = bl.user_id
|
|
|
|
|
- AND bl.type IN (?, ?)
|
|
|
|
|
- AND DATE(FROM_UNIXTIME(bl.created_at)) >= ?
|
|
|
|
|
|
|
+ LEFT JOIN dt_user_task t ON u.id = t.user_id
|
|
|
|
|
+ AND t.status = ?
|
|
|
|
|
+ AND `+timeCondition+`
|
|
|
CROSS JOIN (SELECT @rank := 0) r
|
|
CROSS JOIN (SELECT @rank := 0) r
|
|
|
WHERE u.status = 1
|
|
WHERE u.status = 1
|
|
|
GROUP BY u.id
|
|
GROUP BY u.id
|
|
|
- HAVING amount > 0
|
|
|
|
|
- ORDER BY amount DESC
|
|
|
|
|
|
|
+ HAVING count > 0
|
|
|
|
|
+ ORDER BY count DESC
|
|
|
LIMIT ?
|
|
LIMIT ?
|
|
|
- `, entity.BalanceLogTypeTaskIncome, entity.BalanceLogTypeCommission, weekStart, limit).Scan(&ranks)
|
|
|
|
|
|
|
+ `, entity.UserTaskStatusCompleted, limit).Scan(&ranks)
|
|
|
|
|
|
|
|
- case "monthly":
|
|
|
|
|
- // 本月收益排行
|
|
|
|
|
- month := time.Now().Format("2006-01")
|
|
|
|
|
|
|
+ case "invite":
|
|
|
|
|
+ // 邀请人数排行
|
|
|
db.Raw(`
|
|
db.Raw(`
|
|
|
SELECT
|
|
SELECT
|
|
|
- @rank := @rank + 1 as rank,
|
|
|
|
|
|
|
+ @rank := @rank + 1 as `+"`rank`"+`,
|
|
|
u.id as user_id,
|
|
u.id as user_id,
|
|
|
u.uid,
|
|
u.uid,
|
|
|
u.nickname,
|
|
u.nickname,
|
|
|
u.avatar,
|
|
u.avatar,
|
|
|
- COALESCE(SUM(bl.amount), 0) as amount
|
|
|
|
|
|
|
+ COUNT(t.id) as count
|
|
|
FROM dt_user u
|
|
FROM dt_user u
|
|
|
- LEFT JOIN dt_balance_log bl ON u.id = bl.user_id
|
|
|
|
|
- AND bl.type IN (?, ?)
|
|
|
|
|
- AND DATE_FORMAT(FROM_UNIXTIME(bl.created_at), '%Y-%m') = ?
|
|
|
|
|
|
|
+ LEFT JOIN dt_user t ON u.id = t.invite_user_id
|
|
|
|
|
+ AND `+timeCondition+`
|
|
|
CROSS JOIN (SELECT @rank := 0) r
|
|
CROSS JOIN (SELECT @rank := 0) r
|
|
|
WHERE u.status = 1
|
|
WHERE u.status = 1
|
|
|
GROUP BY u.id
|
|
GROUP BY u.id
|
|
|
- HAVING amount > 0
|
|
|
|
|
- ORDER BY amount DESC
|
|
|
|
|
- LIMIT ?
|
|
|
|
|
- `, entity.BalanceLogTypeTaskIncome, entity.BalanceLogTypeCommission, month, limit).Scan(&ranks)
|
|
|
|
|
-
|
|
|
|
|
- case "total":
|
|
|
|
|
- // 累计收益排行
|
|
|
|
|
- db.Raw(`
|
|
|
|
|
- SELECT
|
|
|
|
|
- @rank := @rank + 1 as rank,
|
|
|
|
|
- id as user_id,
|
|
|
|
|
- uid,
|
|
|
|
|
- nickname,
|
|
|
|
|
- avatar,
|
|
|
|
|
- total_income as amount
|
|
|
|
|
- FROM dt_user
|
|
|
|
|
- CROSS JOIN (SELECT @rank := 0) r
|
|
|
|
|
- WHERE status = 1 AND total_income > 0
|
|
|
|
|
- ORDER BY total_income DESC
|
|
|
|
|
|
|
+ HAVING count > 0
|
|
|
|
|
+ ORDER BY count DESC
|
|
|
LIMIT ?
|
|
LIMIT ?
|
|
|
`, limit).Scan(&ranks)
|
|
`, limit).Scan(&ranks)
|
|
|
|
|
|
|
@@ -142,7 +115,7 @@ func (s *Server) RankList(c *gin.Context) {
|
|
|
Uid: user.Uid,
|
|
Uid: user.Uid,
|
|
|
Nickname: user.Nickname,
|
|
Nickname: user.Nickname,
|
|
|
Avatar: user.Avatar,
|
|
Avatar: user.Avatar,
|
|
|
- Amount: user.TotalIncome,
|
|
|
|
|
|
|
+ Count: 0,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|