功能完成
Docker Build and Push / build-image (push) Successful in 2m53s

This commit is contained in:
cheney
2026-08-07 14:56:27 +08:00
parent b9ec6fbe0b
commit a5bc8ef1f1
5 changed files with 77 additions and 23 deletions
+16 -13
View File
@@ -3,6 +3,7 @@ import { prisma } from './db.js'
import mysql from 'mysql2/promise'
import { fetchNewsList, persistNews } from '../scripts/fetchers/news.fetcher.js'
import { checkAfterRefresh } from './alert-engine.js'
import { insertCronAlert } from '../scripts/lib/cron-alert.js'
import { ApizeroError, oil, history } from './apizero/index.js'
function parseUrl(url) {
@@ -14,10 +15,10 @@ async function openConn() {
return mysql.createConnection(parseUrl(process.env.DATABASE_URL))
}
// 每天凌晨 3:00 (本地时间) 拉取新闻 + 跑跨源对比
// 每天 6:00 (Asia/Shanghai) 拉取新闻 + 跑跨源对比, 出错生成报警
function scheduleNews() {
cron.schedule('0 3 * * *', async () => {
console.log('[cron] 3:00 触发')
cron.schedule('0 6 * * *', async () => {
console.log('[cron] 6:00 触发')
try {
const list = await fetchNewsList()
const r = await persistNews(list)
@@ -29,25 +30,26 @@ function scheduleNews() {
} finally { await conn.end() }
} catch (e) {
console.error('[cron] 任务失败:', e.message)
await insertCronAlert('新闻拉取+报警检测', e.message)
}
})
console.log('[cron] 已注册: 每天 03:00 拉取新闻 + 跨源报警检测')
}, { timezone: 'Asia/Shanghai' })
console.log('[cron] 已注册: 每天 06:00 拉取新闻 + 跨源报警检测')
}
// 每天凌晨 4:00 抓浙江油价历史
// 每天 6:10 (Asia/Shanghai) 抓浙江油价历史, 出错生成报警
// 逻辑: 拉今年 schedule, 检查待定且 <= 昨天的调价日, 命中就抓 price?province=浙江 存库
// - 0 命中: 不调 apizero (省配额)
// - >0 命中: 调一次, 4 个油品批量入库 (unique 兜底去重)
function scheduleOilHistory() {
cron.schedule('0 4 * * *', async () => {
console.log('[cron] 4:00 油价历史触发')
cron.schedule('10 6 * * *', async () => {
console.log('[cron] 6:10 油价历史触发')
try {
const year = new Date().getFullYear()
const sched = await oil.getSchedule(year)
const list = sched.schedule || []
// 待定 且 日期 <= 昨天
const today = new Date()
today.setHours(0, 0, 0, 0)
// 待定 且 日期 <= 昨天 (用 Asia/Shanghai 时区推导, 与 cron 触发时区对齐)
const todayStr = new Date().toLocaleDateString('en-CA', { timeZone: 'Asia/Shanghai' })
const today = new Date(todayStr + 'T00:00:00')
const yesterdayMs = today.getTime() - 86400000
const pendingPast = list.filter((it) => {
if (it.status !== '待定') return false
@@ -67,9 +69,10 @@ function scheduleOilHistory() {
} else {
console.error('[cron] 油价历史任务失败:', e.message)
}
await insertCronAlert('浙江油价历史抓取', e.message)
}
})
console.log('[cron] 已注册: 每天 04:00 浙江油价历史抓取')
}, { timezone: 'Asia/Shanghai' })
console.log('[cron] 已注册: 每天 06:10 浙江油价历史抓取')
}
scheduleNews()