src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/domain/DeptQuestion.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/domain/vo/DeptQuestionVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/viewmodel/admin/question/ExamQuestionVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionEditRequestVM.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionResponseVM.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/DeptQuestionMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
@@ -18,8 +18,10 @@ 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.DeptQuestionVO; import com.mindskip.xzs.excel.*; import com.mindskip.xzs.repository.DepartmentMapper; import com.mindskip.xzs.repository.DeptQuestionMapper; import com.mindskip.xzs.repository.SubjectMapper; import com.mindskip.xzs.service.*; import com.mindskip.xzs.utility.*; @@ -55,22 +57,20 @@ private final QuestionService questionService; private final TextContentService textContentService; private final SubjectMapper subjectMapper; private final DepartmentMapper departmentMapper; private final QuestionSubjectService questionSubjectService; private final DeptQuestionMapper deptQuestionMapper; private static final String SPLIT = "、"; @Autowired public QuestionController(QuestionService questionService, TextContentService textContentService, SubjectMapper subjectMapper, DepartmentMapper departmentMapper, QuestionSubjectService questionSubjectService) { public QuestionController(QuestionService questionService, TextContentService textContentService, SubjectMapper subjectMapper, DepartmentMapper departmentMapper, QuestionSubjectService questionSubjectService, DeptQuestionMapper deptQuestionMapper) { this.questionService = questionService; this.textContentService = textContentService; this.subjectMapper = subjectMapper; this.departmentMapper = departmentMapper; this.questionSubjectService = questionSubjectService; this.deptQuestionMapper = deptQuestionMapper; } @RequestMapping(value = "/page", method = RequestMethod.POST) @@ -90,6 +90,9 @@ e.setSubName(subjectMapper.page(subjectPageRequestVM).get(0).getName()); return e; }).collect(Collectors.toList())); // 查询题目所属部门 String deptNames = deptQuestionMapper.deptByQuestionId(q.getId()).stream().map(DeptQuestionVO::getDeptName).collect(Collectors.joining("、")); vm.setDeptNames(deptNames); return vm; }); return RestResponse.ok(page); src/main/java/com/mindskip/xzs/domain/DeptQuestion.java
New file @@ -0,0 +1,18 @@ package com.mindskip.xzs.domain; import lombok.Data; /** * @author:xp * @date:2024/5/22 10:37 */ @Data public class DeptQuestion { private Integer id; private Integer questionId; private Integer deptId; } src/main/java/com/mindskip/xzs/domain/vo/DeptQuestionVO.java
New file @@ -0,0 +1,20 @@ package com.mindskip.xzs.domain.vo; import lombok.Data; /** * @author:xp * @date:2024/5/22 11:58 */ @Data public class DeptQuestionVO { private Integer id; private Integer questionId; private Integer deptId; private String deptName; } src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java
New file @@ -0,0 +1,23 @@ package com.mindskip.xzs.repository; import com.mindskip.xzs.domain.DeptQuestion; import com.mindskip.xzs.domain.vo.DeptQuestionVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * @author:xp * @date:2024/5/22 10:38 */ @Mapper public interface DeptQuestionMapper { void add(@Param("deptQuestions") List<DeptQuestion> deptQuestions); void remove(@Param("questionId") Integer questionId, @Param("deptIds") List<Integer> deptIds); /** 查询部门信息 */ List<DeptQuestionVO> deptByQuestionId(@Param("questionId") Integer questionId); } src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
@@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSON; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.DeptQuestion; import com.mindskip.xzs.domain.QuestionSubject; import com.mindskip.xzs.domain.other.KeyValue; import com.mindskip.xzs.domain.Question; @@ -10,8 +11,11 @@ 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.DeptQuestionVO; import com.mindskip.xzs.domain.vo.QuestionContentVO; import com.mindskip.xzs.domain.vo.QuestionVO; import com.mindskip.xzs.repository.BaseMapper; import com.mindskip.xzs.repository.DeptQuestionMapper; import com.mindskip.xzs.repository.QuestionMapper; import com.mindskip.xzs.repository.SubjectMapper; import com.mindskip.xzs.service.QuestionService; @@ -30,6 +34,7 @@ import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentResponseVM; import com.mindskip.xzs.vo.QuestionExportVO; import com.mindskip.xzs.vo.QuestionImportVO; import lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -51,15 +56,16 @@ private final SubjectService subjectService; private final QuestionSubjectService questionSubjectService; private final SubjectMapper subjectMapper; private final DeptQuestionMapper deptQuestionMapper; @Autowired public QuestionServiceImpl(QuestionMapper questionMapper, TextContentService textContentService, SubjectService subjectService, QuestionSubjectService questionSubjectService, SubjectMapper subjectMapper) { super(questionMapper); this.textContentService = textContentService; public QuestionServiceImpl(BaseMapper<Question> baseMapper, QuestionMapper questionMapper, TextContentService textContentService, SubjectService subjectService, QuestionSubjectService questionSubjectService, SubjectMapper subjectMapper, DeptQuestionMapper deptQuestionMapper) { super(baseMapper); this.questionMapper = questionMapper; this.textContentService = textContentService; this.subjectService = subjectService; this.questionSubjectService = questionSubjectService; this.subjectMapper = subjectMapper; this.deptQuestionMapper = deptQuestionMapper; } @Override @@ -74,16 +80,15 @@ @Transactional public Question insertFullQuestion(QuestionEditRequestVM model, Integer userId) { Date now = new Date(); // Integer gradeLevel = subjectService.levelBySubjectId(model.getSubjectId()); //题干、解析、选项等 插入 // 题干、解析、选项等 插入 TextContent infoTextContent = new TextContent(); infoTextContent.setCreateTime(now); setQuestionInfoFromVM(infoTextContent, model); textContentService.insertByFilter(infoTextContent); // 题目插入 Question question = new Question(); // question.setSubjectId(model.getSubjectId()); question.setGradeLevel(model.getGradeLevel()); question.setCreateTime(now); question.setQuestionType(model.getQuestionType()); @@ -96,8 +101,17 @@ question.setDeleted(false); questionMapper.insertSelective(question); // 题目所属部门插入 List<DeptQuestion> deptQuestions = model.getDeptIds().stream().map(deptId -> { DeptQuestion deptQuestion = new DeptQuestion(); deptQuestion.setQuestionId(question.getId()); deptQuestion.setDeptId(deptId); return deptQuestion; }).collect(Collectors.toList()); deptQuestionMapper.add(deptQuestions); //批量添加 List<QuestionSubject> list = Arrays.asList(model.getSubjectIds()).stream().map(e->{ List<QuestionSubject> list = Arrays.asList(model.getSubjectIds()).stream().map(e -> { QuestionSubject questionSubject = new QuestionSubject(); questionSubject.setQuestionId(question.getId()); questionSubject.setSubjectId(e); @@ -111,7 +125,8 @@ @Override @Transactional public Question updateFullQuestion(QuestionEditRequestVM model) { // Integer gradeLevel = subjectService.levelBySubjectId(model.getSubjectId()); // 题目修改 Question question = questionMapper.selectByPrimaryKey(model.getId()); question.setSubjectId(model.getSubjectId()); question.setGradeLevel(model.getGradeLevel()); @@ -120,6 +135,16 @@ question.setCorrectFromVM(model.getCorrect(), model.getCorrectArray()); questionMapper.updateByPrimaryKeySelective(question); // 处理题目所属部门 deptQuestionMapper.remove(question.getId(), model.getDeptIds()); List<DeptQuestion> deptQuestions = model.getDeptIds().stream().map(deptId -> { DeptQuestion deptQuestion = new DeptQuestion(); deptQuestion.setQuestionId(question.getId()); deptQuestion.setDeptId(deptId); return deptQuestion; }).collect(Collectors.toList()); deptQuestionMapper.add(deptQuestions); //题干、解析、选项等 更新 TextContent infoTextContent = textContentService.selectById(question.getInfoTextContentId()); setQuestionInfoFromVM(infoTextContent, model); @@ -127,7 +152,7 @@ questionSubjectService.removeQuestionId(question.getId()); //批量添加 List<QuestionSubject> list = Arrays.asList(model.getSubjectIds()).stream().map(e->{ List<QuestionSubject> list = Arrays.asList(model.getSubjectIds()).stream().map(e -> { QuestionSubject questionSubject = new QuestionSubject(); questionSubject.setQuestionId(question.getId()); questionSubject.setSubjectId(e); @@ -141,9 +166,9 @@ @Override public ExamQuestionVO getQuestionEditRequestVM(Integer questionId) { //题目映射 // 题目映射 Question question = questionMapper.selectByPrimaryKey(questionId); List<QuestionSubject> list = questionSubjectService.getQuestion(questionId).stream().map(e->{ List<QuestionSubject> list = questionSubjectService.getQuestion(questionId).stream().map(e -> { SubjectPageRequestVM subject = new SubjectPageRequestVM(); subject.setId(e.getSubjectId()); e.setSubName(subjectMapper.page(subject).get(0).getName()); @@ -151,6 +176,10 @@ }).collect(Collectors.toList()); ExamQuestionVO questionEditRequestVM = getQuestionEditRequestVM(question); questionEditRequestVM.setQuestionSubjects(list); // 查询题目所属部门 List<Integer> deptIds = deptQuestionMapper.deptByQuestionId(questionId) .stream().map(DeptQuestionVO::getDeptId).collect(Collectors.toList()); questionEditRequestVM.setDeptIds(deptIds); return questionEditRequestVM; } @@ -241,7 +270,7 @@ question.setDeleted(true); questionMapper.updateByPrimaryKeySelective(question); List<Integer> list = questionSubjectService.getQuestion(id) .stream().map(e->{ .stream().map(e -> { return e.getId(); }).collect(Collectors.toList()); return questionSubjectService.removes(list.toArray(new Integer[list.size()])); src/main/java/com/mindskip/xzs/viewmodel/admin/question/ExamQuestionVO.java
@@ -18,6 +18,9 @@ */ private Integer questionType; /** 所属部门 */ private List<Integer> deptIds; /** * 课目 */ src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionEditRequestVM.java
@@ -12,34 +12,43 @@ public class QuestionEditRequestVM { private Integer id; // 1:单选 /** 题型 */ @NotNull private Integer questionType; // 年级学科表 // @NotNull /** 课目 */ private Integer subjectId; //题干 /** 题干 */ @NotBlank private String title; /** 部门ID */ private List<Integer> deptIds; private String sbNames; private Integer gradeLevel; //答案 /** 答案 */ @Valid private List<QuestionEditItemVM> items; //解析 // @NotBlank /** 解析 */ private String analyze; //多项选择题答案 /** 多选题答案 */ private List<String> correctArray; //答案 /** 答案 */ private String correct; //分数 /** 题目分数 */ @NotBlank private String score; //难度 /** 题目难度 */ @Range(min = 1, max = 5, message = "请选择题目难度") private Integer difficult; @@ -55,6 +64,14 @@ private String c; private String d; public List<Integer> getDeptIds() { return deptIds; } public void setDeptIds(List<Integer> deptIds) { this.deptIds = deptIds; } public String getDepartment() { return department; } @@ -62,8 +79,6 @@ public void setDepartment(String department) { this.department = department; } public List<QuestionSubject> getQuestionSubjects() { return questionSubjects; src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionResponseVM.java
@@ -2,10 +2,11 @@ import com.mindskip.xzs.domain.QuestionSubject; import com.mindskip.xzs.viewmodel.BaseVM; import lombok.Data; import java.util.List; @Data public class QuestionResponseVM extends BaseVM { private Integer id; @@ -34,107 +35,7 @@ private List<QuestionSubject> questionSubjects; public Integer getId() { return id; } /** 所属部门名字 */ private String deptNames; public void setId(Integer id) { this.id = id; } public Integer getQuestionType() { return questionType; } public void setQuestionType(Integer questionType) { this.questionType = questionType; } public Integer getTextContentId() { return textContentId; } public void setTextContentId(Integer textContentId) { this.textContentId = textContentId; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; } public Integer getSubjectId() { return subjectId; } public void setSubjectId(Integer subjectId) { this.subjectId = subjectId; } public Integer getCreateUser() { return createUser; } public void setCreateUser(Integer createUser) { this.createUser = createUser; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getCorrect() { return correct; } public void setCorrect(String correct) { this.correct = correct; } public Integer getAnalyzeTextContentId() { return analyzeTextContentId; } public void setAnalyzeTextContentId(Integer analyzeTextContentId) { this.analyzeTextContentId = analyzeTextContentId; } public Integer getDifficult() { return difficult; } public void setDifficult(Integer difficult) { this.difficult = difficult; } public String getShortTitle() { return shortTitle; } public void setShortTitle(String shortTitle) { this.shortTitle = shortTitle; } public List<QuestionSubject> getQuestionSubjects() { return questionSubjects; } public void setQuestionSubjects(List<QuestionSubject> questionSubjects) { this.questionSubjects = questionSubjects; } } src/main/resources/mapper/DeptQuestionMapper.xml
New file @@ -0,0 +1,29 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mindskip.xzs.repository.DeptQuestionMapper"> <insert id="add" useGeneratedKeys="true" keyColumn="id" keyProperty="id"> INSERT INTO t_dept_question(question_id, dept_id) VALUES <foreach collection="deptQuestions" item="item" separator=","> (#{item.questionId}, #{item.deptId}) </foreach> </insert> <delete id="remove"> DELETE FROM t_dept_question WHERE question_id = #{questionId} AND dept_id IN <foreach collection="deptIds" open="(" separator="," close=")" item="deptId"> #{deptId} </foreach> </delete> <select id="deptByQuestionId" resultType="com.mindskip.xzs.domain.vo.DeptQuestionVO"> SELECT tdq.dept_id, tq.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>