From 526745df87b382366960df1c765b83a84d493019 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期三, 03 七月 2024 16:23:23 +0800 Subject: [PATCH] 随机试卷增加维度 --- src/main/java/com/ycl/jxkg/domain/form/ExamPaperForm.java | 6 - src/main/resources/mapper/QuestionMapper.xml | 31 ++-- src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java | 2 src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java | 2 src/main/java/com/ycl/jxkg/domain/exam/PaperSettingItem.java | 6 src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperPageRequestVO.java | 2 src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | 115 +++++++++++-------- src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java | 6 - src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java | 4 src/main/resources/mapper/ExamPaperMapper.xml | 9 - src/main/resources/mapper/ExamMapper.xml | 6 - src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java | 11 - src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java | 2 src/main/resources/mapper/ClassesUserMapper.xml | 9 - src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java | 129 +++++++++------------ 15 files changed, 152 insertions(+), 188 deletions(-) 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 ba9cd79..1ce5e12 100644 --- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java +++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java @@ -23,12 +23,6 @@ private String name; /** - * 瀛︾ - */ - @TableField("subject_id") - private Integer subjectId; - - /** * 璇曞嵎绫诲瀷( 1鍥哄畾璇曞嵎 2.闅忓嵆璇曞嵎 3.闅忓簭璇曞嵎) */ @TableField("paper_type") diff --git a/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java b/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java index 6daf9c4..74d7075 100644 --- a/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java +++ b/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java @@ -9,15 +9,8 @@ public class PaperQuestionSettingDTO { //鏍囬(鍗曢�夐(20鍒�)...) private String title; - //棰樼洰绫诲埆 private Integer questionType; - //闅忔満璇曞嵎棰樼洰鏁伴噺 - private Integer num; - //闅忔満璇曞嵎棰樼洰鍒嗘暟 - private BigDecimal score; - //棰樼洰闅惧害 - private Integer difficult; - //瀛︾id - private Integer subjectId; + //棰樼洰閰嶇疆 + List<PaperSettingItem> settingList; } diff --git a/src/main/java/com/ycl/jxkg/domain/exam/SettingDTO.java b/src/main/java/com/ycl/jxkg/domain/exam/PaperSettingItem.java similarity index 73% rename from src/main/java/com/ycl/jxkg/domain/exam/SettingDTO.java rename to src/main/java/com/ycl/jxkg/domain/exam/PaperSettingItem.java index 26154ed..ba58957 100644 --- a/src/main/java/com/ycl/jxkg/domain/exam/SettingDTO.java +++ b/src/main/java/com/ycl/jxkg/domain/exam/PaperSettingItem.java @@ -5,10 +5,10 @@ import java.math.BigDecimal; @Data -public class SettingDTO { - //闅忔満璇曞嵎棰樼洰鏁伴噺 +public class PaperSettingItem { + //棰樼洰鏁伴噺 private Integer num; - //闅忔満璇曞嵎棰樼洰鍒嗘暟 + //棰樼洰鍒嗘暟 private BigDecimal score; //棰樼洰闅惧害 private Integer difficult; diff --git a/src/main/java/com/ycl/jxkg/domain/form/ExamPaperForm.java b/src/main/java/com/ycl/jxkg/domain/form/ExamPaperForm.java index c6b8c37..2fa35c0 100644 --- a/src/main/java/com/ycl/jxkg/domain/form/ExamPaperForm.java +++ b/src/main/java/com/ycl/jxkg/domain/form/ExamPaperForm.java @@ -31,12 +31,6 @@ private String name; /** - * 瀛︾ - */ - @NotNull(message = "瀛︾涓嶈兘涓虹┖", groups = {Add.class, Update.class}) - private Integer subjectId; - - /** * 璇曞嵎绫诲瀷( 1鍥哄畾璇曞嵎 2.闅忓嵆璇曞嵎 3.闅忓簭璇曞嵎) */ @NotNull (message = "璇曞嵎绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class}) diff --git a/src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java b/src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java index 31afeee..97e0015 100644 --- a/src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java +++ b/src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java @@ -5,5 +5,7 @@ @Data public class RandomQuestionDTO { private Integer questionId; + private Integer subjectId; private Integer questionType; + private Integer difficult; } diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperPageRequestVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperPageRequestVO.java index ff7052e..2e6bb05 100644 --- a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperPageRequestVO.java +++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperPageRequestVO.java @@ -13,8 +13,6 @@ private String name; - private Integer subjectId; - private Integer paperType; private Integer suggestTime; diff --git a/src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java b/src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java index e9b91b7..ec6adfd 100644 --- a/src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java @@ -40,7 +40,7 @@ * @param classesId * @return */ - List<StudentExamInfoVO> getClassesUserList(@Param("examId") Integer examId,@Param("classesId") Integer classesId); + List<StudentExamInfoVO> getClassesUserList(@Param("classesId") Integer classesId); /** * 鏍规嵁瀛︾敓鑾峰彇鐝骇 diff --git a/src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java b/src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java index c418e3d..69b35e1 100644 --- a/src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java @@ -30,7 +30,7 @@ */ List<Question> getAnswerInfo(@Param("questionIds") List<Integer> questionIds); - List<RandomQuestionDTO> selectBySubject(@Param("subjectId") Integer subjectId, @Param("types") List<Integer> types); + Integer selectByDifAndSub(RandomQuestionDTO dto); /** * 鑾峰彇闅忔満棰� @@ -40,5 +40,5 @@ * @param num 鏁伴噺 * @return */ - List<Question> getRandomQuestion(@Param("subjectId") Integer subjectId, @Param("questionType") Integer questionType, @Param("num") Integer num); + List<Question> getRandomQuestion(@Param("subjectId") Integer subjectId, @Param("questionType") Integer questionType,@Param("difficult") Integer difficult, @Param("num") Integer num); } diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java index 0956744..5295872 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperScoreServiceImpl.java @@ -192,7 +192,7 @@ examPaperScoreDetail.setQuestionId(question.getId()); examPaperScoreDetail.setExamPaperId(examPaper.getId()); examPaperScoreDetail.setQuestionScore(null); - examPaperScoreDetail.setSubjectId(examPaper.getSubjectId()); +// examPaperScoreDetail.setSubjectId(examPaper.getSubjectId()); examPaperScoreDetail.setItemOrder(itemOrder); examPaperScoreDetail.setCreateTime(now); examPaperScoreDetail.setCreateUser(user.getId()); diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java index 3b72bc8..40b3d69 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java @@ -16,6 +16,7 @@ import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO; import com.ycl.jxkg.domain.exam.PaperQuestion; import com.ycl.jxkg.domain.exam.PaperQuestionSettingDTO; +import com.ycl.jxkg.domain.exam.PaperSettingItem; import com.ycl.jxkg.domain.form.ExamPaperForm; import com.ycl.jxkg.domain.other.KeyValue; import com.ycl.jxkg.domain.question.QuestionItemObject; @@ -45,6 +46,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.*; @@ -71,18 +73,24 @@ if (ExamPaperTypeEnum.Random.getCode().equals(form.getPaperType())) { //鏍¢獙棰樼洰鏁伴噺 List<PaperQuestionSettingDTO> questionSetting = form.getQuestionSetting(); - //棰樼洰閰嶇疆閲岄厤鐨勮瘯鍗风被鍨� - List<Integer> types = questionSetting.stream().map(PaperQuestionSettingDTO::getQuestionType).collect(Collectors.toList()); - Map<Integer, List<Integer>> map = questionMapper.selectBySubject(form.getSubjectId(), types) - .stream().collect(Collectors.groupingBy(RandomQuestionDTO::getQuestionType, Collectors.mapping(RandomQuestionDTO::getQuestionId, Collectors.toList()))); - for (PaperQuestionSettingDTO settingDTO : questionSetting) { - Integer num = settingDTO.getNum(); Integer questionType = settingDTO.getQuestionType(); - //闇�瑕侀厤缃殑棰樼洰鏁伴噺涓�0鍒欒烦杩� - if(num ==null || num ==0 )continue; - List<Integer> questions = map.get(questionType); - if(CollectionUtils.isEmpty(questions) || num > questions.size())return Result.fail(SystemCode.InnerError.getCode(), QuestionTypeEnum.fromCode(questionType).getName()+"棰樼洰鏁伴噺涓嶈冻"); + for (PaperSettingItem item : settingDTO.getSettingList()) { + Integer num = item.getNum(); + Integer difficult = item.getDifficult(); + //闇�瑕侀厤缃殑棰樼洰鏁伴噺涓�0鍒欒烦杩� + if(num ==null || num ==0 )continue; + //鍓嶇榛樿鏁版嵁涓�0锛岃浆鎹负null + if (0 == item.getDifficult()){ + difficult= null; + } + RandomQuestionDTO randomQuestionDTO = new RandomQuestionDTO(); + randomQuestionDTO.setQuestionType(questionType); + randomQuestionDTO.setSubjectId(item.getSubjectId()); + randomQuestionDTO.setDifficult(difficult); + Integer numInData = questionMapper.selectByDifAndSub(randomQuestionDTO); + if(num > numInData)return Result.fail(SystemCode.InnerError.getCode(), QuestionTypeEnum.fromCode(questionType).getName()+"闅惧害涓�"+item.getDifficult()+"鐨勯鐩暟閲忎笉瓒�"); + } } examPaper.setContent(JSON.toJSONString(form.getQuestionSetting())); baseMapper.insert(examPaper); @@ -94,86 +102,61 @@ return Result.ok(); } else { //闅忓簭璇曞嵎 - Integer subjectId = form.getSubjectId(); - //棰樼洰閰嶇疆 List<PaperQuestionSettingDTO> questionSetting = form.getQuestionSetting(); //棰樼洰閰嶇疆閲岄厤鐨勮瘯鍗风被鍨� List<Integer> types = questionSetting.stream().map(PaperQuestionSettingDTO::getQuestionType).collect(Collectors.toList()); if (CollectionUtils.isEmpty(types)) { return Result.fail(SystemCode.InnerError.getCode(), "璇曞嵎棰樼洰绫诲瀷涓嶈兘涓虹┖"); } - Map<Integer, List<Integer>> map = questionMapper.selectBySubject(subjectId, types) - .stream().collect(Collectors.groupingBy(RandomQuestionDTO::getQuestionType, Collectors.mapping(RandomQuestionDTO::getQuestionId, Collectors.toList()))); List<PaperFixQuestionDTO> questionTitleList = new ArrayList<>(); - // 閬嶅巻map - for (Integer questionType : map.keySet()) { - //鏁版嵁搴撻噷鐨勮繖涓被鍨嬬殑棰樼洰 - List<Integer> questionIdList = map.get(questionType); - Result result = createQuestion(questionSetting, questionTitleList, questionType, questionIdList,QuestionTypeEnum.fromCode(questionType).getCode()); - if (result != null) return result; + for (PaperQuestionSettingDTO settingDTO : questionSetting) { + List<PaperSettingItem> settingList = settingDTO.getSettingList(); + List<PaperQuestion> questionList = new ArrayList<>(); + for (PaperSettingItem item : settingList) { + Integer num = item.getNum(); + Integer difficult = item.getDifficult(); + //闇�瑕侀厤缃殑棰樼洰鏁伴噺涓�0鍒欒烦杩� + if(num ==null || num ==0 )continue; + //鍓嶇榛樿鏁版嵁涓�0锛岃浆鎹负null + if (0 == difficult){ + difficult = null; + } + List<Question> questions = questionMapper.getRandomQuestion(item.getSubjectId(), settingDTO.getQuestionType(), difficult, item.getNum()); + if (CollectionUtils.isEmpty(questions) || item.getNum() > questions.size()) { + return Result.fail(SystemCode.InnerError.getCode(), QuestionTypeEnum.fromCode(settingDTO.getQuestionType()).getName()+"闅惧害涓猴細"+item.getDifficult()+"鐨勯鐩暟閲忎笉瓒�"); + } + //杞崲鏁版嵁 + convert(questionList, item, questions); + } + PaperFixQuestionDTO dto = new PaperFixQuestionDTO(); + dto.setTitle(settingDTO.getTitle()); + dto.setQuestionType(settingDTO.getQuestionType()); + dto.setQuestionList(questionList); + questionTitleList.add(dto); } examPaper.setContent(JSON.toJSONString(questionTitleList)); baseMapper.insert(examPaper); return Result.ok(); } } - //鐢熸垚棰樼洰 - private Result createQuestion(List<PaperQuestionSettingDTO> questionSetting, List<PaperFixQuestionDTO> questionTitleList, Integer questionType, List<Integer> questionIdList , Integer questionEnumCode) { - if (questionType.equals(questionEnumCode)) { - //寰幆鎵惧埌瀵瑰簲棰樼洰 - PaperQuestionSettingDTO settingDTO = new PaperQuestionSettingDTO(); - for (PaperQuestionSettingDTO dto : questionSetting) { - if (dto.getQuestionType().equals(questionType)) { - settingDTO = dto; - } - }// 闇�瑕佺敓鎴愮殑棰樼洰鏁伴噺 - Integer num = settingDTO.getNum(); - if(num ==null || num ==0 ){ - //棰樼洰閰嶇疆姝ょ被鍨嬫暟閲忎负0锛岃烦杩囷紝涓嶇敓鎴愰鐩�� - return null; + //杞崲鏁版嵁 + private void convert(List<PaperQuestion> questionList, PaperSettingItem item, List<Question> questions) { + for (Question question : questions) { + PaperQuestion paperQuestion = new PaperQuestion(); + BeanUtils.copyProperties(question,paperQuestion); + paperQuestion.setScore(item.getScore()); + //杞崲 + QuestionObject questionObject = JSONObject.parseObject(question.getContent(), QuestionObject.class); + if(questionObject != null){ + paperQuestion.setItems(questionObject.getQuestionItemObjects()); + paperQuestion.setAnalyze(questionObject.getAnalyze()); + paperQuestion.setTitle(questionObject.getTitleContent()); } - if (CollectionUtils.isEmpty(questionIdList) || num > questionIdList.size()) { - return Result.fail(SystemCode.InnerError.getCode(), QuestionTypeEnum.fromCode(questionType).getName()+"棰樼洰鏁伴噺涓嶈冻"); - } - - // 浣跨敤Random绫荤敓鎴愪笉閲嶅鐨勯殢鏈虹储寮� - Set<Integer> indexes = new HashSet<>(); - Random random = new Random(); - while (indexes.size() < num) { - int index = random.nextInt(questionIdList.size()); - indexes.add(index); - } - // 鏍规嵁绱㈠紩鑾峰彇棰樼洰 - List<Integer> questionIds = new ArrayList<>(); - for (int index : indexes) { - questionIds.add(questionIdList.get(index)); - } - QueryWrapper<Question> wrapper = new QueryWrapper<>(); - wrapper.in("id",questionIds); - List<Question> questions = questionMapper.selectList(wrapper); - List<PaperQuestion> questionList = new ArrayList<>(); - for (Question question : questions) { - PaperQuestion paperQuestion = new PaperQuestion(); - BeanUtils.copyProperties(question,paperQuestion); - paperQuestion.setScore(settingDTO.getScore()); - //杞崲 - QuestionObject questionObject = JSONObject.parseObject(question.getContent(), QuestionObject.class); - if(questionObject != null){ - paperQuestion.setItems(questionObject.getQuestionItemObjects()); - paperQuestion.setAnalyze(questionObject.getAnalyze()); - paperQuestion.setTitle(questionObject.getTitleContent()); - } - questionList.add(paperQuestion); - } - PaperFixQuestionDTO dto = new PaperFixQuestionDTO(); - dto.setTitle(settingDTO.getTitle()); - dto.setQuestionType(questionType); - dto.setQuestionList(questionList); - questionTitleList.add(dto); + questionList.add(paperQuestion); } - return null; } + @Override public Result updateExamPaper(ExamPaperForm form) { //TODO锛氶獙璇佹槸鍚︽槸璇曞嵎鍒涘缓浜� 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 fe1d8e5..bd7cc38 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java @@ -14,6 +14,7 @@ import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO; import com.ycl.jxkg.domain.exam.PaperQuestion; import com.ycl.jxkg.domain.exam.PaperQuestionSettingDTO; +import com.ycl.jxkg.domain.exam.PaperSettingItem; import com.ycl.jxkg.domain.form.AddTimeForm; import com.ycl.jxkg.domain.form.ExamForm; import com.ycl.jxkg.domain.form.ForceSubmitForm; @@ -107,7 +108,7 @@ // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); // 鍒ゆ柇鑰冭瘯鐘舵�� - if (! ExamStatusEnum.NOT_START.equals(entity.getStatus())) { + if (!ExamStatusEnum.NOT_START.equals(entity.getStatus())) { throw new RuntimeException("鍙兘淇敼杩樻湭寮�濮嬬殑鑰冭瘯"); } BeanUtils.copyProperties(form, entity); @@ -122,7 +123,7 @@ /** * 鍙戦�乵q娑堟伅 * - * @param entity 鑰冭瘯瀹炰綋绫� + * @param entity 鑰冭瘯瀹炰綋绫� * @param version 涔愯閿佺増鏈� */ public void sendMQ(Exam entity, Integer version) { @@ -283,50 +284,58 @@ PaperFixQuestionVO paperFixQuestionVO = new PaperFixQuestionVO(); paperFixQuestionVO.setTitle(paperSetting.getTitle()); paperFixQuestionVO.setQuestionType(paperSetting.getQuestionType()); - // 鎷垮埌璇剧洰涓嬫煇绫婚鍨嬬殑x閬撻殢鏈洪 - List<Question> questions = questionMapper.getRandomQuestion(examPaper.getSubjectId(), paperSetting.getQuestionType(), paperSetting.getNum()); - if (paperSetting.getNum() > questions.size()) { - throw new RuntimeException("閰嶇疆鐨勯鐩暟涓嶈冻浠ョ敓鎴愯瘯鍗�"); - } - - // 鎷垮埌棰樼洰鍚庣粍瑁呬负鍙复鏃朵繚瀛樼殑棰樼洰缁撴瀯 - List<DoQuestionVO> childQuestions = questions.stream().map(item -> { - DoQuestionVO doQuestionVO = new DoQuestionVO(); - doQuestionVO.setTitle(item.getTitle()); - doQuestionVO.setQuestionType(item.getQuestionType()); - //浠庨厤缃噷鎷块鐩垎鏁� - doQuestionVO.setQuestionScore(paperSetting.getScore()); - if (StringUtils.hasText(item.getContent())) { - QuestionObject questionObject = JSON.parseObject(item.getContent(), QuestionObject.class); - doQuestionVO.setQuestionItemList(questionObject.getQuestionItemObjects()); + //涓�涓被鍨嬬殑棰樼洰list + List<DoQuestionVO> childQuestionList = new ArrayList<>(); + List<PaperSettingItem> settingList = paperSetting.getSettingList(); + for (PaperSettingItem settingItem : settingList) { + Integer num = settingItem.getNum(); + Integer difficult = settingItem.getDifficult(); + //闇�瑕侀厤缃殑棰樼洰鏁伴噺涓�0鍒欒烦杩� + if (num == null || num == 0) continue; + List<Question> questions = questionMapper.getRandomQuestion(settingItem.getSubjectId(), paperSetting.getQuestionType(), difficult, settingItem.getNum()); + if (org.springframework.util.CollectionUtils.isEmpty(questions) || settingItem.getNum() > questions.size()) { + throw new RuntimeException("閰嶇疆鐨勯鐩暟涓嶈冻浠ョ敓鎴愯瘯鍗�"); } - doQuestionVO.setId(item.getId()); - doQuestionVO.setOriginalFile(item.getOriginalFile()); - doQuestionVO.setAudioFile(item.getAudioFile()); - - // 棰樼洰鍓湰 - QuestionAnswerCopyVO copy = new QuestionAnswerCopyVO(); - copy.setId(item.getId()); - copy.setDifficult(item.getDifficult()); - copy.setAnalyze(JSON.parseObject(item.getContent(), PaperQuestion.class).getAnalyze()); - //濉┖鐨勭瓟妗堝湪Json閲� - if (QuestionTypeEnum.GapFilling.getCode().equals(item.getQuestionType())) { - List<String> gapAnswer = new ArrayList<>(); - for (QuestionItemObject questionItemObject : doQuestionVO.getQuestionItemList()) { - gapAnswer.add(questionItemObject.getContent()); + // 鎷垮埌棰樼洰鍚庣粍瑁呬负鍙复鏃朵繚瀛樼殑棰樼洰缁撴瀯 + List<DoQuestionVO> childQuestions = questions.stream().map(item -> { + DoQuestionVO doQuestionVO = new DoQuestionVO(); + doQuestionVO.setQuestionType(item.getQuestionType()); + //浠庨厤缃噷鎷块鐩垎鏁� + doQuestionVO.setQuestionScore(settingItem.getScore()); + if (StringUtils.hasText(item.getContent())) { + QuestionObject questionObject = JSON.parseObject(item.getContent(), QuestionObject.class); + doQuestionVO.setQuestionItemList(questionObject.getQuestionItemObjects()); + doQuestionVO.setTitle(questionObject.getTitleContent()); } - copy.setCorrect(String.join(ANSWER_SPLIT, gapAnswer)); - } else { - copy.setCorrect(item.getCorrect()); - } - questionAnswerCopyVOList.add(copy); + doQuestionVO.setId(item.getId()); + doQuestionVO.setOriginalFile(item.getOriginalFile()); + doQuestionVO.setAudioFile(item.getAudioFile()); - return doQuestionVO; - }).collect(Collectors.toList()); - paperFixQuestionVO.setQuestionList(childQuestions); + // 棰樼洰鍓湰 + QuestionAnswerCopyVO copy = new QuestionAnswerCopyVO(); + copy.setId(item.getId()); + copy.setDifficult(item.getDifficult()); + copy.setAnalyze(JSON.parseObject(item.getContent(), PaperQuestion.class).getAnalyze()); + //濉┖鐨勭瓟妗堝湪Json閲� + if (QuestionTypeEnum.GapFilling.getCode().equals(item.getQuestionType())) { + List<String> gapAnswer = new ArrayList<>(); + for (QuestionItemObject questionItemObject : doQuestionVO.getQuestionItemList()) { + gapAnswer.add(questionItemObject.getContent()); + } + copy.setCorrect(String.join(ANSWER_SPLIT, gapAnswer)); + } else { + copy.setCorrect(item.getCorrect()); + } + questionAnswerCopyVOList.add(copy); + + return doQuestionVO; + }).collect(Collectors.toList()); + //娣诲姞鍒拌繖涓被鍨嬬殑list涓� + childQuestionList.addAll(childQuestions); + } + paperFixQuestionVO.setQuestionList(childQuestionList); examData.add(paperFixQuestionVO); } - return Result.ok(startExamVO); } ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp(); examSubmitTemp.setExamId(id); @@ -533,7 +542,7 @@ throw new RuntimeException("鑰冭瘯璇曞嵎涓嶅瓨鍦�"); } List<ExamSubmitTemp> examSubmitTempList = new LambdaQueryChainWrapper<>(examSubmitTempMapper) - .eq(ExamSubmitTemp::getDeleted,0) + .eq(ExamSubmitTemp::getDeleted, 0) .eq(ExamSubmitTemp::getExamId, id) .list(); // 鍙傝�冧汉鏁� @@ -541,15 +550,23 @@ // 鍙傝�冧絾鏈畬鎴愭彁浜や汉鏁� Integer joinButNotFinishedNum = Math.toIntExact(examSubmitTempList.stream().filter(item -> ExamSubmitTempStatusEnum.temp.equals(item.getStatus())).count()); - List<StudentExamInfoVO> studentExamList = classesUserMapper.getClassesUserList(exam.getId(), exam.getClassesId()); + List<StudentExamInfoVO> studentExamList = classesUserMapper.getClassesUserList(exam.getClassesId()); // 搴旇�冧汉鏁� Integer shouldUserNum = studentExamList.size(); - - studentExamList.stream().forEach(item -> { - if (StringUtils.hasText(item.getExamSubmit())) { - item.setQuestionList(JSON.parseArray(item.getExamSubmit(), DoQuestionVO.class)); + for (StudentExamInfoVO studentExamInfoVO : studentExamList) { + Integer userId = studentExamInfoVO.getUserId(); + Optional<ExamSubmitTemp> first = examSubmitTempList.stream().filter(examSubmitTemp -> examSubmitTemp.getUserId().equals(userId)).findFirst(); + if(first.isPresent()){ + ExamSubmitTemp examSubmitTemp = first.get(); + studentExamInfoVO.setMarkPaperStatus(examSubmitTemp.getMarkPaperStatus()); + studentExamInfoVO.setStatus(examSubmitTemp.getStatus()); + studentExamInfoVO.setDoTime(examSubmitTemp.getDoTime()); + }else { + studentExamInfoVO.setMarkPaperStatus(ExamSubmitTempStatusEnum.temp); + studentExamInfoVO.setStatus(ExamSubmitTempStatusEnum.temp); + studentExamInfoVO.setDoTime(0); } - }); + } MarkPaperVO markPaperVO = new MarkPaperVO(); markPaperVO.setExamName(exam.getExamName()); @@ -831,7 +848,7 @@ long questionCorrect = 0; long questionCount = 0; if (!CollectionUtils.isEmpty(examPaperMark.getNavbar())) { - questionCorrect = examPaperMark.getNavbar().stream().filter(vo -> vo.getRight()!=null && vo.getRight()).count(); + questionCorrect = examPaperMark.getNavbar().stream().filter(vo -> vo.getRight() != null && vo.getRight()).count(); questionCount = examPaperMark.getNavbar().size(); } examPaperScore.setQuestionCorrect(Integer.valueOf(questionCorrect + "")); diff --git a/src/main/resources/mapper/ClassesUserMapper.xml b/src/main/resources/mapper/ClassesUserMapper.xml index c3cc51f..7306815 100644 --- a/src/main/resources/mapper/ClassesUserMapper.xml +++ b/src/main/resources/mapper/ClassesUserMapper.xml @@ -57,17 +57,12 @@ SELECT TU.id, TU.real_name, - TU.phone, - EST.do_time, - EST.status, - EST.exam_submit, - EST.mark_paper_status + TU.phone FROM t_classes_user TCU INNER JOIN t_user TU ON TU.id = TCU.user_id AND TCU.classes_id = #{classesId} - LEFT JOIN t_exam_submit_temp EST ON EST.user_id = TU.id WHERE - TCU.deleted = 0 and EST.deleted = 0 and EST.exam_id = #{examId} + TCU.deleted = 0 </select> <select id="getClassesByUserId" resultType="java.lang.Integer"> diff --git a/src/main/resources/mapper/ExamMapper.xml b/src/main/resources/mapper/ExamMapper.xml index 1093e4e..e75c76e 100644 --- a/src/main/resources/mapper/ExamMapper.xml +++ b/src/main/resources/mapper/ExamMapper.xml @@ -19,12 +19,6 @@ <result column="isContinue" property="isContinue" /> </resultMap> - - - - - - <select id="getById" resultMap="BaseResultMap"> SELECT TE.exam_name, diff --git a/src/main/resources/mapper/ExamPaperMapper.xml b/src/main/resources/mapper/ExamPaperMapper.xml index 165bcf3..b51b22c 100644 --- a/src/main/resources/mapper/ExamPaperMapper.xml +++ b/src/main/resources/mapper/ExamPaperMapper.xml @@ -4,7 +4,6 @@ <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.ExamPaper"> <id column="id" property="id"/> <result column="name" property="name"/> - <result column="subject_id" property="subjectId"/> <result column="paper_type" property="paperType"/> <result column="score" property="score"/> <result column="question_count" property="questionCount"/> @@ -19,7 +18,7 @@ </resultMap> <sql id="Base_Column_List"> - id, name, subject_id, paper_type, score, question_count, suggest_time,visibility + id, name, paper_type, score, question_count, suggest_time,visibility ,deduct_type,deduct_type_score,create_user, create_time,deleted </sql> @@ -41,9 +40,6 @@ </if> <if test="name != null and name != ''"> and tep.name like concat('%',#{name},'%') - </if> - <if test="subjectId != null "> - and tep.subject_id= #{subjectId} </if> <if test="paperType != null "> and tep.paper_type= #{paperType} @@ -68,9 +64,6 @@ FROM t_exam_paper <where> and deleted=0 - <if test="subjectId != null "> - and subject_id=#{subjectId} - </if> <if test="levelId != null "> and grade_level=#{levelId} </if> diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml index 02a1ed2..250f3a0 100644 --- a/src/main/resources/mapper/QuestionMapper.xml +++ b/src/main/resources/mapper/QuestionMapper.xml @@ -92,18 +92,15 @@ <foreach collection="questionIds" open="(" item="id" close=")" separator=",">#{id}</foreach> </select> - <select id="selectBySubject" resultType="com.ycl.jxkg.domain.question.RandomQuestionDTO"> - SELECT - id as questionId,question_type - FROM - t_question - WHERE - subject_id = #{subjectId} - and question_type in - <foreach collection="types" item="type" separator="," open="(" close=")"> - #{type} - </foreach> - and deleted = 0 and status = 1 + <select id="selectByDifAndSub" resultType="java.lang.Integer"> + SELECT COUNT(*) FROM t_question + <where> + deleted = 0 and status = 1 + <if test="subjectId!=null">and subject_id = #{subjectId}</if> + <if test="difficult!=null">AND difficult = #{difficult}</if> + <if test="questionType!=null">AND question_type = #{questionType}</if> + </where> + </select> <select id="getRandomQuestion" resultMap="BaseResultMap"> @@ -111,10 +108,14 @@ * FROM t_question tq - WHERE - tq.subject_id = #{subjectId} AND tq.question_type = #{questionType} AND tq.deleted = 0 + <where> + tq.deleted = 0 and tq.status = 1 + <if test="subjectId!=null">and tq.subject_id = #{subjectId}</if> + <if test="difficult!=null">AND tq.difficult = #{difficult}</if> + <if test="questionType!=null">AND tq.question_type = #{questionType}</if> + </where> ORDER BY - RAND() + RAND() LIMIT #{num} </select> </mapper> -- Gitblit v1.8.0