新增了排名计算
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strconv"
|
||||
"time"
|
||||
"vote-api/api/dao"
|
||||
@@ -135,10 +136,15 @@ func (r *Article) GetArticle(c *gin.Context) {
|
||||
|
||||
// GetArticleRankList 获取文章排名列表
|
||||
func (r *Article) GetArticleRankList(c *gin.Context) {
|
||||
// 检测投票有效期
|
||||
systemTimeService := service.SystemTimeService{}
|
||||
isValid := systemTimeService.CheckVoteValidStatus()
|
||||
if isValid == false {
|
||||
// 获取排名开关限制
|
||||
systemConfigDao := dao.SystemConfigDao{}
|
||||
systemConfig, err := systemConfigDao.GetSystemConfigById(1)
|
||||
if err != nil {
|
||||
responses.OkWithData(nil, c)
|
||||
return
|
||||
}
|
||||
|
||||
if systemConfig.IsDisplayRank == 0 {
|
||||
responses.OkWithData(nil, c)
|
||||
return
|
||||
}
|
||||
@@ -153,6 +159,29 @@ func (r *Article) GetArticleRankList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 处理数据
|
||||
for i, article := range articles {
|
||||
// 判断最后两位票数是否相同
|
||||
if i == 14 {
|
||||
maps = make(map[string]interface{})
|
||||
maps["article_status"] = 1
|
||||
maps["vote_num"] = article.VoteNum
|
||||
results, err := articleDao.GetArticleList(maps)
|
||||
if err != nil {
|
||||
responses.OkWithData(nil, c)
|
||||
return
|
||||
}
|
||||
|
||||
for _, result := range results {
|
||||
if result.ArticleId == article.ArticleId {
|
||||
continue
|
||||
}
|
||||
|
||||
articles = append(articles, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetArticleListDto(articles)
|
||||
|
||||
@@ -170,6 +199,26 @@ func (r *Article) GetArticleRankList(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
// 根据 VoteNum 降序排序
|
||||
sort.SliceStable(g, func(i, j int) bool {
|
||||
return g[i].VoteNum > g[j].VoteNum
|
||||
})
|
||||
|
||||
// 计算排名
|
||||
var currentRank int
|
||||
for k, v := range g {
|
||||
if k == 0 {
|
||||
// 第一个元素,排名设为1
|
||||
currentRank = 1
|
||||
} else if g[k].VoteNum < g[k-1].VoteNum {
|
||||
currentRank = k + 1
|
||||
}
|
||||
|
||||
// 为当前元素设置 Rank
|
||||
rank := currentRank // 创建一个新的变量来保存排名
|
||||
v.Rank = &rank // 将新的变量的地址赋给 Rank
|
||||
}
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
|
||||
+53
-4
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strconv"
|
||||
"time"
|
||||
"vote-api/api/dao"
|
||||
@@ -135,10 +136,15 @@ func (r *Video) GetVideo(c *gin.Context) {
|
||||
|
||||
// GetVideoRankList 获取视频排名列表
|
||||
func (r *Video) GetVideoRankList(c *gin.Context) {
|
||||
// 检测投票状态
|
||||
systemTimeService := service.SystemTimeService{}
|
||||
isValid := systemTimeService.CheckVoteValidStatus()
|
||||
if isValid == false {
|
||||
// 获取排名开关限制
|
||||
systemConfigDao := dao.SystemConfigDao{}
|
||||
systemConfig, err := systemConfigDao.GetSystemConfigById(1)
|
||||
if err != nil {
|
||||
responses.OkWithData(nil, c)
|
||||
return
|
||||
}
|
||||
|
||||
if systemConfig.IsDisplayRank == 0 {
|
||||
responses.OkWithData(nil, c)
|
||||
return
|
||||
}
|
||||
@@ -153,6 +159,29 @@ func (r *Video) GetVideoRankList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 处理数据
|
||||
for i, video := range videos {
|
||||
// 判断最后两位票数是否相同
|
||||
if i == 14 {
|
||||
maps = make(map[string]interface{})
|
||||
maps["article_status"] = 1
|
||||
maps["vote_num"] = video.VoteNum
|
||||
results, err := videoDao.GetVideoList(maps)
|
||||
if err != nil {
|
||||
responses.OkWithData(nil, c)
|
||||
return
|
||||
}
|
||||
|
||||
for _, result := range results {
|
||||
if result.VideoId == video.VideoId {
|
||||
continue
|
||||
}
|
||||
|
||||
videos = append(videos, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetVideoListDto(videos)
|
||||
|
||||
@@ -170,6 +199,26 @@ func (r *Video) GetVideoRankList(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
// 根据 VoteNum 降序排序
|
||||
sort.SliceStable(g, func(i, j int) bool {
|
||||
return g[i].VoteNum > g[j].VoteNum
|
||||
})
|
||||
|
||||
// 计算排名
|
||||
var currentRank int
|
||||
for k, v := range g {
|
||||
if k == 0 {
|
||||
// 第一个元素,排名设为1
|
||||
currentRank = 1
|
||||
} else if g[k].VoteNum < g[k-1].VoteNum {
|
||||
currentRank = k + 1
|
||||
}
|
||||
|
||||
// 为当前元素设置 Rank
|
||||
rank := currentRank // 创建一个新的变量来保存排名
|
||||
v.Rank = &rank // 将新的变量的地址赋给 Rank
|
||||
}
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user