114 lines
3.9 KiB
Python
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()
|