From 7516e99d816b7f1610e6cc73fed23fc3d8ede1e3 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 17 六月 2024 09:16:17 +0800 Subject: [PATCH] 随序试卷生成题目 --- src/main/java/com/ycl/jxkg/controller/admin/ExamPaperController.java | 9 - src/main/java/com/ycl/jxkg/domain/exam/PaperFixQuestionDTO.java | 16 ++ src/main/java/com/ycl/jxkg/domain/form/ExamPaperForm.java | 15 + src/main/resources/mapper/QuestionMapper.xml | 12 + src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperEditRequestVO.java | 43 +++--- src/main/java/com/ycl/jxkg/mapper/ExamPaperMapper.java | 3 src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java | 9 + src/main/java/com/ycl/jxkg/service/ExamPaperService.java | 5 src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamResponseVO.java | 6 src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java | 4 src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java | 3 src/main/resources/mapper/ExamPaperMapper.xml | 3 src/main/java/com/ycl/jxkg/domain/exam/PaperQuestion.java | 14 + src/main/java/com/ycl/jxkg/service/QuestionService.java | 2 src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java | 7 src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java | 185 +++++++++++++++++++++++------- 16 files changed, 237 insertions(+), 99 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperController.java b/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperController.java index 9ebfd0e..09d7409 100644 --- a/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperController.java +++ b/src/main/java/com/ycl/jxkg/controller/admin/ExamPaperController.java @@ -42,7 +42,6 @@ return Result.ok(page); } - @RequestMapping(value = "/addPaper", method = RequestMethod.POST) public Result taskExamPageList(@RequestBody @Validated(Add.class) ExamPaperForm form) { if (!StringUtils.isBlank(form.getVisibility())) { @@ -50,18 +49,16 @@ } form.setCreateUser(getCurrentUser().getId()); form.setCreateTime(new Date()); - examPaperService.addPaper(form); - return Result.ok(); - } + return examPaperService.addPaper(form); + } @RequestMapping(value = "/edit", method = RequestMethod.POST) public Result edit(@RequestBody @Validated(Update.class) ExamPaperForm form) { if (!StringUtils.isBlank(form.getVisibility())) { form.setVisibility(VisibilityEnum.fromCode(form.getVisibility()).getName()); } - examPaperService.updateExamPaper(form); - return Result.ok(); + return examPaperService.updateExamPaper(form); } @RequestMapping(value = "/editQuestion", method = RequestMethod.POST) 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 af6addf..9f4a0b3 100644 --- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java +++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java @@ -43,8 +43,8 @@ /** * 棰樼洰鏁伴噺 */ - @TableField("question_count") - private Integer questionCount; + @TableField("num") + private Integer num; /** * 寤鸿鏃堕暱(鍒嗛挓) diff --git a/src/main/java/com/ycl/jxkg/domain/exam/PaperFixQuestionDTO.java b/src/main/java/com/ycl/jxkg/domain/exam/PaperFixQuestionDTO.java new file mode 100644 index 0000000..aadcc15 --- /dev/null +++ b/src/main/java/com/ycl/jxkg/domain/exam/PaperFixQuestionDTO.java @@ -0,0 +1,16 @@ +package com.ycl.jxkg.domain.exam; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class PaperFixQuestionDTO { + //鏍囬 + private String title; + //棰樼洰绫诲瀷 + private Integer questionType; + //棰樼洰 + private List<PaperQuestion> questionList; +} diff --git a/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestion.java b/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestion.java index d59d8e3..35ea15b 100644 --- a/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestion.java +++ b/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestion.java @@ -1,16 +1,24 @@ package com.ycl.jxkg.domain.exam; +import com.ycl.jxkg.domain.question.QuestionItemObject; import lombok.Data; import java.math.BigDecimal; +import java.util.List; @Data public class PaperQuestion { //鍏宠仈棰樼洰id - private Integer questionId; - //鎺掑簭 - private Integer order; + private Integer id; + + private List<QuestionItemObject> items; + + private Integer difficult; + + private String title; //棰樼洰鍒嗘暟 private BigDecimal score; + private String correct; + } diff --git a/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionDTO.java b/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java similarity index 65% rename from src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionDTO.java rename to src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java index 8a6a7fc..e2752ec 100644 --- a/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionDTO.java +++ b/src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java @@ -2,10 +2,11 @@ import lombok.Data; +import java.math.BigDecimal; import java.util.List; @Data -public class PaperQuestionDTO { +public class PaperQuestionSettingDTO { //鏍囬(鍗曢�夐銆佸垽鏂) private String title; //棰樼洰绫诲埆 @@ -13,8 +14,6 @@ //闅忔満璇曞嵎棰樼洰鏁伴噺 private Integer num; //闅忔満璇曞嵎棰樼洰鍒嗘暟 - private Integer score; + private BigDecimal score; - //鍥哄畾璇曞嵎銆侀殢搴忚瘯鍗烽鐩泦鍚� - private List<PaperQuestion> paperQuestion; } 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 ef20d40..c6b8c37 100644 --- a/src/main/java/com/ycl/jxkg/domain/form/ExamPaperForm.java +++ b/src/main/java/com/ycl/jxkg/domain/form/ExamPaperForm.java @@ -4,7 +4,9 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.jxkg.domain.base.AbsForm; import com.ycl.jxkg.domain.entity.ExamPaper; -import com.ycl.jxkg.domain.exam.PaperQuestionDTO; +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.group.Add; import com.ycl.jxkg.group.Update; import lombok.Data; @@ -43,12 +45,12 @@ /** * 璇曞嵎鎬诲垎 */ - private BigDecimal score; + private String score; /** * 棰樼洰鏁伴噺 */ - private Integer questionCount; + private Integer num; /** * 寤鸿鏃堕暱(鍒嗛挓) @@ -79,7 +81,12 @@ /** * 棰樼洰閰嶇疆 * */ - private List<PaperQuestionDTO> questionList; + private List<PaperQuestionSettingDTO> questionSetting; + + /** + * 棰樼洰淇℃伅 + * */ + private List<PaperFixQuestionDTO> questionTitleList; public static ExamPaper getEntityByForm(@NonNull ExamPaperForm form, ExamPaper entity) { if(entity == null) { diff --git a/src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java b/src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java new file mode 100644 index 0000000..31afeee --- /dev/null +++ b/src/main/java/com/ycl/jxkg/domain/question/RandomQuestionDTO.java @@ -0,0 +1,9 @@ +package com.ycl.jxkg.domain.question; + +import lombok.Data; + +@Data +public class RandomQuestionDTO { + private Integer questionId; + private Integer questionType; +} diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperEditRequestVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperEditRequestVO.java index 5fae77b..a169605 100644 --- a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperEditRequestVO.java +++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamPaperEditRequestVO.java @@ -2,40 +2,37 @@ +import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO; +import com.ycl.jxkg.domain.exam.PaperQuestionSettingDTO; import lombok.Data; -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import java.math.BigDecimal; import java.util.List; @Data public class ExamPaperEditRequestVO { private Integer id; - - @NotNull - private Integer level; - - @NotNull + /** 绉戠洰 */ private Integer subjectId; - - @NotNull + /** 璇曞嵎绫诲瀷 */ private Integer paperType; - - @NotBlank + /** 璇曞嵎鍚� */ private String name; - - @NotNull + /** 寤鸿鏃堕棿 */ private Integer suggestTime; + private String visibility; + private Integer deductType; + private BigDecimal deductTypeScore; + private Integer num; + private BigDecimal score; + /** + * 棰樼洰閰嶇疆 + * */ + private List<PaperQuestionSettingDTO> questionSetting; - private List<String> limitDateTime; - - @Size(min = 1,message = "璇锋坊鍔犺瘯鍗锋爣棰�") - @Valid - private List<ExamPaperTitleItemVO> titleItems; - - private String score; - + /** + * 棰樼洰淇℃伅 + * */ + private List<PaperFixQuestionDTO> questionTitleList; } diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamResponseVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamResponseVO.java index e088e72..9c1db49 100644 --- a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamResponseVO.java +++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamResponseVO.java @@ -1,11 +1,9 @@ package com.ycl.jxkg.domain.vo.admin.exam; -import com.ycl.jxkg.domain.exam.PaperQuestionDTO; import lombok.Data; import java.math.BigDecimal; -import java.util.List; @Data public class ExamResponseVO { @@ -14,7 +12,7 @@ private String name; - private Integer questionCount; + private Integer num; private BigDecimal score; @@ -33,6 +31,4 @@ private BigDecimal deductTypeScore; private String visibility; - - private List<PaperQuestionDTO> questionList; } diff --git a/src/main/java/com/ycl/jxkg/mapper/ExamPaperMapper.java b/src/main/java/com/ycl/jxkg/mapper/ExamPaperMapper.java index e804abf..cd247b7 100644 --- a/src/main/java/com/ycl/jxkg/mapper/ExamPaperMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/ExamPaperMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.jxkg.domain.entity.ExamPaper; import com.ycl.jxkg.domain.other.KeyValue; +import com.ycl.jxkg.domain.question.RandomQuestionDTO; import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperPageRequestVO; import com.ycl.jxkg.domain.vo.student.dashboard.PaperFilter; import com.ycl.jxkg.domain.vo.student.dashboard.PaperInfo; @@ -31,4 +32,6 @@ int updateTaskPaper(@Param("taskId") Integer taskId,@Param("paperIds") List<Integer> paperIds); int clearTaskPaper(@Param("paperIds") List<Integer> paperIds); + + } diff --git a/src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java b/src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java index a63c165..3042302 100644 --- a/src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/QuestionMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.jxkg.domain.other.KeyValue; import com.ycl.jxkg.domain.entity.Question; +import com.ycl.jxkg.domain.question.RandomQuestionDTO; import com.ycl.jxkg.domain.vo.admin.question.QuestionPageRequestVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -28,4 +29,6 @@ * @return */ List<Question> getAnswerInfo(@Param("questionIds") List<Integer> questionIds); + + List<RandomQuestionDTO> selectBySubject(@Param("subjectId") Integer subjectId, @Param("types") List<Integer> types); } diff --git a/src/main/java/com/ycl/jxkg/service/ExamPaperService.java b/src/main/java/com/ycl/jxkg/service/ExamPaperService.java index 5accef0..6e19f57 100644 --- a/src/main/java/com/ycl/jxkg/service/ExamPaperService.java +++ b/src/main/java/com/ycl/jxkg/service/ExamPaperService.java @@ -1,6 +1,7 @@ package com.ycl.jxkg.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.entity.ExamPaper; import com.ycl.jxkg.domain.entity.User; import com.ycl.jxkg.domain.form.ExamPaperForm; @@ -41,7 +42,7 @@ */ List<ExamPaper> myExamPaper(Integer paperType); - void addPaper(ExamPaperForm form); + Result addPaper(ExamPaperForm form); - void updateExamPaper(ExamPaperForm form); + Result updateExamPaper(ExamPaperForm form); } diff --git a/src/main/java/com/ycl/jxkg/service/QuestionService.java b/src/main/java/com/ycl/jxkg/service/QuestionService.java index 4dfcee0..0f1c650 100644 --- a/src/main/java/com/ycl/jxkg/service/QuestionService.java +++ b/src/main/java/com/ycl/jxkg/service/QuestionService.java @@ -31,4 +31,6 @@ * @return 鏇存柊缁撴灉 */ Boolean updateStatus(QuestionResponseVO question); + + } 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 b74394d..28d4b66 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java @@ -2,15 +2,23 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.Question; +import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO; import com.ycl.jxkg.domain.exam.PaperQuestion; -import com.ycl.jxkg.domain.exam.PaperQuestionDTO; +import com.ycl.jxkg.domain.exam.PaperQuestionSettingDTO; import com.ycl.jxkg.domain.form.ExamPaperForm; +import com.ycl.jxkg.domain.question.QuestionItemObject; +import com.ycl.jxkg.domain.question.RandomQuestionDTO; import com.ycl.jxkg.domain.vo.admin.exam.ExamResponseVO; import com.ycl.jxkg.enums.ExamPaperTypeEnum; import com.ycl.jxkg.domain.other.KeyValue; +import com.ycl.jxkg.enums.QuestionTypeEnum; import com.ycl.jxkg.enums.VisibilityEnum; import com.ycl.jxkg.mapper.ExamPaperMapper; import com.ycl.jxkg.mapper.QuestionMapper; @@ -31,12 +39,15 @@ import com.ycl.jxkg.utils.PageInfoHelper; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.math.BigDecimal; +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.Consumer; import java.util.stream.Collectors; @Service @@ -53,21 +64,125 @@ @Override @Transactional(rollbackFor = Exception.class) - public void addPaper(ExamPaperForm form) { - ExamPaper examPaper = ExamPaperForm.getEntityByForm(form,null); - examPaper.setContent(JSON.toJSONString(form.getQuestionList())); - baseMapper.insert(examPaper); - //TODO:闅忓簭璇曞嵎鐢熸垚棰樼洰 -// if(ExamPaperTypeEnum.RandomOrder.getCode().equals(form.getPaperType())){ -// List<PaperQuestionDTO> questionList = form.getQuestionList(); -// List<PaperQuestion> list = questionMapper.selectQuestion(); -// } + public Result addPaper(ExamPaperForm form) { + ExamPaper examPaper = ExamPaperForm.getEntityByForm(form, null); + examPaper.setScore(new BigDecimal(form.getScore())); + //闅忔満璇曞嵎 + if (ExamPaperTypeEnum.Random.getCode().equals(form.getPaperType())) { + examPaper.setContent(JSON.toJSONString(form.getQuestionSetting())); + baseMapper.insert(examPaper); + return Result.ok(); + } else if (ExamPaperTypeEnum.Fixed.getCode().equals(form.getPaperType())) { + //鍥哄畾璇曞嵎 + examPaper.setContent(JSON.toJSONString(form.getQuestionTitleList())); + baseMapper.insert(examPaper); + 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 InnerError1 = createQuestion(questionSetting, questionTitleList, questionType, questionIdList,QuestionTypeEnum.SingleChoice.getCode()); + if (InnerError1 != null) return InnerError1; + Result InnerError2 = createQuestion(questionSetting, questionTitleList, questionType, questionIdList,QuestionTypeEnum.MultipleChoice.getCode()); + if (InnerError2 != null) return InnerError2; + Result InnerError3 = createQuestion(questionSetting, questionTitleList, questionType, questionIdList,QuestionTypeEnum.TrueFalse.getCode()); + if (InnerError3 != null) return InnerError3; + Result InnerError4 = createQuestion(questionSetting, questionTitleList, questionType, questionIdList,QuestionTypeEnum.GapFilling.getCode()); + if (InnerError4 != null) return InnerError4; + Result InnerError5 = createQuestion(questionSetting, questionTitleList, questionType, questionIdList,QuestionTypeEnum.ShortAnswer.getCode()); + if (InnerError5 != null) return InnerError5; + Result InnerError6 = createQuestion(questionSetting, questionTitleList, questionType, questionIdList,QuestionTypeEnum.Calculation.getCode()); + if (InnerError6 != null) return InnerError6; + } + examPaper.setContent(JSON.toJSONString(form.getQuestionTitleList())); + 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 ==0){ + //棰樼洰閰嶇疆姝ょ被鍨嬫暟閲忎负0锛岃烦杩囷紝涓嶇敓鎴愰鐩�� + return null; + } + if (CollectionUtils.isEmpty(questionIdList) || num > questionIdList.size()) { + return Result.fail(SystemCode.InnerError.getCode(), "棰樼洰鏁伴噺涓嶈冻"); + } + // 浣跨敤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()); + paperQuestion.setItems(JSONArray.parseArray(question.getContent(), QuestionItemObject.class)); + questionList.add(paperQuestion); + } + PaperFixQuestionDTO dto = new PaperFixQuestionDTO(); + dto.setTitle(settingDTO.getTitle()); + dto.setQuestionType(questionType); + dto.setQuestionList(questionList); + questionTitleList.add(dto); + } + return null; } @Override - public void updateExamPaper(ExamPaperForm form) { - ExamPaper entity = ExamPaperForm.getEntityByForm(form,null); - baseMapper.updateById(entity); + public Result updateExamPaper(ExamPaperForm form) { + ExamPaper examPaper = ExamPaperForm.getEntityByForm(form, null); + examPaper.setScore(new BigDecimal(form.getScore())); + //闅忔満璇曞嵎 + if (ExamPaperTypeEnum.Random.getCode().equals(form.getPaperType())) { + examPaper.setContent(JSON.toJSONString(form.getQuestionSetting())); + baseMapper.updateById(examPaper); + return Result.ok(); + } else if (ExamPaperTypeEnum.Fixed.getCode().equals(form.getPaperType())) { + //鍥哄畾璇曞嵎 + examPaper.setContent(JSON.toJSONString(form.getQuestionTitleList())); + baseMapper.updateById(examPaper); + return Result.ok(); + } else { + //闅忓簭璇曞嵎 + examPaper.setContent(JSON.toJSONString(form.getQuestionTitleList())); + baseMapper.updateById(examPaper); + return Result.ok(); + } } @Override @@ -79,7 +194,6 @@ BeanUtils.copyProperties(e, vo); vo.setVisibility(VisibilityEnum.valueOf(vo.getVisibility()).getCode() + ""); vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime())); - vo.setQuestionList(JSONArray.parseArray(e.getContent(),PaperQuestionDTO.class)); return vo; }); return pageVO; @@ -136,32 +250,16 @@ ExamPaper examPaper = examPaperMapper.selectById(id); ExamPaperEditRequestVO vo = new ExamPaperEditRequestVO(); BeanUtils.copyProperties(examPaper, vo); - //TODO: -// TextContent frameTextContent = textContentService.getById(examPaper.getFrameTextContentId()); -// List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent.getContent(), 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<ExamPaperTitleItemVO> examPaperTitleItemVOS = examPaperTitleItemObjects.stream().map(t -> { -// ExamPaperTitleItemVO tTitleVM = new ExamPaperTitleItemVO(); -// BeanUtils.copyProperties(t, tTitleVM); -// List<QuestionEditRequestVO> questionItemsVM = t.getQuestionItems().stream().map(i -> { -// Question question = questions.stream().filter(q -> q.getId().equals(i.getId())).findFirst().get(); -// QuestionEditRequestVO questionEditRequestVO = questionService.getQuestionEditRequestVM(question); -// questionEditRequestVO.setItemOrder(i.getItemOrder()); -// return questionEditRequestVO; -// }).collect(Collectors.toList()); -// tTitleVM.setQuestionItems(questionItemsVM); -// return tTitleVM; -// }).collect(Collectors.toList()); -// vo.setTitleItems(examPaperTitleItemVOS); -// vo.setScore(ExamUtil.scoreToVM(examPaper.getScore())); -// if (ExamPaperTypeEnum.Random == ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) { -// List<String> limitDateTime = Arrays.asList(DateTimeUtil.dateFormat(examPaper.getLimitStartTime()), DateTimeUtil.dateFormat(examPaper.getLimitEndTime())); -// vo.setLimitDateTime(limitDateTime); -// } + vo.setVisibility(VisibilityEnum.valueOf(vo.getVisibility()).getCode()); + //闅忔満璇曞嵎 + if (ExamPaperTypeEnum.Random.getCode().equals(examPaper.getPaperType())) { + vo.setQuestionSetting(JSONArray.parseArray(examPaper.getContent(), PaperQuestionSettingDTO.class)); + } else if (ExamPaperTypeEnum.Fixed.getCode().equals(examPaper.getPaperType())) { + //鍥哄畾璇曞嵎 + vo.setQuestionTitleList(JSONArray.parseArray(examPaper.getContent(), PaperFixQuestionDTO.class)); + } else { + //闅忓簭璇曞嵎 + } return vo; } @@ -187,7 +285,6 @@ return null == keyValue ? 0 : keyValue.getValue(); }).collect(Collectors.toList()); } - private void examPaperFromVM(ExamPaperEditRequestVO examPaperEditRequestVO, ExamPaper examPaper, List<ExamPaperTitleItemVO> titleItemsVM) { diff --git a/src/main/resources/mapper/ExamPaperMapper.xml b/src/main/resources/mapper/ExamPaperMapper.xml index 48e1927..165bcf3 100644 --- a/src/main/resources/mapper/ExamPaperMapper.xml +++ b/src/main/resources/mapper/ExamPaperMapper.xml @@ -16,7 +16,6 @@ <result column="create_user" property="createUser"/> <result column="create_time" property="createTime"/> <result column="deleted" property="deleted"/> - </resultMap> <sql id="Base_Column_List"> @@ -33,7 +32,7 @@ <select id="page" resultMap="BaseResultMap"> SELECT - tep.*, + tep.* FROM t_exam_paper tep <where> and tep.deleted=0 diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml index d2c122b..fd64749 100644 --- a/src/main/resources/mapper/QuestionMapper.xml +++ b/src/main/resources/mapper/QuestionMapper.xml @@ -90,14 +90,18 @@ <foreach collection="questionIds" open="(" item="id" close=")" separator=",">#{id}</foreach> </select> - <select id="getQuestionRandom"> + <select id="selectBySubject" resultType="com.ycl.jxkg.domain.question.RandomQuestionDTO"> SELECT - * + id as questionId,question_type FROM t_question WHERE - id >= ( SELECT floor( RAND() * ( SELECT MAX( id ) FROM t_question ) ) ) - LIMIT #{num}; + subject_id = #{subjectId} + and question_type in + <foreach collection="types" item="type" separator="," open="(" close=")"> + #{type} + </foreach> + and deleted = 0 and status = 1 </select> </mapper> -- Gitblit v1.8.0