Files
Lottery/docs/开发文档-双色球WebUI-v1.0.md
T
vincent 5d5e77000e fix: 修复历史数据Excel格式兼容问题 + 完善开发文档
核心修复:
- lottery.py: load_history_data() 添加多格式Excel检测逻辑
  支持 格式A(双行header: 新列名+旧列名) 和 格式B(标准列名)
- lottery.py: parse_numbers() 新增拼接字符串(14位无分隔符)直接解析
  避免 re.findall 将整个号码串视为单个数字的问题
- app.py: load_history_dataframe() 同步修复多格式兼容逻辑

新增:
- docs/开发文档-双色球WebUI-v1.0.md: 完整开发文档
- deploy/backup.sh: 备份脚本

测试结果:
- 120条历史数据全部正确解析
- 号码生成API正常工作
- 全部API接口测试通过

Issue: BIZ-75
2026-07-03 23:05:58 +08:00

7.0 KiB
Raw Blame History

开发文档:双色球 Web UI 系统

版本: v1.0
开发人员: 徐聪(costcodev
日期: 2026-07-03
Issue: BIZ-75


1. 项目概述

双色球自动化系统 Web UI,提供号码生成、历史数据查看、生成记录管理和统计分析功能。支持 PC 端和移动端响应式访问,监听 0.0.0.0:8085,局域网可访问。

2. 技术栈

层级 技术 说明
后端 Python 3 + Flask REST API 服务
前端 原生 HTML/CSS/JS 单文件,响应式布局
数据分析 Pandas + NumPy 号码统计分析
数据存储 Excel + JSON 历史数据 + 生成记录
部署 systemd / nohup Linux 服务部署

3. 目录结构

lottoData/
├── app.py                    # Flask 主服务(统一入口)
├── index.html                # 前端 UI(响应式,4 Tab 页面)
├── lottery.py                # 号码生成核心逻辑
├── fetch_data.py             # 历史数据抓取脚本
├── web_console.html          # 数据抓取控制台前端
├── requirements.txt          # Python 依赖
├── 双色球历史数据.xlsx        # 历史数据文件
├── lottery/                  # 号码生成结果输出目录
├── .generation_records.json  # 生成记录索引(JSON
├── .fetch_status.json        # 抓取状态文件
├── deploy/                   # 部署相关文件
│   ├── DEPLOY.md             # 部署说明
│   ├── lotto-app.service     # systemd 服务文件
│   ├── fetch_daily.sh        # 定时抓取脚本
│   └── backup.sh             # 备份脚本
└── docs/                     # 文档目录
    ├── PRD-双色球 WebUI-v1.0.md
    └── 开发文档-双色球WebUI-v1.0.md  ← 本文件

4. API 接口

4.1 接口清单

接口 方法 描述 认证
/api/generate POST 生成号码 可选
/api/history GET 获取历史开奖数据(分页+搜索) 可选
/api/records GET 获取生成记录列表(分页) 可选
/api/records/:id DELETE 删除生成记录 可选
/api/statistics GET 获取统计分析数据 可选
/api/download/:filepath GET 下载文件 可选
/api/status GET 系统状态
/api/config GET 前端配置
/api/fetch/status GET 抓取执行状态
/api/fetch/execute POST 触发数据抓取

4.2 关键接口参数

POST /api/generate

// 请求
{
  "num_tickets": 10,
  "strategy": "advanced"  // 或 "basic"
}
// 响应
{
  "success": true,
  "data": {
    "tickets": [...],
    "total": 10,
    "filename": "lottery/xxx.xlsx",
    "download_url": "/api/download/lottery/xxx.xlsx",
    "record": {...},
    "statistics": {...}
  }
}

GET /api/history

参数: page (页码), page_size (每页条数), search (搜索关键词)

GET /api/records

参数: page (页码), page_size (每页条数)

5. 前端页面

5.1 页面结构

  • Header: 标题 + 副标题
  • 导航 Tab: 号码生成 | 历史数据 | 生成记录 | 统计分析
  • 移动端: 底部固定导航栏

5.2 功能页面

号码生成页(首页)

  • 统计概览(历史期数、常见奇偶比、和值范围等)
  • 策略选择(高级策略/基础策略)
  • 注数输入(1-1000
  • 生成结果展示(红球+蓝球+统计指标)
  • Excel 下载按钮

历史数据页

  • 搜索框(500ms 防抖)
  • 数据表格(期号、日期、红球、蓝球、统计字段)
  • 分页控件

生成记录页

  • 记录列表(策略、注数、时间、文件大小)
  • 下载/删除操作
  • 分页控件

统计分析页

  • 历史开奖期数
  • 红球热号 TOP15 / 冷号 TOP15
  • 蓝球热号 TOP8
  • 奇偶比/大小比/和值/跨度统计

6. 关键修复说明

6.1 数据格式兼容修复(核心 Bug 修复)

问题: lottery.py 期望 Excel 含"号码"列(拼接格式如 08121821243001),但 fetch_data.py 抓取的 Excel 使用分列格式("红球 1"~"红球 6"+"蓝球"),导致号码生成器无法加载历史数据。

根因: Excel 文件包含两行 header

  • Row 0: 新格式列名(期号、开奖日期、红球 1~6、蓝球、特别号)
  • Row 1: 旧格式列名(开奖时间、期数、号码、开机号、...)
  • Row 2+: 实际数据

修复方案:

  1. lottery.pyload_history_data(): 添加多格式检测逻辑,识别格式A(双行 header)并自动跳过,使用旧列名作为标准列名
  2. lottery.pyparse_numbers(): 新增对拼接字符串格式(14位无分隔符)的直接解析,避免 re.findall 将整个字符串视为一个数字
  3. app.pyload_history_dataframe(): 同步修复多格式兼容逻辑

6.2 线程安全

  • 生成记录的读-改-写操作使用 threading.Lock 保护
  • 文件写入使用临时文件+原子替换(os.replace),防止崩溃导致数据损坏

7. 部署方式

7.1 直接运行

cd /home/vincent/Studio/lottoData
source .venv/bin/activate
python3 app.py
# 访问 http://localhost:8085

7.2 systemd 服务

# 服务文件: deploy/lotto-app.service
sudo cp deploy/lotto-app.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable lotto-app
sudo systemctl start lotto-app

7.3 定时数据抓取

# 添加 cron 任务
crontab -e
# 每天 02:30 自动抓取最新数据
30 2 * * * /home/vincent/Studio/lottoData/deploy/fetch_daily.sh >> /home/vincent/Studio/lottoData/deploy/cron.log 2>&1

8. 测试验证

8.1 API 测试结果

接口 状态 说明
GET /api/status 通过 返回服务状态
GET /api/statistics 通过 120条历史数据统计正确
GET /api/history 通过 分页+红蓝球解析正确
POST /api/generate 通过 5注号码生成成功,含统计
GET /api/records 通过 生成记录列表正确
GET / (前端页面) 通过 HTML 页面正常加载

8.2 数据格式验证

  • 历史数据: 120 条记录全部成功解析
  • 红球解析: 6个红球正确提取
  • 蓝球解析: 1个蓝球正确提取
  • 号码范围校验: 1-33(红) + 1-16(蓝)

9. 已知限制

  • 前端为单 HTML 文件,未使用构建工具
  • 无用户登录系统(Token 认证为可选项,默认关闭)
  • 历史数据来源为 55128.cn,如网站改版需更新 fetch_data.py
  • 不支持 HTTPS(内网环境)

10. 后续优化建议

功能 优先级 说明
数据可视化图表 P2 走势图、分布图
用户登录系统 P2 多用户权限管理
定时自动生成 P2 定时生成+推送
微信推送 P3 生成结果推送至微信
多彩种支持 P3 大乐透、福彩 3D 等

开发完成日期: 2026-07-03
代码仓库: http://192.168.1.99:12299/vincent/Lottery.git
开发人员: 徐聪(costcodev