104 lines
2.8 KiB
Go
104 lines
2.8 KiB
Go
|
package task
|
|||
|
|
|||
|
import (
|
|||
|
"github.com/eigeen/furryboard/spider-scheduler/pkg/dao"
|
|||
|
"github.com/eigeen/furryboard/spider-scheduler/pkg/dao/model"
|
|||
|
"github.com/eigeen/furryboard/spider-scheduler/pkg/exception"
|
|||
|
"github.com/eigeen/furryboard/spider-scheduler/pkg/log"
|
|||
|
"github.com/eigeen/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 := 32
|
|||
|
maxPage := int(math.Ceil(float64(count) / float64(pageSize)))
|
|||
|
for page := 0; page <= maxPage; page++ {
|
|||
|
// 获取目标用户列表(分页)
|
|||
|
users, err := logic.GetUsers(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)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
func UpdateFans() {
|
|||
|
// TODO: 与UpdateUserInfo有大量重复,可抽离复用代码
|
|||
|
// 预查询数量
|
|||
|
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 := 4
|
|||
|
maxPage := int(math.Ceil(float64(count) / float64(pageSize)))
|
|||
|
for page := 0; page <= maxPage; page++ {
|
|||
|
// 获取目标用户列表(分页)
|
|||
|
users, err := logic.GetUsers(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)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
func UpdateFansAndInfo() {
|
|||
|
|
|||
|
}
|