wood chen b11cf228e3 调整定时任务执行时间,优化价格更新逻辑
- 修改 InitCronJobs 函数中的定时任务执行时间,OpenRouter价格获取任务和其他厂商价格更新任务分别调整为每天06:04和06:30执行。
- 在 UpdateOtherPrices 函数中新增清除倍率缓存的逻辑,确保价格更新后缓存数据的准确性。
- 优化 GetPriceRates 函数,移除不必要的字段查询,提升查询效率。
2025-03-22 09:40:04 +08:00

74 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cron
import (
"log"
"time"
"github.com/robfig/cron/v3"
openrouter_api "aimodels-prices/cron/openrouter-api"
)
var cronScheduler *cron.Cron
// InitCronJobs 初始化并启动所有定时任务
func InitCronJobs() {
log.Println("初始化定时任务...")
// 创建一个新的cron调度器使用秒级精度
cronScheduler = cron.New(cron.WithSeconds())
// 注册OpenRouter价格获取任务
// 每24小时执行一次
_, err := cronScheduler.AddFunc("4 6 * * *", func() {
if err := openrouter_api.FetchAndSavePrices(); err != nil {
log.Printf("OpenRouter价格获取任务执行失败: %v", err)
}
})
if err != nil {
log.Printf("注册OpenRouter价格获取任务失败: %v", err)
}
// 注册其他厂商价格更新任务
// 每24小时执行一次错开时间避免同时执行
_, err = cronScheduler.AddFunc("30 6 * * *", func() {
if err := openrouter_api.UpdateOtherPrices(); err != nil {
log.Printf("其他厂商价格更新任务执行失败: %v", err)
}
})
if err != nil {
log.Printf("注册其他厂商价格更新任务失败: %v", err)
}
// 启动定时任务
cronScheduler.Start()
log.Println("定时任务已启动")
// 立即执行一次价格获取任务
go func() {
// 等待几秒钟,确保应用程序和数据库已完全初始化
time.Sleep(5 * time.Second)
log.Println("立即执行OpenRouter价格获取任务...")
if err := openrouter_api.FetchAndSavePrices(); err != nil {
log.Printf("初始OpenRouter价格获取任务执行失败: %v", err)
}
// 等待几秒后执行其他厂商价格更新任务
time.Sleep(3 * time.Second)
log.Println("立即执行其他厂商价格更新任务...")
if err := openrouter_api.UpdateOtherPrices(); err != nil {
log.Printf("初始其他厂商价格更新任务执行失败: %v", err)
}
}()
}
// StopCronJobs 停止所有定时任务
func StopCronJobs() {
if cronScheduler != nil {
cronScheduler.Stop()
log.Println("定时任务已停止")
}
}