From d0ba0324430a0010ecf47e5cc0e4df609d586cfd Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 19 六月 2024 11:31:00 +0800
Subject: [PATCH] 会议学生端查询
---
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | 134 +++++++++++++++++++++++++++++++++++---------
1 files changed, 106 insertions(+), 28 deletions(-)
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 438aff3..e2473ff 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -5,11 +5,15 @@
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ycl.jxkg.context.WebContext;
import com.ycl.jxkg.domain.entity.*;
+import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO;
import com.ycl.jxkg.domain.vo.*;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
+import com.ycl.jxkg.enums.ExamPaperTypeEnum;
import com.ycl.jxkg.enums.QuestionTypeEnum;
import com.ycl.jxkg.enums.general.ExamStatusEnum;
import com.ycl.jxkg.enums.general.ExamSubmitTempStatusEnum;
import com.ycl.jxkg.mapper.*;
+import com.ycl.jxkg.service.ExamPaperService;
import com.ycl.jxkg.service.ExamService;
import com.ycl.jxkg.base.Result;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -22,10 +26,7 @@
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -44,6 +45,7 @@
private final ExamSubmitTempMapper examSubmitTempMapper;
private final ClassesUserMapper classesUserMapper;
private final ExamPaperMapper examPaperMapper;
+ private final ExamPaperService examPaperService;
/**
* 娣诲姞
@@ -110,7 +112,7 @@
@Override
public Result page(ExamQuery query) {
IPage<ExamVO> page = PageUtil.getPage(query, ExamVO.class);
- baseMapper.getPage(page, query);
+ baseMapper.getPage(page, query, webContext.getCurrentUser().getId());
page.getRecords().stream().forEach(item -> {
if (! StringUtils.hasText(item.getClassName())) {
item.setClassName("鐝骇涓嶅瓨鍦ㄦ垨琚垹闄�");
@@ -122,6 +124,76 @@
}
});
return Result.ok().data(page.getRecords()).total(page.getTotal());
+ }
+
+
+ @Override
+ public Result studentPage(ExamQuery query) {
+ IPage<ExamVO> page = PageUtil.getPage(query, ExamVO.class);
+ baseMapper.studentPage(page, query, webContext.getCurrentUser().getId());
+ return Result.ok().data(page.getRecords()).total(page.getTotal());
+ }
+
+
+ @Override
+ public Result start(Integer id) {
+ Exam exam = baseMapper.selectById(id);
+ if (Objects.isNull(exam)) {
+ throw new RuntimeException("璇ヨ�冭瘯涓嶅瓨鍦�");
+ }
+ if (Objects.isNull(exam.getExamPaperId())) {
+ throw new RuntimeException("鑰冭瘯鏈粦瀹氳瘯鍗�");
+ }
+ // 鏌ュ嚭鑰冭瘯璇曞嵎
+ ExamPaper examPaper = examPaperMapper.selectById(exam.getExamPaperId());
+ if (Objects.isNull(examPaper)) {
+ throw new RuntimeException("璇曞嵎涓嶅瓨鍦�");
+ }
+ if (StringUtils.hasText(examPaper.getContent())) {
+ throw new RuntimeException("璇曞嵎棰樼洰涓虹┖");
+ }
+ // 灏嗛鐩浆鎹负鍙复鏃朵繚瀛樼殑棰樼洰缁撴瀯
+ if (ExamPaperTypeEnum.Fixed.getCode().equals(examPaper.getPaperType())
+ || ExamPaperTypeEnum.RandomOrder.getCode().equals(examPaper.getPaperType())) {
+ // 杞崲
+ List<PaperFixQuestionVO> data = this.coverTo(examPaper);
+ return Result.ok().data(data);
+ } else if (ExamPaperTypeEnum.Random.getCode().equals(examPaper.getPaperType())) {
+ // todo 闅忔満棰樼洰鐢熸垚
+
+ }
+ return null;
+ }
+
+ /**
+ * 灏嗘暟鎹簱瀛樺偍鐨勯鐩紝杞负鍙复鏃朵繚瀛樼殑棰樼洰缁撴瀯
+ *
+ * @param examPaper 璇曞嵎
+ * @return
+ */
+ private List<PaperFixQuestionVO> coverTo(ExamPaper examPaper) {
+ List<PaperFixQuestionDTO> questionWarpList = JSON.parseArray(examPaper.getContent(), PaperFixQuestionDTO.class);
+ return questionWarpList.stream().map(item -> {
+ PaperFixQuestionVO vo = new PaperFixQuestionVO();
+ vo.setTitle(item.getTitle());
+ vo.setQuestionType(item.getQuestionType());
+ List<DoQuestionVO> doQuestionVOS = item.getQuestionList().stream().map(question -> {
+ DoQuestionVO doQuestionVO = new DoQuestionVO();
+ doQuestionVO.setTitle(question.getTitle());
+ doQuestionVO.setQuestionType(item.getQuestionType());
+ doQuestionVO.setQuestionItemList(question.getItems());
+ doQuestionVO.setId(question.getId());
+ doQuestionVO.setOriginalFile(question.getOriginalFile());
+ doQuestionVO.setAudioFile(question.getAudioFile());
+ return doQuestionVO;
+ }).collect(Collectors.toList());
+ if (ExamPaperTypeEnum.RandomOrder.getCode().equals(examPaper.getPaperType())) {
+ // 闅忓簭璇曞嵎鎵撲贡椤哄簭
+ Collections.shuffle(doQuestionVOS);
+ }
+ vo.setQuestionList(doQuestionVOS);
+ return vo;
+ }).collect(Collectors.toList());
}
/**
@@ -158,27 +230,31 @@
if (Objects.isNull(exam)) {
throw new RuntimeException("璇ヨ�冭瘯涓嶅瓨鍦�");
}
- // 鍒ゆ柇鍗曢�夈�佸閫夈�佸垽鏂瀵归敊
- List<Integer> questionIds = submitData.getQuestionList().stream().map(DoQuestionVO::getId).collect(Collectors.toList());
- List<Question> questionList = questionMapper.getAnswerInfo(questionIds);
- Map<Integer, Question> answerMap = questionList.stream().collect(Collectors.toMap(Question::getId, entity -> entity));
- submitData.getQuestionList().stream().forEach(item -> {
- Question question = answerMap.get(item.getId());
- if (Objects.nonNull(question)
- && (QuestionTypeEnum.SingleChoice.getCode().equals(question.getQuestionType())
- || QuestionTypeEnum.MultipleChoice.getCode().equals(question.getQuestionType())
- || QuestionTypeEnum.TrueFalse.getCode().equals(question.getQuestionType())
- )) {
- String correct = question.getCorrect();
- if (QuestionTypeEnum.MultipleChoice.getCode().equals(question.getQuestionType())) {
- // 濡傛灉鏄�夋嫨棰橈紝閭d箞灏嗙瓟妗堣浆涓簂ist
- List<String> answerList = JSON.parseArray(correct, String.class);
- item.setRight(answerList.containsAll(item.getAnswerList()));
- } else {
- item.setRight(question.getCorrect().equals(item.getAnswer()));
- }
- }
- });
+// // 鍒ゆ柇鍗曢�夈�佸閫夈�佸垽鏂瀵归敊
+// List<Integer> questionIds = new ArrayList<>(24);
+// submitData.getPaperQuestionList().forEach(item -> {
+// List<Integer> ids = item.getQuestionList().stream().map(DoQuestionVO::getId).collect(Collectors.toList());
+// questionIds.addAll(ids);
+// });
+// List<Question> questionList = questionMapper.getAnswerInfo(questionIds);
+// Map<Integer, Question> answerMap = questionList.stream().collect(Collectors.toMap(Question::getId, entity -> entity));
+// submitData.getQuestionList().stream().forEach(item -> {
+// Question question = answerMap.get(item.getId());
+// if (Objects.nonNull(question)
+// && (QuestionTypeEnum.SingleChoice.getCode().equals(question.getQuestionType())
+// || QuestionTypeEnum.MultipleChoice.getCode().equals(question.getQuestionType())
+// || QuestionTypeEnum.TrueFalse.getCode().equals(question.getQuestionType())
+// )) {
+// String correct = question.getCorrect();
+// if (QuestionTypeEnum.MultipleChoice.getCode().equals(question.getQuestionType())) {
+// // 濡傛灉鏄�夋嫨棰橈紝閭d箞灏嗙瓟妗堣浆涓簂ist
+// List<String> answerList = JSON.parseArray(correct, String.class);
+// item.setRight(answerList.containsAll(item.getAnswerList()));
+// } else {
+// item.setRight(question.getCorrect().equals(item.getAnswer()));
+// }
+// }
+// });
// 闃呭嵎鍚庢墠寰�exam_paper_answer淇濆瓨鑰冭瘯鎴愮哗銆佷互鍙婁繚瀛樺埌exam_paper_customer_answer
// 鐜板湪鍙渶瑕佷繚瀛樺埌涓�寮犱复鏃惰〃
// 璇ユ帴鍙f槸涓诲姩鎻愪氦锛屾墍浠ョ姸鎬侀兘璁剧疆涓哄畬鎴愶紝浠ヤ究鍚庣画鑰佸笀闃呭嵎
@@ -208,7 +284,7 @@
return;
}
one.setDoTime(submitData.getDoTime());
- one.setExamSubmit(JSON.toJSONString(submitData.getQuestionList()));
+ one.setExamSubmit(JSON.toJSONString(submitData.getPaperQuestionList()));
one.setCreateTime(new Date());
one.setStatus(status);
examSubmitTempMapper.updateById(one);
@@ -218,7 +294,8 @@
examSubmitTemp.setDoTime(submitData.getDoTime());
examSubmitTemp.setStatus(status);
examSubmitTemp.setUserId(webContext.getCurrentUser().getId());
- examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getQuestionList()));
+ examSubmitTemp.setExamSubmit(JSON.toJSONString(submitData.getPaperQuestionList()));
+ examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.TEMP);
examSubmitTempMapper.insert(examSubmitTemp);
}
}
@@ -263,4 +340,5 @@
markPaperVO.setSuggestTime(examPaper.getSuggestTime());
return Result.ok().data(markPaperVO);
}
+
}
--
Gitblit v1.8.0