SpringBoot 项目——抽奖系统

本项目主要实现的功能是:主要服务于管理员用户,其可圈选奖品,人员来创建抽奖活动,并进行在线抽奖,并可通过短信或邮件的方式通知中奖者,同时普通用户可查看已结束的抽奖活动的中奖结果;

一、项目技术栈及环境

编程语言:后端:Java 17,前端 JavaScript

后端框架:SpringBoot 3

数据库:Mysql

持久层框架:Mybatis,Mybatis-Plus

缓存:Redis

消息队列:RabbitMQ

日志服务:Slf4j

安全校验:JWT

加密解密:hutool

开发工具:lombok

其他:邮箱服务,阿里云短信服务

项目依赖的 pom.xml 文件:点这里

二、项目模块分类

  • 用户模块:管理员注册,登录,普通用户的创建,普通用户中奖状态的管理
  • 奖品模块:奖品的创建,图片的上传,奖品的状态
  • 活动模块:对抽奖活动及活动状态管理
  • 抽奖模块:完成抽奖功能,并展示抽奖结果
  • 中奖通知模块:通过发送邮件和短信来进行中奖通知

三、数据库设计

  • 用户表:存储用户信息,如用户名、密码、邮箱等
  • 奖品表:存储奖品信息,如奖品名称,奖品图片,奖品价值等
  • 活动表:存储活动信息,如活动名称、描述、活动状态等
  • 活动奖品关联表:存储每个活动下关联的奖品,包括奖品数量,奖品等级
  • 活动人员关联表:存储参与每个活动的人员
  • 中奖记录表:存储每个活动的中奖信息名单

sql 文件 点这里 使用source 命令执行 .sql 文件(路径不要存在中文)

数据库表 ER 图

四、统一处理

  • 全局错误码:描述错误的状态,便于更精确的指出问题所在
  • 自定义异常类:更精确地捕获和处理特定类型的错误,提高代码的可读性
  • 统一结果返回:作为控制器层方法的返回类型,封装 HTTP 接口调用的结果,包括成功数据,错误信息和状态码
  • 全局异常捕获:集中管理、统一处理和记录异常信息,提高了系统的健壮性、可维护性
  • 拦截器:验证用户身份,在请求处理的早期阶段进行检查,防止未授权的访问

五、枚举类

  1. GlobalErrorCodeEnum:全局错误码枚举,是错误码中的 code 部分

  2. UserIdentityEnum:用户身份信息枚举,包括普通用户 NORMAL 和 管理员 ADMIN

  3. ActivityStatusEnum:活动状态枚举,包括进行中 RUNNING 和 已完成 COMPLETED

  4. ActivityUserStatusEnum:参与某个活动的用户状态枚举,包括初始化态 INIT 和 已完成 COMPLETED,以此来区分用户是否已经中奖,已经中奖的用户不能参与该活动下的后续抽奖

  5. ActivityPrizeStatusEnum:参与某个活动的奖品状态枚举,包括初始化态 INIT 和 已完成 COMPLETED,以此来区分奖品是否已经被抽取完,被抽取完的奖品不能再次抽取

  6. PrizeGradeEnum:奖品等级枚举,包括一等奖 FIRST_PRIZE、二等奖 SECOND_PRIZE 和 三等奖 THIRED_PRIZE

六、工具类

  1. JacksonUtil:包含静态的序列化和反序列化的方法,实现对象与 json 格式的转化
  2. JWTUtil:包含生成 token 和校验 token 的静态方法,实现用户身份认证
  3. RegexUtil:包含校验邮箱格式,手机号格式是否正确的静态方法,完成参数的校验
  4. MailUtil:封装发送邮件的方法
  5. SMSUtil:封装向手机号发送短信的方法
  6. CaptchaUtil:封装生成随机短信验证码的方法
  7. RedisUtil:封装操作 redis 的方法
  8. DateUtil:包含日期格式化的静态方法

七、业务实现

1. 用户模块

使用 hutool 将敏感字段如(手机号,密码)加密存储

1)注册功能

时序图:

前后端交互接口:

请求 

url: '/register',
type: 'POST',
contentType: 'application/json',
data: {"name": "xxx", "email": "xxx", "phoneNumber": "xxx", "password": "xxx", "identity": "admin"}

响应

"code": 200,
"data": { userId: 11 },
"msg": ""

后端处理

  1. 首先校验用户输入的注册信息,包括邮箱格式,手机号格式等
  2. 校验通过之后,构造 User 对象,并存储在数据库中,同时对用户密码和手机号进行加密
  3. 构造响应,返回 userId

2)发送验证码功能

时序图

前后端交互接口

请求

url: '/verifyCode/send',
type: 'POST',
data: {"phoneNumber": "xxx"}

响应

"code": 200,
"data": true,
"msg": ""

后端实现

首先校验手机号格式是否正确,若正确则通过 CaptchaUtil 类生成随机验证码,并使用 SMSUtil 类的方法发送验证码,并将验证码缓存在 Redis 中,最后构造响应并返回;

3)登录功能

时序图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rcnhtin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值