新增了排名计算

This commit is contained in:
2024-09-19 11:40:24 +08:00
parent ade641dddf
commit e83b15b03a
4 changed files with 237 additions and 8 deletions
+53 -4
View File
@@ -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
View File
@@ -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)
}