fix: 推送拼盘推荐内容与prediction.py接口完全一致,严格区分彩种与补足逻辑,修复f-string兼容性问题

This commit is contained in:
Mars 2025-07-02 16:41:38 +08:00
parent 2601246be5
commit 97e83e8c0f

View File

@ -8,6 +8,7 @@ from app.services.telegram_bot import send_message
from app.core.database import SessionLocal from app.core.database import SessionLocal
from app.models.lottery import SSQLotteryBetRecord, DLTLotteryBetRecord, SSQLottery, DLTLottery from app.models.lottery import SSQLotteryBetRecord, DLTLotteryBetRecord, SSQLottery, DLTLottery
import random import random
import os
# 配置日志 # 配置日志
logging.basicConfig( logging.basicConfig(
@ -56,105 +57,104 @@ class LotteryScheduler:
logger.error(f"早上6点更新开奖数据任务失败: {str(e)}") logger.error(f"早上6点更新开奖数据任务失败: {str(e)}")
def generate_daily_recommendations_job(self): def generate_daily_recommendations_job(self):
"""每天下午5点生成拼盘推荐任务""" """每天下午5点生成拼盘推荐任务推送内容与prediction.py recommend_today接口一致"""
try: try:
logger.info("开始执行下午5点生成拼盘推荐任务...") logger.info("开始执行下午5点生成拼盘推荐任务...")
import datetime
import os
db = SessionLocal() db = SessionLocal()
try: try:
# 创建预测服务实例 # 判断彩种
prediction_service = PredictionService(db) weekday = datetime.datetime.now().isoweekday()
if weekday == 5:
# 生成双色球推荐 logger.info("周五休息,不推送推荐")
logger.info("开始生成双色球拼盘推荐...") return
ssq_recommendations = prediction_service.generate_daily_recommendations( FIXED_SSQ = {'red': [4, 6, 7, 12, 18, 19], 'blue': [9]}
db, 'ssq', batch_size=4 FIXED_DLT = {'red': [4, 6, 9, 18, 19], 'blue': [7, 12]}
) if weekday in [1, 3, 6]:
logger.info(f"双色球拼盘推荐生成完成,共生成 {len(ssq_recommendations)}") lottery_type = 'dlt'
fixed = FIXED_DLT
# 生成大乐透推荐 title = "你好,帮忙买下大乐透。"
logger.info("开始生成大乐透拼盘推荐...") dlt_append = True
dlt_recommendations = prediction_service.generate_daily_recommendations( else:
db, 'dlt', batch_size=4 lottery_type = 'ssq'
) fixed = FIXED_SSQ
logger.info(f"大乐透拼盘推荐生成完成,共生成 {len(dlt_recommendations)}") 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 # 推送到Telegram
try: try:
logger.info("开始推送到Telegram...") logger.info("开始推送到Telegram...")
token = os.getenv("TELEGRAM_BOT_TOKEN")
# 固定投注号码参照prediction.py chat_id = os.getenv("TELEGRAM_CHAT_ID")
FIXED_SSQ = {'red': [4, 6, 7, 12, 18, 19], 'blue': [9]} result = send_message(
FIXED_DLT = {'red': [4, 6, 9, 18, 19], 'blue': [7, 12]} '\n'.join(msg_lines), token=token, chat_id=chat_id)
# 组装推送内容参照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)
if result: if result:
logger.info("Telegram推送成功") logger.info("Telegram推送成功")
logger.info(f"Telegram返回: {result}")
else: else:
logger.warning("Telegram推送失败") logger.warning("Telegram推送失败")
except Exception as e: except Exception as e:
logger.error(f"Telegram推送失败: {str(e)}") logger.error(f"Telegram推送失败: {str(e)}")
logger.info("下午5点生成拼盘推荐任务完成") logger.info("下午5点生成拼盘推荐任务完成")
finally: finally:
db.close() db.close()
except Exception as e: except Exception as e:
logger.error(f"下午5点生成拼盘推荐任务失败: {str(e)}") logger.error(f"下午5点生成拼盘推荐任务失败: {str(e)}")