From d5f80c24adbef34f8e66cedb46a72a6395134445 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 14 五月 2024 15:09:28 +0800
Subject: [PATCH] 题目练习

---
 src/main/java/com/mindskip/xzs/service/QuestionService.java               |    8 +
 src/main/java/com/mindskip/xzs/repository/QuestionMapper.java             |    4 
 src/main/resources/mapper/QuestionMapper.xml                              |   19 +++
 src/main/java/com/mindskip/xzs/controller/student/QuestionController.java |   10 ++
 src/main/java/com/mindskip/xzs/domain/SelfPractice.java                   |    7 -
 src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java           |   31 ++++++
 src/main/java/com/mindskip/xzs/domain/enums/PracticeQuestionTypeEnum.java |   44 ++++++++
 src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java              |   10 -
 src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java      |   37 +++++++
 src/main/resources/mapper/SubjectMapper.xml                               |    4 
 src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java           |    3 
 src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java  |   50 ++++++---
 src/main/java/com/mindskip/xzs/repository/SubjectMapper.java              |    2 
 src/main/resources/mapper/SelfPracticeMapper.xml                          |   10 -
 src/main/resources/mapper/QuestionSubjectMapper.xml                       |   32 ++++++
 src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java      |    9 +
 16 files changed, 245 insertions(+), 35 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java b/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java
index 250c05a..97171b3 100644
--- a/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java
+++ b/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java
@@ -38,4 +38,14 @@
         return RestResponse.ok(vm);
     }
 
+    @GetMapping("/{id}")
+    public RestResponse getById(@PathVariable("id") Integer id) {
+        return questionService.selectContentById(id);
+    }
+
+    @GetMapping("/answer/{id}")
+    public RestResponse getAnswer(@PathVariable("id") Integer id) {
+        return questionService.getAnswer(id);
+    }
+
 }
diff --git a/src/main/java/com/mindskip/xzs/domain/SelfPractice.java b/src/main/java/com/mindskip/xzs/domain/SelfPractice.java
index a7fda38..8c991f8 100644
--- a/src/main/java/com/mindskip/xzs/domain/SelfPractice.java
+++ b/src/main/java/com/mindskip/xzs/domain/SelfPractice.java
@@ -21,9 +21,6 @@
     /** 澶囨敞 */
     private String remark;
 
-    /** 棰樼洰鏁伴噺 */
-    private Integer questionNum;
-
     /** 缁冧範绫诲瀷 */
     private String practiceType;
 
@@ -42,7 +39,7 @@
     /** 宸插仛棰樻暟 */
     private Integer doNum;
 
-    /** 棰樼洰ID JSON */
-    private String questionIds;
+    /** 棰樼洰绫诲瀷 */
+    private String questionType;
 
 }
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/PracticeQuestionTypeEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/PracticeQuestionTypeEnum.java
new file mode 100644
index 0000000..c18d5fb
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/PracticeQuestionTypeEnum.java
@@ -0,0 +1,44 @@
+package com.mindskip.xzs.domain.enums;
+
+import lombok.Getter;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/5/14 9:16
+ */
+@Getter
+public enum PracticeQuestionTypeEnum {
+
+    ALL("all", -99,"涓嶉檺绫诲瀷"),
+    SINGLE("single", 1,"鍗曢��"),
+    MULTIPLE("multiple", 2,"澶氶��"),
+    JUDGE("judge", 3,"鍒ゆ柇"),
+    ;
+
+
+    private final String value;
+    /** 棰樼洰琛ㄤ腑鐨勫�� */
+    private final Integer dataBaseValue;
+    private final String desc;
+
+    PracticeQuestionTypeEnum(String value, Integer dataBaseValue, String desc) {
+        this.value = value;
+        this.dataBaseValue = dataBaseValue;
+        this.desc = desc;
+    }
+
+    /**
+     * 鏍规嵁鍊艰幏鍙栨暟鎹簱鍊�
+     *
+     * @param value
+     * @return
+     */
+    public static Integer getDataBaseValueByValue(String value) {
+        for (PracticeQuestionTypeEnum practiceQuestionTypeEnum : PracticeQuestionTypeEnum.values()) {
+            if (practiceQuestionTypeEnum.getValue().equals(value)) {
+                return practiceQuestionTypeEnum.dataBaseValue;
+            }
+        }
+        return -1;
+    }
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java b/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java
index c77409c..8628093 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java
@@ -17,6 +17,9 @@
     /** 瑙f瀽 */
     private String analyze;
 
+    /** 绛旀 */
+    private String correct;
+
     /** 閫夐」 */
     private List<OptionItem> questionItemObjects;
 
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java b/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java
index ea47da3..79ca623 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java
@@ -37,6 +37,10 @@
     @NotBlank(message = "璇烽�夋嫨缁冧範绫诲瀷")
     private String practiceType;
 
+    /** 棰樺瀷 */
+    @NotBlank(message = "璇烽�夋嫨缁冧範棰樺瀷")
+    private String questionType;
+
     /** 鍒涘缓鏃堕棿 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
@@ -50,12 +54,6 @@
 
     /** 鍋氶鎬绘暟 */
     private Integer totalQuestionNum;
-
-    /** 棰樼洰鎬绘暟 */
-    @NotBlank(message = "棰樼洰鏁伴噺涓嶈兘涓虹┖")
-    private Integer questionNum;
-
-    private String questionIds;
 
 
     private Integer pageSize = 10;
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java b/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java
new file mode 100644
index 0000000..a7b7936
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java
@@ -0,0 +1,31 @@
+package com.mindskip.xzs.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/5/14 9:50
+ */
+@Data
+public class SubjectQuestionVO {
+
+    private Integer subjectId;
+
+    private String subjectName;
+
+    private List<Integer> questionIds;
+
+
+    @Data
+    public static class QuestionPractice {
+
+        private Integer questionId;
+
+        /** 鏄惁鍋氳繃锛�0娌℃湁 1鍋氫簡 */
+        private Integer doIt;
+
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java
index ff26145..bd70910 100644
--- a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java
@@ -31,4 +31,8 @@
     List<QuestionImportVO> export(@Param("query") QuestionExportVO query);
 
     List<QuestionPageStudentResponseVM> selectQuestion(QuestionPageStudentRequestVM model);
+
+    QuestionVO selectContentById(Integer id);
+
+    String getAnswer(Integer id);
 }
diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java
index bdb4835..771188c 100644
--- a/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java
@@ -36,4 +36,13 @@
 
     /** 闅忔満棰樼洰 */
     List<QuestionVO> getRandomQuestionId(@Param("subjectIds") List<Integer> subjectIds, @Param("questionNum") Integer questionNum);
+
+    /** 鏌ヨ棰樼洰ID锛屾牴鎹鐩甶ds */
+    List<Integer> questionsBySubjectIds(@Param("subjectIds") List<Integer> subjectIds);
+
+    /** 鏌ヨ棰樼洰ID鏍规嵁璇剧洰id */
+    List<Integer> questionsBySubjectId(Integer subjectId);
+
+    /** 鏍规嵁璇剧洰鍜岄鍨嬫煡璇㈤鐩甀D */
+    List<Integer> questionsBySubjectIdAndQuestionType(@Param("subjectId") Integer subjectId, @Param("questionType") Integer questionType);
 }
diff --git a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java
index 7ea63e0..d72b316 100644
--- a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java
@@ -23,4 +23,6 @@
     List<Subject> selectByIds(@Param("ids") Integer[] ids);
 
     List<String> selectSubjectName(@Param("ids") List<Integer> ids);
+
+    String selectSubjectNameById(Integer id);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/QuestionService.java b/src/main/java/com/mindskip/xzs/service/QuestionService.java
index 63465ca..b1318c4 100644
--- a/src/main/java/com/mindskip/xzs/service/QuestionService.java
+++ b/src/main/java/com/mindskip/xzs/service/QuestionService.java
@@ -1,10 +1,12 @@
 package com.mindskip.xzs.service;
 
 import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.base.RestResponse;
 import com.mindskip.xzs.domain.Question;
 import com.mindskip.xzs.viewmodel.admin.question.ExamQuestionVO;
 import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM;
 import com.mindskip.xzs.viewmodel.admin.question.QuestionPageRequestVM;
+import com.mindskip.xzs.viewmodel.student.question.answer.QuestionAnswerVO;
 import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentRequestVM;
 import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentResponseVM;
 import com.mindskip.xzs.vo.QuestionExportVO;
@@ -43,4 +45,10 @@
     List<QuestionImportVO> export(QuestionExportVO query);
 
     PageInfo<QuestionPageStudentResponseVM> selectQuestion(QuestionPageStudentRequestVM model);
+
+    /** 鏌ュ嚭棰樼洰涓讳綋鍐呭 */
+    RestResponse selectContentById(Integer id);
+
+    /** 鑾峰彇棰樼洰绛旀銆佽В鏋� */
+    RestResponse getAnswer(Integer id);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
index ff336aa..8ff5b7e 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
@@ -1,5 +1,7 @@
 package com.mindskip.xzs.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.mindskip.xzs.base.RestResponse;
 import com.mindskip.xzs.domain.QuestionSubject;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.Question;
@@ -8,6 +10,8 @@
 import com.mindskip.xzs.domain.enums.QuestionTypeEnum;
 import com.mindskip.xzs.domain.question.QuestionItemObject;
 import com.mindskip.xzs.domain.question.QuestionObject;
+import com.mindskip.xzs.domain.vo.QuestionContentVO;
+import com.mindskip.xzs.domain.vo.QuestionVO;
 import com.mindskip.xzs.repository.QuestionMapper;
 import com.mindskip.xzs.repository.SubjectMapper;
 import com.mindskip.xzs.service.QuestionService;
@@ -30,10 +34,12 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
 
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
@@ -265,4 +271,35 @@
                 ).collect(Collectors.toList())
         );
     }
+
+    @Override
+    public RestResponse selectContentById(Integer id) {
+        QuestionVO vo = questionMapper.selectContentById(id);
+        jsonQuestion(vo);
+        return RestResponse.ok(vo);
+    }
+
+    @Override
+    public RestResponse getAnswer(Integer id) {
+        String content = questionMapper.getAnswer(id);
+        if (StringUtils.hasText(content)) {
+            QuestionContentVO vo = JSON.parseObject(content, QuestionContentVO.class);
+            vo.setQuestionItemObjects(null);
+            vo.setTitleContent(null);
+            return RestResponse.ok(vo);
+        }
+        return RestResponse.ok(null);
+    }
+
+    /**
+     * 澶勭悊棰樼洰鍐呭JSON
+     *
+     * @param vo
+     */
+    public void jsonQuestion(QuestionVO vo) {
+        if (StringUtils.hasText(vo.getContentJson())) {
+            QuestionContentVO questionContent = JSON.parseObject(vo.getContentJson(), QuestionContentVO.class);
+            vo.setContent(questionContent);
+        }
+    }
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java
index e7305d3..09cac23 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java
@@ -9,9 +9,13 @@
 import com.mindskip.xzs.domain.ExamPaperAnswer;
 import com.mindskip.xzs.domain.Question;
 import com.mindskip.xzs.domain.SelfPractice;
+import com.mindskip.xzs.domain.enums.PracticeQuestionTypeEnum;
+import com.mindskip.xzs.domain.enums.PracticeTypeEnum;
+import com.mindskip.xzs.domain.enums.QuestionTypeEnum;
 import com.mindskip.xzs.domain.vo.QuestionContentVO;
 import com.mindskip.xzs.domain.vo.QuestionVO;
 import com.mindskip.xzs.domain.vo.SelfPracticeVO;
+import com.mindskip.xzs.domain.vo.SubjectQuestionVO;
 import com.mindskip.xzs.repository.QuestionMapper;
 import com.mindskip.xzs.repository.QuestionSubjectMapper;
 import com.mindskip.xzs.repository.SelfPracticeMapper;
@@ -23,6 +27,7 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
@@ -87,26 +92,35 @@
         if (Objects.isNull(en)) {
             throw new RuntimeException("缁冧範涓嶅瓨鍦�");
         }
-        if (StringUtils.hasText(en.getQuestionIds())) {
-            // 鐢熸垚浜嗛鐩氨鐩存帴鏌�
-            List<Integer> questionIdList = JSON.parseArray(en.getQuestionIds(), Integer.class);
-            List<QuestionVO> vos = questionMapper.getVoByIds(questionIdList);
-            jsonQuestion(vos);
-            return RestResponse.ok(vos);
-        } else {
-            // 娌$敓鎴愯繃灏遍殢鏈虹敓鎴愰鐩�
-            List<Integer> subjectIds = JSON.parseArray(en.getSubjects(), Integer.class);
-            Integer totalQuestionNum = questionSubjectMapper.countQuestionNum(subjectIds);
-            if (totalQuestionNum < en.getQuestionNum()) {
-                throw new RuntimeException("浣犳墍閫夌殑璇剧洰棰樼洰鏁伴噺涓嶈冻");
+        List<Integer> subjectIds = JSON.parseArray(en.getSubjects(), Integer.class);
+        if (PracticeTypeEnum.ORDERED.getValue().equals(en.getPracticeType())) {
+            List<SubjectQuestionVO> list = new ArrayList<>(2);
+            // 椤哄簭鍋氶锛屾妸閫夋嫨鐨勯搴撶殑棰�(id)鍏ㄩ儴鏌ュ嚭鏉ワ紝鍓嶇鏈変釜搴忓彿闈㈡澘锛岀偣鍑诲摢閬撻鍋氬摢閬�
+            for (Integer subjectId : subjectIds) {
+                String subjectName = subjectMapper.selectSubjectNameById(subjectId);
+                // todo鏍规嵁鍋氶璁板綍鏌ヨ鍋氭病鍋氳繃
+                List<Integer> questionIds = new ArrayList<>();
+                if (PracticeQuestionTypeEnum.ALL.getValue().equals(en.getQuestionType())) {
+                    questionIds = questionSubjectMapper.questionsBySubjectId(subjectId);
+                } else {
+                    questionIds = questionSubjectMapper.questionsBySubjectIdAndQuestionType(subjectId, PracticeQuestionTypeEnum.getDataBaseValueByValue(en.getQuestionType()));
+                }
+                SubjectQuestionVO subjectQuestionVO = new SubjectQuestionVO();
+                subjectQuestionVO.setSubjectId(subjectId);
+                subjectQuestionVO.setSubjectName(subjectName);
+                subjectQuestionVO.setQuestionIds(questionIds);
+                list.add(subjectQuestionVO);
             }
-            // 鏌ヨ鍑鸿鐩笅闅忔満鐨勮瀹氭暟閲忛鐩�
-            List<QuestionVO> questionVOList = questionSubjectMapper.getRandomQuestionId(subjectIds, en.getQuestionNum());
-            List<Integer> ids = questionVOList.stream().map(QuestionVO::getId).collect(Collectors.toList());
-            selfPracticeMapper.setQuestionIds(en.getId(), JSON.toJSONString(ids));
-            jsonQuestion(questionVOList);
-            return RestResponse.ok(questionVOList);
+            return RestResponse.ok(list);
+        } else if (PracticeTypeEnum.RANDOM.getValue().equals(en.getPracticeType())) {
+            // 闅忔満缁冧範锛屾槸涓�閬撻涓�閬撻缁冧範
+            List<QuestionVO> one = questionSubjectMapper.getRandomQuestionId(subjectIds, 1);
+            if (one.size() < 1) {
+                throw new RuntimeException("娌℃湁鎵惧埌棰樼洰锛屽彲鑳芥墍閫夎鐩寘鍚鐩笉瓒�");
+            }
+            return RestResponse.ok(one.get(0));
         }
+        return RestResponse.ok();
     }
 
     @Override
diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml
index b5d066c..7cdd3b5 100644
--- a/src/main/resources/mapper/QuestionMapper.xml
+++ b/src/main/resources/mapper/QuestionMapper.xml
@@ -312,4 +312,23 @@
         order by a.create_time
     </select>
 
+    <select id="selectContentById" resultType="com.mindskip.xzs.domain.vo.QuestionVO">
+        SELECT
+            tq.id,
+            tq.question_type as questionType,
+            tq.difficult,
+            ttc.content as contentJson
+        FROM
+            t_question tq
+            INNER JOIN t_text_content ttc ON tq.info_text_content_id = ttc.id AND tq.id = #{id}
+    </select>
+
+    <select id="getAnswer" resultType="string">
+        SELECT
+            ttc.content
+        FROM
+            t_question tq
+                INNER JOIN t_text_content ttc ON tq.info_text_content_id = ttc.id AND tq.id = #{id} AND tq.deleted = 0
+    </select>
+
 </mapper>
diff --git a/src/main/resources/mapper/QuestionSubjectMapper.xml b/src/main/resources/mapper/QuestionSubjectMapper.xml
index 90ac102..1b05d52 100644
--- a/src/main/resources/mapper/QuestionSubjectMapper.xml
+++ b/src/main/resources/mapper/QuestionSubjectMapper.xml
@@ -79,4 +79,36 @@
              RAND() LIMIT #{questionNum}
     </select>
 
+    <select id="questionsBySubjectIds" resultType="integer">
+        SELECT
+               question_id
+        FROM
+             t_question_subject
+        <where>
+            subject_id IN <foreach collection="subjectIds" open="(" separator="," close=")" item="subjectId">#{subjectId}</foreach>
+        </where>
+        ORDER BY
+            id DESC
+    </select>
+
+    <select id="questionsBySubjectId"  resultType="integer">
+        SELECT
+            tqs.question_id
+        FROM
+            t_question_subject tqs
+                INNER JOIN t_question tq ON tqs.question_id = tq.id AND tqs.subject_id = #{subjectId}
+        ORDER BY
+            tqs.id DESC
+    </select>
+
+    <select id="questionsBySubjectIdAndQuestionType" resultType="integer">
+        SELECT
+            tqs.question_id
+        FROM
+            t_question_subject tqs
+                INNER JOIN t_question tq ON tqs.question_id = tq.id AND tqs.subject_id = #{subjectId} AND tq.question_type = #{questionType}
+        ORDER BY
+            tqs.id DESC
+    </select>
+
 </mapper>
diff --git a/src/main/resources/mapper/SelfPracticeMapper.xml b/src/main/resources/mapper/SelfPracticeMapper.xml
index a713dd3..1b02250 100644
--- a/src/main/resources/mapper/SelfPracticeMapper.xml
+++ b/src/main/resources/mapper/SelfPracticeMapper.xml
@@ -5,9 +5,9 @@
 
     <insert id="add" keyColumn="id" useGeneratedKeys="true" parameterType="com.mindskip.xzs.domain.SelfPractice">
         INSERT INTO
-            t_self_practice(user_id, remark, subjects, practice_type, create_time, update_time, question_num, deleted)
+            t_self_practice(user_id, remark, subjects, practice_type, create_time, update_time, question_type, deleted)
         VALUE
-            (#{userId}, #{remark}, #{subjects}, #{practiceType}, #{createTime}, #{updateTime}, #{questionNum}, #{deleted})
+            (#{userId}, #{remark}, #{subjects}, #{practiceType}, #{createTime}, #{updateTime}, #{questionType}, #{deleted})
     </insert>
 
     <select id="page" resultType="com.mindskip.xzs.domain.vo.SelfPracticeVO">
@@ -19,8 +19,7 @@
                practice_type as practiceType,
                create_time createTime,
                update_time as updateTime,
-               question_num as questionNum,
-               question_ids as questionIds
+               question_type as questionType
         FROM
              t_self_practice
         <where>
@@ -48,8 +47,7 @@
             practice_type as practiceType,
             create_time createTime,
             update_time as updateTime,
-            question_num as questionNum,
-            question_ids as questionIds
+            question_type as questionType
         FROM
              t_self_practice
         WHERE
diff --git a/src/main/resources/mapper/SubjectMapper.xml b/src/main/resources/mapper/SubjectMapper.xml
index 965f9c1..e7a6bcd 100644
--- a/src/main/resources/mapper/SubjectMapper.xml
+++ b/src/main/resources/mapper/SubjectMapper.xml
@@ -178,5 +178,9 @@
           id IN <foreach collection="ids" open="(" separator="," close=")" item="id">#{id}</foreach>
   </select>
 
+  <select id="selectSubjectNameById" resultType="string">
+    SELECT name FROM t_subject WHERE id = #{id} AND deleted = 0
+  </select>
+
 
 </mapper>

--
Gitblit v1.8.0