目录一、获取竞赛详情1.1 功能梳理1.2 controller1.3 service二、竞赛编辑2.1 功能梳理2.2 controller2.3 service三、竞赛删除3.1 功能梳理3.2 controller3.3 service一、获取竞赛详情1.1 功能梳理竞赛详情功能:前端携带竟赛id向后端发起获取竞赛详情的请求后端接收到请求之后根据竞赛id从数据库中查询竞赛详情信息。并将查询结果返回前端。前端接收后端响应之后如果成功在也面中展示竞赛详情信息。如果失败提示用户失败原因。1.2 controlleroj-modules/oj-system/src/main/java/com/yj/system/controller/exam/ExamController.javaGetMapping(/detail)publicRExamDetailVOdetail(NotBlankLongexamId){returnR.success(examService.detail(examId));}返回参数需要返回竞赛的基本信息如果有题目的话还需要返回题目的id标题难度等信息packagecom.yj.system.domain.exam.vo;importcom.fasterxml.jackson.annotation.JsonFormat;importcom.fasterxml.jackson.annotation.JsonInclude;importcom.yj.system.domain.question.vo.QuestionVO;importlombok.Getter;importlombok.Setter;importjava.time.LocalDateTime;importjava.util.List;GetterSetterJsonInclude(JsonInclude.Include.NON_NULL)publicclassExamDetailVO{privateStringtitle;JsonFormat(patternyyyy-MM-dd HH:mm:ss)privateLocalDateTimestartTime;JsonFormat(patternyyyy-MM-dd HH:mm:ss)privateLocalDateTimeendTime;privateListQuestionVOexamQuestionList;}1.3 serviceoj-modules/oj-system/src/main/java/com/yj/system/service/exam/IExamService.java接口方法ExamDetailVOdetail(LongexamId);oj-modules/oj-system/src/main/java/com/yj/system/service/exam/impl/ExamServiceImpl.java实现OverridepublicExamDetailVOdetail(LongexamId){ExamDOexamDOgetExamDO(examId);ExamDetailVOexamDetailVOnewExamDetailVO();BeanUtil.copyProperties(examDO,examDetailVO);ListExamQuestionDOexamQuestionDOSexamQuestionMapper.selectList(newLambdaQueryWrapperExamQuestionDO().select(ExamQuestionDO::getQuestionId).eq(ExamQuestionDO::getExamId,examId).orderByAsc(ExamQuestionDO::getQuestionOrder));//没有题目返回基本信息if(CollectionUtil.isEmpty(examQuestionDOS)){returnexamDetailVO;}//有题目取id、标题、难度然后赋值ListLongquestionIdListexamQuestionDOS.stream().map(ExamQuestionDO::getExamQuestionId).toList();ListQuestionDOquestionDOSquestionMapper.selectList(newLambdaQueryWrapperQuestionDO().select(QuestionDO::getQuestionId,QuestionDO::getDifficulty,QuestionDO::getTitle).in(QuestionDO::getQuestionId,questionIdList));ListQuestionVOquestionVOSBeanUtil.copyToList(questionDOS,QuestionVO.class);examDetailVO.setExamQuestionList(questionVOS);returnexamDetailVO;}二、竞赛编辑2.1 功能梳理竞赛基本信息进行编辑:输入或者选择更新后端的数据点击保存前端携带着更新后的数据以及竞赛id向后端发起编辑题目基本信息的请求。后端接收到请求之后根据竞赛id找到要编辑的竞赛然后根据请求参数对竞赛数据进行更新并且将跟新结果要同步到数据中。并将编辑结果返回前端。前端接收后端响应之后如果成功展示竞赛编辑后得信息并且返回题目列表是看到的题目信息也是更新后得。如果失败提示用户失败原因。并且所展示的信息还是之前题目的信息。竞赛中题目信息的编辑功能 竞赛中题目添加功能竞赛中题目删除功能竞赛中题目删除功能:4. 找到竞赛中要删除的题目点击删除按钮前端携带着竞赛id和题目id向后端发起删除竞赛中题目的请求。5. 后端接收到请求之后查出要删除的竞赛并且判断是否能够进行操作。如果不能操作返回前端不能操作的原因。如果能操作开始进行竞赛中题目的删除操作。根据题目id找到要被删除的题目进行删除操作。(删除数据中对应的竞赛中的题目数据)并且将删除结果返回前端。6. 前端接收响应如果成功竞赛题目列表中对应的题目将消失。如果失败提示失败原因。2.2 controlleroj-modules/oj-system/src/main/java/com/yj/system/controller/exam/ExamController.javaPutMapping(/edit)publicRVoidedit(RequestBodyValidatedExamEditDTOexamEditDTO){returntoR(examService.edit(examEditDTO));}DeleteMapping(/question/delete)publicRVoidquestionDelete(NotBlankLongexamId,NotBlankLongquestionId){returntoR(examService.questionDelete(examId,questionId));}编辑基本信息的接收参数只是在ExamAddDTO的基础上多了一个竞赛idpackagecom.yj.system.domain.exam.dto;importcom.fasterxml.jackson.databind.annotation.JsonSerialize;importcom.fasterxml.jackson.databind.ser.std.ToStringSerializer;importjakarta.validation.constraints.NotBlank;importlombok.Getter;importlombok.Setter;GetterSetterpublicclassExamEditDTOextendsExamAddDTO{JsonSerialize(usingToStringSerializer.class)NotBlankprivateLongexamId;}2.3 serviceoj-modules/oj-system/src/main/java/com/yj/system/service/exam/IExamService.java接口方法intedit(ExamEditDTOexamEditDTO);intquestionDelete(LongexamId,LongquestionId);oj-modules/oj-system/src/main/java/com/yj/system/service/exam/impl/ExamServiceImpl.java实现Overridepublicintedit(ExamEditDTOexamEditDTO){//拿竞赛ExamDOexamDOgetExamDO(examEditDTO.getExamId());//竞赛是否开始checkExamStarted(examDO);//竞赛已发布不能操作extracted(examDO);//校验参数checkExamSaveParams(examEditDTO,examEditDTO.getExamId());//赋值examDO.setTitle(examEditDTO.getTitle());examDO.setStartTime(examEditDTO.getStartTime());examDO.setEndTime(examEditDTO.getEndTime());returnexamMapper.updateById(examDO);}OverridepublicintquestionDelete(LongexamId,LongquestionId){//查询竞赛是否存在ExamDOexamDOgetExamDO(examId);//竞赛是否开始checkExamStarted(examDO);//查询要删除的题目是否存在QuestionDOquestionDOquestionMapper.selectById(questionId);if(nullquestionDO){thrownewServiceException(ResultCodeEnum.EXAM_QUESTION_NOT_EXISTS);}//删除returnexamQuestionMapper.delete(newLambdaQueryWrapperExamQuestionDO().eq(ExamQuestionDO::getExamId,examId).eq(ExamQuestionDO::getExamQuestionId,questionId));}三、竞赛删除3.1 功能梳理竞赛删除删除竞赛基本信息(tb_exam)删除竞赛对应的题目信息(tb_exam_question)找到要删除的竞赛点击删除按钮。前端携带竞赛id向后端发起删除竞赛请求后端接收到请求之后根据竞赛i(先判断竞赛是否存在竞赛是否开赛)删除竞赛基本信息(tb.exam)和竞赛对应的题目信息(tb_exam_question)。并且将删除结果返回前端。前端接收到响应之后如果成功竞赛列表中不再返回该竞赛。如果失败返回失败原因。3.2 controlleroj-modules/oj-system/src/main/java/com/yj/system/controller/exam/ExamController.javaDeleteMapping(/delete)publicRVoiddelete(NotBlankLongexamId){returntoR(examService.delete(examId));}3.3 serviceoj-modules/oj-system/src/main/java/com/yj/system/service/exam/IExamService.javaintdelete(LongexamId);oj-modules/oj-system/src/main/java/com/yj/system/service/exam/impl/ExamServiceImpl.javaOverridepublicintdelete(LongexamId){//查询竞赛ExamDOexamDOgetExamDO(examId);//是否开赛checkExamStarted(examDO);//竞赛已发布不能操作extracted(examDO);//删除竞赛题目examQuestionMapper.delete(newLambdaQueryWrapperExamQuestionDO().eq(ExamQuestionDO::getExamId,examId));//删除竞赛returnexamMapper.deleteById(examId);}
阅读完成 · 觉得有帮助?