From 9a1c378ec5566a727efcb85120cdafd52c3ee9f1 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 23 五月 2024 16:21:37 +0800
Subject: [PATCH] 在线练习增加练习模式、融合在线练题
---
src/main/java/com/mindskip/xzs/domain/enums/PracticeModeENum.java | 23 +++++
src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java | 3
src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java | 11 ++
src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java | 9 +
src/main/java/com/mindskip/xzs/domain/SelfPractice.java | 3
src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java | 60 +++++++++++++-
src/main/resources/mapper/SelfPracticeMapper.xml | 10 +-
src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java | 4 +
src/main/resources/mapper/QuestionSubjectMapper.xml | 36 ++++++++
src/main/java/com/mindskip/xzs/service/SelfPracticeService.java | 8 ++
src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java | 6 +
src/main/resources/mapper/DeptQuestionMapper.xml | 15 ++-
12 files changed, 167 insertions(+), 21 deletions(-)
diff --git a/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java b/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java
index 270edaa..6b48e87 100644
--- a/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java
+++ b/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java
@@ -48,6 +48,17 @@
}
/**
+ * 寮�濮嬬湅棰�
+ *
+ * @param id 缁冧範id
+ * @return
+ */
+ @PostMapping("/start/look/{id}")
+ public RestResponse startLook(@PathVariable("id") Integer id) {
+ return selfPracticeService.startLook(id);
+ }
+
+ /**
* 闅忔満涓�閬撻
*
* @param id
diff --git a/src/main/java/com/mindskip/xzs/domain/SelfPractice.java b/src/main/java/com/mindskip/xzs/domain/SelfPractice.java
index 8c991f8..dc81f7d 100644
--- a/src/main/java/com/mindskip/xzs/domain/SelfPractice.java
+++ b/src/main/java/com/mindskip/xzs/domain/SelfPractice.java
@@ -18,6 +18,9 @@
/** 鐢ㄦ埛ID */
private Integer userId;
+ /** 缁冧範妯″紡锛氬埛棰樸�佺湅棰� */
+ private String practiceMode;
+
/** 澶囨敞 */
private String remark;
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/PracticeModeENum.java b/src/main/java/com/mindskip/xzs/domain/enums/PracticeModeENum.java
new file mode 100644
index 0000000..a9b4962
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/PracticeModeENum.java
@@ -0,0 +1,23 @@
+package com.mindskip.xzs.domain.enums;
+
+import lombok.Getter;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/5/23 11:24
+ */
+@Getter
+public enum PracticeModeENum {
+
+ BRUSH("brush", "鍒烽"),
+ LOOK("look", "鐪嬮"),
+ ;
+
+ private final String value;
+ private final String desc;
+
+ PracticeModeENum(String value, String desc) {
+ this.value = value;
+ this.desc = desc;
+ }
+}
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 79ca623..05ad0b1 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java
@@ -23,6 +23,9 @@
/** 鐢ㄦ埛ID */
private Integer userId;
+ /** 缁冧範妯″紡锛氬埛棰樸�佺湅棰� */
+ private String practiceMode;
+
/** 澶囨敞 */
@NotBlank(message = "璇峰~鍐欐澶勬ā鎷熺殑鍚嶇О")
private String remark;
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java b/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java
index 00dc870..0674ebe 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java
@@ -16,6 +16,10 @@
private String subjectName;
+ /** 鍒烽妯″紡涓嬬殑棰樺垪琛� */
private List<PracticeQuestionCondition.QuestionFinishCondition> questionConditions;
+ /** 鐪嬮妯″紡涓嬬殑棰樺垪琛� */
+ private List<QuestionVO> lookQuestionList;
+
}
diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java
index c77a9c6..e7bde69 100644
--- a/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java
@@ -45,4 +45,10 @@
/** 鏍规嵁璇剧洰鍜岄鍨嬫煡璇㈤鐩甀D */
List<Integer> questionsBySubjectIdAndQuestionType(@Param("subjectId") Integer subjectId, @Param("questionType") Integer questionType);
+
+ /** 鏍规嵁璇剧洰ID鏌ヨ棰樼洰璇︽儏 */
+ List<QuestionVO> bySubjectId(@Param("subjectId") Integer subjectId);
+
+ /** 鏍规嵁璇剧洰鍜岄鍨嬫煡鎵鹃鐩暟鎹� */
+ List<QuestionVO> bySubjectIdAndQuestionType(Integer subjectId, Integer dataBaseValueByValue);
}
diff --git a/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java b/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java
index f666a66..d356736 100644
--- a/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java
+++ b/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java
@@ -54,4 +54,12 @@
* @return
*/
RestResponse randomOneQuestion(Integer id);
+
+ /**
+ * 寮�濮嬬湅棰�
+ *
+ * @param id
+ * @return
+ */
+ RestResponse startLook(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 3c152c9..f6925e4 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
@@ -39,6 +39,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Arrays;
@@ -108,7 +109,9 @@
deptQuestion.setDeptId(deptId);
return deptQuestion;
}).collect(Collectors.toList());
- deptQuestionMapper.add(deptQuestions);
+ if (! CollectionUtils.isEmpty(model.getDeptIds())) {
+ deptQuestionMapper.add(deptQuestions);
+ }
//鎵归噺娣诲姞
List<QuestionSubject> list = Arrays.asList(model.getSubjectIds()).stream().map(e -> {
@@ -143,7 +146,9 @@
deptQuestion.setDeptId(deptId);
return deptQuestion;
}).collect(Collectors.toList());
- deptQuestionMapper.add(deptQuestions);
+ if (! CollectionUtils.isEmpty(model.getDeptIds())) {
+ deptQuestionMapper.add(deptQuestions);
+ }
//棰樺共銆佽В鏋愩�侀�夐」绛� 鏇存柊
TextContent infoTextContent = textContentService.selectById(question.getInfoTextContentId());
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 d137530..6040be6 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java
@@ -10,6 +10,7 @@
import com.mindskip.xzs.domain.PracticeQuestionCondition;
import com.mindskip.xzs.domain.Question;
import com.mindskip.xzs.domain.SelfPractice;
+import com.mindskip.xzs.domain.enums.PracticeModeENum;
import com.mindskip.xzs.domain.enums.PracticeQuestionTypeEnum;
import com.mindskip.xzs.domain.enums.PracticeTypeEnum;
import com.mindskip.xzs.domain.enums.QuestionTypeEnum;
@@ -147,7 +148,7 @@
throw new RuntimeException("娌℃湁鎵惧埌棰樼洰锛屽彲鑳芥墍閫夎鐩寘鍚鐩笉瓒�");
}
QuestionVO questionVO = one.get(0);
- jsonQuestion(questionVO);
+ jsonQuestion(questionVO, Boolean.TRUE);
return RestResponse.ok(questionVO);
}
return RestResponse.ok();
@@ -165,9 +166,52 @@
throw new RuntimeException("娌℃湁鎵惧埌棰樼洰锛屽彲鑳芥墍閫夎鐩寘鍚鐩笉瓒�");
}
QuestionVO questionVO = one.get(0);
- jsonQuestion(questionVO);
+ jsonQuestion(questionVO, Boolean.TRUE);
return RestResponse.ok(questionVO);
+ }
+
+ @Override
+ public RestResponse startLook(Integer id) {
+ SelfPractice en = selfPracticeMapper.selectById(id);
+ if (Objects.isNull(en)) {
+ 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);
+ List<QuestionVO> questionVOs = new ArrayList<>();
+ if (PracticeQuestionTypeEnum.ALL.getValue().equals(en.getQuestionType())) {
+ questionVOs = questionSubjectMapper.bySubjectId(subjectId);
+ } else {
+ questionVOs = questionSubjectMapper.bySubjectIdAndQuestionType(subjectId, PracticeQuestionTypeEnum.getDataBaseValueByValue(en.getQuestionType()));
+ }
+ questionVOs.stream().forEach(question -> {
+ question.setContent(JSON.parseObject(question.getContentJson(), QuestionContentVO.class));
+ });
+ // 杩斿洖鍝嶅簲鏁版嵁
+ SubjectQuestionVO subjectQuestionVO = new SubjectQuestionVO();
+ subjectQuestionVO.setSubjectId(subjectId);
+ subjectQuestionVO.setSubjectName(subjectName);
+ subjectQuestionVO.setLookQuestionList(questionVOs);
+ list.add(subjectQuestionVO);
+ }
+ return RestResponse.ok(list);
+ } else if (PracticeTypeEnum.RANDOM.getValue().equals(en.getPracticeType())) {
+ // 闅忔満缁冧範锛屾槸涓�閬撻涓�閬撻缁冧範
+ List<QuestionVO> one = questionSubjectMapper.getRandomQuestionId(subjectIds, PracticeQuestionTypeEnum.getDataBaseValueByValue(en.getQuestionType()), 1);
+ if (one.size() < 1) {
+ throw new RuntimeException("娌℃湁鎵惧埌棰樼洰锛屽彲鑳芥墍閫夎鐩寘鍚鐩笉瓒�");
+ }
+ QuestionVO questionVO = one.get(0);
+ jsonQuestion(questionVO, Boolean.FALSE);
+ return RestResponse.ok(questionVO);
+ }
+ return RestResponse.ok();
}
/**
@@ -175,7 +219,7 @@
*
* @param questionVO
*/
- public void jsonQuestion(QuestionVO questionVO) {
+ public void jsonQuestion(QuestionVO questionVO, Boolean clearAnswer) {
if (StringUtils.hasText(questionVO.getContentJson())) {
QuestionContentVO questionContent = JSON.parseObject(questionVO.getContentJson(), QuestionContentVO.class);
questionVO.setContent(questionContent);
@@ -186,9 +230,11 @@
questionVO.setAnswerNum(questionVO.getCorrect().split(",").length);
}
}
- questionVO.setContentJson("");
- questionVO.setCorrect("");
- questionVO.getContent().setCorrect("");
- questionVO.getContent().setAnalyze("");
+ if (clearAnswer) {
+ questionVO.setContentJson("");
+ questionVO.setCorrect("");
+ questionVO.getContent().setCorrect("");
+ questionVO.getContent().setAnalyze("");
+ }
}
}
diff --git a/src/main/resources/mapper/DeptQuestionMapper.xml b/src/main/resources/mapper/DeptQuestionMapper.xml
index 7edda4a..9ad9983 100644
--- a/src/main/resources/mapper/DeptQuestionMapper.xml
+++ b/src/main/resources/mapper/DeptQuestionMapper.xml
@@ -16,14 +16,19 @@
DELETE
FROM t_dept_question
WHERE question_id = #{questionId}
- AND dept_id IN
- <foreach collection="deptIds" open="(" separator="," close=")" item="deptId">
- #{deptId}
- </foreach>
+ <if test="deptIds != null and deptIds.size > 0">
+ AND dept_id IN
+ <foreach collection="deptIds" open="(" separator="," close=")" item="deptId">
+ #{deptId}
+ </foreach>
+ </if>
</delete>
<select id="deptByQuestionId" resultType="com.mindskip.xzs.domain.vo.DeptQuestionVO">
- SELECT tdq.dept_id, td.name as deptName FROM t_dept_question tdq INNER JOIN t_department td ON td.id = tdq.dept_id WHERE tdq.question_id = #{questionId}
+ SELECT tdq.dept_id, td.name as deptName
+ FROM t_dept_question tdq
+ INNER JOIN t_department td ON td.id = tdq.dept_id
+ WHERE tdq.question_id = #{questionId}
</select>
</mapper>
diff --git a/src/main/resources/mapper/QuestionSubjectMapper.xml b/src/main/resources/mapper/QuestionSubjectMapper.xml
index 69f5979..c5aa74d 100644
--- a/src/main/resources/mapper/QuestionSubjectMapper.xml
+++ b/src/main/resources/mapper/QuestionSubjectMapper.xml
@@ -98,24 +98,54 @@
id DESC
</select>
- <select id="questionsBySubjectId" resultType="integer">
+ <select id="questionsBySubjectId" resultType="integer">
SELECT
- tqs.question_id
+ tqs.question_id, ttc.content
FROM
t_question_subject tqs
INNER JOIN t_question tq ON tqs.question_id = tq.id AND tqs.subject_id = #{subjectId}
+ INNER JOIN t_text_content ttc tct.id = tq.info_text_content_id
ORDER BY
tqs.id DESC
</select>
<select id="questionsBySubjectIdAndQuestionType" resultType="integer">
SELECT
- tqs.question_id
+ tqs.question_id, ttc.content
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}
+ INNER JOIN t_text_content ttc ttc.id = tq.info_text_content_id
ORDER BY
tqs.id DESC
</select>
+ <select id="bySubjectId" resultType="com.mindskip.xzs.domain.vo.QuestionVO">
+ SELECT
+ tq.id,
+ tq.question_type,
+ tq.correct,
+ ttc.content as contentJson
+ FROM
+ t_question_subject tqs
+ INNER JOIN t_question tq ON tqs.question_id = tq.id AND tqs.subject_id = #{subjectId}
+ INNER JOIN t_text_content ttc ON ttc.id = tq.info_text_content_id
+ ORDER BY
+ tq.id DESC
+ </select>
+
+ <select id="bySubjectIdAndQuestionType" resultType="com.mindskip.xzs.domain.vo.QuestionVO">
+ SELECT
+ tq.id,
+ tq.question_type,
+ tq.correct,
+ ttc.content as contentJson
+ 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}
+ INNER JOIN t_text_content ttc ON tct.id = tq.info_text_content_id
+ ORDER BY
+ tq.id DESC
+ </select>
+
</mapper>
diff --git a/src/main/resources/mapper/SelfPracticeMapper.xml b/src/main/resources/mapper/SelfPracticeMapper.xml
index 1b02250..c9c0785 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_type, deleted)
+ t_self_practice(user_id, remark, subjects, practice_type, create_time, update_time, question_type, deleted, practice_mode)
VALUE
- (#{userId}, #{remark}, #{subjects}, #{practiceType}, #{createTime}, #{updateTime}, #{questionType}, #{deleted})
+ (#{userId}, #{remark}, #{subjects}, #{practiceType}, #{createTime}, #{updateTime}, #{questionType}, #{deleted}, #{practiceMode})
</insert>
<select id="page" resultType="com.mindskip.xzs.domain.vo.SelfPracticeVO">
@@ -19,7 +19,8 @@
practice_type as practiceType,
create_time createTime,
update_time as updateTime,
- question_type as questionType
+ question_type as questionType,
+ practice_mode as practiceMode
FROM
t_self_practice
<where>
@@ -47,7 +48,8 @@
practice_type as practiceType,
create_time createTime,
update_time as updateTime,
- question_type as questionType
+ question_type as questionType,
+ practice_mode as practiceMode
FROM
t_self_practice
WHERE
--
Gitblit v1.8.0