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