彩票数据分析系统

项目概述

本项目是一个彩票数据分析系统,支持双色球和大乐透的数据管理、统计分析和智能选号功能。系统采用前后端分离架构,提供直观的用户界面和强大的数据分析能力。

技术栈

后端

  • Python 3.8+
  • FastAPI
  • SQLAlchemy
  • MySQL/PostgreSQL
  • Pydantic
  • Scikit-learn (机器学习)
  • NumPy (数值计算)
  • Pandas (数据处理)
  • Schedule (定时任务)

前端

  • Vue 3
  • Vite
  • Element Plus
  • ECharts
  • Pinia
  • Vue Router

系统功能

1. 数据管理

  • 双色球和大乐透历史数据导入
  • 数据查询和筛选
  • 数据导出
  • 手动数据录入
  • 自动数据更新 新功能
  • 定时任务系统 新功能

2. 基础统计分析

  • 号码出现频率统计
  • 热门号码分析
  • 冷门号码分析
  • 数据可视化展示

3. 高级数据分析 新功能

  • 遗漏值分析: 分析各号码的遗漏期数
  • 和值分析: 统计红球和值的分布规律
  • AC值分析: 邻号差值分析
  • 质合比分析: 质数与合数的比例分析
  • 012路分析: 除3余数分析
  • 跨度分析: 最大最小号码差值分析
  • 综合分析: 多维度数据整合分析

4. 智能预测系统 新功能

  • 机器学习预测: 基于历史数据的AI预测
  • 模式预测: 基于统计模式的预测
  • 集成预测: 多方法综合预测
  • 预测模型训练: 可自定义训练参数
  • 预测结果评估: 预测准确率统计
  • 每日拼盘推荐: 定时生成推荐号码 新功能

5. 智能选号

  • 随机选号
  • 频率选号
  • 热门号码选号
  • 冷门号码选号
  • 自定义选号策略

6. 定时任务系统 新功能

  • 每天早上6点: 自动更新开奖数据
  • 每天下午5点: 自动生成拼盘推荐
  • 任务状态监控: 实时查看任务执行状态
  • 日志记录: 详细的任务执行日志

项目结构

lottery/
├── backend/                # 后端代码
│   ├── app/
│   │   ├── api/           # API 路由
│   │   │   ├── endpoints/ # 基础API端点
│   │   │   └── v1/        # API版本1
│   │   ├── core/          # 核心配置
│   │   ├── models/        # 数据模型
│   │   ├── schemas/       # 数据验证
│   │   └── services/      # 业务逻辑
│   │       ├── analysis_service.py      # 基础分析服务
│   │       ├── advanced_analysis.py     # 高级分析服务 ⭐
│   │       └── prediction_service.py    # 预测服务 ⭐
│   ├── requirements.txt   # 依赖包
│   ├── main.py           # 入口文件
│   ├── scheduler.py      # 定时任务调度器 ⭐
│   └── update_lottery.py # 数据更新脚本
├── frontend/              # 前端代码
│   ├── src/
│   │   ├── api/          # API 接口
│   │   ├── assets/       # 静态资源
│   │   ├── components/   # 组件
│   │   ├── router/       # 路由配置
│   │   ├── views/        # 页面
│   │   │   ├── AdvancedAnalysis.vue  # 高级分析页面 ⭐
│   │   │   ├── NumberGenerator.vue   # 一键下单页面 ⭐
│   │   │   └── Prediction.vue        # 预测页面 ⭐
│   │   ├── App.vue       # 根组件
│   │   └── main.js       # 入口文件
│   ├── package.json      # 依赖配置
│   └── vite.config.js    # Vite 配置
├── nginx.conf            # nginx配置文件 ⭐
├── deploy.sh             # 部署脚本 ⭐
├── fix_nginx.sh          # 快速修复脚本 ⭐
├── service_manager.sh    # 服务管理脚本 ⭐
└── README.md             # 项目文档

开发环境要求

  • Python 3.8+
  • Node.js 16+
  • MySQL 8.0+ 或 PostgreSQL 12+
  • npm 或 yarn

安装和运行

快速启动 推荐

使用一键启动脚本(推荐方式):

# 确保已安装Python 3.8+和Node.js 16+
python start_system.py

脚本会自动:

  • 检查Python版本和依赖
  • 检查数据库连接
  • 询问是否启动定时任务
  • 启动后端服务端口8000
  • 启动前端服务端口5173
  • 启动定时任务调度器(可选)
  • 显示访问地址和使用说明

手动启动

后端

  1. 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate     # Windows
  1. 安装依赖
cd backend
pip install -r requirements.txt
  1. 配置数据库
  • 创建 MySQL/PostgreSQL 数据库
  • 修改 backend/app/core/database.py 中的数据库连接配置
  1. 启动服务
uvicorn main:app --reload --host 0.0.0.0 --port 8000

前端

  1. 安装依赖
cd frontend
npm install
  1. 启动开发服务器
npm run dev
  1. 构建生产版本
npm run build

定时任务 新功能

cd backend
python scheduler.py

生产环境部署 新功能

自动部署

使用部署脚本进行一键部署:

# 给脚本执行权限
chmod +x deploy.sh

# 运行部署脚本
./deploy.sh

快速修复

如果遇到nginx配置问题使用快速修复脚本

# 给脚本执行权限
chmod +x fix_nginx.sh

# 运行修复脚本
./fix_nginx.sh

服务管理

使用服务管理脚本进行日常维护:

# 给脚本执行权限
chmod +x service_manager.sh

# 启动所有服务
./service_manager.sh start

# 停止所有服务
./service_manager.sh stop

# 重启所有服务
./service_manager.sh restart

# 查看服务状态
./service_manager.sh status

# 查看日志
./service_manager.sh logs backend    # 后端日志
./service_manager.sh logs scheduler  # 定时任务日志
./service_manager.sh logs nginx      # nginx错误日志

# 部署更新
./service_manager.sh deploy

故障排除 新功能

常见问题

1. nginx重定向循环错误

错误信息: rewrite or internal redirection cycle while internally redirecting to "/index.html"

解决方案:

# 使用快速修复脚本
./fix_nginx.sh

2. 后端API连接被拒绝

错误信息: connect() failed (111: Connection refused) while connecting to upstream

解决方案:

# 检查后端服务状态
./service_manager.sh status

# 重启后端服务
./service_manager.sh restart

# 查看后端日志
./service_manager.sh logs backend

3. 前端页面无法访问

解决方案:

# 重新构建前端
cd frontend
npm run build
cd ..

# 重新部署
./service_manager.sh deploy

4. 数据库连接问题

解决方案:

# 检查数据库配置
cat backend/app/core/database.py

# 测试数据库连接
cd backend
python -c "from app.core.database import engine; print('数据库连接正常')"

日志查看

# nginx错误日志
sudo tail -f /var/log/nginx/error.log

# 后端应用日志
tail -f backend/backend.log

# 定时任务日志
tail -f scheduler.log

# 系统日志
sudo journalctl -u nginx -f

性能优化

  1. 启用gzip压缩: 在nginx.conf中添加

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
  2. 静态资源缓存: 已在nginx.conf中配置静态资源缓存

  3. 数据库优化:

    • 为常用查询字段添加索引
    • 定期清理历史数据
    • 使用连接池

使用说明

定时任务系统 新功能

自动任务

系统提供两个定时任务:

  1. 每天早上6点 - 数据更新任务

    • 自动从API获取最新开奖数据
    • 更新双色球和大乐透数据
    • 检查历史投注的中奖情况
    • 记录详细执行日志
  2. 每天下午5点 - 拼盘推荐任务

    • 自动生成今日拼盘推荐
    • 使用集成预测算法
    • 生成4注推荐号码
    • 保存到数据库供前端显示

手动启动定时任务

cd backend
python scheduler.py

查看定时任务状态

# 查看任务日志
tail -f scheduler.log

# 查看任务进程
ps aux | grep scheduler

数据管理

导入历史数据

  1. 准备CSV格式的历史数据文件
  2. 在管理界面选择"数据导入"
  3. 选择彩票类型(双色球/大乐透)
  4. 上传数据文件
  5. 系统自动验证和导入数据

手动录入数据

  1. 在管理界面选择"手动录入"
  2. 选择彩票类型和期号
  3. 输入开奖号码
  4. 保存数据

数据导出

  1. 在管理界面选择"数据导出"
  2. 选择彩票类型和时间范围
  3. 选择导出格式CSV/Excel
  4. 下载数据文件

统计分析

基础统计

  • 频率统计: 查看各号码的出现次数和频率
  • 热门号码: 显示出现频率最高的号码
  • 冷门号码: 显示出现频率最低的号码
  • 遗漏分析: 分析各号码的遗漏期数

高级分析 新功能

  • 和值分析: 统计红球和值的分布规律
  • AC值分析: 邻号差值分析
  • 质合比分析: 质数与合数的比例分析
  • 012路分析: 除3余数分析
  • 跨度分析: 最大最小号码差值分析

智能预测 新功能

机器学习预测

  1. 选择彩票类型(双色球/大乐透)
  2. 选择预测期数
  3. 系统使用历史数据训练模型
  4. 生成预测结果

模式预测

  1. 选择预测模式
  2. 设置预测参数
  3. 生成预测结果

集成预测

  1. 系统综合多种预测方法
  2. 生成最优预测结果
  3. 显示预测置信度

智能选号

随机选号

  • 完全随机生成号码组合
  • 适合新手用户

频率选号

  • 基于历史频率选择号码
  • 平衡热门和冷门号码

热门号码选号

  • 选择历史出现频率高的号码
  • 适合追求稳定性的用户

冷门号码选号

  • 选择历史出现频率低的号码
  • 适合追求高回报的用户

自定义选号策略

  • 用户可以自定义选号规则
  • 支持多种选号策略组合

API文档

基础API

  • GET /api/v1/lottery/ssq/latest - 获取最新双色球数据
  • GET /api/v1/lottery/dlt/latest - 获取最新大乐透数据
  • GET /api/v1/lottery/ssq/history - 获取双色球历史数据
  • GET /api/v1/lottery/dlt/history - 获取大乐透历史数据

分析API 新功能

  • GET /api/analysis/ssq/frequency - 双色球频率分析
  • GET /api/analysis/dlt/frequency - 大乐透频率分析
  • GET /api/analysis/ssq/missing - 双色球遗漏值分析
  • GET /api/analysis/dlt/missing - 大乐透遗漏值分析
  • GET /api/analysis/ssq/sum - 双色球和值分析
  • GET /api/analysis/dlt/sum - 大乐透和值分析

预测API 新功能

  • POST /api/v1/prediction/ssq - 双色球预测
  • POST /api/v1/prediction/dlt - 大乐透预测
  • GET /api/v1/prediction/ssq/recommendations - 获取双色球推荐
  • GET /api/v1/prediction/dlt/recommendations - 获取大乐透推荐

健康检查

  • GET /health - 系统健康检查

开发指南

添加新的分析功能

  1. backend/app/services/ 中添加新的分析服务
  2. backend/app/api/endpoints/ 中添加对应的API端点
  3. 在前端 src/views/ 中添加新的页面组件
  4. 更新路由配置

添加新的预测算法

  1. backend/app/services/prediction_service.py 中添加新算法
  2. 更新API端点以支持新算法
  3. 在前端添加算法选择选项

数据库迁移

  1. 修改数据模型
  2. 生成迁移文件
  3. 执行迁移

贡献指南

  1. Fork 项目
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建 Pull Request

许可证

本项目采用 MIT 许可证。

联系方式

如有问题或建议,请通过以下方式联系:

  • 提交 Issue
  • 发送邮件
  • 在线讨论

注意: 本系统仅供学习和研究使用,不构成投资建议。请理性购彩,注意风险。

问题分析与解决记录 ⚠️ 重要

投注记录开奖信息存储逻辑问题

问题描述

通过深入调试发现,双色球与大乐透的投注记录中开奖信息存储存在期号匹配错误:

  • 问题表现:部分投注记录的期号没有对应的开奖数据,导致"未加料成功"
  • 根本原因:投注期号获取逻辑错误,没有正确处理当天开奖的情况

技术分析

调试发现的实际问题

双色球数据分析:
- 期号250767月3日投注但25076期尚未开奖 ❌
- 期号250757月1日投注7月3日开奖 ✅ 正确匹配
- 期号250746月29日投注7月3日开奖 ✅ 正确匹配

问题7月3日投注时获取到的是25075期号但这期当天就开奖了

错误的期号获取逻辑

# 问题代码:直接使用最新期号
last = db.query(LotteryModel).order_by(LotteryModel.open_time.desc()).first()
issue = last.issue if last else ''  # 可能获取到当天已开奖的期号

问题分析

  1. 投注时间在下午5点但最新期号可能是当天早上开奖的期号
  2. 当天投注应该投注下一期(尚未开奖的期号)
  3. 没有正确处理期号与开奖时间的关系

解决方案

修正期号获取逻辑

# 修正后的代码:始终投注下一期
last = db.query(LotteryModel).order_by(LotteryModel.open_time.desc()).first()
if last and last.issue:
    # 无论何时投注,都应该投注下一期(尚未开奖的期号)
    current_issue = int(last.issue)
    next_issue = str(current_issue + 1)
else:
    next_issue = ''

修复逻辑

  • 投注记录始终使用下一期期号(尚未开奖的期号)
  • 确保投注记录能够在开奖后正确匹配到开奖数据
  • 第二天早上6点的定时任务会获取开奖数据并更新中奖状态

正确的时间线

以7月3日为例

  1. 7月3日下午5点:投注,期号设置为 25076(即将开奖的期号)
  2. 7月3日晚上9点:第 25076 期开奖
  3. 7月4日早上6点:获取第 25076 期开奖数据,更新投注记录中奖状态

修复涉及的文件

  1. backend/scheduler.py - 定时任务中的投注记录创建
  2. backend/app/api/endpoints/prediction.py - 手动推荐中的投注记录创建
  3. backend/debug_lottery_issue.py - 调试分析脚本

修复步骤

  1. 通过调试脚本确认了真正的问题
  2. 修正代码中的期号获取逻辑
  3. 🔄 需要修正现有错误期号的投注记录
  4. 🔄 重新执行兑奖比对,更新中奖状态

影响范围

  • 主要影响期号为25076的投注记录需要等待下次开奖
  • 其他投注记录的期号匹配基本正确

数据一致性

修复后,新的投注记录将使用正确的期号,现有的错误记录需要等待对应期号开奖后才能正确更新中奖状态。

周六投注周日中奖检查问题 ⚠️ 新发现

问题描述

用户反馈周六投注的号码在周日没有完整的中奖比对信息,经调查发现定时任务逻辑存在错误。

根本原因

scheduler.pycheck_previous_day_wins_job函数中存在错误逻辑:

if current_weekday == 6:  # 周六
    logger.info("周六休息,不推送中奖检查")
    return

问题分析

  • 周六投注大乐透,周六晚上开奖
  • 周日早上9:30的定时任务应该检查周六的投注中奖情况
  • 但错误的判断逻辑导致周日跳过了检查,因为昨天是周六

彩票开奖时间安排

  • 双色球:周二、周四、周日开奖
  • 大乐透:周一、周三、周六开奖
  • 推荐安排:一三六推荐大乐透,二四日推荐双色球,周五休息

解决方案

修正check_previous_day_wins_job中的工作日判断逻辑:

  1. 移除错误的"周六休息"逻辑
  2. 根据昨天的日期来判断彩票类型,而不是今天
  3. 只有昨天是周五(休息日)才跳过检查

修复后的逻辑

yesterday_weekday = yesterday.isoweekday()

if yesterday_weekday in [1, 3, 6]:  # 昨天是周一、三、六,投注的是大乐透
    lottery_type = 'dlt'
elif yesterday_weekday in [2, 4, 7]:  # 昨天是周二、四、日,投注的是双色球
    lottery_type = 'ssq'
else:  # 昨天是周五,休息日,没有投注
    logger.info("昨日是周五休息日,没有投注记录,跳过中奖检查")
    return

验证结果

修复后测试显示:

  • 7月12日周六4条大乐透投注记录
  • 所有记录都正确更新了中奖信息
  • 开奖号码和中奖状态完全匹配
  • Telegram推送正常工作

影响范围

此修复解决了:

  1. 周六投注周日无中奖比对信息的问题
  2. 确保所有工作日的投注都能正确进行中奖检查
  3. 保持Telegram每日推送的完整性

2025-01-16 彩票投注内容调整

背景

用户需求将快乐8投注内容替换为排列3组选3投注。

排列3组选3规则

  • 投注方式从000-999中选择号码其中有两个数字相同
  • 中奖条件:所选号码与开奖号码相同且顺序不限
  • 奖金设定单注固定奖金346元
  • 示例开奖544中奖号码可为544、454、445中任意一个

修改内容

backend/scheduler.pygenerate_daily_recommendations_job函数中:

原快乐8投注

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))

新排列3组选3投注

msg_lines.append("\n排列三,组选三")
for _ in range(3):
    # 生成组选3号码两个相同数字 + 一个不同数字
    same_digit = random.randint(0, 9)  # 相同的数字
    different_digit = random.choice([d for d in range(0, 10) if d != same_digit])  # 不同的数字
    # 将三个数字随机排列
    digits = [same_digit, same_digit, different_digit]
    random.shuffle(digits)
    msg_lines.append(' '.join(str(d) for d in digits))

推送消息示例

你好,帮忙买下大乐透。
红球04 06 09 18 19 蓝球07 12
红球01 03 05 06 31 蓝球03 06
红球06 09 18 23 32 蓝球02 07
红球02 07 13 14 22 蓝球03 09
红球02 09 22 31 32 蓝球07 12
都追加,谢谢。

排列三,组选三
9 6 6
1 4 4
5 5 3

技术特点

  1. 随机生成每次生成3注不同的组选3号码
  2. 规则保证:确保每注都包含两个相同数字和一个不同数字
  3. 顺序随机:相同数字的位置完全随机
  4. 无需存储与快乐8一样不保存投注记录不进行中奖比对

最后更新2025-01-16 问题状态: 已完全修复并验证

Description
No description provided
Readme 426 KiB
Languages
Python 50.8%
Vue 33.5%
CSS 8.3%
Shell 3.9%
JavaScript 3.4%
Other 0.1%