163 lines
5.4 KiB
Go
163 lines
5.4 KiB
Go
package job
|
||
|
||
import (
|
||
"91porn-server/common"
|
||
"91porn-server/common/aiService"
|
||
"91porn-server/common/log"
|
||
mediaService "91porn-server/common/media"
|
||
"91porn-server/common/mediaCenter"
|
||
"91porn-server/models/commod"
|
||
"91porn-server/skd/job/checkin"
|
||
"91porn-server/skd/job/dailyAdverCalc"
|
||
"91porn-server/skd/job/dataclean"
|
||
"91porn-server/skd/job/hotvalue"
|
||
"91porn-server/skd/job/shortrecommend"
|
||
"91porn-server/skd/job/user"
|
||
"91porn-server/skd/service"
|
||
"91porn-server/skd/service/contentreviewser"
|
||
"91porn-server/skd/service/export_task"
|
||
"91porn-server/skd/skdg"
|
||
"context"
|
||
"time"
|
||
)
|
||
|
||
// start 定时任务 开启
|
||
func start() {
|
||
_, _ = statCron.AddFunc("0 0 0 * * ?", func() { //每天0点执行一次
|
||
// 重置预售卡预付权益
|
||
user.ResetLimit()
|
||
})
|
||
if skdg.Conf.ShortRecommendEnabled() {
|
||
// 定时检查队列完整性;当天健康时只做一次Redis脚本,异常时自动重建。
|
||
if _, err := statCron.AddFunc(skdg.Conf.ShortRecommendCron(), shortrecommend.Run); err != nil {
|
||
log.Error("register short recommend cron failed",
|
||
log.E(err), log.Any("cron", skdg.Conf.ShortRecommendCron()))
|
||
}
|
||
// 启动时补建当日队列;分布式锁保证多实例只执行一次。
|
||
common.Go(shortrecommend.Run)
|
||
}
|
||
_, _ = statCron.AddFunc("0 0/5 * * * ?", func() { //每5分钟执行一次统计任务
|
||
runStat()
|
||
})
|
||
_, _ = statCron.AddFunc("@every 5m", func() { //每5分钟执行一次数据同步任务
|
||
runSync()
|
||
})
|
||
_, _ = statCron.AddFunc("0 0/5 * * * ?", func() { //每5分钟执行一次sql折叠任务
|
||
runSyncSqlcollaspe()
|
||
})
|
||
// _, _ = statCron.AddFunc("0 0/5 * * * ?", func() { //每5分钟刷新一下排行榜
|
||
// runRankStat()
|
||
// })
|
||
// _, _ = statCron.AddFunc("0 0/1 * * * ?", func() { //每1分钟执行一次统计任务
|
||
// runPromoteStat()
|
||
// })
|
||
// _, _ = statCron.AddFunc("0 0 0/1 * * ?", func() { //每1个小时增加内部人员推广人数
|
||
// runInnerFakePromote()
|
||
// })
|
||
// _, _ = statCron.AddFunc("0 0/2 * * * ?", func() { //每2分钟生成备用推广码
|
||
// runMakePromotionCode()
|
||
// })
|
||
// _, _ = statCron.AddFunc("0 0 0,1,3,6,7,9,10,12,15,20,21,23 * * ?", func() { //每天11,15,18,23点执行一次消息任务
|
||
// service.GoldEggLuckyRunSync()
|
||
// })
|
||
_, _ = statCron.AddFunc("0 0 4 * * ?", func() { //每天凌晨4点执行一次
|
||
dataclean.RunSync()
|
||
})
|
||
|
||
_, _ = statCron.AddFunc("0/10 * * * * ?", func() { //每10秒执行一次
|
||
service.VidTimeOnline()
|
||
})
|
||
|
||
common.Go(func() {
|
||
hotvalue.ResetHot()
|
||
})
|
||
_, _ = statCron.AddFunc("0 0 6 * * ?", func() { //每天凌晨6点执行一次
|
||
hotvalue.ResetHot()
|
||
})
|
||
|
||
// 每10秒检测需要导出的任务列表
|
||
_, _ = statCron.AddFunc("0/10 * * * * ?", func() { //每10秒执行一次
|
||
export_task.ExecExportTask()
|
||
})
|
||
// 每3秒检测有无待执行的内容审查任务(同一时刻仅 1 个任务运行)
|
||
_, _ = statCron.AddFunc("0/3 * * * * ?", func() {
|
||
contentreviewser.TryRunPendingTask()
|
||
})
|
||
|
||
_, _ = statCron.AddFunc("0 * * * * ?", func() { // 每分钟检查是否需要发送 IM 广告通知
|
||
IMAdNotifyOnline()
|
||
})
|
||
|
||
// 每 5 秒检查 web 端是否发起了 IM 用户同步请求
|
||
_, _ = statCron.AddFunc("0/5 * * * * ?", func() {
|
||
RunPendingSyncIMUsers()
|
||
})
|
||
// 同步acg订阅的动漫
|
||
_, _ = statCron.AddFunc("0 0/30 * * * ?", func() { //每30分钟执行一次
|
||
ms := mediaService.NewMediaSync(skdg.Redis, mediaCenter.NewMediaCenterService(mediaCenter.Config{
|
||
Url: skdg.Conf.MediaResourcesCfg.UploadMediaUrl,
|
||
ProId: skdg.Conf.MediaResourcesCfg.ProId,
|
||
Secret: skdg.Conf.MediaResourcesCfg.AppSecret,
|
||
}))
|
||
ms.SyncAll("系统")
|
||
})
|
||
common.Go(func() {
|
||
err := aiService.NewAiService(
|
||
aiService.AppId(int(commod.KFK_APPID)),
|
||
aiService.Url(skdg.Conf.Url.AiServer),
|
||
aiService.Redis(skdg.Redis),
|
||
).Sync()
|
||
if err != nil {
|
||
log.Error("Sync AI Template fail")
|
||
}
|
||
})
|
||
// 定期同步ai服务里的模版
|
||
_, _ = statCron.AddFunc("0 0/10 * * * ?", func() { //每10分钟执行一次
|
||
err := aiService.NewAiService(
|
||
aiService.AppId(int(commod.KFK_APPID)),
|
||
aiService.Url(skdg.Conf.Url.AiServer),
|
||
aiService.Redis(skdg.Redis),
|
||
).Sync()
|
||
if err != nil {
|
||
log.Error("Sync AI Template fail")
|
||
}
|
||
})
|
||
_, _ = statCron.AddFunc("0/2 * * * * ?", func() { //每2秒检查签到奖励视频切片状态
|
||
checkin.VideoCheckRS()
|
||
})
|
||
_, _ = statCron.AddFunc("0 0/1 * * * ?", func() { // 每分钟提交 H265 等待队列
|
||
SubmitH265TranscodingQueue()
|
||
})
|
||
_, _ = statCron.AddFunc("0 0/1 * * * ?", func() { // 每分钟轮询 H265 转码结果
|
||
CheckH265TranscodingResults()
|
||
})
|
||
_, _ = statCron.AddFunc("0 0 0/1 * * ?", func() { // 每小时保障首页重点视频的 H265 资源
|
||
ScanHomeH265TranscodingQueue()
|
||
})
|
||
common.Go(func() {
|
||
ScanHomeH265TranscodingQueue()
|
||
SubmitH265TranscodingQueue()
|
||
CheckH265TranscodingResults()
|
||
})
|
||
spec := "0 0/30 * * * ?"
|
||
if skdg.Conf.Base.Env == "test" {
|
||
spec = "0 0/1 * * * ?" // 测试环境3分钟刷新一次
|
||
}
|
||
|
||
_, _ = statCron.AddFunc(spec, func() { //每30分钟执行一次
|
||
now := time.Now()
|
||
if now.Hour() == 0 || now.Hour() == 1 || now.Hour() == 2 {
|
||
yesterday := now.AddDate(0, 0, -1)
|
||
if err := dailyAdverCalc.CalcRetention(context.Background(), yesterday); err != nil {
|
||
log.Error("CalcRetention failed", log.Any("error", err))
|
||
}
|
||
}
|
||
// 当天的数据,每小时计算一次,确保及时更新看板
|
||
if err := dailyAdverCalc.CalcRetention(context.Background(), now); err != nil {
|
||
log.Error("CalcRetention failed", log.Any("error", err))
|
||
}
|
||
|
||
})
|
||
statCron.Start()
|
||
}
|