SpringBoot+React学科竞赛管理系统 附带详细运行指导视频

这篇具有很好参考价值的文章主要介绍了SpringBoot+React学科竞赛管理系统 附带详细运行指导视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、项目演示

项目演示地址: 视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot+React框架开发的学科竞赛管理系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个学科竞赛管理系统系统该有的所有功能。

项目功能:此项目分为三个角色:学生、老师和管理员学生有登录、修改个人信息、浏览学生、老师和管理员信息、报名竞赛、上传作品、修改删除作品、浏览成绩信息、管理个人评论信息、浏览公告信息等等功能。老师有管理学生信息、浏览老师和管理员信息、修改个人信息、管理竞赛信息、审核或导出报名信息、打分作品、修改成绩、管理评论信息、发布公告信息等等功能。管理员除了具备老师的功能之外,还有管理老师信息的功能。

应用技术:SpringBoot + React + MySQL + MyBatis + Redis + Antd

运行环境:IntelliJ IDEA2019.3.5 + MySQL5.7(项目压缩包中自带) + Redis5.0.5(项目压缩包中自带) + JDK1.8 + Maven3.6.3(项目压缩包中自带)+ Node14.16.1(项目压缩包中自带)

三、运行截图

SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端

SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端
SpringBoot+React学科竞赛管理系统 附带详细运行指导视频,项目介绍,spring boot,react.js,后端

四、主要代码

1.竞赛发布和修改的代码:

   /**
   * 保存竞赛信息
   * @param contestDTO
   * @return
   */
  @Override
  public ResponseDTO<Boolean> saveContest(ContestDTO contestDTO) {
      // 进行统一表单验证
      CodeMsg validate = ValidateEntityUtil.validate(contestDTO);
      if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
          return ResponseDTO.errorByMsg(validate);
      }
      Contest contest = CopyUtil.copy(contestDTO, Contest.class);
      if(CommonUtil.isEmpty(contest.getId())) {
          // 添加操作
          contest.setId(UuidUtil.getShortUuid());
          contest.setCreateTime(new Date());
          if(contestMapper.insertSelective(contest) == 0) {
              return ResponseDTO.errorByMsg(CodeMsg.CONTEST_ADD_ERROR);
          }
      } else {
          // 修改操作
          if(contestMapper.updateByPrimaryKeySelective(contest) == 0) {
              return ResponseDTO.errorByMsg(CodeMsg.CONTEST_EDIT_ERROR);
          }
          if(ContestStateEnum.OVER.getCode().equals(contestDTO.getState())) {
              // 已结束的竞赛计算作品排名
              ResultExample resultExample = new ResultExample();
              resultExample.createCriteria().andContestIdEqualTo(contestDTO.getId());
              resultExample.setOrderByClause("score desc");
              List<Result> resultList = resultMapper.selectByExample(resultExample);
              int rank = 1;
              for(Result result : resultList) {
                  result.setRank(rank);
                  resultMapper.updateByPrimaryKeySelective(result);
                  rank++;
              }
          }
      }
      return ResponseDTO.successByMsg(true, "保存竞赛信息成功!");
  }

2.获取作品列表数据的代码:

     /**
     * 分页获取作品数据
     * @param pageDTO
     * @return
     */
    @Override
    public ResponseDTO<PageDTO<WorkDTO>> getWorkList(PageDTO<WorkDTO> pageDTO) {
        WorkExample workExample = new WorkExample();
        // 不知道当前页多少,默认为第一页
        if(pageDTO.getPage() == null){
            pageDTO.setPage(1);
        }
        // 不知道每页多少条记录,默认为每页5条记录
        if(pageDTO.getSize() == null){
            pageDTO.setSize(5);
        }
        WorkExample.Criteria c1 = workExample.createCriteria();
        if(pageDTO.getParam() != null) {
            WorkDTO workDTO = pageDTO.getParam();
            ResponseDTO<UserDTO> loginUser = userService.getLoginUser(workDTO.getToken());
            if(loginUser.getCode() != 0) {
                pageDTO.setTotal(0l);
                pageDTO.setList(new ArrayList<>());
                return ResponseDTO.success(pageDTO);
            }
            UserDTO loginUserDTO = loginUser.getData();

            if(RoleEnum.TEACHER.getCode().equals(loginUserDTO.getRoleId())) {
                // 老师用户只能看到自己竞赛的作品信息
                ContestExample contestExample = new ContestExample();
                contestExample.createCriteria().andUserIdEqualTo(loginUserDTO.getId());
                List<String> contestIdList = contestMapper.selectByExample(contestExample).stream().map(Contest::getId).collect(Collectors.toList());
                if(contestIdList.size() > 0) {
                    c1.andContestIdIn(contestIdList);
                } else {
                    PageInfo<Sign> pageInfo = new PageInfo<>(new ArrayList<>());
                    // 获取数据的总数
                    pageDTO.setTotal(pageInfo.getTotal());
                    pageDTO.setList(new ArrayList<>());
                    return ResponseDTO.success(pageDTO);
                }
            }


            if(!CommonUtil.isEmpty(workDTO.getContestId())) {
                c1.andContestIdEqualTo(workDTO.getContestId());
            }


            if(RoleEnum.STUDENT.getCode().equals(loginUserDTO.getRoleId())) {
                // 学生用户只能看到自己的信息
                c1.andUserIdEqualTo(loginUserDTO.getId());
            }
        }
        workExample.setOrderByClause("update_time desc");
        PageHelper.startPage(pageDTO.getPage(), pageDTO.getSize());
        // 分页查出作品数据
        List<Work> workList = workMapper.selectByExample(workExample);
        PageInfo<Work> pageInfo = new PageInfo<>(workList);
        // 获取数据的总数
        pageDTO.setTotal(pageInfo.getTotal());
        // 将domain类型数据  转成 DTO类型数据
        List<WorkDTO> workDTOList = CopyUtil.copyList(workList, WorkDTO.class);
        for(WorkDTO workDTO : workDTOList) {
            User user = userMapper.selectByPrimaryKey(workDTO.getUserId());
            if(user == null) {
                workDTO.setUserDTO(new UserDTO());
            } else {
                workDTO.setUserDTO(CopyUtil.copy(user, UserDTO.class));
            }
            Contest contest = contestMapper.selectByPrimaryKey(workDTO.getContestId());
            if(contest == null) {
                workDTO.setContestDTO(new ContestDTO());
            } else {
                workDTO.setContestDTO(CopyUtil.copy(contest, ContestDTO.class));
            }
        }
        pageDTO.setList(workDTOList);
        return ResponseDTO.success(pageDTO);
    }

3.导出报名信息到Excel的代码:文章来源地址https://www.toymoban.com/news/detail-573063.html

     /**
     * 导出Excel文件
     * @param pageDTO
     * @return
     */
    @Override
    public ResponseDTO<Map<String, Object>> exportExcel(PageDTO<SignDTO> pageDTO) {
        pageDTO.setPaging(PagingEnum.NO.getCode());
        ResponseDTO<PageDTO<SignDTO>> signList = getSignList(pageDTO);
        List<SignDTO> signDTOList = signList.getData().getList();
        for(SignDTO signDTO : signDTOList) {
            signDTO.setUsername(signDTO.getUserDTO().getUsername());
            signDTO.setNo(signDTO.getUserDTO().getNo());
            signDTO.setTitle(signDTO.getContestDTO().getTitle());
            if(SignStateEnum.WAIT.getCode().equals(signDTO.getState())) {
                signDTO.setStateName(SignStateEnum.WAIT.getDesc());
            } else if(SignStateEnum.SUCCESS.getCode().equals(signDTO.getState())) {
                signDTO.setStateName(SignStateEnum.SUCCESS.getDesc());
            } else if(SignStateEnum.FAIL.getCode().equals(signDTO.getState())) {
                signDTO.setStateName(SignStateEnum.FAIL.getDesc());
            }
        }
        // Excel配置
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("报名情况汇总表","报名情况汇总表"), SignDTO.class, signDTOList);
        try{
            Map<String, Object> responseMap = new HashMap<>();
            String savePath = uploadPhotoPath + CommonUtil.getFormatterDate(new Date(), "yyyyMMdd") + "\\";
            File savePathFile = new File(savePath);
            if(!savePathFile.exists()){
                //若不存在改目录,则创建目录
                savePathFile.mkdir();
            }
            String filename = new Date().getTime()+".xlsx";
            FileOutputStream outputStream = new FileOutputStream(savePath + filename);
            responseMap.put("fileName", "报名情况汇总表.xlsx");
            responseMap.put("filePath", CommonUtil.getFormatterDate(new Date(), "yyyyMMdd") + "/" + filename);
            workbook.write(outputStream);
            outputStream.close();
            workbook.close();
            return ResponseDTO.successByMsg(responseMap, "导出Excel成功!");
        }catch(Exception e){
            e.printStackTrace();
            return ResponseDTO.errorByMsg(CodeMsg.FILE_EXPORT_ERROR);
        }
    }

到了这里,关于SpringBoot+React学科竞赛管理系统 附带详细运行指导视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot+Vue充电桩管理系统 附带详细运行指导视频

    项目演示地址: 视频地址 项目描述:这是一个 基于SpringBoot+Vue框架 开发的充电桩管理系统。首先,这是一个 前后端分离 的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个充电桩管理系统该有的所有功能。 项目功能:此项目分为

    2024年01月21日
    浏览(22)
  • 基于SpringBoot的高校竞赛管理系统

    基于SpringBoot的高校竞赛管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBoot+MyBatis 工具:IDEA/Ecilpse、Navicat、Maven 主页 个人中心 管理员界面 老师界面   高校竞赛管理系统是为了有效管理学校内外各类竞赛活动而设计的一种信息化管理系统。本文基于SpringB

    2024年02月20日
    浏览(30)
  • springboot小程序的竞赛管理系统-附源码71209

    随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景, 运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数库来完成对系统的设计。整个开发过程首先对竞赛管理系统进行需

    2024年02月02日
    浏览(30)
  • SpringBoot+Vue实现的高校图书馆管理系统 附带详细运行指导视频

    项目演示地址: 视频地址 项目描述:这是一个基于 SpringBoot+Vue 框架开发的高校图书馆管理系统。首先,这是一个 前后端分离 的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个高校图书馆管理系统该有的所有功能。 项目功能:此项

    2023年04月26日
    浏览(38)
  • 基于小程序的文章管理系统+springboot+vue.js附带文章和源代码设计说明文档ppt

    🌞 博主介绍 :✌CSDN特邀作者、985计算机专业毕业、某互联网大厂高级全栈开发程序员、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序、前端、python等技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导、面试辅导、简

    2024年02月19日
    浏览(28)
  • 基于小程序的设备故障报修管理系统+springboot+vue.js附带文章和源代码说明文档ppt

    🌞 博主介绍 :✌CSDN特邀作者、985计算机专业毕业、某互联网大厂高级全栈开发程序员、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序、前端、python等技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导、面试辅导、简

    2024年02月22日
    浏览(31)
  • 基于Web的小学学科数字教学资源管理系统

    摘要 小学学科数字教学资源管理 是一个典型的 学习 项目,从教学资源、教材信息的统计和分析,在过程中会产生大量的、各种各样的数据。本文以小学学科数字教学资源管理系统为目标, 采用B/S模式, 以 Springboot 为开发 框架 , java为开发语言、 Eclipse 为开发 工具 , My

    2024年02月11日
    浏览(33)
  • 用Python实现一个图书管理系统(附带源码)

    目录 一、题目信息 二、分析 三、主函数 四、总结 实现一个图书管理系统,要求有学生信息管理、图书信息管理和图书借阅管理三大功能。 创建一个LMS类 1.学生信息管理:具有添加学生和删除学生两个功能,并将学生存在Student列表中。在删除学生时,如果学生还有未归还书

    2024年02月11日
    浏览(33)
  • java web人事管理系统 完整源码 附带详细的设计报告

    今天为大家分享一个java web编写的人事管理系统,目前系统功能已经完善,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步。 开发语言为Java,开发环境Eclipse或者IDEA都可以。数据库采用:MySQL。 本项目

    2024年02月09日
    浏览(24)
  • Java连接MySQL实现增删改查--学生管理系统(附带注释源码!!!)

    项目源代码分享 Java的安装 java.jdk 3.8 安装Eclipse MySQL的安装 Navicat (测试使用的是 11. 1.13) 先了解整体流程再学具体代码,附件中代码都有注释 数据库的连接 数据准备 提前导入jar包 在工程下先新建一个 lib文件夹 把jar包复制进去然后右键构建路径 ,点击添加至构建路径,如

    2024年01月24日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包