xiangpei
2024-05-22 f3ee8bfce84146993410987a26f65ee6d0eb95f1
题目绑定部门
5个文件已修改
4个文件已添加
309 ■■■■■ 已修改文件
src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/DeptQuestion.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/vo/DeptQuestionVO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/viewmodel/admin/question/ExamQuestionVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionEditRequestVM.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionResponseVM.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DeptQuestionMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | 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>