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.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)}")
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user