一个帮助您记录彩票购买、自动识别中奖情况、并提供全面统计分析的系统。
注意: 本应用包含匿名使用统计功能,会收集设备标识码用于统计独立设备数量。详情请查看 PRIVACY_POLICY.md。
- 多用户系统:支持用户注册、登录、权限管理
- 数据隔离:每个用户只能访问自己的数据,保证隐私安全
- 管理员管理:管理员可以管理系统用户,启用/禁用账号
- MD5密码加密:前后端双重加密,确保密码安全
- JWT认证:基于令牌的身份验证机制
- 支持多种彩票类型:双色球、大乐透、福彩3D、排列3、排列5、七乐彩
- 购买记录管理:记录购买日期、彩票类型、期号、选号、购买金额、投注方式
- 开奖结果管理:支持手动录入和自动抓取开奖结果
- 中奖自动识别:根据彩票规则自动匹配号码,识别中奖等级和奖金
- 统计分析:
- 盈亏总览(总投入 vs 总中奖金额)
- 各奖级中奖次数分布
- 号码热冷分析
- 中奖率趋势图
- 前端:Vue 3 + TypeScript + Vite + TailwindCSS + ECharts
- 后端:Go + Gin 框架 + GORM
- 数据库:SQLite
- 日志:Zap + Lumberjack(日志轮转)
caipiao/
├── backend/ # Go 后端
│ ├── main.go # 程序入口
│ ├── models/ # 数据模型
│ ├── handlers/ # API 处理器
│ ├── services/ # 业务逻辑
│ ├── rules/ # 彩票中奖规则引擎
│ └── database/ # 数据库连接
├── frontend/ # Vue 前端
│ ├── src/
│ │ ├── views/ # 页面视图
│ │ ├── components/ # 组件
│ │ ├── api/ # API 封装
│ │ └── types/ # TypeScript 类型
│ └── dist/ # 构建输出
└── README.md
项目提供了完整的自动化构建系统,支持开发环境和发布环境的构建。
# 方法1: 使用 Makefile(完整流程)
make dev
# 方法2: 使用启动脚本
./start.sh dev
# 方法3: 使用环境变量自定义
PORT=8080 DATA_DIR=/path/to/data make dev这会自动:
- 构建前端(Vue 3 + TypeScript)
- 构建后端(Go)
- 启动服务(默认端口 8902)
访问地址:http://localhost:8902
# 方法1: 使用 Makefile
make release
# 方法2: 使用启动脚本
./start.sh release这会自动:
- 构建前端
- 跨平台编译(macOS, Linux, Windows)
- 打包飞牛 NAS 应用(.fpk 文件)
# 显示所有可用命令
make help
./start.sh help
# 仅构建前端
make dev-frontend
# 仅构建后端
make dev-backend
# 仅运行服务(不构建)
make run
# 清理构建产物
make clean
./start.sh clean
# 检查依赖
make check-deps
# 显示版本信息
make version- 启动后端服务
cd backend
go run main.go- 启动前端服务
cd frontend
npm install
npm run build-
访问应用 打开浏览器访问
http://localhost:8902 -
注册管理员账号 首次访问时,系统会检测到没有管理员用户,显示"注册管理员账号"选项。注册第一个用户,该用户将自动成为管理员。
- 登录:使用用户名和密码登录系统
- 普通用户:可以访问购买记录、开奖管理、中奖记录、统计分析等功能,所有数据仅限于当前用户
- 管理员:除了普通用户的所有功能,还可以访问"用户管理"菜单,管理所有用户账号
cd backend
go run -tags=dev main.go后端服务将在 http://localhost:8902 启动
命令行参数:
# 指定端口
go run -tags=dev main.go -port 9000
# 指定数据目录
go run -tags=dev main.go -data-dir /var/lottery/data
# 组合使用
go run -tags=dev main.go -port 9000 -data-dir /var/lottery/data
# 查看版本
./lottery-assistant -version
# 查看帮助
./lottery-assistant -help环境变量:
# 使用环境变量配置(优先级高于命令行参数)
PORT=8080 DB_PATH=./custom.db go run -tags=dev main.go
# 开发环境
ENV=development go run -tags=dev main.go
# 生产环境
ENV=production go run -tags=dev main.go
# 禁用使用统计(可选)
DISABLE_STATS=true go run -tags=dev main.gocd frontend
npm install
npm run dev前端服务将在 http://localhost:5173 启动
打开浏览器访问 http://localhost:5173
- 访问系统后,如果检测到没有管理员,会显示"注册管理员账号"
- 填写用户名、密码(至少6位)和可选的邮箱
- 点击注册,该用户将成为系统的唯一管理员
- 点击导航栏的"登录"按钮
- 输入用户名和密码
- 登录成功后可以访问所有功能
- 登录后,导航栏会显示"用户管理"菜单(仅管理员可见)
- 可以查看所有用户列表
- 可以启用/禁用用户账号
- 可以删除普通用户(不能删除管理员)
- 注意:系统始终保证至少有一个管理员
- 点击顶部导航「购买记录」
- 点击「新增记录」按钮
- 选择彩票类型、填写期号、购买日期
- 输入号码(根据彩票类型自动适配输入格式)
- 选择投注方式、填写金额
- 点击「保存」
- 点击顶部导航「开奖管理」
- 点击「录入开奖」按钮
- 选择彩票类型、填写期号
- 对于双色球和大乐透,可点击「自动抓取开奖结果」按钮从官方接口获取
- 或手动输入开奖号码
- 点击「保存」
- 点击顶部导航「统计分析」
- 查看盈亏总览卡片
- 浏览盈亏趋势图、奖级分布饼图、中奖率趋势图
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/auth/register | 用户注册 |
| POST | /api/auth/login | 用户登录 |
| GET | /api/auth/check-admin | 检查管理员是否存在 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/auth/me | 获取当前用户信息 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/users | 获取所有用户 |
| PUT | /api/users/:id | 更新用户(状态/角色) |
| DELETE | /api/users/:id | 删除用户 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/statistics/overview | 盈亏总览 |
| GET | /api/purchases | 购买记录列表 |
| POST | /api/purchases | 创建购买记录 |
| GET | /api/draws | 开奖结果列表 |
| POST | /api/draws | 创建开奖结果 |
| GET | /api/draws/fetch | 自动抓取开奖结果 |
| GET | /api/winnings | 中奖记录列表 |
| GET | /api/statistics/trends | 趋势数据 |
- JWT认证:所有业务接口需要携带有效的JWT令牌
- 权限控制:管理员接口需要管理员权限
- 数据隔离:每个用户只能访问自己的数据
- 密码加密:前后端MD5双重加密
- 红球:6个,范围 01-33
- 蓝球:1个,范围 01-16
- 奖级:一等奖(6红+1蓝)、二等奖(6红)、三等奖(5红+1蓝)...六等奖(1红+1蓝 或 0红+1蓝)
- 前区:5个,范围 01-35
- 后区:2个,范围 01-12
- 奖级:一等奖(5前+2后)...七等奖(0前+1后 或 1前+0后)
- 3个数字,每个 0-9
- 奖级:直选(完全一致)、组选6(3个不同数字任意顺序)、组选3(2个相同+1个不同任意顺序)
- 3个/5个数字,每个 0-9
- 直选(完全一致)、组选
- 7个球,范围 01-30
- 另有1个特别号
- 奖级:一等奖(7个主球)...七等奖
data/
├── db/ # 数据库文件目录
│ └── lottery-assistant.db
└── logs/ # 日志文件目录
├── app.log # 当前日志文件
├── app-2024-03-20.log # 历史日志(已归档)
└── app-2024-03-19.log # 历史日志(已归档)
数据存储在 SQLite 数据库中,默认路径为 data/db/lottery-assistant.db,包含以下表:
purchase_records- 购买记录draw_results- 开奖结果winning_records- 中奖记录users- 用户信息system_configs- 系统配置
使用 Zap + Lumberjack 实现结构化日志和日志轮转:
日志轮转配置:
- 单个日志文件最大 100MB
- 保留最近 10 个备份文件
- 保留 30 天历史日志
- 自动压缩旧日志文件
日志输出:
- 同时输出到文件 (
data/logs/app.log) 和控制台 - 结构化日志格式,包含时间、级别、调用者信息
- 错误级别自动记录堆栈信息
配置方式:
优先级:环境变量 > 命令行参数 > 默认值
| 配置项 | 命令行参数 | 环境变量 | 默认值 |
|---|---|---|---|
| 端口 | -port |
PORT |
8902 |
| 数据目录 | -data-dir |
- | ./data |
| 数据库路径 | - | DB_PATH |
./data/db/database.db |
| 环境 | - | ENV |
production |
| 使用统计 | - | DISABLE_STATS |
false (启用) |
示例:
# 命令行参数
./lottery-assistant -port 9000 -data-dir /var/lottery/data
# 环境变量
PORT=8080 DB_PATH=./custom.db ./lottery-assistant
# 混合使用
PORT=8080 ./lottery-assistant -data-dir /var/lottery/data- 在
backend/models/models.go添加新的彩票类型枚举 - 在
backend/rules/calculator.go实现中奖计算规则 - 在
frontend/src/types/index.ts添加类型配置 - 在
frontend/src/components/NumberInput.vue添加输入适配
# 实时查看日志
tail -f data/logs/app.log
# 查看最近的日志
tail -n 100 data/logs/app.log
# 搜索错误日志
grep ERROR data/logs/app.log
# 查看特定日期的日志
cat data/logs/app-2024-03-20.log彩彩助手应用包含匿名使用统计功能,用于帮助开发者了解:
- 设备统计 - 统计独立设备数量
- 版本分布 - 了解不同版本的使用情况
- 平台统计 - 了解不同操作系统和架构的用户分布
统计会收集以下匿名数据:
- 设备标识码 - 基于系统信息生成的唯一标识符(MD5哈希)
- 系统信息 - 操作系统类型、架构、主机名
- 应用信息 - 应用版本号
注意:不收集任何个人身份信息、购买记录、中奖信息等敏感数据。
设备标识码基于以下系统信息生成:
- 操作系统类型和架构
- 主机名(如果可获取)
- 系统硬件信息(根据不同平台)
生成的标识码使用 MD5 哈希算法,无法反向推导原始信息。
# 方法1: 使用环境变量
DISABLE_STATS=true ./lottery
# 方法2: 使用 Makefile
DISABLE_STATS=true make dev
# 方法3: 使用启动脚本
DISABLE_STATS=true ./start.sh dev应用启动时会显示设备标识码,格式为 32 位十六进制字符串:
📱 设备标识码: 5d41402abc4b2a76b9719d911017c592
设备标识码存储在本地 ./data/device_id.txt 文件中。
详情请查看 PRIVACY_POLICY.md。
MIT