From 247cb86585a1d1894596ed18a6c93efecb992946 Mon Sep 17 00:00:00 2001 From: luohairen <3399054449@qq.com> Date: 星期四, 14 十一月 2024 10:34:27 +0800 Subject: [PATCH] 班级成绩图表分析 --- src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java | 196 ++++++++++++++++++++++++++++-------------------- 1 files changed, 115 insertions(+), 81 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java index cef0325..fcda5ea 100644 --- a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java +++ b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java @@ -1,119 +1,153 @@ package com.ycl.jxkg.controller.student; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.github.pagehelper.PageInfo; import com.ycl.jxkg.base.BaseApiController; -import com.ycl.jxkg.base.RestResponse; -import com.ycl.jxkg.domain.*; -import com.ycl.jxkg.domain.enums.ExamPaperAnswerStatusEnum; -import com.ycl.jxkg.event.CalculateExamPaperAnswerCompleteEvent; -import com.ycl.jxkg.event.UserEvent; -import com.ycl.jxkg.service.ExamPaperAnswerService; +import com.ycl.jxkg.base.Result; +import com.ycl.jxkg.domain.ExamPaperAnswerInfo; +import com.ycl.jxkg.domain.entity.ExamPaperScore; +import com.ycl.jxkg.domain.entity.User; +import com.ycl.jxkg.domain.vo.DoQuestionVO; +import com.ycl.jxkg.domain.vo.PaperFixQuestionVO; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkNavbarVO; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperScoreVO; +import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO; +import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO; +import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageVO; +import com.ycl.jxkg.domain.vo.student.wrong.CheckWrongVO; +import com.ycl.jxkg.mapper.ExamPaperMapper; +import com.ycl.jxkg.mapper.ExamPaperScoreMapper; +import com.ycl.jxkg.service.ExamPaperScoreService; import com.ycl.jxkg.service.ExamPaperService; import com.ycl.jxkg.service.SubjectService; -import com.ycl.jxkg.utility.DateTimeUtil; -import com.ycl.jxkg.utility.ExamUtil; -import com.ycl.jxkg.utility.PageInfoHelper; -import com.ycl.jxkg.viewmodel.admin.exam.ExamPaperEditRequestVM; -import com.ycl.jxkg.viewmodel.student.exam.ExamPaperReadVM; -import com.ycl.jxkg.viewmodel.student.exam.ExamPaperSubmitVM; -import com.ycl.jxkg.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM; -import com.ycl.jxkg.viewmodel.student.exampaper.ExamPaperAnswerPageVM; -import com.github.pagehelper.PageInfo; -import org.springframework.beans.factory.annotation.Autowired; +import com.ycl.jxkg.service.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; import org.springframework.context.ApplicationEventPublisher; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; -import java.util.Date; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +@RequiredArgsConstructor @RestController("StudentExamPaperAnswerController") @RequestMapping(value = "/api/student/exampaper/answer") public class ExamPaperAnswerController extends BaseApiController { - private final ExamPaperAnswerService examPaperAnswerService; + private final ExamPaperScoreService examPaperScoreService; + private final UserService userService; private final ExamPaperService examPaperService; private final SubjectService subjectService; private final ApplicationEventPublisher eventPublisher; - - @Autowired - public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, ExamPaperService examPaperService, SubjectService subjectService, ApplicationEventPublisher eventPublisher) { - this.examPaperAnswerService = examPaperAnswerService; - this.examPaperService = examPaperService; - this.subjectService = subjectService; - this.eventPublisher = eventPublisher; - } + private final ExamPaperScoreMapper examPaperScoreMapper; + private final ExamPaperMapper examPaperMapper; @RequestMapping(value = "/pageList", method = RequestMethod.POST) - public RestResponse<PageInfo<ExamPaperAnswerPageResponseVM>> pageList(@RequestBody @Valid ExamPaperAnswerPageVM model) { + public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageList(@RequestBody @Valid ExamPaperAnswerPageVO model) { model.setCreateUser(getCurrentUser().getId()); - PageInfo<ExamPaperAnswer> pageInfo = examPaperAnswerService.studentPage(model); - PageInfo<ExamPaperAnswerPageResponseVM> page = PageInfoHelper.copyMap(pageInfo, e -> { - ExamPaperAnswerPageResponseVM vm = modelMapper.map(e, ExamPaperAnswerPageResponseVM.class); - Subject subject = subjectService.selectById(vm.getSubjectId()); - vm.setDoTime(ExamUtil.secondToVM(e.getDoTime())); - vm.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore())); - vm.setUserScore(ExamUtil.scoreToVM(e.getUserScore())); - vm.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore())); - vm.setSubjectName(subject.getName()); - vm.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime())); - return vm; - }); - return RestResponse.ok(page); + PageInfo<ExamPaperAnswerPageResponseVO> page = examPaperScoreService.studentPage(model); + return Result.ok(page); } @RequestMapping(value = "/answerSubmit", method = RequestMethod.POST) - public RestResponse answerSubmit(@RequestBody @Valid ExamPaperSubmitVM examPaperSubmitVM) { + public Result answerSubmit(@RequestBody @Valid ExamPaperSubmitVO examPaperSubmitVO) { User user = getCurrentUser(); - ExamPaperAnswerInfo examPaperAnswerInfo = examPaperAnswerService.calculateExamPaperAnswer(examPaperSubmitVM, user); + ExamPaperAnswerInfo examPaperAnswerInfo = examPaperScoreService.calculateExamPaperAnswer(examPaperSubmitVO, user); if (null == examPaperAnswerInfo) { - return RestResponse.fail(2, "璇曞嵎涓嶈兘閲嶅鍋�"); + return Result.fail(2, "璇曞嵎涓嶈兘閲嶅鍋�"); } - ExamPaperAnswer examPaperAnswer = examPaperAnswerInfo.getExamPaperAnswer(); - Integer userScore = examPaperAnswer.getUserScore(); - String scoreVm = ExamUtil.scoreToVM(userScore); - UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date()); - String content = user.getUserName() + " 鎻愪氦璇曞嵎锛�" + examPaperAnswerInfo.getExamPaper().getName() - + " 寰楀垎锛�" + scoreVm - + " 鑰楁椂锛�" + ExamUtil.secondToVM(examPaperAnswer.getDoTime()); - userEventLog.setContent(content); - eventPublisher.publishEvent(new CalculateExamPaperAnswerCompleteEvent(examPaperAnswerInfo)); - eventPublisher.publishEvent(new UserEvent(userEventLog)); - return RestResponse.ok(scoreVm); +// ExamPaperScore examPaperScore = examPaperAnswerInfo.getExamPaperScore(); +// Integer userScore = examPaperScore.getUserScore(); +// String scoreVm = ExamUtil.scoreToVM(userScore); +// UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date()); +// String content = user.getUserName() + " 鎻愪氦璇曞嵎锛�" + examPaperAnswerInfo.getExamPaper().getName() +// + " 寰楀垎锛�" + scoreVm +// + " 鑰楁椂锛�" + ExamUtil.secondToVM(examPaperScore.getDoTime()); +// userEventLog.setContent(content); +// eventPublisher.publishEvent(new CalculateExamPaperAnswerCompleteEvent(examPaperAnswerInfo)); +// eventPublisher.publishEvent(new UserEvent(userEventLog)); +// return Result.ok(scoreVm); + return Result.ok(); } - @RequestMapping(value = "/edit", method = RequestMethod.POST) - public RestResponse edit(@RequestBody @Valid ExamPaperSubmitVM examPaperSubmitVM) { - boolean notJudge = examPaperSubmitVM.getAnswerItems().stream().anyMatch(i -> i.getDoRight() == null && i.getScore() == null); - if (notJudge) { - return RestResponse.fail(2, "鏈夋湭鎵规敼棰樼洰"); - } - - ExamPaperAnswer examPaperAnswer = examPaperAnswerService.selectById(examPaperSubmitVM.getId()); - ExamPaperAnswerStatusEnum examPaperAnswerStatusEnum = ExamPaperAnswerStatusEnum.fromCode(examPaperAnswer.getStatus()); - if (examPaperAnswerStatusEnum == ExamPaperAnswerStatusEnum.Complete) { - return RestResponse.fail(3, "璇曞嵎宸插畬鎴�"); - } - String score = examPaperAnswerService.judge(examPaperSubmitVM); - User user = getCurrentUser(); - UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date()); - String content = user.getUserName() + " 鎵规敼璇曞嵎锛�" + examPaperAnswer.getPaperName() + " 寰楀垎锛�" + score; - userEventLog.setContent(content); - eventPublisher.publishEvent(new UserEvent(userEventLog)); - return RestResponse.ok(score); + public Result edit(@RequestBody @Valid ExamPaperSubmitVO examPaperSubmitVO) { +// boolean notJudge = examPaperSubmitVO.getAnswerItems().stream().anyMatch(i -> i.getDoRight() == null && i.getScore() == null); +// if (notJudge) { +// return Result.fail(2, "鏈夋湭鎵规敼棰樼洰"); +// } +// +// ExamPaperScore examPaperScore = examPaperScoreService.getById(examPaperSubmitVO.getId()); +// ExamPaperAnswerStatusEnum examPaperAnswerStatusEnum = ExamPaperAnswerStatusEnum.fromCode(examPaperScore.getStatus()); +// if (examPaperAnswerStatusEnum == ExamPaperAnswerStatusEnum.Complete) { +// return Result.fail(3, "璇曞嵎宸插畬鎴�"); +// } + String score = examPaperScoreService.judge(examPaperSubmitVO); +// User user = getCurrentUser(); +// UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date()); +// String content = user.getUserName() + " 鎵规敼璇曞嵎锛�" + examPaperScore.get() + " 寰楀垎锛�" + score; +// userEventLog.setContent(content); +// eventPublisher.publishEvent(new UserEvent(userEventLog)); + return Result.ok(score); } @RequestMapping(value = "/read/{id}", method = RequestMethod.POST) - public RestResponse<ExamPaperReadVM> read(@PathVariable Integer id) { - ExamPaperAnswer examPaperAnswer = examPaperAnswerService.selectById(id); - ExamPaperReadVM vm = new ExamPaperReadVM(); - ExamPaperEditRequestVM paper = examPaperService.examPaperToVM(examPaperAnswer.getExamPaperId()); - ExamPaperSubmitVM answer = examPaperAnswerService.examPaperAnswerToVM(examPaperAnswer.getId()); - vm.setPaper(paper); - vm.setAnswer(answer); - return RestResponse.ok(vm); + public Result<ExamPaperScoreVO> read(@PathVariable Integer id) { + ExamPaperScore examPaperScore = examPaperScoreService.getById(id); + ExamPaperScoreVO examPaperScoreVO = new ExamPaperScoreVO(); + BeanUtils.copyProperties(examPaperScore, examPaperScoreVO); + User user = userService.getById(examPaperScore.getUserId()); + examPaperScoreVO.setUserName(Objects.nonNull(user) ? user.getRealName() : "鐢ㄦ埛宸叉敞閿�"); + examPaperScoreVO.setNavbar(JSON.parseArray(examPaperScore.getNavbar(), ExamPaperMarkNavbarVO.class)); + examPaperScoreVO.setTitleItems(JSON.parseArray(examPaperScore.getPaperContent(), PaperFixQuestionVO.class)); + return Result.ok(examPaperScoreVO); } + @RequestMapping(value = "/checkWrong", method = RequestMethod.POST) + public Result<ExamPaperScoreVO> checkWrong(@RequestBody @Valid CheckWrongVO model) { + ExamPaperScore info = new LambdaQueryChainWrapper<>(examPaperScoreMapper) + .eq(ExamPaperScore::getExamId, model.getExamId()) + .eq(ExamPaperScore::getUserId, getCurrentUser().getId()) + .one(); + +// model.setUserId(getCurrentUser().getId()); +// ExamPaperScore examPaperScore = examPaperScoreMapper.checkWrong(model); + + ExamPaperScore examPaperScore = examPaperScoreService.getById(info.getId()); + ExamPaperScoreVO examPaperScoreVO = new ExamPaperScoreVO(); + BeanUtils.copyProperties(examPaperScore, examPaperScoreVO); + User user = userService.getById(examPaperScore.getUserId()); + examPaperScoreVO.setUserName(Objects.nonNull(user) ? user.getRealName() : "鐢ㄦ埛宸叉敞閿�"); + examPaperScoreVO.setNavbar(JSON.parseArray(examPaperScore.getNavbar(), ExamPaperMarkNavbarVO.class)); + examPaperScoreVO.setTitleItems(JSON.parseArray(examPaperScore.getPaperContent(), PaperFixQuestionVO.class)); + + List<PaperFixQuestionVO> collect = JSON.parseArray(examPaperScore.getPaperContent(), PaperFixQuestionVO.class).stream() + .filter(item -> item.getQuestionType() == model.getQuestionType()) + .collect(Collectors.toList()); + List<DoQuestionVO> doQuestionVOS = new ArrayList<>(); + + collect.stream().forEach(item -> { + item.getQuestionList().stream().forEach(question -> { + if (question.getId() == model.getQuestionId()) { + doQuestionVOS.add(question); + } + }); + }); + collect.stream().forEach(item -> { + item.setQuestionList(doQuestionVOS); + }); + + PaperFixQuestionVO paperFixQuestionVO = new PaperFixQuestionVO(); + paperFixQuestionVO.setQuestionType(model.getQuestionType()); + examPaperScoreVO.setTitleItems(collect); + return Result.ok(examPaperScoreVO); + } + } -- Gitblit v1.8.0