新增了排名计算
This commit is contained in:
parent
ade641dddf
commit
e83b15b03a
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
99
api/dao/SystemConfig.go
Normal file
99
api/dao/SystemConfig.go
Normal file
@ -0,0 +1,99 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"vote-api/api/model"
|
||||
"vote-api/global"
|
||||
)
|
||||
|
||||
type SystemConfigDao struct {
|
||||
}
|
||||
|
||||
// GetSystemConfigById 获取数据-id
|
||||
func (r *SystemConfigDao) GetSystemConfigById(ConfigId int64) (m *model.SystemConfig, err error) {
|
||||
err = global.Db.First(&m, ConfigId).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetSystemConfigPreloadById 获取数据-加载全部关联-id
|
||||
func (r *SystemConfigDao) GetSystemConfigPreloadById(ConfigId int64) (m *model.SystemConfig, err error) {
|
||||
err = global.Db.Preload(clause.Associations).First(&m, ConfigId).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// DeleteSystemConfig 删除
|
||||
func (r *SystemConfigDao) DeleteSystemConfig(tx *gorm.DB, maps interface{}) error {
|
||||
err := tx.Where(maps).Delete(&model.SystemConfig{}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteSystemConfigById 删除-id
|
||||
func (r *SystemConfigDao) DeleteSystemConfigById(tx *gorm.DB, ConfigId int64) error {
|
||||
if err := tx.Delete(&model.SystemConfig{}, ConfigId).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// EditSystemConfig 修改
|
||||
func (r *SystemConfigDao) EditSystemConfig(tx *gorm.DB, maps interface{}, data interface{}) error {
|
||||
err := tx.Model(&model.SystemConfig{}).Where(maps).Updates(data).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// EditSystemConfigById 修改-id
|
||||
func (r *SystemConfigDao) EditSystemConfigById(tx *gorm.DB, ConfigId int64, data interface{}) error {
|
||||
err := tx.Model(&model.SystemConfig{}).Where("config_id = ?", ConfigId).Updates(data).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetSystemConfigList 获取列表
|
||||
func (r *SystemConfigDao) GetSystemConfigList(maps interface{}) (m []*model.SystemConfig, err error) {
|
||||
err = global.Db.Where(maps).Find(&m).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GetSystemConfigCount 获取数量
|
||||
func (r *SystemConfigDao) GetSystemConfigCount(maps interface{}) (total int64, err error) {
|
||||
err = global.Db.Model(&model.SystemConfig{}).Where(maps).Count(&total).Error
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return total, nil
|
||||
}
|
||||
|
||||
// GetSystemConfigListRand 获取列表-随机
|
||||
func (r *SystemConfigDao) GetSystemConfigListRand(maps interface{}, limit int) (m []*model.SystemConfig, err error) {
|
||||
err = global.Db.Where(maps).Order("rand()").Limit(limit).Find(&m).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// AddSystemConfig 新增
|
||||
func (r *SystemConfigDao) AddSystemConfig(tx *gorm.DB, model *model.SystemConfig) (*model.SystemConfig, error) {
|
||||
if err := tx.Create(model).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return model, nil
|
||||
}
|
||||
32
api/model/SystemConfig.go
Normal file
32
api/model/SystemConfig.go
Normal file
@ -0,0 +1,32 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
"vote-api/global"
|
||||
)
|
||||
|
||||
// SystemConfig 配置-系统配置
|
||||
type SystemConfig struct {
|
||||
ConfigId int64 `gorm:"column:config_id;type:bigint(19);primary_key;comment:主键id" json:"config_id"`
|
||||
IsDisplayRank int `gorm:"column:is_display_rank;type:tinyint(1);default:1;comment:是否展示排名(0:否 1:是)" json:"is_display_rank"`
|
||||
Model
|
||||
}
|
||||
|
||||
func (m *SystemConfig) TableName() string {
|
||||
return "system_config"
|
||||
}
|
||||
|
||||
func (m *SystemConfig) BeforeCreate(tx *gorm.DB) error {
|
||||
if m.ConfigId == 0 {
|
||||
m.ConfigId = global.Snowflake.Generate().Int64()
|
||||
}
|
||||
|
||||
m.CreatedAt = LocalTime(time.Now())
|
||||
tx.Statement.SetColumn("CreatedAt", m.CreatedAt)
|
||||
|
||||
m.UpdatedAt = LocalTime(time.Now())
|
||||
tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt)
|
||||
|
||||
return nil
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user