package skd import ( "context" "math/rand" "time" "videoweb/pub/common/log" "videoweb/web/service/srv_aicomment" "videoweb/web/service/srv_mediaresource" job "videoweb/web/skd/job/reportdata" seopushjob "videoweb/web/skd/job/seopush" "videoweb/web/skd/job/vipexpiry" "videoweb/web/skd/playletwatermark" "videoweb/web/skd/videosync" "github.com/robfig/cron/v3" ) var ( skdCron *cron.Cron ) func init() { skdCron = cron.New(cron.WithSeconds()) // 秒级定时任务 } func Start() { log.Info("skd start...") rand.Seed(time.Now().UnixNano()) _, _ = skdCron.AddFunc("0 0/2 * * * ?", func() { srv_aicomment.PollAiCommentResults(context.Background()) }) _, _ = skdCron.AddFunc("0 0/15 * * * ?", func() { srv_aicomment.RetryFailedPlaylets(context.Background()) }) // 视频同步:每10分钟从媒资库增量同步到 video_information _, _ = skdCron.AddFunc("0 */10 * * * ?", func() { videosync.VideoSync() }) // 短剧水印:每5分钟提交最多10条未处理剧集到 media _, _ = skdCron.AddFunc("0 */5 * * * ?", func() { playletwatermark.SubmitPendingChapters() }) // 短剧水印:每3分钟拉取 media 已完成任务并回写剧集 _, _ = skdCron.AddFunc("0 */3 * * * ?", func() { playletwatermark.SyncCompletedChapters() }) // 连载中短剧:每60分钟扫描一次并投递到 Redis 队列,由后台消费者逐条同步 _, _ = skdCron.AddFunc(srv_mediaresource.PlayletSerialSyncCronSpec, func() { srv_mediaresource.EnqueueSerialPlayletSyncJobs() }) // 历史短剧压缩封面:每5分钟扫描压缩封面为空的记录并投递队列 _, _ = skdCron.AddFunc(srv_mediaresource.PlayletCoverCompressCronSpec, func() { srv_mediaresource.EnqueuePlayletCoverCompressJobs() }) _, _ = skdCron.AddFunc(srv_mediaresource.AIContentBackflowCronSpec(), func() { go srv_mediaresource.ReportAIContentBackflowYesterday() }) _, _ = skdCron.AddFunc(srv_mediaresource.AIContentBackflowTodayStatCronSpec(), func() { go srv_mediaresource.RefreshAIContentBackflowTodayStats() }) srv_mediaresource.StartCGDJOriginalBackfillOnce(context.Background()) go srv_mediaresource.RefreshAIContentBackflowTodayStats() _, _ = skdCron.AddFunc("0/1 * * * * ?", func() { // 每秒执行一次批量上报 job.Report() }) // 每天凌晨 02:00 重置 VIP 已过期用户的 VipType _, _ = skdCron.AddFunc("0 0 2 * * ?", func() { vipexpiry.ResetExpiredVip() }) // 搜索引擎推送兜底:补推已上架短剧并重试失败任务。 // 开关关闭或非正式环境不会真正对外提交,详见 srv_seopush.seoPushEnabled _, _ = skdCron.AddFunc("0/30 * * * * ?", func() { seopushjob.Run() }) //if webg.Conf.LsjMediaConf.ApiUrl != "" { // _, _ = skdCron.AddFunc("0 30 */2 * * ?", func() { // transcodejob.TranscodeVideoByWatchTimes() // }) // _, _ = skdCron.AddFunc("0 */5 * * * ?", func() { // transcodejob.CheckTranscodingResults() // }) //} skdCron.Start() } func Stop() { log.Info("srv_datinggirl:updater Stop...") defer log.Info("srv_datinggirl: updater Stop!!!") srv_mediaresource.CloseAIContentBackflowClient() skdCron.Stop() }