项目提供:完整源码 + 数据库sql文件 + 数据库表Excel文件
1、项目功能描述
1.1 登录
登录功能:填写管理员的账号和密码,以及验证码进行登录。
(“我已阅读同意《隐私政策》和《服务条款》”没有做后续,只是单纯有这样一行文字做模拟)
该系统没有注册功能,需要参与抽奖的用户由管理员手动录入。
1.2 后台界面
1.2.1 奖项管理
由管理员设置抽奖奖项信息。
需要填写奖项名称、对应奖项的最大获奖人数、抽奖优先级、是否启用。
(优先级的设置影响抽奖顺序,后文进行演示)
1.2.2 在线抽奖
点击抽奖按钮,系统会根据奖项管理中的设置进行随机抽奖,此时根据设置的优先级,抽奖顺序为一等奖>二等奖>三等奖。
将优先级进行修改,二等奖优先级为1,一等奖为2,三等奖为3,如图所示,对应的抽奖结果会将二等奖的优先级提前,此时抽奖顺序为二等奖>一等奖>三等奖。
需注意,抽奖只抽取非管理员角色的用户!
附:抽奖核心代码,项目源码中有详细注释供学习!
//抽奖功能核心代码
@GetMapping
public Result raffle() {
//筛选出来所有字段role等于ROLE_USER的用户
List<User> userList = userService.list(new LambdaQueryWrapper<User>().eq(User::getRole, "ROLE_USER"));
//把所有已经开启的奖项根据优先级查询出来
List<Award> awardList = awardService.list(new LambdaQueryWrapper<Award>().eq(Award::getEnable,"是").orderByAsc(Award::getSort));
//遍历所有奖项
for (Award award:awardList) {
//定义一个空数组,用于存放某一个奖项的中奖用户
//比如说三等奖中奖的是哪几个用户
List<User> list = new ArrayList<>();
//设置这个奖项的中奖用户
//此时数组仍为空,用于存放中奖用户
award.setUserList(list);
//遍历每一个奖项,获取每一个奖项最多能够获奖人数
for (int i = 0; i < award.getNum(); i++) {
//如果奖项总数量大于所有用户数量
//也就是所有的用户都中奖了
//break结束遍历
if (userList.size()==0) break;
//通过用户数组获取一个随机数
//比如现在用户一共有10个,生成一个0-9之间的随机数
int num = RandomUtil.randomInt(0, userList.size());
//通过刚才生成的随机数num
//比如说生成的是0
//通过用户数组获取下标为0的用户数据
User user = userList.get(num);
//把刚才得到的用户数据放到这个奖项获奖的用户数组中
award.getUserList().add(user);
//把刚才已经得奖的用户在数组中通过下标去除
userList.remove(num);
}
}
return Result.success(awardList);
}
1.2.3 用户管理
2、项目技术栈
后端: SpringBoot+Mybatis-Plus
前端: Vue+ElementUI+Axios
数据库: Mysql
模式:前后端分离
3、项目创新点
(1)随机抽奖功能优先级设定
(2)巧妙的数据库动态关联数据,多表数据关联查询
(3)登录页面使用验证码
源码: