From 16b4725365f3286c2d2a80945e26f35f89b53f24 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 28 六月 2024 11:37:06 +0800 Subject: [PATCH] answer表改为score表,阅卷代码 --- src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScore.java | 63 +- src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | 278 ++++++++++- src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java | 7 src/main/resources/mapper/ExamPaperScoreDetailMapper.xml | 4 src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java | 15 src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java | 4 src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java | 20 src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java | 4 src/main/java/com/ycl/jxkg/service/ExamPaperScoreDetailService.java | 39 + src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java | 2 src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreDetailMapper.java | 10 src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java | 2 src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java | 10 src/main/resources/application-dev.yml | 2 src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java | 15 src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java | 89 +- src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java | 284 +++++++++++ src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java | 38 src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java | 8 src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkVO.java | 42 + src/main/java/com/ycl/jxkg/mapper/MeetMapper.java | 6 src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreDetailServiceImpl.java | 46 src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java | 3 src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java | 4 src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScoreDetail.java | 4 src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java | 8 src/main/java/com/ycl/jxkg/controller/admin/ExamController.java | 6 src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java | 6 /dev/null | 283 ----------- src/main/java/com/ycl/jxkg/service/ExamService.java | 12 src/main/java/com/ycl/jxkg/controller/student/MeetController.java | 2 src/main/resources/mapper/ExamPaperScoreMapper.xml | 4 src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java | 55 +- src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java | 8 src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkAnswerVO.java | 9 src/main/resources/mapper/ClassesUserMapper.xml | 4 36 files changed, 867 insertions(+), 529 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java b/src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java index ce4a0d9..7b58f91 100644 --- a/src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java +++ b/src/main/java/com/ycl/jxkg/controller/admin/DashboardController.java @@ -19,8 +19,8 @@ private final ExamPaperService examPaperService; private final QuestionService questionService; - private final ExamPaperAnswerService examPaperAnswerService; - private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService; + private final ExamPaperScoreService examPaperScoreService; + private final ExamPaperScoreDetailService examPaperScoreDetailService; private final UserEventLogService userEventLogService; @RequestMapping(value = "/index", method = RequestMethod.POST) @@ -29,8 +29,8 @@ Integer examPaperCount = examPaperService.selectAllCount(); Integer questionCount = questionService.selectAllCount(); - Integer doExamPaperCount = examPaperAnswerService.selectAllCount(); - Integer doQuestionCount = examPaperQuestionCustomerAnswerService.selectAllCount(); + Integer doExamPaperCount = examPaperScoreService.selectAllCount(); + Integer doQuestionCount = examPaperScoreDetailService.selectAllCount(); vm.setExamPaperCount(examPaperCount); vm.setQuestionCount(questionCount); @@ -38,7 +38,7 @@ vm.setDoQuestionCount(doQuestionCount); List<Integer> mothDayUserActionValue = userEventLogService.selectMothCount(); - List<Integer> mothDayDoExamQuestionValue = examPaperQuestionCustomerAnswerService.selectMothCount(); + List<Integer> mothDayDoExamQuestionValue = examPaperScoreDetailService.selectMothCount(); vm.setMothDayUserActionValue(mothDayUserActionValue); vm.setMothDayDoExamQuestionValue(mothDayDoExamQuestionValue); diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ExamController.java b/src/main/java/com/ycl/jxkg/controller/admin/ExamController.java index ac0ea48..4575b39 100644 --- a/src/main/java/com/ycl/jxkg/controller/admin/ExamController.java +++ b/src/main/java/com/ycl/jxkg/controller/admin/ExamController.java @@ -5,6 +5,7 @@ import com.ycl.jxkg.domain.form.ExamForm; import com.ycl.jxkg.domain.form.ForceSubmitForm; import com.ycl.jxkg.domain.query.ExamQuery; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkVO; import com.ycl.jxkg.group.Add; import com.ycl.jxkg.group.Update; import com.ycl.jxkg.service.ExamService; @@ -95,6 +96,11 @@ public Result getMarkPaperInfo(@PathVariable("examId") Integer examId, @PathVariable("userId") Integer userId) { return examService.getMarkPaperInfo(examId, userId); } + @PostMapping("/mark/paper") + @ApiOperation(value = "鎻愪氦鎵规敼", notes = "鎻愪氦鎵规敼") + public Result submitMarkPaper(@RequestBody ExamPaperMarkVO examPaperMark) { + return examService.submitMarkPaper(examPaperMark); + } @GetMapping("/monitor/list") @PreAuthorize("hasAuthority('exam:monitor:list')") diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperAnswerController.java b/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java similarity index 74% rename from src/main/java/com/ycl/jxkg/controller/admin/ExamPaperAnswerController.java rename to src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java index 28d7d0d..8a31e74 100644 --- a/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperAnswerController.java +++ b/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperScoreController.java @@ -3,14 +3,14 @@ import com.github.pagehelper.PageInfo; import com.ycl.jxkg.base.BaseApiController; import com.ycl.jxkg.base.Result; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO; import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.student.exam.ExamPaperReadVO; import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO; import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerExportVO; import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO; -import com.ycl.jxkg.service.ExamPaperAnswerService; +import com.ycl.jxkg.service.ExamPaperScoreService; import com.ycl.jxkg.service.ExamPaperService; import com.ycl.jxkg.utils.ExcelUtils; import lombok.RequiredArgsConstructor; @@ -23,34 +23,34 @@ @RequiredArgsConstructor @RestController("AdminExamPaperAnswerController") @RequestMapping(value = "/api/admin/examPaperAnswer") -public class ExamPaperAnswerController extends BaseApiController { +public class ExamPaperScoreController extends BaseApiController { - private final ExamPaperAnswerService examPaperAnswerService; + private final ExamPaperScoreService examPaperScoreService; private final ExamPaperService examPaperService; @PostMapping("/pageExamPaper") public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageExamPaper(@RequestBody ExamPaperAnswerPageRequestVO model) { - return Result.ok(examPaperAnswerService.pageExamPaper(model)); + return Result.ok(examPaperScoreService.pageExamPaper(model)); } @RequestMapping(value = "/page", method = RequestMethod.POST) public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageJudgeList(@RequestBody ExamPaperAnswerPageRequestVO model) { - return Result.ok(examPaperAnswerService.adminPage(model)); + return Result.ok(examPaperScoreService.adminPage(model)); } @RequestMapping(value = "/exportExcel", method = RequestMethod.POST) @SneakyThrows public void exportExcel(ExamPaperAnswerPageRequestVO model, HttpServletResponse response) { - List<ExamPaperAnswerPageResponseVO> list = examPaperAnswerService.list(model); + List<ExamPaperAnswerPageResponseVO> list = examPaperScoreService.list(model); ExcelUtils.exportExcelToTarget(response, "", "鎴愮哗鍒楄〃", list, ExamPaperAnswerExportVO.class); } @PostMapping("/read/{id}") public Result<ExamPaperReadVO> read(@PathVariable Integer id) { - ExamPaperAnswer examPaperAnswer = examPaperAnswerService.getById(id); + ExamPaperScore examPaperScore = examPaperScoreService.getById(id); ExamPaperReadVO vm = new ExamPaperReadVO(); - ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperAnswer.getExamPaperId()); - ExamPaperSubmitVO answer = examPaperAnswerService.examPaperAnswerToVM(examPaperAnswer.getId()); + ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperScore.getPaperId()); + ExamPaperSubmitVO answer = examPaperScoreService.examPaperAnswerToVM(examPaperScore.getId()); vm.setPaper(paper); vm.setAnswer(answer); return Result.ok(vm); 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 f9e0cae..1f3c735 100644 --- a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java +++ b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperAnswerController.java @@ -3,15 +3,14 @@ import com.ycl.jxkg.base.BaseApiController; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.*; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.Subject; import com.ycl.jxkg.domain.entity.User; import com.ycl.jxkg.domain.entity.UserEventLog; -import com.ycl.jxkg.domain.vo.ExamSubmitVO; import com.ycl.jxkg.enums.ExamPaperAnswerStatusEnum; import com.ycl.jxkg.event.CalculateExamPaperAnswerCompleteEvent; import com.ycl.jxkg.event.UserEvent; -import com.ycl.jxkg.service.ExamPaperAnswerService; +import com.ycl.jxkg.service.ExamPaperScoreService; import com.ycl.jxkg.service.ExamPaperService; import com.ycl.jxkg.service.SubjectService; import com.ycl.jxkg.utils.DateTimeUtil; @@ -26,7 +25,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.context.ApplicationEventPublisher; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -37,7 +35,7 @@ @RequestMapping(value = "/api/student/exampaper/answer") public class ExamPaperAnswerController extends BaseApiController { - private final ExamPaperAnswerService examPaperAnswerService; + private final ExamPaperScoreService examPaperScoreService; private final ExamPaperService examPaperService; private final SubjectService subjectService; private final ApplicationEventPublisher eventPublisher; @@ -46,17 +44,17 @@ @RequestMapping(value = "/pageList", method = RequestMethod.POST) public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageList(@RequestBody @Valid ExamPaperAnswerPageVO model) { model.setCreateUser(getCurrentUser().getId()); - PageInfo<ExamPaperAnswer> pageInfo = examPaperAnswerService.studentPage(model); + PageInfo<ExamPaperScore> pageInfo = examPaperScoreService.studentPage(model); PageInfo<ExamPaperAnswerPageResponseVO> page = PageInfoHelper.copyMap(pageInfo, e -> { ExamPaperAnswerPageResponseVO vo = new ExamPaperAnswerPageResponseVO(); - BeanUtils.copyProperties(e, vo); - Subject subject = subjectService.getById(vo.getSubjectId()); - vo.setDoTime(ExamUtil.secondToVM(e.getDoTime())); - vo.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore())); - vo.setUserScore(ExamUtil.scoreToVM(e.getUserScore())); - vo.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore())); - vo.setSubjectName(subject.getName()); - vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime())); +// BeanUtils.copyProperties(e, vo); +// Subject subject = subjectService.getById(vo.getSubjectId()); +// vo.setDoTime(ExamUtil.secondToVM(e.getDoTime())); +// vo.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore())); +// vo.setUserScore(ExamUtil.scoreToVM(e.getUserScore())); +// vo.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore())); +// vo.setSubjectName(subject.getName()); +// vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime())); return vo; }); return Result.ok(page); @@ -66,50 +64,51 @@ @RequestMapping(value = "/answerSubmit", method = RequestMethod.POST) public Result answerSubmit(@RequestBody @Valid ExamPaperSubmitVO examPaperSubmitVO) { User user = getCurrentUser(); - ExamPaperAnswerInfo examPaperAnswerInfo = examPaperAnswerService.calculateExamPaperAnswer(examPaperSubmitVO, user); + ExamPaperAnswerInfo examPaperAnswerInfo = examPaperScoreService.calculateExamPaperAnswer(examPaperSubmitVO, user); if (null == examPaperAnswerInfo) { 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 Result.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 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, "鏈夋湭鎵规敼棰樼洰"); - } - - ExamPaperAnswer examPaperAnswer = examPaperAnswerService.getById(examPaperSubmitVO.getId()); - ExamPaperAnswerStatusEnum examPaperAnswerStatusEnum = ExamPaperAnswerStatusEnum.fromCode(examPaperAnswer.getStatus()); - if (examPaperAnswerStatusEnum == ExamPaperAnswerStatusEnum.Complete) { - return Result.fail(3, "璇曞嵎宸插畬鎴�"); - } - String score = examPaperAnswerService.judge(examPaperSubmitVO); - 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)); +// 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 Result<ExamPaperReadVO> read(@PathVariable Integer id) { - ExamPaperAnswer examPaperAnswer = examPaperAnswerService.getById(id); + ExamPaperScore examPaperScore = examPaperScoreService.getById(id); ExamPaperReadVO vm = new ExamPaperReadVO(); - ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperAnswer.getExamPaperId()); - ExamPaperSubmitVO answer = examPaperAnswerService.examPaperAnswerToVM(examPaperAnswer.getId()); + ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperScore.getPaperId()); + ExamPaperSubmitVO answer = examPaperScoreService.examPaperAnswerToVM(examPaperScore.getId()); vm.setPaper(paper); vm.setAnswer(answer); return Result.ok(vm); diff --git a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java index 92b7132..118c407 100644 --- a/src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java +++ b/src/main/java/com/ycl/jxkg/controller/student/ExamPaperController.java @@ -3,7 +3,7 @@ import com.ycl.jxkg.base.BaseApiController; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.entity.ExamPaper; -import com.ycl.jxkg.service.ExamPaperAnswerService; +import com.ycl.jxkg.service.ExamPaperScoreService; import com.ycl.jxkg.service.ExamPaperService; import com.ycl.jxkg.utils.DateTimeUtil; import com.ycl.jxkg.utils.PageInfoHelper; @@ -24,7 +24,7 @@ public class ExamPaperController extends BaseApiController { private final ExamPaperService examPaperService; - private final ExamPaperAnswerService examPaperAnswerService; + private final ExamPaperScoreService examPaperScoreService; private final ApplicationEventPublisher eventPublisher; @RequestMapping(value = "/select/{id}", method = RequestMethod.POST) diff --git a/src/main/java/com/ycl/jxkg/controller/student/MeetController.java b/src/main/java/com/ycl/jxkg/controller/student/MeetController.java index fc55f09..44b8272 100644 --- a/src/main/java/com/ycl/jxkg/controller/student/MeetController.java +++ b/src/main/java/com/ycl/jxkg/controller/student/MeetController.java @@ -37,7 +37,7 @@ } @GetMapping("/{id}") - @ApiOperation(value = "璇︽儏", notes = "璇︽儏") + @ApiOperation(value = "瀛︾敓涓婅", notes = "瀛︾敓涓婅") public Result detail(@PathVariable("id") Integer id) { return meetService.detail(id); } diff --git a/src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java b/src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java index 24b66b4..b5ed8dc 100644 --- a/src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java +++ b/src/main/java/com/ycl/jxkg/controller/student/QuestionAnswerController.java @@ -2,11 +2,10 @@ import com.ycl.jxkg.base.BaseApiController; import com.ycl.jxkg.base.Result; -import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail; import com.ycl.jxkg.domain.entity.Subject; -import com.ycl.jxkg.domain.entity.TextContent; import com.ycl.jxkg.domain.question.QuestionObject; -import com.ycl.jxkg.service.ExamPaperQuestionCustomerAnswerService; +import com.ycl.jxkg.service.ExamPaperScoreDetailService; import com.ycl.jxkg.service.QuestionService; import com.ycl.jxkg.service.SubjectService; import com.ycl.jxkg.service.TextContentService; @@ -29,7 +28,7 @@ @RequestMapping(value = "/api/student/question/answer") public class QuestionAnswerController extends BaseApiController { - private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService; + private final ExamPaperScoreDetailService examPaperScoreDetailService; private final QuestionService questionService; private final TextContentService textContentService; private final SubjectService subjectService; @@ -37,7 +36,7 @@ @RequestMapping(value = "/page", method = RequestMethod.POST) public Result<PageInfo<QuestionPageStudentResponseVO>> pageList(@RequestBody QuestionPageStudentRequestVO model) { model.setCreateUser(getCurrentUser().getId()); - PageInfo<ExamPaperQuestionCustomerAnswer> pageInfo = examPaperQuestionCustomerAnswerService.studentPage(model); + PageInfo<ExamPaperScoreDetail> pageInfo = examPaperScoreDetailService.studentPage(model); PageInfo<QuestionPageStudentResponseVO> page = PageInfoHelper.copyMap(pageInfo, q -> { Subject subject = subjectService.getById(q.getSubjectId()); QuestionPageStudentResponseVO vo = new QuestionPageStudentResponseVO(); @@ -56,9 +55,9 @@ @RequestMapping(value = "/select/{id}", method = RequestMethod.POST) public Result<QuestionAnswerVO> select(@PathVariable Integer id) { QuestionAnswerVO vm = new QuestionAnswerVO(); - ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer = examPaperQuestionCustomerAnswerService.getById(id); - ExamPaperSubmitItemVO questionAnswerVM = examPaperQuestionCustomerAnswerService.examPaperQuestionCustomerAnswerToVM(examPaperQuestionCustomerAnswer); - QuestionEditRequestVO questionVM = questionService.getQuestionEditRequestVM(examPaperQuestionCustomerAnswer.getQuestionId()); + ExamPaperScoreDetail examPaperScoreDetail = examPaperScoreDetailService.getById(id); + ExamPaperSubmitItemVO questionAnswerVM = examPaperScoreDetailService.examPaperQuestionCustomerAnswerToVM(examPaperScoreDetail); + QuestionEditRequestVO questionVM = questionService.getQuestionEditRequestVM(examPaperScoreDetail.getQuestionId()); vm.setQuestionVM(questionVM); vm.setQuestionAnswerVM(questionAnswerVM); return Result.ok(vm); diff --git a/src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java b/src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java index 49b1487..0db13e4 100644 --- a/src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java +++ b/src/main/java/com/ycl/jxkg/controller/wx/student/ExamPaperAnswerController.java @@ -3,14 +3,14 @@ import com.ycl.jxkg.base.Result; import com.ycl.jxkg.controller.wx.BaseWXApiController; import com.ycl.jxkg.domain.*; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.Subject; import com.ycl.jxkg.domain.entity.User; import com.ycl.jxkg.domain.entity.UserEventLog; import com.ycl.jxkg.enums.QuestionTypeEnum; import com.ycl.jxkg.event.CalculateExamPaperAnswerCompleteEvent; import com.ycl.jxkg.event.UserEvent; -import com.ycl.jxkg.service.ExamPaperAnswerService; +import com.ycl.jxkg.service.ExamPaperScoreService; import com.ycl.jxkg.service.ExamPaperService; import com.ycl.jxkg.service.SubjectService; import com.ycl.jxkg.utils.DateTimeUtil; @@ -40,7 +40,7 @@ @ResponseBody public class ExamPaperAnswerController extends BaseWXApiController { - private final ExamPaperAnswerService examPaperAnswerService; + private final ExamPaperScoreService examPaperScoreService; private final SubjectService subjectService; private final ApplicationEventPublisher eventPublisher; private final ExamPaperService examPaperService; @@ -48,15 +48,15 @@ @RequestMapping(value = "/pageList", method = RequestMethod.POST) public Result<PageInfo<ExamPaperAnswerPageResponseVO>> pageList(@Valid ExamPaperAnswerPageVO model) { model.setCreateUser(getCurrentUser().getId()); - PageInfo<ExamPaperAnswer> pageInfo = examPaperAnswerService.studentPage(model); + PageInfo<ExamPaperScore> pageInfo = examPaperScoreService.studentPage(model); PageInfo<ExamPaperAnswerPageResponseVO> page = PageInfoHelper.copyMap(pageInfo, e -> { ExamPaperAnswerPageResponseVO vo = new ExamPaperAnswerPageResponseVO(); BeanUtils.copyProperties(e, vo); Subject subject = subjectService.getById(vo.getSubjectId()); vo.setDoTime(ExamUtil.secondToVM(e.getDoTime())); - vo.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore())); - vo.setUserScore(ExamUtil.scoreToVM(e.getUserScore())); - vo.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore())); +// vo.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore())); +// vo.setUserScore(ExamUtil.scoreToVM(e.getUserScore())); +// vo.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore())); vo.setSubjectName(subject.getName()); vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime())); return vo; @@ -67,23 +67,24 @@ @RequestMapping(value = "/answerSubmit", method = RequestMethod.POST) public Result answerSubmit(HttpServletRequest request) { - ExamPaperSubmitVO examPaperSubmitVO = requestToExamPaperSubmitVM(request); - User user = getCurrentUser(); - ExamPaperAnswerInfo examPaperAnswerInfo = examPaperAnswerService.calculateExamPaperAnswer(examPaperSubmitVO, user); - if (null == examPaperAnswerInfo) { - 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 Result.ok(scoreVm); +//TODO:answer ExamPaperSubmitVO examPaperSubmitVO = requestToExamPaperSubmitVM(request); +// User user = getCurrentUser(); +// ExamPaperAnswerInfo examPaperAnswerInfo = examPaperScoreService.calculateExamPaperAnswer(examPaperSubmitVO, user); +// if (null == examPaperAnswerInfo) { +// return Result.fail(2, "璇曞嵎涓嶈兘閲嶅鍋�"); +// } +// 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(); } private ExamPaperSubmitVO requestToExamPaperSubmitVM(HttpServletRequest request) { @@ -123,9 +124,9 @@ @PostMapping(value = "/read/{id}") public Result<ExamPaperReadVO> read(@PathVariable Integer id) { ExamPaperReadVO vm = new ExamPaperReadVO(); - ExamPaperAnswer examPaperAnswer = examPaperAnswerService.getById(id); - ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperAnswer.getExamPaperId()); - ExamPaperSubmitVO answer = examPaperAnswerService.examPaperAnswerToVM(examPaperAnswer.getId()); + ExamPaperScore examPaperScore = examPaperScoreService.getById(id); + ExamPaperEditRequestVO paper = examPaperService.examPaperToVM(examPaperScore.getPaperId()); + ExamPaperSubmitVO answer = examPaperScoreService.examPaperAnswerToVM(examPaperScore.getId()); vm.setPaper(paper); vm.setAnswer(answer); return Result.ok(vm); diff --git a/src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java b/src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java index 9e663b1..efd67a6 100644 --- a/src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java +++ b/src/main/java/com/ycl/jxkg/domain/ExamPaperAnswerInfo.java @@ -2,8 +2,8 @@ import com.ycl.jxkg.domain.entity.ExamPaper; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; -import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; +import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail; import lombok.Data; import java.util.List; @@ -13,8 +13,8 @@ public ExamPaper examPaper; - public ExamPaperAnswer examPaperAnswer; + public ExamPaperScore examPaperScore; - public List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers; + public List<ExamPaperScoreDetail> examPaperScoreDetails; } diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java index 9f4a0b3..ba9cd79 100644 --- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java +++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java @@ -78,7 +78,7 @@ private BigDecimal deductTypeScore; /** - * 澶氶�夎瘎鍒嗗垎鏁� + * 棰樼洰鏍煎紡 * */ @TableField("content") private String content; diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScore.java similarity index 60% rename from src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java rename to src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScore.java index 8d0dbcf..bd7e183 100644 --- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java +++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScore.java @@ -7,50 +7,42 @@ import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; @Data -@TableName("t_exam_paper_answer") -public class ExamPaperAnswer extends AbsEntity { - - @TableField("exam_paper_id") - private Integer examPaperId; - +@TableName("t_exam_paper_score") +public class ExamPaperScore extends AbsEntity { /** - * 璇曞嵎鍚嶇О + * 鑰冭瘯id */ - @TableField("paper_name") - private String paperName; - + @TableField("exam_id") + private Integer examId; /** - * 璇曞嵎绫诲瀷( 1鍥哄畾璇曞嵎 4.鏃舵璇曞嵎 6.浠诲姟璇曞嵎) + * 鑰冭瘯鍚嶇О + */ + @TableField("exam_name") + private String examName; + + @TableField("paper_id") + private Integer paperId; + /** + * 璇曞嵎绫诲瀷( 1鍥哄畾璇曞嵎 2闅忔満璇曞嵎 3闅忓簭璇曞嵎) */ @TableField("paper_type") private Integer paperType; /** - * 瀛︾ - */ - @TableField("subject_id") - private Integer subjectId; - - /** - * 绯荤粺鍒ゅ畾寰楀垎 - */ - @TableField("system_score") - private Integer systemScore; - - /** - * 鏈�缁堝緱鍒�(鍗冨垎鍒�) + * 鏈�缁堝緱鍒� */ @TableField("user_score") - private Integer userScore; + private BigDecimal userScore; /** * 璇曞嵎鎬诲垎 */ @TableField("paper_score") - private Integer paperScore; + private BigDecimal paperScore; /** * 鍋氬棰樼洰鏁伴噺 @@ -83,12 +75,25 @@ private Integer createUser; /** - * 鎻愪氦鏃堕棿 + * 鎵规敼浜� + */ + @TableField("judge_user") + private Integer judgeUser; + /** + * 鎵规敼鏃堕棿 */ @TableField(value = "create_time", fill = FieldFill.INSERT) private Date createTime; - @TableField("task_exam_id") - private Integer taskExamId; + /** + * 浜ゅ嵎鏃堕棿 + */ + @TableField(value = "answer_time") + private Date answerTime; + /** + * 璇曞嵎鍐呭 + */ + @TableField(value = "paper_content") + private String paperContent; } diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperQuestionCustomerAnswer.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScoreDetail.java similarity index 93% rename from src/main/java/com/ycl/jxkg/domain/entity/ExamPaperQuestionCustomerAnswer.java rename to src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScoreDetail.java index 913c860..ce8e0bc 100644 --- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperQuestionCustomerAnswer.java +++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperScoreDetail.java @@ -10,8 +10,8 @@ import java.util.Date; @Data -@TableName("t_exam_paper_question_customer_answer") -public class ExamPaperQuestionCustomerAnswer extends AbsEntity { +@TableName("t_exam_paper_score_detail") +public class ExamPaperScoreDetail extends AbsEntity { /** * 棰樼洰Id diff --git a/src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java b/src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java index 455d8d1..134e69d 100644 --- a/src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java +++ b/src/main/java/com/ycl/jxkg/domain/vo/DoQuestionVO.java @@ -1,6 +1,5 @@ package com.ycl.jxkg.domain.vo; -import com.ycl.jxkg.domain.base.AbsVo; import com.ycl.jxkg.domain.question.QuestionItemObject; import lombok.Data; @@ -46,6 +45,7 @@ /** 闊抽鍘熷鍚� */ private String originalFile; + private Integer itemOrder; /** 棰樼洰閫夐」 */ private List<QuestionItemObject> questionItemList; } diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkAnswerVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkAnswerVO.java new file mode 100644 index 0000000..298aef1 --- /dev/null +++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkAnswerVO.java @@ -0,0 +1,9 @@ +package com.ycl.jxkg.domain.vo.admin.exam; + +import lombok.Data; + +@Data +public class ExamPaperMarkAnswerVO { + private Boolean right; + private Integer itemOrder; +} diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkVO.java new file mode 100644 index 0000000..35248fc --- /dev/null +++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperMarkVO.java @@ -0,0 +1,42 @@ +package com.ycl.jxkg.domain.vo.admin.exam; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ycl.jxkg.domain.vo.PaperFixQuestionVO; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +public class ExamPaperMarkVO { + /** 鑰冭瘯id */ + private Integer examId; + /** 鑰冭瘯鍚� */ + private String examName; + /** 璇曞嵎id */ + private Integer paperId; + /** 璇曞嵎绫诲瀷 */ + private Integer paperType; + /** 绛旈瀛︾敓id */ + private Integer userId; + /** 绛旈瀛︾敓鍚� */ + private String userName; + /** 鍋氶鏃堕暱 */ + private Integer doTime; + /** 浜ゅ嵎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date submitTime; + /** 寰楀垎 */ + private String score; + /** 璇曞嵎鎬诲垎 */ + private String totalScore; + /** 澶氶�夋墸鍒嗙被鍨� */ + private Integer deductType; + /** 澶氶�夋墸鍒嗗弬鏁� */ + private BigDecimal deductScore; + /** 棰樼洰 */ + private List<PaperFixQuestionVO> titleItems; + /** 绛旀闆嗗悎(鐢ㄤ簬鍓嶇璺宠浆瀵瑰簲棰樼洰) */ + private List<ExamPaperMarkAnswerVO> answers; +} diff --git a/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java b/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java index 727317e..ba5775b 100644 --- a/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java +++ b/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitItemVO.java @@ -5,25 +5,26 @@ import javax.validation.constraints.NotNull; import java.util.List; - +/** 绛旈 */ @Data public class ExamPaperSubmitItemVO { private Integer id; @NotNull + /** 闂id */ private Integer questionId; - + /** 鏄惁姝g‘ */ private Boolean doRight; - + /** 浣滅瓟鍐呭 */ private String content; - + /** 鎺掑簭 */ private Integer itemOrder; - + /** 澶氶�夈�佸~绌轰綔绛旀暟缁� */ private List<String> contentArray; - + /** 杩欎釜棰樼殑寰楀垎 */ private String score; - + /** 杩欎釜棰樼殑鎬诲垎 */ private String questionScore; } diff --git a/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java b/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java index c0fdc4d..de6ffba 100644 --- a/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java +++ b/src/main/java/com/ycl/jxkg/domain/vo/student/exam/ExamPaperSubmitVO.java @@ -13,9 +13,10 @@ @NotNull private Integer id; + /** 鍋氶鏃堕暱 */ @NotNull private Integer doTime; - + /** 鎬诲緱鍒� */ private String score; @NotNull diff --git a/src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java b/src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java index ee109fe..8d6fa94 100644 --- a/src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java +++ b/src/main/java/com/ycl/jxkg/enums/general/ExamSubmitTempStatusEnum.java @@ -12,8 +12,8 @@ @Getter public enum ExamSubmitTempStatusEnum { - TEMP("temp", "涓存椂"), - FINISH("finish", "瀹屾垚"), + temp("temp", "涓存椂"), + finish("finish", "瀹屾垚"), ; @EnumValue diff --git a/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java b/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java index e03ff41..c005a31 100644 --- a/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java +++ b/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java @@ -2,14 +2,14 @@ import com.ycl.jxkg.domain.*; import com.ycl.jxkg.domain.entity.ExamPaper; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; -import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; +import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail; import com.ycl.jxkg.domain.entity.TextContent; import com.ycl.jxkg.enums.ExamPaperTypeEnum; import com.ycl.jxkg.enums.QuestionTypeEnum; import com.ycl.jxkg.event.CalculateExamPaperAnswerCompleteEvent; -import com.ycl.jxkg.service.ExamPaperAnswerService; -import com.ycl.jxkg.service.ExamPaperQuestionCustomerAnswerService; +import com.ycl.jxkg.service.ExamPaperScoreService; +import com.ycl.jxkg.service.ExamPaperScoreDetailService; import com.ycl.jxkg.service.TaskExamCustomerAnswerService; import com.ycl.jxkg.service.TextContentService; import org.springframework.beans.factory.annotation.Autowired; @@ -30,23 +30,23 @@ @Component public class CalculateExamPaperAnswerListener implements ApplicationListener<CalculateExamPaperAnswerCompleteEvent> { - private final ExamPaperAnswerService examPaperAnswerService; - private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService; + private final ExamPaperScoreService examPaperScoreService; + private final ExamPaperScoreDetailService examPaperScoreDetailService; private final TextContentService textContentService; private final TaskExamCustomerAnswerService examCustomerAnswerService; /** * Instantiates a new Calculate exam paper answer listener. * - * @param examPaperAnswerService the exam paper answer service - * @param examPaperQuestionCustomerAnswerService the exam paper question customer answer service + * @param examPaperScoreService the exam paper answer service + * @param examPaperScoreDetailService the exam paper question customer answer service * @param textContentService the text content service * @param examCustomerAnswerService the exam customer answer service */ @Autowired - public CalculateExamPaperAnswerListener(ExamPaperAnswerService examPaperAnswerService, ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, TextContentService textContentService, TaskExamCustomerAnswerService examCustomerAnswerService) { - this.examPaperAnswerService = examPaperAnswerService; - this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService; + public CalculateExamPaperAnswerListener(ExamPaperScoreService examPaperScoreService, ExamPaperScoreDetailService examPaperScoreDetailService, TextContentService textContentService, TaskExamCustomerAnswerService examCustomerAnswerService) { + this.examPaperScoreService = examPaperScoreService; + this.examPaperScoreDetailService = examPaperScoreDetailService; this.textContentService = textContentService; this.examCustomerAnswerService = examCustomerAnswerService; } @@ -58,11 +58,11 @@ ExamPaperAnswerInfo examPaperAnswerInfo = (ExamPaperAnswerInfo) calculateExamPaperAnswerCompleteEvent.getSource(); ExamPaper examPaper = examPaperAnswerInfo.getExamPaper(); - ExamPaperAnswer examPaperAnswer = examPaperAnswerInfo.getExamPaperAnswer(); - List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperAnswerInfo.getExamPaperQuestionCustomerAnswers(); + ExamPaperScore examPaperScore = examPaperAnswerInfo.getExamPaperScore(); + List<ExamPaperScoreDetail> examPaperScoreDetails = examPaperAnswerInfo.getExamPaperScoreDetails(); - examPaperAnswerService.save(examPaperAnswer); - examPaperQuestionCustomerAnswers.stream().filter(a -> QuestionTypeEnum.needSaveTextContent(a.getQuestionType())).forEach(d -> { + examPaperScoreService.save(examPaperScore); + examPaperScoreDetails.stream().filter(a -> QuestionTypeEnum.needSaveTextContent(a.getQuestionType())).forEach(d -> { TextContent textContent = new TextContent(); textContent.setContent(d.getAnswer()); textContent.setCreateTime(now); @@ -70,14 +70,14 @@ d.setTextContentId(textContent.getId()); d.setAnswer(null); }); - examPaperQuestionCustomerAnswers.forEach(d -> { - d.setExamPaperAnswerId(examPaperAnswer.getId()); + examPaperScoreDetails.forEach(d -> { + d.setExamPaperAnswerId(examPaperScore.getId()); }); - examPaperQuestionCustomerAnswerService.insertList(examPaperQuestionCustomerAnswers); + examPaperScoreDetailService.insertList(examPaperScoreDetails); switch (ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) { case RandomOrder: { - examCustomerAnswerService.insertOrUpdate(examPaper, examPaperAnswer, now); + examCustomerAnswerService.insertOrUpdate(examPaper, examPaperScore, now); break; } default: diff --git a/src/main/java/com/ycl/jxkg/mapper/ExamPaperQuestionCustomerAnswerMapper.java b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreDetailMapper.java similarity index 60% rename from src/main/java/com/ycl/jxkg/mapper/ExamPaperQuestionCustomerAnswerMapper.java rename to src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreDetailMapper.java index 6a19629..637c157 100644 --- a/src/main/java/com/ycl/jxkg/mapper/ExamPaperQuestionCustomerAnswerMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreDetailMapper.java @@ -1,7 +1,7 @@ package com.ycl.jxkg.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail; import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate; import com.ycl.jxkg.domain.other.KeyValue; import com.ycl.jxkg.domain.vo.student.question.answer.QuestionPageStudentRequestVO; @@ -12,13 +12,13 @@ import java.util.List; @Mapper -public interface ExamPaperQuestionCustomerAnswerMapper extends BaseMapper<ExamPaperQuestionCustomerAnswer> { +public interface ExamPaperScoreDetailMapper extends BaseMapper<ExamPaperScoreDetail> { - List<ExamPaperQuestionCustomerAnswer> selectListByPaperAnswerId(Integer id); + List<ExamPaperScoreDetail> selectListByPaperAnswerId(Integer id); - List<ExamPaperQuestionCustomerAnswer> studentPage(QuestionPageStudentRequestVO requestVM); + List<ExamPaperScoreDetail> studentPage(QuestionPageStudentRequestVO requestVM); - int insertList(List<ExamPaperQuestionCustomerAnswer> list); + int insertList(List<ExamPaperScoreDetail> list); Integer selectAllCount(); diff --git a/src/main/java/com/ycl/jxkg/mapper/ExamPaperAnswerMapper.java b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java similarity index 73% rename from src/main/java/com/ycl/jxkg/mapper/ExamPaperAnswerMapper.java rename to src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java index a898a20..afc4227 100644 --- a/src/main/java/com/ycl/jxkg/mapper/ExamPaperAnswerMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/ExamPaperScoreMapper.java @@ -1,7 +1,7 @@ package com.ycl.jxkg.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.other.KeyValue; import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.student.exampaper.ExamPaperAnswerPageResponseVO; @@ -13,15 +13,15 @@ import java.util.List; @Mapper -public interface ExamPaperAnswerMapper extends BaseMapper<ExamPaperAnswer> { +public interface ExamPaperScoreMapper extends BaseMapper<ExamPaperScore> { - List<ExamPaperAnswer> studentPage(ExamPaperAnswerPageVO requestVM); + List<ExamPaperScore> studentPage(ExamPaperAnswerPageVO requestVM); Integer selectAllCount(); List<KeyValue> selectCountByDate(@Param("startTime") Date startTime, @Param("endTime") Date endTime); - ExamPaperAnswer getByPidUid(@Param("pid") Integer paperId, @Param("uid") Integer uid); + ExamPaperScore getByPidUid(@Param("pid") Integer paperId, @Param("uid") Integer uid); List<ExamPaperAnswerPageResponseVO> adminPage(ExamPaperAnswerPageRequestVO requestVM); diff --git a/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java b/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java index 74ae5f6..9f5c1b5 100644 --- a/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/MeetMapper.java @@ -1,12 +1,10 @@ package com.ycl.jxkg.mapper; -import com.ycl.jxkg.domain.entity.Meet; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.ycl.jxkg.domain.entity.Meet; import com.ycl.jxkg.domain.query.MeetQuery; import com.ycl.jxkg.domain.vo.MeetVO; -import com.ycl.jxkg.domain.form.MeetForm; -import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/src/main/java/com/ycl/jxkg/service/ExamPaperQuestionCustomerAnswerService.java b/src/main/java/com/ycl/jxkg/service/ExamPaperQuestionCustomerAnswerService.java deleted file mode 100644 index 2ca745e..0000000 --- a/src/main/java/com/ycl/jxkg/service/ExamPaperQuestionCustomerAnswerService.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.ycl.jxkg.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer; -import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate; -import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO; -import com.ycl.jxkg.domain.vo.student.question.answer.QuestionPageStudentRequestVO; -import com.github.pagehelper.PageInfo; - -import java.util.List; - -public interface ExamPaperQuestionCustomerAnswerService extends IService<ExamPaperQuestionCustomerAnswer> { - - PageInfo<ExamPaperQuestionCustomerAnswer> studentPage(QuestionPageStudentRequestVO requestVM); - - List<ExamPaperQuestionCustomerAnswer> selectListByPaperAnswerId(Integer id); - - /** - * 璇曞嵎鎻愪氦绛旀鍏ュ簱 - * - * @param examPaperQuestionCustomerAnswers List<ExamPaperQuestionCustomerAnswer> - */ - void insertList(List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers); - - /** - * 璇曞嵎闂绛旈淇℃伅杞垚ViewModel 浼犵粰鍓嶅彴 - * - * @param qa ExamPaperQuestionCustomerAnswer - * @return ExamPaperSubmitItemVM - */ - ExamPaperSubmitItemVO examPaperQuestionCustomerAnswerToVM(ExamPaperQuestionCustomerAnswer qa); - - - Integer selectAllCount(); - - List<Integer> selectMothCount(); - - int updateScore(List<ExamPaperAnswerUpdate> examPaperAnswerUpdates); -} diff --git a/src/main/java/com/ycl/jxkg/service/ExamPaperScoreDetailService.java b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreDetailService.java new file mode 100644 index 0000000..3b422ed --- /dev/null +++ b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreDetailService.java @@ -0,0 +1,39 @@ +package com.ycl.jxkg.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail; +import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate; +import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO; +import com.ycl.jxkg.domain.vo.student.question.answer.QuestionPageStudentRequestVO; +import com.github.pagehelper.PageInfo; + +import java.util.List; + +public interface ExamPaperScoreDetailService extends IService<ExamPaperScoreDetail> { + + PageInfo<ExamPaperScoreDetail> studentPage(QuestionPageStudentRequestVO requestVM); + + List<ExamPaperScoreDetail> selectListByPaperAnswerId(Integer id); + + /** + * 璇曞嵎鎻愪氦绛旀鍏ュ簱 + * + * @param examPaperScoreDetails List<ExamPaperQuestionCustomerAnswer> + */ + void insertList(List<ExamPaperScoreDetail> examPaperScoreDetails); + + /** + * 璇曞嵎闂绛旈淇℃伅杞垚ViewModel 浼犵粰鍓嶅彴 + * + * @param qa ExamPaperQuestionCustomerAnswer + * @return ExamPaperSubmitItemVM + */ + ExamPaperSubmitItemVO examPaperQuestionCustomerAnswerToVM(ExamPaperScoreDetail qa); + + + Integer selectAllCount(); + + List<Integer> selectMothCount(); + + int updateScore(List<ExamPaperAnswerUpdate> examPaperAnswerUpdates); +} diff --git a/src/main/java/com/ycl/jxkg/service/ExamPaperAnswerService.java b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java similarity index 89% rename from src/main/java/com/ycl/jxkg/service/ExamPaperAnswerService.java rename to src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java index 4554736..8449520 100644 --- a/src/main/java/com/ycl/jxkg/service/ExamPaperAnswerService.java +++ b/src/main/java/com/ycl/jxkg/service/ExamPaperScoreService.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.github.pagehelper.PageInfo; import com.ycl.jxkg.domain.ExamPaperAnswerInfo; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.User; import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO; @@ -12,7 +12,7 @@ import java.util.List; -public interface ExamPaperAnswerService extends IService<ExamPaperAnswer> { +public interface ExamPaperScoreService extends IService<ExamPaperScore> { /** * 瀛︾敓鑰冭瘯璁板綍鍒嗛〉 @@ -20,7 +20,7 @@ * @param requestVM 杩囨护鏉′欢 * @return PageInfo<ExamPaperAnswer> */ - PageInfo<ExamPaperAnswer> studentPage(ExamPaperAnswerPageVO requestVM); + PageInfo<ExamPaperScore> studentPage(ExamPaperAnswerPageVO requestVM); /** * 璁$畻璇曞嵎鎻愪氦缁撴灉(涓嶅叆搴�) diff --git a/src/main/java/com/ycl/jxkg/service/ExamService.java b/src/main/java/com/ycl/jxkg/service/ExamService.java index ef3882a..40a9857 100644 --- a/src/main/java/com/ycl/jxkg/service/ExamService.java +++ b/src/main/java/com/ycl/jxkg/service/ExamService.java @@ -8,6 +8,7 @@ import com.ycl.jxkg.domain.form.ForceSubmitForm; import com.ycl.jxkg.domain.query.ExamQuery; import com.ycl.jxkg.domain.vo.ExamSubmitVO; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkVO; import com.ycl.jxkg.domain.vo.StartExamVO; import java.util.List; @@ -118,6 +119,14 @@ Result getMarkPaperInfo(Integer examId, Integer userId); /** + * 鎻愪氦闃呭嵎 + * + * @param examPaperMark + * @return + */ + Result submitMarkPaper(ExamPaperMarkVO examPaperMark); + + /** * 鏍规嵁鑰冭瘯id鑾峰彇鐩戞帶鍒楄〃 * @param query 鑰冭瘯id * @return 鐩戞帶鍒楄〃 @@ -139,4 +148,7 @@ * @return */ Result forceSubmit(ForceSubmitForm form); + + + } diff --git a/src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java b/src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java index 4bd74db..7e4f63b 100644 --- a/src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java +++ b/src/main/java/com/ycl/jxkg/service/TaskExamCustomerAnswerService.java @@ -2,7 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.jxkg.domain.entity.ExamPaper; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.TaskExamCustomerAnswer; import java.util.Date; @@ -10,7 +10,7 @@ public interface TaskExamCustomerAnswerService extends IService<TaskExamCustomerAnswer> { - void insertOrUpdate(ExamPaper examPaper, ExamPaperAnswer examPaperAnswer, Date now); + void insertOrUpdate(ExamPaper examPaper, ExamPaperScore examPaperScore, Date now); TaskExamCustomerAnswer selectByTUid(Integer tid, Integer uid); diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java deleted file mode 100644 index 6223325..0000000 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java +++ /dev/null @@ -1,283 +0,0 @@ -package com.ycl.jxkg.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.github.pagehelper.PageHelper; -import com.github.pagehelper.PageInfo; -import com.ycl.jxkg.domain.ExamPaperAnswerInfo; -import com.ycl.jxkg.domain.entity.*; -import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate; -import com.ycl.jxkg.domain.other.KeyValue; -import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; -import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO; -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.enums.ExamPaperAnswerStatusEnum; -import com.ycl.jxkg.enums.ExamPaperTypeEnum; -import com.ycl.jxkg.enums.QuestionTypeEnum; -import com.ycl.jxkg.mapper.ExamPaperAnswerMapper; -import com.ycl.jxkg.mapper.ExamPaperMapper; -import com.ycl.jxkg.mapper.QuestionMapper; -import com.ycl.jxkg.mapper.TaskExamCustomerAnswerMapper; -import com.ycl.jxkg.service.ExamPaperAnswerService; -import com.ycl.jxkg.service.ExamPaperQuestionCustomerAnswerService; -import com.ycl.jxkg.service.TextContentService; -import com.ycl.jxkg.utils.DateTimeUtil; -import com.ycl.jxkg.utils.ExamUtil; -import com.ycl.jxkg.utils.JsonUtil; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -@Service -@RequiredArgsConstructor -public class ExamPaperAnswerServiceImpl extends ServiceImpl<ExamPaperAnswerMapper , ExamPaperAnswer> implements ExamPaperAnswerService { - - private final ExamPaperAnswerMapper examPaperAnswerMapper; - private final ExamPaperMapper examPaperMapper; - private final TextContentService textContentService; - private final QuestionMapper questionMapper; - private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService; - private final TaskExamCustomerAnswerMapper taskExamCustomerAnswerMapper; - - - @Override - public PageInfo<ExamPaperAnswer> studentPage(ExamPaperAnswerPageVO requestVM) { - return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() -> - examPaperAnswerMapper.studentPage(requestVM)); - } - - - @Override - public ExamPaperAnswerInfo calculateExamPaperAnswer(ExamPaperSubmitVO examPaperSubmitVO, User user) { - ExamPaperAnswerInfo examPaperAnswerInfo = new ExamPaperAnswerInfo(); - Date now = new Date(); - ExamPaper examPaper = examPaperMapper.selectById(examPaperSubmitVO.getId()); - ExamPaperTypeEnum paperTypeEnum = ExamPaperTypeEnum.fromCode(examPaper.getPaperType()); - //浠诲姟璇曞嵎鍙兘鍋氫竴娆� - if (paperTypeEnum == ExamPaperTypeEnum.RandomOrder) { - ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.getByPidUid(examPaperSubmitVO.getId(), user.getId()); - if (null != examPaperAnswer) - return null; - } - //TODO:寰呭畬鎴� -// String frameTextContent = textContentService.getById(examPaper.getFrameTextContentId()).getContent(); -// List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent, ExamPaperTitleItemObject.class); -// List<Integer> questionIds = examPaperTitleItemObjects.stream().flatMap(t -> t.getQuestionItems().stream().map(q -> q.getId())).collect(Collectors.toList()); -// List<Question> questions = questionMapper.selectByIds(questionIds); -// //灏嗛鐩粨鏋勭殑杞寲涓洪鐩瓟妗� -// List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperTitleItemObjects.stream() -// .flatMap(t -> t.getQuestionItems().stream() -// .map(q -> { -// Question question = questions.stream().filter(tq -> tq.getId().equals(q.getId())).findFirst().get(); -// ExamPaperSubmitItemVO customerQuestionAnswer = examPaperSubmitVO.getAnswerItems().stream() -// .filter(tq -> tq.getQuestionId().equals(q.getId())) -// .findFirst() -// .orElse(null); -// return ExamPaperQuestionCustomerAnswerFromVM(question, customerQuestionAnswer, examPaper, q.getItemOrder(), user, now); -// }) -// ).collect(Collectors.toList()); -// -// ExamPaperAnswer examPaperAnswer = ExamPaperAnswerFromVM(examPaperSubmitVO, examPaper, examPaperQuestionCustomerAnswers, user, now); -// examPaperAnswerInfo.setExamPaper(examPaper); -// examPaperAnswerInfo.setExamPaperAnswer(examPaperAnswer); -// examPaperAnswerInfo.setExamPaperQuestionCustomerAnswers(examPaperQuestionCustomerAnswers); - return examPaperAnswerInfo; - } - - @Override - @Transactional - public String judge(ExamPaperSubmitVO examPaperSubmitVO) { - ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.selectById(examPaperSubmitVO.getId()); - List<ExamPaperSubmitItemVO> judgeItems = examPaperSubmitVO.getAnswerItems().stream().filter(d -> d.getDoRight() == null).collect(Collectors.toList()); - List<ExamPaperAnswerUpdate> examPaperAnswerUpdates = new ArrayList<>(judgeItems.size()); - Integer customerScore = examPaperAnswer.getUserScore(); - Integer questionCorrect = examPaperAnswer.getQuestionCorrect(); - for (ExamPaperSubmitItemVO d : judgeItems) { - ExamPaperAnswerUpdate examPaperAnswerUpdate = new ExamPaperAnswerUpdate(); - examPaperAnswerUpdate.setId(d.getId()); - examPaperAnswerUpdate.setCustomerScore(ExamUtil.scoreFromVM(d.getScore())); - boolean doRight = examPaperAnswerUpdate.getCustomerScore().equals(ExamUtil.scoreFromVM(d.getQuestionScore())); - examPaperAnswerUpdate.setDoRight(doRight); - examPaperAnswerUpdates.add(examPaperAnswerUpdate); - customerScore += examPaperAnswerUpdate.getCustomerScore(); - if (examPaperAnswerUpdate.getDoRight()) { - ++questionCorrect; - } - } - examPaperAnswer.setUserScore(customerScore); - examPaperAnswer.setQuestionCorrect(questionCorrect); - examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode()); - examPaperAnswerMapper.updateById(examPaperAnswer); - examPaperQuestionCustomerAnswerService.updateScore(examPaperAnswerUpdates); - - ExamPaperTypeEnum examPaperTypeEnum = ExamPaperTypeEnum.fromCode(examPaperAnswer.getPaperType()); - switch (examPaperTypeEnum) { - case RandomOrder: - //TODO:寰呭畬鎴� - //浠诲姟璇曞嵎鎵规敼瀹屾垚鍚庯紝闇�瑕佹洿鏂颁换鍔$殑鐘舵�� -// ExamPaper examPaper = examPaperMapper.selectById(examPaperAnswer.getExamPaperId()); -// Integer taskId = examPaper.getTaskExamId(); -// Integer userId = examPaperAnswer.getCreateUser(); -// TaskExamCustomerAnswer taskExamCustomerAnswer = taskExamCustomerAnswerMapper.getByTUid(taskId, userId); -// TextContent textContent = textContentService.getById(taskExamCustomerAnswer.getTextContentId()); -// List<TaskItemAnswerObject> taskItemAnswerObjects = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemAnswerObject.class); -// taskItemAnswerObjects.stream() -// .filter(d -> d.getExamPaperAnswerId().equals(examPaperAnswer.getId())) -// .findFirst().ifPresent(taskItemAnswerObject -> taskItemAnswerObject.setStatus(examPaperAnswer.getStatus())); -// textContentService.jsonConvertUpdate(textContent, taskItemAnswerObjects, null); -// textContentService.updateById(textContent); - break; - default: - break; - } - return ExamUtil.scoreToVM(customerScore); - } - - @Override - public ExamPaperSubmitVO examPaperAnswerToVM(Integer id) { - ExamPaperSubmitVO examPaperSubmitVO = new ExamPaperSubmitVO(); - ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.selectById(id); - examPaperSubmitVO.setId(examPaperAnswer.getId()); - examPaperSubmitVO.setDoTime(examPaperAnswer.getDoTime()); - examPaperSubmitVO.setScore(ExamUtil.scoreToVM(examPaperAnswer.getUserScore())); - List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperQuestionCustomerAnswerService.selectListByPaperAnswerId(examPaperAnswer.getId()); - List<ExamPaperSubmitItemVO> examPaperSubmitItemVOS = examPaperQuestionCustomerAnswers.stream() - .map(a -> examPaperQuestionCustomerAnswerService.examPaperQuestionCustomerAnswerToVM(a)) - .collect(Collectors.toList()); - examPaperSubmitVO.setAnswerItems(examPaperSubmitItemVOS); - return examPaperSubmitVO; - } - - @Override - public Integer selectAllCount() { - return examPaperAnswerMapper.selectAllCount(); - } - - @Override - public List<Integer> selectMothCount() { - Date startTime = DateTimeUtil.getMonthStartDay(); - Date endTime = DateTimeUtil.getMonthEndDay(); - List<KeyValue> mouthCount = examPaperAnswerMapper.selectCountByDate(startTime, endTime); - List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat(); - return mothStartToNowFormat.stream().map(md -> { - KeyValue keyValue = mouthCount.stream().filter(kv -> kv.getName().equals(md)).findAny().orElse(null); - return null == keyValue ? 0 : keyValue.getValue(); - }).collect(Collectors.toList()); - } - - - /** - * 鐢ㄦ埛鎻愪氦绛旀鐨勮浆鍖栧瓨鍌ㄥ璞� - * - * @param question question - * @param customerQuestionAnswer customerQuestionAnswer - * @param examPaper examPaper - * @param itemOrder itemOrder - * @param user user - * @param now now - * @return ExamPaperQuestionCustomerAnswer - */ - private ExamPaperQuestionCustomerAnswer ExamPaperQuestionCustomerAnswerFromVM(Question question, ExamPaperSubmitItemVO customerQuestionAnswer, ExamPaper examPaper, Integer itemOrder, User user, Date now) { - ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer = new ExamPaperQuestionCustomerAnswer(); - examPaperQuestionCustomerAnswer.setQuestionId(question.getId()); - examPaperQuestionCustomerAnswer.setExamPaperId(examPaper.getId()); - examPaperQuestionCustomerAnswer.setQuestionScore(null); - examPaperQuestionCustomerAnswer.setSubjectId(examPaper.getSubjectId()); - examPaperQuestionCustomerAnswer.setItemOrder(itemOrder); - examPaperQuestionCustomerAnswer.setCreateTime(now); - examPaperQuestionCustomerAnswer.setCreateUser(user.getId()); - examPaperQuestionCustomerAnswer.setQuestionType(question.getQuestionType()); - examPaperQuestionCustomerAnswer.setQuestionContent(question.getContent()); - if (null == customerQuestionAnswer) { - examPaperQuestionCustomerAnswer.setCustomerScore(0); - } else { - setSpecialFromVM(examPaperQuestionCustomerAnswer, question, customerQuestionAnswer); - } - return examPaperQuestionCustomerAnswer; - } - - /** - * 鍒ゆ柇鎻愪氦绛旀鏄惁姝g‘锛屼繚鐣欑敤鎴锋彁浜ょ殑绛旀 - * - * @param examPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer - * @param question question - * @param customerQuestionAnswer customerQuestionAnswer - */ - private void setSpecialFromVM(ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer, Question question, ExamPaperSubmitItemVO customerQuestionAnswer) { - QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperQuestionCustomerAnswer.getQuestionType()); - switch (questionTypeEnum) { - case SingleChoice: - case TrueFalse: - examPaperQuestionCustomerAnswer.setAnswer(customerQuestionAnswer.getContent()); - examPaperQuestionCustomerAnswer.setDoRight(question.getCorrect().equals(customerQuestionAnswer.getContent())); - examPaperQuestionCustomerAnswer.setCustomerScore(examPaperQuestionCustomerAnswer.getDoRight() ? null : 0); - break; - case MultipleChoice: - String customerAnswer = ExamUtil.contentToString(customerQuestionAnswer.getContentArray()); - examPaperQuestionCustomerAnswer.setAnswer(customerAnswer); - examPaperQuestionCustomerAnswer.setDoRight(customerAnswer.equals(question.getCorrect())); - examPaperQuestionCustomerAnswer.setCustomerScore(examPaperQuestionCustomerAnswer.getDoRight() ? null : 0); - break; - case GapFilling: - String correctAnswer = JsonUtil.toJsonStr(customerQuestionAnswer.getContentArray()); - examPaperQuestionCustomerAnswer.setAnswer(correctAnswer); - examPaperQuestionCustomerAnswer.setCustomerScore(0); - break; - default: - examPaperQuestionCustomerAnswer.setAnswer(customerQuestionAnswer.getContent()); - examPaperQuestionCustomerAnswer.setCustomerScore(0); - break; - } - } - - private ExamPaperAnswer ExamPaperAnswerFromVM(ExamPaperSubmitVO examPaperSubmitVO, ExamPaper examPaper, List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers, User user, Date now) { - Integer systemScore = examPaperQuestionCustomerAnswers.stream().mapToInt(a -> a.getCustomerScore()).sum(); - long questionCorrect = examPaperQuestionCustomerAnswers.stream().filter(a -> a.getCustomerScore().equals(a.getQuestionScore())).count(); - ExamPaperAnswer examPaperAnswer = new ExamPaperAnswer(); - //TODO:寰呭畬鎴� -// examPaperAnswer.setPaperName(examPaper.getName()); -// examPaperAnswer.setDoTime(examPaperSubmitVO.getDoTime()); -// examPaperAnswer.setExamPaperId(examPaper.getId()); -// examPaperAnswer.setCreateUser(user.getId()); -// examPaperAnswer.setCreateTime(now); -// examPaperAnswer.setSubjectId(examPaper.getSubjectId()); -// examPaperAnswer.setQuestionCount(examPaper.getQuestionCount()); -// examPaperAnswer.setPaperScore(examPaper.getScore()); -// examPaperAnswer.setPaperType(examPaper.getPaperType()); -// examPaperAnswer.setSystemScore(systemScore); -// examPaperAnswer.setUserScore(systemScore); -// examPaperAnswer.setTaskExamId(examPaper.getTaskExamId()); -// examPaperAnswer.setQuestionCorrect((int) questionCorrect); -// boolean needJudge = examPaperQuestionCustomerAnswers.stream().anyMatch(d -> QuestionTypeEnum.needSaveTextContent(d.getQuestionType())); -// if (needJudge) { -// examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.WaitJudge.getCode()); -// } else { -// examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode()); -// } - return examPaperAnswer; - } - - - @Override - public PageInfo<ExamPaperAnswerPageResponseVO> adminPage(ExamPaperAnswerPageRequestVO requestVM) { - return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize()).doSelectPageInfo(() -> - examPaperAnswerMapper.adminPage(requestVM)); - } - - @Override - public List<ExamPaperAnswerPageResponseVO> list(ExamPaperAnswerPageRequestVO requestVM) { - return examPaperAnswerMapper.adminPage(requestVM); - } - - @Override - public PageInfo<ExamPaperAnswerPageResponseVO> pageExamPaper(ExamPaperAnswerPageRequestVO model) { - return PageHelper.startPage(model.getPageIndex(), model.getPageSize()).doSelectPageInfo(() -> - examPaperAnswerMapper.pageExamPaper(model)); - } -} diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperQuestionCustomerAnswerServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreDetailServiceImpl.java similarity index 63% rename from src/main/java/com/ycl/jxkg/service/impl/ExamPaperQuestionCustomerAnswerServiceImpl.java rename to src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreDetailServiceImpl.java index d738ccf..8b92430 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperQuestionCustomerAnswerServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreDetailServiceImpl.java @@ -1,13 +1,13 @@ package com.ycl.jxkg.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScoreDetail; import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate; import com.ycl.jxkg.domain.other.KeyValue; import com.ycl.jxkg.domain.entity.TextContent; import com.ycl.jxkg.enums.QuestionTypeEnum; -import com.ycl.jxkg.mapper.ExamPaperQuestionCustomerAnswerMapper; -import com.ycl.jxkg.service.ExamPaperQuestionCustomerAnswerService; +import com.ycl.jxkg.mapper.ExamPaperScoreDetailMapper; +import com.ycl.jxkg.service.ExamPaperScoreDetailService; import com.ycl.jxkg.service.TextContentService; import com.ycl.jxkg.utils.DateTimeUtil; import com.ycl.jxkg.utils.ExamUtil; @@ -25,32 +25,32 @@ @Service @RequiredArgsConstructor -public class ExamPaperQuestionCustomerAnswerServiceImpl extends ServiceImpl<ExamPaperQuestionCustomerAnswerMapper, ExamPaperQuestionCustomerAnswer> implements ExamPaperQuestionCustomerAnswerService { +public class ExamPaperScoreDetailServiceImpl extends ServiceImpl<ExamPaperScoreDetailMapper, ExamPaperScoreDetail> implements ExamPaperScoreDetailService { - private final ExamPaperQuestionCustomerAnswerMapper examPaperQuestionCustomerAnswerMapper; + private final ExamPaperScoreDetailMapper examPaperScoreDetailMapper; private final TextContentService textContentService; @Override - public PageInfo<ExamPaperQuestionCustomerAnswer> studentPage(QuestionPageStudentRequestVO requestVM) { + public PageInfo<ExamPaperScoreDetail> studentPage(QuestionPageStudentRequestVO requestVM) { return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() -> - examPaperQuestionCustomerAnswerMapper.studentPage(requestVM) + examPaperScoreDetailMapper.studentPage(requestVM) ); } @Override - public List<ExamPaperQuestionCustomerAnswer> selectListByPaperAnswerId(Integer id) { - return examPaperQuestionCustomerAnswerMapper.selectListByPaperAnswerId(id); + public List<ExamPaperScoreDetail> selectListByPaperAnswerId(Integer id) { + return examPaperScoreDetailMapper.selectListByPaperAnswerId(id); } @Override - public void insertList(List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers) { - examPaperQuestionCustomerAnswerMapper.insertList(examPaperQuestionCustomerAnswers); + public void insertList(List<ExamPaperScoreDetail> examPaperScoreDetails) { + examPaperScoreDetailMapper.insertList(examPaperScoreDetails); } @Override - public ExamPaperSubmitItemVO examPaperQuestionCustomerAnswerToVM(ExamPaperQuestionCustomerAnswer qa) { + public ExamPaperSubmitItemVO examPaperQuestionCustomerAnswerToVM(ExamPaperScoreDetail qa) { ExamPaperSubmitItemVO examPaperSubmitItemVO = new ExamPaperSubmitItemVO(); examPaperSubmitItemVO.setId(qa.getId()); examPaperSubmitItemVO.setQuestionId(qa.getQuestionId()); @@ -64,14 +64,14 @@ @Override public Integer selectAllCount() { - return examPaperQuestionCustomerAnswerMapper.selectAllCount(); + return examPaperScoreDetailMapper.selectAllCount(); } @Override public List<Integer> selectMothCount() { Date startTime = DateTimeUtil.getMonthStartDay(); Date endTime = DateTimeUtil.getMonthEndDay(); - List<KeyValue> mouthCount = examPaperQuestionCustomerAnswerMapper.selectCountByDate(startTime, endTime); + List<KeyValue> mouthCount = examPaperScoreDetailMapper.selectCountByDate(startTime, endTime); List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat(); return mothStartToNowFormat.stream().map(md -> { KeyValue keyValue = mouthCount.stream().filter(kv -> kv.getName().equals(md)).findAny().orElse(null); @@ -81,27 +81,27 @@ @Override public int updateScore(List<ExamPaperAnswerUpdate> examPaperAnswerUpdates) { - return examPaperQuestionCustomerAnswerMapper.updateScore(examPaperAnswerUpdates); + return examPaperScoreDetailMapper.updateScore(examPaperAnswerUpdates); } - private void setSpecialToVM(ExamPaperSubmitItemVO examPaperSubmitItemVO, ExamPaperQuestionCustomerAnswer examPaperQuestionCustomerAnswer) { - QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperQuestionCustomerAnswer.getQuestionType()); + private void setSpecialToVM(ExamPaperSubmitItemVO examPaperSubmitItemVO, ExamPaperScoreDetail examPaperScoreDetail) { + QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperScoreDetail.getQuestionType()); switch (questionTypeEnum) { case MultipleChoice: - examPaperSubmitItemVO.setContent(examPaperQuestionCustomerAnswer.getAnswer()); - examPaperSubmitItemVO.setContentArray(ExamUtil.contentToArray(examPaperQuestionCustomerAnswer.getAnswer())); + examPaperSubmitItemVO.setContent(examPaperScoreDetail.getAnswer()); + examPaperSubmitItemVO.setContentArray(ExamUtil.contentToArray(examPaperScoreDetail.getAnswer())); break; case GapFilling: - TextContent textContent = textContentService.getById(examPaperQuestionCustomerAnswer.getTextContentId()); + TextContent textContent = textContentService.getById(examPaperScoreDetail.getTextContentId()); List<String> correctAnswer = JsonUtil.toJsonListObject(textContent.getContent(), String.class); examPaperSubmitItemVO.setContentArray(correctAnswer); break; default: - if (QuestionTypeEnum.needSaveTextContent(examPaperQuestionCustomerAnswer.getQuestionType())) { - TextContent content = textContentService.getById(examPaperQuestionCustomerAnswer.getTextContentId()); + if (QuestionTypeEnum.needSaveTextContent(examPaperScoreDetail.getQuestionType())) { + TextContent content = textContentService.getById(examPaperScoreDetail.getTextContentId()); examPaperSubmitItemVO.setContent(content.getContent()); } else { - examPaperSubmitItemVO.setContent(examPaperQuestionCustomerAnswer.getAnswer()); + examPaperSubmitItemVO.setContent(examPaperScoreDetail.getAnswer()); } break; } diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java new file mode 100644 index 0000000..baa2c7d --- /dev/null +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java @@ -0,0 +1,284 @@ +package com.ycl.jxkg.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ycl.jxkg.domain.ExamPaperAnswerInfo; +import com.ycl.jxkg.domain.entity.*; +import com.ycl.jxkg.domain.other.ExamPaperAnswerUpdate; +import com.ycl.jxkg.domain.other.KeyValue; +import com.ycl.jxkg.domain.vo.admin.paper.ExamPaperAnswerPageRequestVO; +import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitItemVO; +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.enums.ExamPaperAnswerStatusEnum; +import com.ycl.jxkg.enums.ExamPaperTypeEnum; +import com.ycl.jxkg.enums.QuestionTypeEnum; +import com.ycl.jxkg.mapper.ExamPaperScoreMapper; +import com.ycl.jxkg.mapper.ExamPaperMapper; +import com.ycl.jxkg.mapper.QuestionMapper; +import com.ycl.jxkg.mapper.TaskExamCustomerAnswerMapper; +import com.ycl.jxkg.service.ExamPaperScoreService; +import com.ycl.jxkg.service.ExamPaperScoreDetailService; +import com.ycl.jxkg.service.TextContentService; +import com.ycl.jxkg.utils.DateTimeUtil; +import com.ycl.jxkg.utils.ExamUtil; +import com.ycl.jxkg.utils.JsonUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class ExamPaperScoreServiceImpl extends ServiceImpl<ExamPaperScoreMapper, ExamPaperScore> implements ExamPaperScoreService { + + private final ExamPaperScoreMapper examPaperScoreMapper; + private final ExamPaperMapper examPaperMapper; + private final TextContentService textContentService; + private final QuestionMapper questionMapper; + private final ExamPaperScoreDetailService examPaperScoreDetailService; + private final TaskExamCustomerAnswerMapper taskExamCustomerAnswerMapper; + + + @Override + public PageInfo<ExamPaperScore> studentPage(ExamPaperAnswerPageVO requestVM) { + return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() -> + examPaperScoreMapper.studentPage(requestVM)); + } + + + @Override + public ExamPaperAnswerInfo calculateExamPaperAnswer(ExamPaperSubmitVO examPaperSubmitVO, User user) { + ExamPaperAnswerInfo examPaperAnswerInfo = new ExamPaperAnswerInfo(); + Date now = new Date(); + ExamPaper examPaper = examPaperMapper.selectById(examPaperSubmitVO.getId()); + ExamPaperTypeEnum paperTypeEnum = ExamPaperTypeEnum.fromCode(examPaper.getPaperType()); + //浠诲姟璇曞嵎鍙兘鍋氫竴娆� + if (paperTypeEnum == ExamPaperTypeEnum.RandomOrder) { + ExamPaperScore examPaperScore = examPaperScoreMapper.getByPidUid(examPaperSubmitVO.getId(), user.getId()); + if (null != examPaperScore) + return null; + } + //TODO:寰呭畬鎴� +// String frameTextContent = textContentService.getById(examPaper.getFrameTextContentId()).getContent(); +// List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent, ExamPaperTitleItemObject.class); +// List<Integer> questionIds = examPaperTitleItemObjects.stream().flatMap(t -> t.getQuestionItems().stream().map(q -> q.getId())).collect(Collectors.toList()); +// List<Question> questions = questionMapper.selectByIds(questionIds); +// //灏嗛鐩粨鏋勭殑杞寲涓洪鐩瓟妗� +// List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperTitleItemObjects.stream() +// .flatMap(t -> t.getQuestionItems().stream() +// .map(q -> { +// Question question = questions.stream().filter(tq -> tq.getId().equals(q.getId())).findFirst().get(); +// ExamPaperSubmitItemVO customerQuestionAnswer = examPaperSubmitVO.getAnswerItems().stream() +// .filter(tq -> tq.getQuestionId().equals(q.getId())) +// .findFirst() +// .orElse(null); +// return ExamPaperQuestionCustomerAnswerFromVM(question, customerQuestionAnswer, examPaper, q.getItemOrder(), user, now); +// }) +// ).collect(Collectors.toList()); +// +// ExamPaperAnswer examPaperAnswer = ExamPaperAnswerFromVM(examPaperSubmitVO, examPaper, examPaperQuestionCustomerAnswers, user, now); +// examPaperAnswerInfo.setExamPaper(examPaper); +// examPaperAnswerInfo.setExamPaperAnswer(examPaperAnswer); +// examPaperAnswerInfo.setExamPaperQuestionCustomerAnswers(examPaperQuestionCustomerAnswers); + return examPaperAnswerInfo; + } + + @Override + @Transactional + public String judge(ExamPaperSubmitVO examPaperSubmitVO) { +// ExamPaperScore examPaperScore = examPaperScoreMapper.selectById(examPaperSubmitVO.getId()); +// List<ExamPaperSubmitItemVO> judgeItems = examPaperSubmitVO.getAnswerItems().stream().filter(d -> d.getDoRight() == null).collect(Collectors.toList()); +// List<ExamPaperAnswerUpdate> examPaperAnswerUpdates = new ArrayList<>(judgeItems.size()); +// Integer customerScore = examPaperScore.getUserScore(); +// Integer questionCorrect = examPaperScore.getQuestionCorrect(); +// for (ExamPaperSubmitItemVO d : judgeItems) { +// ExamPaperAnswerUpdate examPaperAnswerUpdate = new ExamPaperAnswerUpdate(); +// examPaperAnswerUpdate.setId(d.getId()); +// examPaperAnswerUpdate.setCustomerScore(ExamUtil.scoreFromVM(d.getScore())); +// boolean doRight = examPaperAnswerUpdate.getCustomerScore().equals(ExamUtil.scoreFromVM(d.getQuestionScore())); +// examPaperAnswerUpdate.setDoRight(doRight); +// examPaperAnswerUpdates.add(examPaperAnswerUpdate); +// customerScore += examPaperAnswerUpdate.getCustomerScore(); +// if (examPaperAnswerUpdate.getDoRight()) { +// ++questionCorrect; +// } +// } +// examPaperScore.setUserScore(customerScore); +// examPaperScore.setQuestionCorrect(questionCorrect); +// examPaperScore.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode()); +// examPaperScoreMapper.updateById(examPaperScore); +// examPaperScoreDetailService.updateScore(examPaperAnswerUpdates); +// +// ExamPaperTypeEnum examPaperTypeEnum = ExamPaperTypeEnum.fromCode(examPaperScore.getPaperType()); +// switch (examPaperTypeEnum) { +// case RandomOrder: + //TODO:寰呭畬鎴� + //浠诲姟璇曞嵎鎵规敼瀹屾垚鍚庯紝闇�瑕佹洿鏂颁换鍔$殑鐘舵�� +// ExamPaper examPaper = examPaperMapper.selectById(examPaperAnswer.getExamPaperId()); +// Integer taskId = examPaper.getTaskExamId(); +// Integer userId = examPaperAnswer.getCreateUser(); +// TaskExamCustomerAnswer taskExamCustomerAnswer = taskExamCustomerAnswerMapper.getByTUid(taskId, userId); +// TextContent textContent = textContentService.getById(taskExamCustomerAnswer.getTextContentId()); +// List<TaskItemAnswerObject> taskItemAnswerObjects = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemAnswerObject.class); +// taskItemAnswerObjects.stream() +// .filter(d -> d.getExamPaperAnswerId().equals(examPaperAnswer.getId())) +// .findFirst().ifPresent(taskItemAnswerObject -> taskItemAnswerObject.setStatus(examPaperAnswer.getStatus())); +// textContentService.jsonConvertUpdate(textContent, taskItemAnswerObjects, null); +// textContentService.updateById(textContent); +// break; +// default: +// break; +// } +// return ExamUtil.scoreToVM(customerScore); + return "1"; + } + + @Override + public ExamPaperSubmitVO examPaperAnswerToVM(Integer id) { + ExamPaperSubmitVO examPaperSubmitVO = new ExamPaperSubmitVO(); +// ExamPaperScore examPaperScore = examPaperScoreMapper.selectById(id); +// examPaperSubmitVO.setId(examPaperScore.getId()); +// examPaperSubmitVO.setDoTime(examPaperScore.getDoTime()); +// examPaperSubmitVO.setScore(ExamUtil.scoreToVM(examPaperScore.getUserScore())); +// List<ExamPaperScoreDetail> examPaperScoreDetails = examPaperScoreDetailService.selectListByPaperAnswerId(examPaperScore.getId()); +// List<ExamPaperSubmitItemVO> examPaperSubmitItemVOS = examPaperScoreDetails.stream() +// .map(a -> examPaperScoreDetailService.examPaperQuestionCustomerAnswerToVM(a)) +// .collect(Collectors.toList()); +// examPaperSubmitVO.setAnswerItems(examPaperSubmitItemVOS); + return examPaperSubmitVO; + } + + @Override + public Integer selectAllCount() { + return examPaperScoreMapper.selectAllCount(); + } + + @Override + public List<Integer> selectMothCount() { + Date startTime = DateTimeUtil.getMonthStartDay(); + Date endTime = DateTimeUtil.getMonthEndDay(); + List<KeyValue> mouthCount = examPaperScoreMapper.selectCountByDate(startTime, endTime); + List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat(); + return mothStartToNowFormat.stream().map(md -> { + KeyValue keyValue = mouthCount.stream().filter(kv -> kv.getName().equals(md)).findAny().orElse(null); + return null == keyValue ? 0 : keyValue.getValue(); + }).collect(Collectors.toList()); + } + + + /** + * 鐢ㄦ埛鎻愪氦绛旀鐨勮浆鍖栧瓨鍌ㄥ璞� + * + * @param question question + * @param customerQuestionAnswer customerQuestionAnswer + * @param examPaper examPaper + * @param itemOrder itemOrder + * @param user user + * @param now now + * @return ExamPaperQuestionCustomerAnswer + */ + private ExamPaperScoreDetail ExamPaperQuestionCustomerAnswerFromVM(Question question, ExamPaperSubmitItemVO customerQuestionAnswer, ExamPaper examPaper, Integer itemOrder, User user, Date now) { + ExamPaperScoreDetail examPaperScoreDetail = new ExamPaperScoreDetail(); + examPaperScoreDetail.setQuestionId(question.getId()); + examPaperScoreDetail.setExamPaperId(examPaper.getId()); + examPaperScoreDetail.setQuestionScore(null); + examPaperScoreDetail.setSubjectId(examPaper.getSubjectId()); + examPaperScoreDetail.setItemOrder(itemOrder); + examPaperScoreDetail.setCreateTime(now); + examPaperScoreDetail.setCreateUser(user.getId()); + examPaperScoreDetail.setQuestionType(question.getQuestionType()); + examPaperScoreDetail.setQuestionContent(question.getContent()); + if (null == customerQuestionAnswer) { + examPaperScoreDetail.setCustomerScore(0); + } else { + setSpecialFromVM(examPaperScoreDetail, question, customerQuestionAnswer); + } + return examPaperScoreDetail; + } + + /** + * 鍒ゆ柇鎻愪氦绛旀鏄惁姝g‘锛屼繚鐣欑敤鎴锋彁浜ょ殑绛旀 + * + * @param examPaperScoreDetail examPaperQuestionCustomerAnswer + * @param question question + * @param customerQuestionAnswer customerQuestionAnswer + */ + private void setSpecialFromVM(ExamPaperScoreDetail examPaperScoreDetail, Question question, ExamPaperSubmitItemVO customerQuestionAnswer) { + QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(examPaperScoreDetail.getQuestionType()); + switch (questionTypeEnum) { + case SingleChoice: + case TrueFalse: + examPaperScoreDetail.setAnswer(customerQuestionAnswer.getContent()); + examPaperScoreDetail.setDoRight(question.getCorrect().equals(customerQuestionAnswer.getContent())); + examPaperScoreDetail.setCustomerScore(examPaperScoreDetail.getDoRight() ? null : 0); + break; + case MultipleChoice: + String customerAnswer = ExamUtil.contentToString(customerQuestionAnswer.getContentArray()); + examPaperScoreDetail.setAnswer(customerAnswer); + examPaperScoreDetail.setDoRight(customerAnswer.equals(question.getCorrect())); + examPaperScoreDetail.setCustomerScore(examPaperScoreDetail.getDoRight() ? null : 0); + break; + case GapFilling: + String correctAnswer = JsonUtil.toJsonStr(customerQuestionAnswer.getContentArray()); + examPaperScoreDetail.setAnswer(correctAnswer); + examPaperScoreDetail.setCustomerScore(0); + break; + default: + examPaperScoreDetail.setAnswer(customerQuestionAnswer.getContent()); + examPaperScoreDetail.setCustomerScore(0); + break; + } + } + + private ExamPaperScore ExamPaperAnswerFromVM(ExamPaperSubmitVO examPaperSubmitVO, ExamPaper examPaper, List<ExamPaperScoreDetail> examPaperScoreDetails, User user, Date now) { + Integer systemScore = examPaperScoreDetails.stream().mapToInt(a -> a.getCustomerScore()).sum(); + long questionCorrect = examPaperScoreDetails.stream().filter(a -> a.getCustomerScore().equals(a.getQuestionScore())).count(); + ExamPaperScore examPaperScore = new ExamPaperScore(); + //TODO:寰呭畬鎴� +// examPaperAnswer.setPaperName(examPaper.getName()); +// examPaperAnswer.setDoTime(examPaperSubmitVO.getDoTime()); +// examPaperAnswer.setExamPaperId(examPaper.getId()); +// examPaperAnswer.setCreateUser(user.getId()); +// examPaperAnswer.setCreateTime(now); +// examPaperAnswer.setSubjectId(examPaper.getSubjectId()); +// examPaperAnswer.setQuestionCount(examPaper.getQuestionCount()); +// examPaperAnswer.setPaperScore(examPaper.getScore()); +// examPaperAnswer.setPaperType(examPaper.getPaperType()); +// examPaperAnswer.setSystemScore(systemScore); +// examPaperAnswer.setUserScore(systemScore); +// examPaperAnswer.setTaskExamId(examPaper.getTaskExamId()); +// examPaperAnswer.setQuestionCorrect((int) questionCorrect); +// boolean needJudge = examPaperQuestionCustomerAnswers.stream().anyMatch(d -> QuestionTypeEnum.needSaveTextContent(d.getQuestionType())); +// if (needJudge) { +// examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.WaitJudge.getCode()); +// } else { +// examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode()); +// } + return examPaperScore; + } + + + @Override + public PageInfo<ExamPaperAnswerPageResponseVO> adminPage(ExamPaperAnswerPageRequestVO requestVM) { + return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize()).doSelectPageInfo(() -> + examPaperScoreMapper.adminPage(requestVM)); + } + + @Override + public List<ExamPaperAnswerPageResponseVO> list(ExamPaperAnswerPageRequestVO requestVM) { + return examPaperScoreMapper.adminPage(requestVM); + } + + @Override + public PageInfo<ExamPaperAnswerPageResponseVO> pageExamPaper(ExamPaperAnswerPageRequestVO model) { + return PageHelper.startPage(model.getPageIndex(), model.getPageSize()).doSelectPageInfo(() -> + examPaperScoreMapper.pageExamPaper(model)); + } +} diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java index ce84882..43b3573 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java @@ -2,14 +2,13 @@ import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.jxkg.base.Result; +import com.ycl.jxkg.base.SystemCode; import com.ycl.jxkg.context.WebContext; -import com.ycl.jxkg.domain.entity.Exam; -import com.ycl.jxkg.domain.entity.ExamPaper; -import com.ycl.jxkg.domain.entity.ExamSubmitTemp; -import com.ycl.jxkg.domain.entity.Question; +import com.ycl.jxkg.domain.entity.*; import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO; import com.ycl.jxkg.domain.exam.PaperQuestionSettingDTO; import com.ycl.jxkg.domain.form.AddTimeForm; @@ -18,6 +17,12 @@ import com.ycl.jxkg.domain.query.ExamQuery; import com.ycl.jxkg.domain.question.QuestionObject; import com.ycl.jxkg.domain.vo.*; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkAnswerVO; +import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkVO; +import com.ycl.jxkg.domain.vo.student.exam.ExamPaperReadVO; +import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO; +import com.ycl.jxkg.enums.DeductTypeEnum; import com.ycl.jxkg.enums.ExamPaperTypeEnum; import com.ycl.jxkg.enums.QuestionTypeEnum; import com.ycl.jxkg.enums.WebsocketCommendEnum; @@ -27,14 +32,18 @@ import com.ycl.jxkg.server.WebsocketServer; import com.ycl.jxkg.service.ExamPaperService; import com.ycl.jxkg.service.ExamService; +import com.ycl.jxkg.utils.JsonUtil; import com.ycl.jxkg.utils.PageUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Bean; import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -56,6 +65,9 @@ private final ExamPaperMapper examPaperMapper; private final ExamPaperService examPaperService; private final WebsocketServer websocketServer; + private final UserMapper userMapper; + private final ExamPaperScoreMapper examPaperScoreMapper; + private final ExamPaperScoreDetailMapper examPaperScoreDetailMapper; /** * 娣诲姞 @@ -124,11 +136,11 @@ IPage<ExamVO> page = PageUtil.getPage(query, ExamVO.class); baseMapper.getPage(page, query, webContext.getCurrentUser().getId()); page.getRecords().stream().forEach(item -> { - if (! StringUtils.hasText(item.getClassName())) { + if (!StringUtils.hasText(item.getClassName())) { item.setClassName("鐝骇涓嶅瓨鍦ㄦ垨琚垹闄�"); item.setClassesId(null); } - if (! StringUtils.hasText(item.getExamPaperName())) { + if (!StringUtils.hasText(item.getExamPaperName())) { item.setExamPaperName("璇曞嵎涓嶅瓨鍦ㄦ垨琚垹闄�"); item.setExamPaperId(null); } @@ -191,7 +203,7 @@ return Result.ok().data(data); } else if (ExamPaperTypeEnum.Random.getCode().equals(examPaper.getPaperType())) { // 鏍规嵁闅忔満璇曞嵎鐨勯厤缃紝闅忔満鐢熸垚瀵瑰簲棰樼洰 - if (! StringUtils.hasText(examPaper.getContent())) { + if (!StringUtils.hasText(examPaper.getContent())) { throw new RuntimeException("璇曞嵎閰嶇疆寮傚父锛岃鑱旂郴鑰佸笀"); } List<PaperQuestionSettingDTO> paperSettingList = JSON.parseArray(examPaper.getContent(), PaperQuestionSettingDTO.class); @@ -226,11 +238,13 @@ } ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp(); examSubmitTemp.setExamId(id); - examSubmitTemp.setStatus(ExamSubmitTempStatusEnum.TEMP); + //TODO + examSubmitTemp.setStatus(ExamSubmitTempStatusEnum.temp); examSubmitTemp.setExamSubmit(JSON.toJSONString(examData)); examSubmitTemp.setCreateTime(new Date()); examSubmitTemp.setUserId(webContext.getCurrentUser().getId()); - examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.TEMP); + //TODO + examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.temp); examSubmitTempMapper.insert(examSubmitTemp); StartExamVO startExamVO = new StartExamVO(); startExamVO.setExamName(exam.getExamName()); @@ -249,7 +263,7 @@ * @return */ private List<PaperFixQuestionVO> coverTo(ExamPaper examPaper) { - if (! StringUtils.hasText(examPaper.getContent())) { + if (!StringUtils.hasText(examPaper.getContent())) { throw new RuntimeException("璇曞嵎鏈厤缃鐩紝璇疯仈绯昏�佸笀"); } List<PaperFixQuestionDTO> questionWarpList = JSON.parseArray(examPaper.getContent(), PaperFixQuestionDTO.class); @@ -350,7 +364,8 @@ // 闃呭嵎鍚庢墠寰�exam_paper_answer淇濆瓨鑰冭瘯鎴愮哗銆佷互鍙婁繚瀛樺埌exam_paper_customer_answer // 鐜板湪鍙渶瑕佷繚瀛樺埌涓�寮犱复鏃惰〃 // 璇ユ帴鍙f槸涓诲姩鎻愪氦锛屾墍浠ョ姸鎬侀兘璁剧疆涓哄畬鎴愶紝浠ヤ究鍚庣画鑰佸笀闃呭嵎 - saveTempExam(submitData, ExamSubmitTempStatusEnum.FINISH); + //TODO + saveTempExam(submitData, ExamSubmitTempStatusEnum.finish); return Result.ok(); } @@ -362,38 +377,45 @@ */ @Override public Result timingSubmit(StartExamVO submitData) { - saveTempExam(submitData, ExamSubmitTempStatusEnum.TEMP); + //TODO + saveTempExam(submitData, ExamSubmitTempStatusEnum.temp); return Result.ok(); } /** * 淇濆瓨璇曞嵎锛氬鏋滄帴鍙f槸瀹氭椂淇濆瓨閭d箞鏄复鏃惰瘯鍗枫�傚鏋滄帴鍙f槸鑷富鎻愪氦閭d箞鏄畬鎴愯瘯鍗� * - * @param submitData 鍓嶇浼犻�掔殑璇曞嵎鏁版嵁 - * @param status 璇曞嵎鐨勭姸鎬� + * @param submitData 鍓嶇浼犻�掔殑璇曞嵎鏁版嵁 + * @param status 璇曞嵎鐨勭姸鎬� */ public void saveTempExam(StartExamVO submitData, ExamSubmitTempStatusEnum status) { ExamSubmitTemp one = new LambdaQueryChainWrapper<>(examSubmitTempMapper) .eq(ExamSubmitTemp::getExamId, submitData.getId()) .eq(ExamSubmitTemp::getUserId, webContext.getCurrentUser().getId()) + .eq(ExamSubmitTemp::getDeleted,0) .one(); + if (Objects.nonNull(one)) { - if (ExamSubmitTempStatusEnum.FINISH.equals(one.getStatus())) { + long doTimeL = one.getUpdateTime().getTime() - one.getCreateTime().getTime(); + Integer doTime = (int) doTimeL; + //TODO + if (ExamSubmitTempStatusEnum.finish.equals(one.getStatus())) { return; } - one.setDoTime(submitData.getDoTime()); + one.setDoTime(doTime); one.setExamSubmit(JSON.toJSONString(submitData.getTitleList())); - one.setCreateTime(new Date()); + one.setUpdateTime(new Date()); one.setStatus(status); examSubmitTempMapper.updateById(one); } else { ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp(); examSubmitTemp.setExamId(submitData.getId()); - examSubmitTemp.setDoTime(submitData.getDoTime()); + examSubmitTemp.setDoTime(0); examSubmitTemp.setStatus(status); examSubmitTemp.setUserId(webContext.getCurrentUser().getId()); examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getTitleList())); - examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.TEMP); + //TODO + examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.temp); examSubmitTempMapper.insert(examSubmitTemp); } } @@ -414,7 +436,8 @@ // 鍙傝�冧汉鏁� Integer joinExamNum = examSubmitTempList.size(); // 鍙傝�冧絾鏈畬鎴愭彁浜や汉鏁� - Integer joinButNotFinishedNum = Math.toIntExact(examSubmitTempList.stream().filter(item -> ExamSubmitTempStatusEnum.TEMP.equals(item.getStatus())).count()); + //TODO + Integer joinButNotFinishedNum = Math.toIntExact(examSubmitTempList.stream().filter(item -> ExamSubmitTempStatusEnum.temp.equals(item.getStatus())).count()); List<StudentExamInfoVO> studentExamList = classesUserMapper.getClassesUserList(exam.getClassesId()); // 搴旇�冧汉鏁� @@ -442,6 +465,7 @@ @Override public Result getMarkPaperInfo(Integer examId, Integer userId) { + //瀛︾敓绛旈琛� ExamSubmitTemp userExam = new LambdaQueryChainWrapper<>(examSubmitTempMapper) .eq(ExamSubmitTemp::getExamId, examId) .eq(ExamSubmitTemp::getUserId, userId) @@ -449,14 +473,214 @@ if (Objects.isNull(userExam)) { throw new RuntimeException("璇ュ鍛樿�冭瘯璁板綍涓嶅瓨鍦�"); } - ExamSubmitVO vo = new ExamSubmitVO(); - vo.setExamId(userExam.getExamId()); - vo.setDoTime(userExam.getDoTime()); - vo.setUpdateTime(userExam.getUpdateTime()); - if (StringUtils.hasText(userExam.getExamSubmit())) { - vo.setPaperQuestionList(JSON.parseArray(userExam.getExamSubmit(), PaperFixQuestionVO.class)); + ExamVO exam = examMapper.getById(examId); + User student = userMapper.getUserById(userId); + //灏佽闃呭嵎鍩烘湰鏁版嵁 + ExamPaperMarkVO paperMarkVO = createVO(userExam, exam, student); + //TODO:琛ュ厖棰樼洰绛旀銆佽В鏋� + List<PaperFixQuestionVO> titleItems = paperMarkVO.getTitleItems(); + for (PaperFixQuestionVO titleItem : titleItems) { + for (DoQuestionVO doQuestionVO : titleItem.getQuestionList()) { + + } } - return Result.ok(vo); + //闃呭嵎锛屽瑙傞鎵撳垎 + Result InnerError = markPaper(paperMarkVO); + if (InnerError != null) return InnerError; + + return Result.ok(paperMarkVO); + } + //鎻愪氦鎵规敼 + @Override + @Transactional(rollbackFor = Exception.class) + public Result submitMarkPaper(ExamPaperMarkVO examPaperMark) { + Integer userId = webContext.getCurrentUser().getId(); + //鎻掑叆exam_paper_answer(鎴愮哗琛�) + ExamPaperScore examPaperScore = new ExamPaperScore(); + BeanUtils.copyProperties(examPaperMark,examPaperScore); + examPaperScore.setUserScore(new BigDecimal(examPaperMark.getScore())); + examPaperScore.setPaperScore(new BigDecimal(examPaperMark.getTotalScore())); + examPaperScore.setJudgeUser(userId); + examPaperScore.setCreateUser(examPaperMark.getUserId()); + examPaperScore.setAnswerTime(examPaperMark.getSubmitTime()); + examPaperScore.setPaperContent(JSON.toJSONString(examPaperMark.getTitleItems())); + long questionCorrect =0; + long questionCount=0; + if(!CollectionUtils.isEmpty(examPaperMark.getAnswers())){ + questionCorrect = examPaperMark.getAnswers().stream().filter(ExamPaperMarkAnswerVO::getRight).count(); + questionCount = examPaperMark.getAnswers().size(); + } + examPaperScore.setQuestionCorrect(Integer.valueOf(questionCorrect+"")); + examPaperScore.setQuestionCount(Integer.valueOf(questionCount+"")); + examPaperScoreMapper.insert(examPaperScore); + return Result.ok(); + } + + //闃呭嵎 + private Result markPaper(ExamPaperMarkVO paperMarkVO) { + List<PaperFixQuestionVO> titleItems = paperMarkVO.getTitleItems(); + //鍒濆鍖栭鐩簭鍙� + Integer num = 1; + List<ExamPaperMarkAnswerVO> answers = new ArrayList<>(); + for (PaperFixQuestionVO titleItem : titleItems) { + for (DoQuestionVO doQuestionVO : titleItem.getQuestionList()) { + //鍑嗗棰樼洰搴忓彿渚涘墠绔烦杞娇鐢� + ExamPaperMarkAnswerVO answerVO = new ExamPaperMarkAnswerVO(); + //鑾峰彇璇曞嵎绫诲瀷 + Integer questionType = doQuestionVO.getQuestionType(); + /* 濡傛灉鏄畝绛斻�佽绠椼�佸垎鏋愶紝涓嶈缃畆ight鍙缃鐩簭鍙� */ + if (QuestionTypeEnum.ShortAnswer.getCode().equals(questionType) || QuestionTypeEnum.Calculate.getCode().equals(questionType) || QuestionTypeEnum.Analysis.getCode().equals(questionType)) { + answerVO.setItemOrder(num); + doQuestionVO.setItemOrder(num); + } + /* 濡傛灉鏄崟閫夈�佽闊炽�佸垽鏂�(鍒ゆ柇绛旀鏄疉銆丅) */ + else if (QuestionTypeEnum.SingleChoice.getCode().equals(questionType) || QuestionTypeEnum.Audio.getCode().equals(questionType) || QuestionTypeEnum.TrueFalse.getCode().equals(questionType)) { + answerVO.setItemOrder(num); + doQuestionVO.setItemOrder(num); + if (StringUtils.isEmpty(doQuestionVO.getQuestionAnswer())) { + return Result.fail(SystemCode.InnerError.getCode(), doQuestionVO.getTitle() + ",姝ら鐩己灏戠瓟妗堬紝璇峰厛瀹屽杽"); + } + trueOrFalse(doQuestionVO, answerVO, doQuestionVO.getQuestionAnswer().equals(doQuestionVO.getAnswer())); + } + /* 濡傛灉鏄閫� */ + else if (QuestionTypeEnum.MultipleChoice.getCode().equals(questionType)) { + answerVO.setItemOrder(num); + doQuestionVO.setItemOrder(num); + if (StringUtils.isEmpty(doQuestionVO.getQuestionAnswer())) { + return Result.fail(SystemCode.InnerError.getCode(), doQuestionVO.getTitle() + ",姝ら鐩己灏戠瓟妗堬紝璇峰厛瀹屽杽"); + } + //瀛︾敓绛旀 + List<String> answerList = doQuestionVO.getAnswerList(); + String questionAnswer = doQuestionVO.getQuestionAnswer(); + //棰樼洰绛旀 + List<String> questionAnswerList = Arrays.asList(questionAnswer.split(",")); + //瀛︾敓绛旀涓虹┖锛屽垽鏂负閿� + if (CollectionUtils.isEmpty(answerList)) { + trueOrFalse(doQuestionVO, answerVO, false); + continue; + } + //绛旀鏁伴噺锛屼笉闇�瑕佽�冭檻椤哄簭 + int answerCount = answerList.size(); + Set<String> set1 = new HashSet<>(answerList); + Set<String> set2 = new HashSet<>(questionAnswerList); + //绛旀瀹屽叏涓�鑷达紝婊″垎 + if (set1.equals(set2)) { + trueOrFalse(doQuestionVO, answerVO, true); + continue; + } + if (paperMarkVO.getDeductType() == null) { + return Result.fail(SystemCode.InnerError.getCode(), "璇曞嵎娌℃湁閰嶇疆澶氶�夊緱鍒嗙被鍨嬶紝璇疯仈绯荤鐞嗗憳"); + } + //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 绛旈敊涓嶅緱鍒� + if (Integer.valueOf(DeductTypeEnum.AllCorrect.getCode()).equals(paperMarkVO.getDeductType())) { + trueOrFalse(doQuestionVO, answerVO, false); + } + //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 婕忛�夊緱鍥哄畾鍒嗗��,鍖呭惈閿欒閫夐」涓嶅緱鍒� + else if (Integer.valueOf(DeductTypeEnum.PartCorrect.getCode()).equals(paperMarkVO.getDeductType())) { + //瀛︾敓绛旀绉婚櫎鎵�鏈夋纭瓟妗堬紝濡傛灉杩樻湁鍏冪礌璇存槑鍖呭惈閿欒閫夐」 + answerList.removeAll(questionAnswerList); + if (!CollectionUtils.isEmpty(answerList)) { + trueOrFalse(doQuestionVO, answerVO, false); + } else { + answerVO.setRight(false); + doQuestionVO.setRight(false); + //婕忛�夊緱鍥哄畾鍒� + doQuestionVO.setScore(paperMarkVO.getDeductScore()); + } + } + //濡傛灉澶氶�夊緱鍒嗙被鍨嬩负 姣忓涓�棰樺緱鐩稿簲鍒嗗��,鍖呭惈閿欒閫夐」涓嶅緱鍒� + else if (Integer.valueOf(DeductTypeEnum.EachCorrect.getCode()).equals(paperMarkVO.getDeductType())) { + //瀛︾敓绛旀绉婚櫎鎵�鏈夋纭瓟妗堬紝濡傛灉杩樻湁鍏冪礌璇存槑鍖呭惈閿欒閫夐」 + answerList.removeAll(questionAnswerList); + if (!CollectionUtils.isEmpty(answerList)) { + trueOrFalse(doQuestionVO, answerVO, false); + } else { + answerVO.setRight(false); + doQuestionVO.setRight(false); + //婕忛�夊緱鍒� + doQuestionVO.setScore(paperMarkVO.getDeductScore().multiply(new BigDecimal(answerCount))); + } + } + } + /* 濡傛灉鏄~绌� */ + else if (QuestionTypeEnum.GapFilling.getCode().equals(questionType)) { + answerVO.setItemOrder(num); + doQuestionVO.setItemOrder(num); + if (StringUtils.isEmpty(doQuestionVO.getQuestionAnswer())) { + return Result.fail(SystemCode.InnerError.getCode(), doQuestionVO.getTitle() + ",姝ら鐩己灏戠瓟妗堬紝璇峰厛瀹屽杽"); + } + //瀛︾敓绛旀 + List<String> answerList = doQuestionVO.getAnswerList(); + String questionAnswer = doQuestionVO.getQuestionAnswer(); + //棰樼洰绛旀 + List<String> questionAnswerList = Arrays.asList(questionAnswer.split(",")); + //瀛︾敓绛旀涓虹┖锛屽垽鏂负閿� + if (CollectionUtils.isEmpty(answerList)) { + trueOrFalse(doQuestionVO, answerVO, false); + continue; + } + //鎬荤┖鐨勬暟閲� + int questionAnswerCount = questionAnswerList.size(); + //绛旀瀹屽叏涓�鑷达紝婊″垎 + if (answerList.equals(questionAnswerList)) { + trueOrFalse(doQuestionVO, answerVO, true); + } else { + answerVO.setRight(false); + doQuestionVO.setRight(false); + //鍋氬鐨勬暟閲�,闇�瑕佹寜椤哄簭姣旇緝 + int count = 0; + for (int i = 0; i < answerList.size(); i++) { + if(answerList.get(i).equals(questionAnswerList.get(i))){ + count++; + } + } + //杩欎釜棰樼殑鎬诲垎 + BigDecimal questionScore = doQuestionVO.getQuestionScore(); + //姣忎釜绌虹殑鍒嗘暟 + BigDecimal scoreEach = questionScore.divide(new BigDecimal(questionAnswerCount), 1, RoundingMode.DOWN); + BigDecimal score = scoreEach.multiply(new BigDecimal(count)); + doQuestionVO.setScore(score); + } + + } + num++; + answers.add(answerVO); + } + } + paperMarkVO.setAnswers(answers); + return null; + } + + //璁剧疆鍏ㄥ鎴栧叏閿� + private void trueOrFalse(DoQuestionVO doQuestionVO, ExamPaperMarkAnswerVO answerVO, Boolean isCorrect) { + if (isCorrect) { + //姝g‘ + answerVO.setRight(isCorrect); + doQuestionVO.setRight(isCorrect); + doQuestionVO.setScore(doQuestionVO.getQuestionScore()); + } else { + //閿欒 + answerVO.setRight(isCorrect); + doQuestionVO.setRight(isCorrect); + doQuestionVO.setScore(BigDecimal.ZERO); + } + } + + //灏佽闃呭嵎杩斿洖鏁版嵁 + private ExamPaperMarkVO createVO(ExamSubmitTemp userExam, ExamVO exam, User student) { + ExamPaperMarkVO paperMarkVO = new ExamPaperMarkVO(); + BeanUtils.copyProperties(userExam, paperMarkVO); + paperMarkVO.setPaperId(exam.getExamPaperId()); + //TODO: 璇曞嵎鎬诲垎銆�(澶氶�夊緱鍒嗙被鍨嬨�佸閫夊緱鍒嗗垎鏁�)闇�瑕佸彇ExamSubmitTemp + paperMarkVO.setExamName(exam.getExamName()); + paperMarkVO.setPaperType(exam.getExamPaperType()); + paperMarkVO.setSubmitTime(userExam.getUpdateTime()); + paperMarkVO.setUserName(student.getRealName()); + paperMarkVO.setTitleItems(JSON.parseArray(userExam.getExamSubmit(), PaperFixQuestionVO.class)); + paperMarkVO.setTotalScore("100"); + paperMarkVO.setDeductType(DeductTypeEnum.AllCorrect.getCode()); + paperMarkVO.setDeductScore(BigDecimal.ZERO); + return paperMarkVO; } @Override diff --git a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java index 1dcefdb..77687d9 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.ycl.jxkg.base.SystemCode; import com.ycl.jxkg.context.WebContext; import com.ycl.jxkg.domain.entity.Meet; import com.ycl.jxkg.enums.MeetStatusEnum; @@ -140,7 +141,11 @@ public Result detail(Integer id) { MeetVO vo = baseMapper.getById(id); Assert.notNull(vo, "璁板綍涓嶅瓨鍦�"); - return Result.ok().data(vo); + if(vo.getStatus().equals(MeetStatusEnum.Starting.getCode())){ + return Result.ok(); + }else { + return Result.fail(SystemCode.InnerError.getCode(),"鎴块棿灏氭湭寮�濮嬫垨宸茬粨鏉�"); + } } /** diff --git a/src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java b/src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java index 4f01acf..9983648 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/TaskExamCustomerAnswerImpl.java @@ -2,18 +2,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.jxkg.domain.entity.ExamPaper; -import com.ycl.jxkg.domain.entity.ExamPaperAnswer; +import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.TaskExamCustomerAnswer; -import com.ycl.jxkg.domain.entity.TextContent; -import com.ycl.jxkg.domain.task.TaskItemAnswerObject; import com.ycl.jxkg.mapper.TaskExamCustomerAnswerMapper; import com.ycl.jxkg.service.TaskExamCustomerAnswerService; import com.ycl.jxkg.service.TextContentService; -import com.ycl.jxkg.utils.JsonUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.util.Arrays; import java.util.Date; import java.util.List; @@ -25,7 +21,7 @@ private final TextContentService textContentService; @Override - public void insertOrUpdate(ExamPaper examPaper, ExamPaperAnswer examPaperAnswer, Date now) { + public void insertOrUpdate(ExamPaper examPaper, ExamPaperScore examPaperScore, Date now) { //TODO:寰呭畬鎴� // Integer taskId = examPaper.getTaskExamId(); // Integer userId = examPaperAnswer.getCreateUser(); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index aa3c857..3805adb 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -3,7 +3,7 @@ upload: # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛� - url: E:/ycl/file + url: D:/ycl/file spring: datasource: diff --git a/src/main/resources/mapper/ClassesUserMapper.xml b/src/main/resources/mapper/ClassesUserMapper.xml index 50f6152..913abe2 100644 --- a/src/main/resources/mapper/ClassesUserMapper.xml +++ b/src/main/resources/mapper/ClassesUserMapper.xml @@ -18,10 +18,10 @@ <result column="real_name" property="realName"/> <result column="do_time" property="doTime"/> <result column="exam_submit" property="examSubmit"/> - <result column="status" property="status" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/> + <result column="status" property="status" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/> <result column="phone" property="phone"/> <result column="update_time" property="updateTime"/> - <result column="mark_paper_status" property="markPaperStatus" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/> + <result column="mark_paper_status" property="markPaperStatus" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/> </resultMap> diff --git a/src/main/resources/mapper/ExamPaperQuestionCustomerAnswerMapper.xml b/src/main/resources/mapper/ExamPaperScoreDetailMapper.xml similarity index 97% rename from src/main/resources/mapper/ExamPaperQuestionCustomerAnswerMapper.xml rename to src/main/resources/mapper/ExamPaperScoreDetailMapper.xml index e2e9067..9be9822 100644 --- a/src/main/resources/mapper/ExamPaperQuestionCustomerAnswerMapper.xml +++ b/src/main/resources/mapper/ExamPaperScoreDetailMapper.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="com.ycl.jxkg.mapper.ExamPaperQuestionCustomerAnswerMapper"> - <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaperQuestionCustomerAnswer"> +<mapper namespace="com.ycl.jxkg.mapper.ExamPaperScoreDetailMapper"> + <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaperScoreDetail"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="question_id" jdbcType="INTEGER" property="questionId"/> <result column="exam_paper_id" jdbcType="INTEGER" property="examPaperId"/> diff --git a/src/main/resources/mapper/ExamPaperAnswerMapper.xml b/src/main/resources/mapper/ExamPaperScoreMapper.xml similarity index 98% rename from src/main/resources/mapper/ExamPaperAnswerMapper.xml rename to src/main/resources/mapper/ExamPaperScoreMapper.xml index aa22944..e96bfef 100644 --- a/src/main/resources/mapper/ExamPaperAnswerMapper.xml +++ b/src/main/resources/mapper/ExamPaperScoreMapper.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="com.ycl.jxkg.mapper.ExamPaperAnswerMapper"> - <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaperAnswer"> +<mapper namespace="com.ycl.jxkg.mapper.ExamPaperScoreMapper"> + <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaperScore"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="exam_paper_id" jdbcType="INTEGER" property="examPaperId"/> <result column="paper_name" jdbcType="VARCHAR" property="paperName"/> -- Gitblit v1.8.0