mottery/backend/scheduler.py

114 lines
3.9 KiB
Python

import schedule
import time
import logging
from datetime import datetime
from update_lottery import LotteryUpdater
from app.services.prediction_service import PredictionService
from app.core.database import SessionLocal
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
filename='lottery_scheduler.log'
)
logger = logging.getLogger(__name__)
class LotteryScheduler:
def __init__(self):
self.updater = LotteryUpdater()
def update_lottery_data_job(self):
"""每天早上6点更新开奖数据任务"""
try:
logger.info("开始执行早上6点更新开奖数据任务...")
# 更新双色球数据
logger.info("开始更新双色球数据...")
ssq_result = self.updater.update_lottery_data('ssq')
logger.info(f"双色球数据更新完成: {ssq_result}")
# 更新大乐透数据
logger.info("开始更新大乐透数据...")
dlt_result = self.updater.update_lottery_data('dlt')
logger.info(f"大乐透数据更新完成: {dlt_result}")
# 检查中奖情况
db = SessionLocal()
try:
logger.info("开始检查双色球中奖情况...")
self.updater.check_and_update_bet_wins('ssq', db)
logger.info("双色球中奖检查完成")
logger.info("开始检查大乐透中奖情况...")
self.updater.check_and_update_bet_wins('dlt', db)
logger.info("大乐透中奖检查完成")
finally:
db.close()
logger.info("早上6点更新开奖数据任务完成")
except Exception as e:
logger.error(f"早上6点更新开奖数据任务失败: {str(e)}")
def generate_daily_recommendations_job(self):
"""每天下午5点生成拼盘推荐任务"""
try:
logger.info("开始执行下午5点生成拼盘推荐任务...")
db = SessionLocal()
try:
# 创建预测服务实例
prediction_service = PredictionService(db)
# 生成双色球推荐
logger.info("开始生成双色球拼盘推荐...")
ssq_recommendations = prediction_service.generate_daily_recommendations(
db, 'ssq', batch_size=4
)
logger.info(f"双色球拼盘推荐生成完成,共生成 {len(ssq_recommendations)}")
# 生成大乐透推荐
logger.info("开始生成大乐透拼盘推荐...")
dlt_recommendations = prediction_service.generate_daily_recommendations(
db, 'dlt', batch_size=4
)
logger.info(f"大乐透拼盘推荐生成完成,共生成 {len(dlt_recommendations)}")
logger.info("下午5点生成拼盘推荐任务完成")
finally:
db.close()
except Exception as e:
logger.error(f"下午5点生成拼盘推荐任务失败: {str(e)}")
def start_scheduler(self):
"""启动定时任务调度器"""
# 每天早上6点更新开奖数据
schedule.every().day.at("06:00").do(self.update_lottery_data_job)
# 每天下午5点生成拼盘推荐
schedule.every().day.at("17:00").do(self.generate_daily_recommendations_job)
logger.info("定时任务调度器已启动")
logger.info("已设置任务:")
logger.info("- 每天早上6点: 更新开奖数据")
logger.info("- 每天下午5点: 生成拼盘推荐")
# 运行调度器
while True:
schedule.run_pending()
time.sleep(60) # 每分钟检查一次
def main():
"""主函数"""
scheduler = LotteryScheduler()
scheduler.start_scheduler()
if __name__ == "__main__":
main()