文章目录
- 一、项目演示
- 二、项目介绍
- 三、运行截图
- 四、主要代码
- 1.报名赛事代码
- 2.用户登录代码
- 3.保存成绩代码
一、项目演示
项目演示地址: 视频地址
二、项目介绍
项目描述:这是一个基于SpringBoot框架开发的高校运动会管理系统项目。首先,这是一个响应式的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目在报名赛事功能上采用了ZooKeeper分布式锁进行高并发情况下的功能优化设计,如果不想要Zookeeper,也会免费指导如何去除,不会影响现有功能。最后,这项目功能丰富,具有一个高校运动会管理系统该有的所有功能。
项目功能:该项目分为学生和管理员两个角色。学生有登录、管理个人信息、查看运动会信息、查看赛事信息、报名赛事、管理个人报名信息、查看成绩信息、查看公告信息等等功能。管理员有管理所有用户信息、管理所有运动会信息、管理所有赛事信息、管理所有报名信息、管理所有成绩信息、管理所有公告信息等等功能。
应用技术:SpringBoot + MyBatis + Thymeleaf + Bootstrap + MySQL + ZooKeeper
运行环境:IntelliJ IDEA(项目压缩包中自带) + MySQL(项目压缩包中自带) + Maven3.6.3(项目压缩包中自带) + JDK1.8(项目压缩包中自带) + ZooKeeper3.8.4(项目压缩包中自带)
三、运行截图
四、主要代码
1.报名赛事代码
/**
* 报名赛事
* @param signDTO
* @return
*/
@Override
public ResponseDTO<Boolean> signContest(SignDTO signDTO, HttpServletRequest request) {
if(CommonUtil.isEmpty(signDTO.getContestId())) {
return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
}
User user = (User) request.getSession().getAttribute(SessionConstant.SESSION_LOGIN_KEY);
Contest contest = contestMapper.selectByPrimaryKey(signDTO.getContestId());
if(contest == null) {
return ResponseDTO.errorByMsg(CodeMsg.CONTEST_NOT_EXIST);
}
if(contest.getSignEndTime().getTime() <= new Date().getTime()) {
return ResponseDTO.errorByMsg(CodeMsg.SIGN_DATE_OVER);
}
if(contest.getNowSignNum() >= contest.getMaxSignNum()) {
return ResponseDTO.errorByMsg(CodeMsg.SIGN_NUM_ERROR);
}
SignExample signExample = new SignExample();
signExample.createCriteria().andUserIdEqualTo(user.getId()).andContestIdEqualTo(contest.getId());
List<Sign> signList = signMapper.selectByExample(signExample);
if(signList.size() > 0) {
return ResponseDTO.errorByMsg(CodeMsg.SIGN_CONTEST_EXIST);
}
Sign sign = CopyUtil.copy(signDTO, Sign.class);
sign.setId(UuidUtil.getShortUuid());
sign.setUserId(user.getId());
sign.setCreateTime(new Date());
if(signMapper.insertSelective(sign) == 0) {
throw new RuntimeException(CodeMsg.SIGN_ADD_ERROR.getMsg());
}
contest.setNowSignNum(contest.getNowSignNum() + 1);
if(contestMapper.updateByPrimaryKeySelective(contest) == 0) {
throw new RuntimeException(CodeMsg.CONTEST_EDIT_ERROR.getMsg());
}
return ResponseDTO.successByMsg(true, "报名成功");
}
2.用户登录代码
/**
* 用户登录操作
* @param userDTO
* @param request
* @return
*/
@Override
public ResponseDTO<Boolean> login(UserDTO userDTO, HttpServletRequest request) {
if(userDTO == null) {
return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
}
if(CommonUtil.isEmpty(userDTO.getNo())) {
return ResponseDTO.errorByMsg(CodeMsg.NO_EMPTY);
}
if(CommonUtil.isEmpty(userDTO.getPassword())) {
return ResponseDTO.errorByMsg(CodeMsg.PASSWORD_EMPTY);
}
UserExample userExample = new UserExample();
userExample.createCriteria()
.andNoEqualTo(userDTO.getNo())
.andPasswordEqualTo(userDTO.getPassword())
.andRoleIdEqualTo(userDTO.getRoleId());
List<User> userList = userMapper.selectByExample(userExample);
if(userList.size() == 0) {
return ResponseDTO.errorByMsg(CodeMsg.NO_PASSWORD_ERROR);
}
request.getSession().setAttribute(SessionConstant.SESSION_LOGIN_KEY, userList.get(0));
return ResponseDTO.successByMsg(true, "登录成功!");
}
3.保存成绩代码
/**
* 保存成绩信息
* @param resultDTO
* @return
*/
@Override
public ResponseDTO<Boolean> save(ResultDTO resultDTO) {
if(resultDTO == null) {
return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
}
// 进行统一表单验证
CodeMsg validate = ValidateEntityUtil.validate(resultDTO);
if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
return ResponseDTO.errorByMsg(validate);
}
UserExample userExample = new UserExample();
userExample.createCriteria().andNoEqualTo(resultDTO.getUserNo());
List<User> userList = userMapper.selectByExample(userExample);
if(userList.size() == 0) {
return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);
}
Contest contest = contestMapper.selectByPrimaryKey(resultDTO.getContestId());
if(contest == null) {
return ResponseDTO.errorByMsg(CodeMsg.CONTEST_NOT_EXIST);
}
User user = userList.get(0);
// 判断是否有报名
SignExample signExample = new SignExample();
signExample.createCriteria().andContestIdEqualTo(contest.getId()).andUserIdEqualTo(user.getId());
if(signMapper.countByExample(signExample) == 0) {
return ResponseDTO.errorByMsg(CodeMsg.CONTEST_NOT_SIGN);
}
Result result = CopyUtil.copy(resultDTO, Result.class);
result.setUserId(user.getId());
if(CommonUtil.isEmpty(result.getId())){
// 添加操作
// 判断成绩信息是否存在
if(isResultExist(result, "")){
return ResponseDTO.errorByMsg(CodeMsg.RESULT_EXIST);
}
result.setId(UuidUtil.getShortUuid());
if(resultMapper.insertSelective(result) == 0){
return ResponseDTO.errorByMsg(CodeMsg.RESULT_ADD_ERROR);
}
}else {
// 修改操作
// 判断成绩信息是否存在
if(isResultExist(result, result.getId())){
return ResponseDTO.errorByMsg(CodeMsg.RESULT_EXIST);
}
if(resultMapper.updateByPrimaryKeySelective(result) == 0){
return ResponseDTO.errorByMsg(CodeMsg.RESULT_EDIT_ERROR);
}
}
return ResponseDTO.success(true);
}