102 lines
2.9 KiB
Go
102 lines
2.9 KiB
Go
package task
|
||
|
||
import (
|
||
"github.com/furryboard/spider-scheduler/pkg/dao"
|
||
"github.com/furryboard/spider-scheduler/pkg/dao/model"
|
||
"github.com/furryboard/spider-scheduler/pkg/exception"
|
||
"github.com/furryboard/spider-scheduler/pkg/log"
|
||
"github.com/furryboard/spider-scheduler/pkg/logic"
|
||
"math"
|
||
"time"
|
||
)
|
||
|
||
// UpdateUserInfo 更新数据库内用户信息
|
||
// 会对原始表进行更改,并将更改记录写入changelogs
|
||
func UpdateUserInfo() {
|
||
// 预查询数量
|
||
// TODO: 预查询数量和分页策略功能可复用
|
||
var count int64
|
||
tx := dao.DB().Model(&model.Furry{}).Count(&count)
|
||
if tx.Error != nil {
|
||
err := exception.ErrFetchFurries("获取furries数量失败:" + tx.Error.Error())
|
||
log.Logger().Errorf("获取furries数量失败:%s", err)
|
||
return
|
||
}
|
||
|
||
pageSize := 1
|
||
maxPage := int(math.Ceil(float64(count) / float64(pageSize)))
|
||
for page := 0; page <= maxPage; page++ {
|
||
// 获取目标用户列表(分页)
|
||
users, err := logic.GetValidUsers(page, pageSize)
|
||
if err != nil {
|
||
log.Logger().Errorf("获取用户列表时发生错误:%s", err)
|
||
continue
|
||
}
|
||
// 已获取完毕
|
||
if users == nil {
|
||
return
|
||
}
|
||
// 抽取uid列表
|
||
var uids []uint
|
||
for _, user := range users {
|
||
uids = append(uids, user.UID)
|
||
}
|
||
// 通过API获取用户信息
|
||
infos := logic.BatchGetUserInfo(&uids)
|
||
|
||
// 检查更新内容,更新furries表,插入changelogs(使用事务)
|
||
c, err := logic.UpdateUserInfo(users, infos)
|
||
if err != nil {
|
||
log.Logger().Errorf("更新数据时发生错误:%s", err)
|
||
continue
|
||
}
|
||
log.Logger().Infof("成功更新了%d个用户信息", c)
|
||
// delay
|
||
time.Sleep(2 * time.Second)
|
||
}
|
||
}
|
||
|
||
// UpdateFans 更新粉丝数,将记录写入表中,增量记录
|
||
func UpdateFans() {
|
||
// TODO: 与UpdateUserInfo有大量重复,可抽离复用代码
|
||
// 预查询数量
|
||
var count int64
|
||
//tx := dao.DB().Model(&model.Furry{}).Where("status = 0").Count(&count)
|
||
tx := dao.DB().Model(&model.Furry{}).Count(&count)
|
||
if tx.Error != nil {
|
||
err := exception.ErrFetchFurries("获取furries数量失败:" + tx.Error.Error())
|
||
log.Logger().Errorf("获取furries数量失败:%s", err)
|
||
return
|
||
}
|
||
|
||
pageSize := 4
|
||
maxPage := int(math.Ceil(float64(count) / float64(pageSize)))
|
||
for page := 0; page <= maxPage; page++ {
|
||
// 获取目标用户列表(分页)
|
||
users, err := logic.GetValidUsers(page, pageSize)
|
||
if err != nil {
|
||
log.Logger().Errorf("获取用户列表时发生错误:%s", err)
|
||
continue
|
||
}
|
||
// 已获取完毕
|
||
if users == nil {
|
||
return
|
||
}
|
||
// 抽取uid列表
|
||
var uids []uint
|
||
for _, user := range users {
|
||
uids = append(uids, user.UID)
|
||
}
|
||
// 通过API获取用户统计信息
|
||
stats := logic.BatchGetUserStat(&uids)
|
||
// 插入表
|
||
c, err := logic.UpdateFansToDB(stats)
|
||
if err != nil {
|
||
log.Logger().Errorf("更新粉丝数量时发生错误:%s", err)
|
||
return
|
||
}
|
||
log.Logger().Infof("成功更新了%d个用户粉丝数", c)
|
||
time.Sleep(2 * time.Second)
|
||
}
|
||
}
|