Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go抽奖系统 - 多功能抽奖解决方案

项目概述

Go抽奖系统 是一个基于 Go 语言开发的高扩展性抽奖平台,支持多种业务场景的抽奖逻辑,包括年会抽奖、彩票摇号、微信摇一摇、支付宝集福、微博抢红包、大转盘抽奖等。系统采用分层架构设计,实现了数据模型、业务逻辑、数据访问和 Web 服务的解耦,支持快速扩展新的抽奖场景和功能模块。

技术架构

分层设计

项目结构:
lottery/
├── bootstrap/      # 应用引导与配置(初始化框架、中间件)
├── comm/           # 公共工具包(认证、加密、时间处理等)
├── conf/           # 配置中心(数据库、Redis、系统参数)
├── dao/            # 数据访问层(Xorm ORM 操作数据库)
├── datasource/     # 数据源初始化(MySQL、Redis连接池)
├── models/         # 数据模型(自动生成 + 业务模型)
├── services/       # 业务逻辑层(封装核心业务规则)
├── web/            # Web 层(控制器、路由、视图)
│   ├── controllers/ # MVC 控制器
│   ├── routes/      # 路由配置
│   └── views/       # 前端视图(HTML模板)
├── lottery_demo/   # 抽奖场景示例(独立运行模块)
├── gen_models.go   # 模型生成工具
└── main.go         # 应用入口

技术栈

模块 技术/工具 说明
框架 Iris 高性能 Web 框架,支持 MVC 模式和中间件,用于路由和请求处理
数据库 MySQL + Xorm 关系型数据库存储业务数据,Xorm 实现 ORM 操作
缓存 Redis + redigo 存储会话状态、高频数据,提升并发性能
代码生成 gorm-gen 自动生成数据模型,减少重复编码
安全机制 MD5 签名 + AES 加密 Cookie 认证、敏感数据加密
日志系统 log 标准库 记录中奖日志、操作审计信息

核心功能模块

1. 抽奖场景库

  • 年会抽奖:支持批量导入用户、单次抽奖,用户中奖后从列表移除(lottery_demo/1annualMeeting)。
  • 彩票摇号:模拟即开型彩票和双色球随机摇号(lottery_demo/2ticket)。
  • 微信摇一摇:多类型奖品(虚拟币、优惠券、实物)、概率配置和库存管理(lottery_demo/3wechatShake)。
  • 支付宝集福:动态配置福卡概率,支持自定义各福卡中奖比例(lottery_demo/4alipayFuku)。
  • 微博抢红包:多线程抢红包,金额随机分配,支持高并发场景(lottery_demo/5weiboRedpack)。
  • 大转盘抽奖:限量奖品、概率区间匹配,原子操作保证库存安全(lottery_demo/6roulette)。

2. 基础服务

  • 用户认证:基于 Cookie 的会话管理,支持自动生成签名和过期时间验证(comm/func_web.go)。
  • 黑名单系统
    • IP 黑名单:禁止特定 IP 参与抽奖(models/LtBlackip + services/BlackipService)。
    • 用户黑名单:记录被封禁用户,限制其抽奖权限(models/LtUser + services/UserService)。
  • 抽奖码管理:生成、验证和管理抽奖码(models/LtCode + services/CodeService)。

3. 数据管理

  • 奖品管理:定义奖品类型、库存、概率、活动时间等(models/LtGift + services/GiftService)。
  • 中奖记录:存储中奖详情,支持按时间、用户、奖品查询(models/LtResult + services/ResultService)。
  • 每日次数限制:通过 LtUserday 模型限制用户每日抽奖次数,防止刷奖。

快速开始

环境准备

  1. 依赖安装
    go mod tidy
  2. 数据库配置
    • 创建数据库 lottery,执行 gen_models.txt 生成表结构(或手动创建)。
    • 修改 conf/db.txt 中的 MySQL 连接参数。
  3. Redis 配置
    • 确保本地 Redis 服务运行,或修改 conf/redis.txt 指向远程实例。

启动应用

  1. 开发模式

    go run main.txt

    访问 http://localhost:8080 查看首页,点击链接进入抽奖页面。

  2. 生产模式

    # 编译二进制文件
    go build -o lottery
    
    # 启动服务
    ./lottery --port=8080

接口示例

  • 获取奖品列表

    curl http://localhost:8080/gifts

    返回 JSON 格式的有效奖品列表。

  • 微信摇一摇抽奖

    curl http://localhost:8080/lucky

    返回中奖结果(包含奖品名称、类型、剩余数量)。

扩展指南

1. 新增抽奖场景

  1. 创建场景目录:在 lottery_demo 下新建文件夹(如 7new_lottery)。
  2. 实现业务逻辑
    • services/ 中定义场景相关服务(如奖品校验、概率计算)。
    • 使用 dao/ 操作相关数据模型(如新增中奖记录)。
  3. 编写控制器:在 web/controllers/ 中创建控制器,处理 HTTP 请求。
  4. 配置路由:在 web/routes/routers.txt 中注册新路由。

2. 自动生成数据模型

使用 gen_models.txt 工具生成模型:

go run gen_models.txt
  • 自动根据数据库表结构生成 models/ 目录下的结构体,包含 GORM 标签和表名映射。

3. 性能优化

  • 数据库索引:为高频查询字段(如 LtResult.uidLtCode.code)添加索引。
  • Redis 缓存
    • 缓存用户会话和奖品列表,减少数据库压力。
    • 使用 datasource/rdhelper.txt 中的连接池实现高效缓存操作。
  • 连接池调优:调整 Xorm 和 Redis 的连接池参数,适应高并发场景。

项目维护

配置管理

  • 核心配置文件
    conf/
    ├── db.txt       # MySQL 连接配置
    ├── redis.txt    # Redis 连接配置
    └── project.txt  # 系统参数(时间格式、加密秘钥)
    
  • 敏感信息:生产环境建议通过环境变量注入数据库密码、Redis 密码等敏感信息。

日志与监控

  • 日志路径:中奖日志写入 /var/log/lottery_demo.log(可在各场景中自定义日志路径)。
  • 监控指标
    • 接口响应时间、错误率(通过 Iris 中间件实现)。
    • 数据库连接数、Redis 内存使用情况。

借鉴与学习

  • 项目确实部分使用AI辅助完成,所以完成度一般
  • 会继续完善

项目地址https://github.com/SBHHX/lottery
文档更新时间:2025年6月2日

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages