From 97e83e8c0fcadea2ef7530ffb89b34be11692005 Mon Sep 17 00:00:00 2001 From: Mars Date: Wed, 2 Jul 2025 16:41:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8E=A8=E9=80=81=E6=8B=BC=E7=9B=98?= =?UTF-8?q?=E6=8E=A8=E8=8D=90=E5=86=85=E5=AE=B9=E4=B8=8Eprediction.py?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=8C=E5=85=A8=E4=B8=80=E8=87=B4=EF=BC=8C?= =?UTF-8?q?=E4=B8=A5=E6=A0=BC=E5=8C=BA=E5=88=86=E5=BD=A9=E7=A7=8D=E4=B8=8E?= =?UTF-8?q?=E8=A1=A5=E8=B6=B3=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?f-string=E5=85=BC=E5=AE=B9=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/scheduler.py | 166 +++++++++++++++++++++---------------------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/backend/scheduler.py b/backend/scheduler.py index e308afe..6973800 100644 --- a/backend/scheduler.py +++ b/backend/scheduler.py @@ -8,6 +8,7 @@ from app.services.telegram_bot import send_message from app.core.database import SessionLocal from app.models.lottery import SSQLotteryBetRecord, DLTLotteryBetRecord, SSQLottery, DLTLottery import random +import os # 配置日志 logging.basicConfig( @@ -56,105 +57,104 @@ class LotteryScheduler: logger.error(f"早上6点更新开奖数据任务失败: {str(e)}") def generate_daily_recommendations_job(self): - """每天下午5点生成拼盘推荐任务""" + """每天下午5点生成拼盘推荐任务,推送内容与prediction.py recommend_today接口一致""" try: logger.info("开始执行下午5点生成拼盘推荐任务...") - + import datetime + import os 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)} 注") - + # 判断彩种 + weekday = datetime.datetime.now().isoweekday() + if weekday == 5: + logger.info("周五休息,不推送推荐") + return + FIXED_SSQ = {'red': [4, 6, 7, 12, 18, 19], 'blue': [9]} + FIXED_DLT = {'red': [4, 6, 9, 18, 19], 'blue': [7, 12]} + if weekday in [1, 3, 6]: + lottery_type = 'dlt' + fixed = FIXED_DLT + title = "你好,帮忙买下大乐透。" + dlt_append = True + else: + lottery_type = 'ssq' + fixed = FIXED_SSQ + title = "你好,帮忙买下双色球。" + dlt_append = False + # 生成batch_id + today = datetime.datetime.now().strftime('%Y%m%d') + batch_id = f"{today}-{random.randint(1000, 9999)}" + # 推荐4注(集成预测+智能选号补足) + service = PredictionService(db) + pred = service.get_ensemble_prediction( + lottery_type, periods=200) + recs = pred.get('recommendations', []) if pred.get( + 'success') else [] + results = [] + used_numbers = set() + # 先取集成预测推荐 + for rec in recs: + if len(results) >= 4: + break + red = rec.get('numbers') + blue = [rec.get('blue')] if rec.get( + 'blue') is not None else rec.get('blues', []) + if not red or not blue: + continue + numbers = ','.join( + f"{n:02d}" for n in red) + '|' + ','.join(f"{n:02d}" for n in blue) + if numbers in used_numbers: + continue + used_numbers.add(numbers) + results.append({'red': red, 'blue': blue}) + # 补足到4注 + from app.services.analysis_service import LotteryAnalysisService + analysis_service = LotteryAnalysisService(db) + while len(results) < 4: + smart = analysis_service.generate_smart_numbers( + lottery_type, strategy='balanced', count=1) + if not smart: + break + red = smart[0].get('red_numbers') + blue = smart[0].get('blue_numbers') + numbers = ','.join( + f"{n:02d}" for n in red) + '|' + ','.join(f"{n:02d}" for n in blue) + if numbers in used_numbers: + continue + used_numbers.add(numbers) + results.append({'red': red, 'blue': blue}) + # 组装推送内容 + msg_lines = [title] + red_str = ' '.join(f"{n:02d}" for n in fixed['red']) + blue_str = ' '.join(f"{n:02d}" for n in fixed['blue']) + msg_lines.append(f"红球:{red_str} 蓝球:{blue_str}") + for rec in results: + red_str = ' '.join(f"{n:02d}" for n in rec['red']) + blue_str = ' '.join(f"{n:02d}" for n in rec['blue']) + msg_lines.append(f"红球:{red_str} 蓝球:{blue_str}") + if dlt_append: + msg_lines.append("都追加,谢谢。") + msg_lines.append("\n快乐8,单式,选十") + for _ in range(3): + nums = sorted(random.sample(range(1, 81), 10)) + msg_lines.append(' '.join(f"{n:02d}" for n in nums)) # 推送到Telegram try: logger.info("开始推送到Telegram...") - - # 固定投注号码(参照prediction.py) - FIXED_SSQ = {'red': [4, 6, 7, 12, 18, 19], 'blue': [9]} - FIXED_DLT = {'red': [4, 6, 9, 18, 19], 'blue': [7, 12]} - - # 组装推送内容(参照prediction.py的格式) - msg_lines = [] - - # 根据当前时间判断彩种(参照prediction.py逻辑) - weekday = datetime.now().isoweekday() - if weekday in [1, 3, 6]: # 周一、三、六 - lottery_type_push = 'dlt' - fixed = FIXED_DLT - title = "你好,帮忙买下大乐透。" - dlt_append = True - else: # 周二、四、日 - lottery_type_push = 'ssq' - fixed = FIXED_SSQ - title = "你好,帮忙买下双色球。" - dlt_append = False - - msg_lines.append(title) - - # 固定投注 - msg_lines.append(f"红球:{' '.join(f'{n:02d}' for n in fixed['red'])} 蓝球:{ - ' '.join(f'{n:02d}' for n in fixed['blue'])}") - - # 推荐号码(双色球) - if ssq_recommendations: - for rec in ssq_recommendations[:4]: - red_numbers = rec.get('red_numbers', []) - blue_numbers = rec.get('blue_numbers', []) - red_str = ' '.join(f"{n:02d}" for n in red_numbers) - blue_str = ' '.join( - f"{n:02d}" for n in blue_numbers) - msg_lines.append(f"红球:{red_str} 蓝球:{blue_str}") - - # 推荐号码(大乐透) - if dlt_recommendations: - for rec in dlt_recommendations[:4]: - red_numbers = rec.get('red_numbers', []) - blue_numbers = rec.get('blue_numbers', []) - red_str = ' '.join(f"{n:02d}" for n in red_numbers) - blue_str = ' '.join( - f"{n:02d}" for n in blue_numbers) - msg_lines.append(f"红球:{red_str} 蓝球:{blue_str}") - - if dlt_append: - msg_lines.append("都追加,谢谢。") - - # 快乐8推送(3注十选,合并到主消息) - msg_lines.append("\n快乐8,单式,选十") - for _ in range(3): - nums = sorted(random.sample(range(1, 81), 10)) - msg_lines.append(' '.join(f"{n:02d}" for n in nums)) - - # 发送消息 - message = '\n'.join(msg_lines) - result = send_message(message) - + token = os.getenv("TELEGRAM_BOT_TOKEN") + chat_id = os.getenv("TELEGRAM_CHAT_ID") + result = send_message( + '\n'.join(msg_lines), token=token, chat_id=chat_id) if result: logger.info("Telegram推送成功") + logger.info(f"Telegram返回: {result}") else: logger.warning("Telegram推送失败") - except Exception as e: logger.error(f"Telegram推送失败: {str(e)}") - logger.info("下午5点生成拼盘推荐任务完成") - finally: db.close() - except Exception as e: logger.error(f"下午5点生成拼盘推荐任务失败: {str(e)}")