fix: 推送拼盘推荐内容与prediction.py接口完全一致,严格区分彩种与补足逻辑,修复f-string兼容性问题
This commit is contained in:
parent
2601246be5
commit
97e83e8c0f
@ -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)}")
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user