From f3ee8bfce84146993410987a26f65ee6d0eb95f1 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 22 五月 2024 12:02:14 +0800
Subject: [PATCH] 题目绑定部门

---
 src/main/java/com/mindskip/xzs/viewmodel/admin/question/ExamQuestionVO.java        |    3 
 src/main/java/com/mindskip/xzs/domain/DeptQuestion.java                            |   18 +++
 src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java               |   55 +++++++--
 src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionResponseVM.java    |  107 -----------------
 src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java            |   13 +
 src/main/java/com/mindskip/xzs/domain/vo/DeptQuestionVO.java                       |   20 +++
 src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionEditRequestVM.java |   41 ++++--
 src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java                  |   23 +++
 src/main/resources/mapper/DeptQuestionMapper.xml                                   |   29 ++++
 9 files changed, 175 insertions(+), 134 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java b/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
index aca34d0..5313919 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
+++ b/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);
diff --git a/src/main/java/com/mindskip/xzs/domain/DeptQuestion.java b/src/main/java/com/mindskip/xzs/domain/DeptQuestion.java
new file mode 100644
index 0000000..dd8f750
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/DeptQuestion.java
@@ -0,0 +1,18 @@
+package com.mindskip.xzs.domain;
+
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/5/22 10:37
+ */
+@Data
+public class DeptQuestion {
+
+    private Integer id;
+
+    private Integer questionId;
+
+    private Integer deptId;
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/DeptQuestionVO.java b/src/main/java/com/mindskip/xzs/domain/vo/DeptQuestionVO.java
new file mode 100644
index 0000000..9b92359
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/DeptQuestionVO.java
@@ -0,0 +1,20 @@
+package com.mindskip.xzs.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/5/22 11:58
+ */
+@Data
+public class DeptQuestionVO {
+
+    private Integer id;
+
+    private Integer questionId;
+
+    private Integer deptId;
+
+    private String deptName;
+
+}
diff --git a/src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java b/src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java
new file mode 100644
index 0000000..2bfa515
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java
@@ -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锛歺p
+ * @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);
+}
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 bdb28c9..3c152c9 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
+++ b/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()]));
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/question/ExamQuestionVO.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/question/ExamQuestionVO.java
index 9401826..4f1e199 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/question/ExamQuestionVO.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/question/ExamQuestionVO.java
@@ -18,6 +18,9 @@
      */
     private Integer questionType;
 
+    /** 鎵�灞為儴闂� */
+    private List<Integer> deptIds;
+
     /**
      * 璇剧洰
      */
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionEditRequestVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionEditRequestVM.java
index 9ab912f..86e1f68 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionEditRequestVM.java
+++ b/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;
-    //瑙f瀽
-//    @NotBlank
+
+    /** 瑙f瀽 */
     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;
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionResponseVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionResponseVM.java
index a0f7413..4a51153 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/question/QuestionResponseVM.java
+++ b/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;
-    }
 }
diff --git a/src/main/resources/mapper/DeptQuestionMapper.xml b/src/main/resources/mapper/DeptQuestionMapper.xml
new file mode 100644
index 0000000..faf60ee
--- /dev/null
+++ b/src/main/resources/mapper/DeptQuestionMapper.xml
@@ -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>

--
Gitblit v1.8.0