From b0b59f3d9ee0340268e74e1e7a810e9087372160 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 27 五月 2024 15:19:06 +0800
Subject: [PATCH] 课目关联部门

---
 src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectEditRequestVM.java |   39 +--------
 src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectResponseVM.java    |   36 +-------
 src/main/java/com/mindskip/xzs/domain/SubjectDept.java                             |   19 ++++
 src/main/java/com/mindskip/xzs/domain/vo/SubjectDeptVO.java                        |   22 +++++
 src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java               |    2 
 src/main/java/com/mindskip/xzs/controller/admin/EducationController.java           |   41 ++++++++--
 src/main/java/com/mindskip/xzs/repository/SubjectDeptMapper.java                   |   22 +++++
 src/main/resources/mapper/SubjectDeptMapper.xml                                    |   28 +++++++
 src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java                  |    2 
 src/main/resources/mapper/DeptQuestionMapper.xml                                   |    6 -
 10 files changed, 136 insertions(+), 81 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/EducationController.java b/src/main/java/com/mindskip/xzs/controller/admin/EducationController.java
index d44d44b..a6b772d 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/EducationController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/EducationController.java
@@ -5,36 +5,37 @@
 import com.mindskip.xzs.base.RestResponse;
 import com.mindskip.xzs.domain.ExamPaperSubject;
 import com.mindskip.xzs.domain.Subject;
+import com.mindskip.xzs.domain.SubjectDept;
+import com.mindskip.xzs.domain.vo.SubjectDeptVO;
+import com.mindskip.xzs.repository.SubjectDeptMapper;
 import com.mindskip.xzs.service.*;
 import com.mindskip.xzs.utility.PageInfoHelper;
 import com.mindskip.xzs.viewmodel.admin.education.SubjectEditRequestVM;
 import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM;
 import com.mindskip.xzs.viewmodel.admin.education.SubjectResponseVM;
 import com.github.pagehelper.PageInfo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController("AdminEducationController")
 @RequestMapping(value = "/api/admin/education")
+@RequiredArgsConstructor
 public class EducationController extends BaseApiController {
 
     private final SubjectService subjectService;
+    private final SubjectDeptMapper subjectDeptMapper;
     private final QuestionSubjectService questionSubjectService;
     private final ExamPaperSubjectService examPaperSubjectService;
     private final ExamPaperDepartmentService examPaperDepartmentService;
     private final ExamPaperService examPaperService;
 
-    @Autowired
-    public EducationController(SubjectService subjectService, QuestionSubjectService questionSubjectService, ExamPaperSubjectService examPaperSubjectService, ExamPaperDepartmentService examPaperDepartmentService, ExamPaperService examPaperService) {
-        this.subjectService = subjectService;
-        this.questionSubjectService = questionSubjectService;
-        this.examPaperSubjectService = examPaperSubjectService;
-        this.examPaperDepartmentService = examPaperDepartmentService;
-        this.examPaperService = examPaperService;
-    }
 
     @RequestMapping(value = "/subject/list", method = RequestMethod.POST)
     public RestResponse<List<Subject>> list() {
@@ -45,10 +46,20 @@
     @RequestMapping(value = "/subject/page", method = RequestMethod.POST)
     public RestResponse<PageInfo<SubjectResponseVM>> pageList(@RequestBody SubjectPageRequestVM model) {
         PageInfo<Subject> pageInfo = subjectService.page(model);
-        PageInfo<SubjectResponseVM> page = PageInfoHelper.copyMap(pageInfo, e -> modelMapper.map(e, SubjectResponseVM.class));
+        PageInfo<SubjectResponseVM> page = PageInfoHelper.copyMap(pageInfo, item -> {
+            SubjectResponseVM vo = new SubjectResponseVM();
+            BeanUtils.copyProperties(item, vo);
+            List<SubjectDeptVO> subjectDeptVOS = subjectDeptMapper.deptBySubjectId(item.getId());
+            List<Integer> deptIds = subjectDeptVOS.stream().map(SubjectDeptVO::getDeptId).collect(Collectors.toList());
+            String deptNames = subjectDeptVOS.stream().map(SubjectDeptVO::getDeptName).collect(Collectors.joining("銆�"));
+            vo.setDeptIds(deptIds);
+            vo.setDeptNames(deptNames);
+            return vo;
+        });
         return RestResponse.ok(page);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @RequestMapping(value = "/subject/edit", method = RequestMethod.POST)
     public RestResponse edit(@RequestBody @Valid SubjectEditRequestVM model) {
         Subject subject = modelMapper.map(model, Subject.class);
@@ -58,6 +69,15 @@
         } else {
             subjectService.updateByIdFilter(subject);
         }
+        // 澶勭悊閮ㄩ棬
+        subjectDeptMapper.removeBySubjectId(subject.getId());
+        List<SubjectDept> subjectDeptList = model.getDeptIds().stream().map(deptId -> {
+            SubjectDept subjectDept = new SubjectDept();
+            subjectDept.setSubjectId(subject.getId());
+            subjectDept.setDeptId(deptId);
+            return subjectDept;
+        }).collect(Collectors.toList());
+        subjectDeptMapper.add(subjectDeptList);
         return RestResponse.ok();
     }
 
@@ -65,6 +85,9 @@
     public RestResponse<SubjectEditRequestVM> select(@PathVariable Integer id) {
         Subject subject = subjectService.selectById(id);
         SubjectEditRequestVM vm = modelMapper.map(subject, SubjectEditRequestVM.class);
+        List<SubjectDeptVO> subjectDeptVOS = subjectDeptMapper.deptBySubjectId(id);
+        List<Integer> deptIds = subjectDeptVOS.stream().map(SubjectDeptVO::getDeptId).collect(Collectors.toList());
+        vm.setDeptIds(deptIds);
         return RestResponse.ok(vm);
     }
 
diff --git a/src/main/java/com/mindskip/xzs/domain/SubjectDept.java b/src/main/java/com/mindskip/xzs/domain/SubjectDept.java
new file mode 100644
index 0000000..6e918ed
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/SubjectDept.java
@@ -0,0 +1,19 @@
+package com.mindskip.xzs.domain;
+
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/5/27 14:28
+ */
+@Data
+public class SubjectDept {
+
+    private Integer id;
+
+    /** 璇剧洰ID */
+    private Integer subjectId;
+
+    private Integer deptId;
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/SubjectDeptVO.java b/src/main/java/com/mindskip/xzs/domain/vo/SubjectDeptVO.java
new file mode 100644
index 0000000..d848130
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/SubjectDeptVO.java
@@ -0,0 +1,22 @@
+package com.mindskip.xzs.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/5/27 14:41
+ */
+@Data
+public class SubjectDeptVO {
+
+    private Integer id;
+
+    private Integer deptId;
+
+    private String deptName;
+
+    private Integer subjectId;
+
+    private String subjectName;
+
+}
diff --git a/src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java b/src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java
index 2bfa515..32dfe3b 100644
--- a/src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/DeptQuestionMapper.java
@@ -16,7 +16,7 @@
 
     void add(@Param("deptQuestions") List<DeptQuestion> deptQuestions);
 
-    void remove(@Param("questionId") Integer questionId, @Param("deptIds") List<Integer> deptIds);
+    void remove(@Param("questionId") Integer questionId);
 
     /** 鏌ヨ閮ㄩ棬淇℃伅 */
     List<DeptQuestionVO> deptByQuestionId(@Param("questionId") Integer questionId);
diff --git a/src/main/java/com/mindskip/xzs/repository/SubjectDeptMapper.java b/src/main/java/com/mindskip/xzs/repository/SubjectDeptMapper.java
new file mode 100644
index 0000000..66683f2
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/repository/SubjectDeptMapper.java
@@ -0,0 +1,22 @@
+package com.mindskip.xzs.repository;
+
+import com.mindskip.xzs.domain.SubjectDept;
+import com.mindskip.xzs.domain.vo.SubjectDeptVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/5/27 14:29
+ */
+@Mapper
+public interface SubjectDeptMapper {
+
+    void add(@Param("subjectDeptList") List<SubjectDept> subjectDeptList);
+
+    void removeBySubjectId(@Param("subjectId") Integer subjectId);
+
+    List<SubjectDeptVO> deptBySubjectId(@Param("subjectId") Integer subjectId);
+}
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 f6925e4..3e5ce6b 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
@@ -139,7 +139,7 @@
         questionMapper.updateByPrimaryKeySelective(question);
 
         // 澶勭悊棰樼洰鎵�灞為儴闂�
-        deptQuestionMapper.remove(question.getId(), model.getDeptIds());
+        deptQuestionMapper.remove(question.getId());
         List<DeptQuestion> deptQuestions = model.getDeptIds().stream().map(deptId -> {
             DeptQuestion deptQuestion = new DeptQuestion();
             deptQuestion.setQuestionId(question.getId());
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectEditRequestVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectEditRequestVM.java
index 7275cef..94796a6 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectEditRequestVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectEditRequestVM.java
@@ -1,12 +1,14 @@
 package com.mindskip.xzs.viewmodel.admin.education;
 
 import com.mindskip.xzs.viewmodel.BaseVM;
+import lombok.Data;
 
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
-
+@Data
 public class SubjectEditRequestVM extends BaseVM {
 
     private Integer id;
@@ -14,41 +16,10 @@
     @NotBlank
     private String name;
 
-//    @NotNull
+    private List<Integer> deptIds;
+
     private Integer level;
 
-//    @NotBlank
     private String levelName;
 
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Integer getLevel() {
-        return level;
-    }
-
-    public void setLevel(Integer level) {
-        this.level = level;
-    }
-
-    public String getLevelName() {
-        return levelName;
-    }
-
-    public void setLevelName(String levelName) {
-        this.levelName = levelName;
-    }
 }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectResponseVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectResponseVM.java
index 7db650d..08ce9cf 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectResponseVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/education/SubjectResponseVM.java
@@ -1,10 +1,13 @@
 package com.mindskip.xzs.viewmodel.admin.education;
 
 import com.mindskip.xzs.viewmodel.BaseVM;
+import lombok.Data;
 
+import java.util.List;
 
-
+@Data
 public class SubjectResponseVM extends BaseVM {
+
     private Integer id;
 
     private String name;
@@ -13,35 +16,8 @@
 
     private String levelName;
 
-    public Integer getId() {
-        return id;
-    }
+    private List<Integer> deptIds;
 
-    public void setId(Integer id) {
-        this.id = id;
-    }
+    private String deptNames;
 
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Integer getLevel() {
-        return level;
-    }
-
-    public void setLevel(Integer level) {
-        this.level = level;
-    }
-
-    public String getLevelName() {
-        return levelName;
-    }
-
-    public void setLevelName(String levelName) {
-        this.levelName = levelName;
-    }
 }
diff --git a/src/main/resources/mapper/DeptQuestionMapper.xml b/src/main/resources/mapper/DeptQuestionMapper.xml
index 9ad9983..188a803 100644
--- a/src/main/resources/mapper/DeptQuestionMapper.xml
+++ b/src/main/resources/mapper/DeptQuestionMapper.xml
@@ -16,12 +16,6 @@
         DELETE
         FROM t_dept_question
         WHERE question_id = #{questionId}
-        <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">
diff --git a/src/main/resources/mapper/SubjectDeptMapper.xml b/src/main/resources/mapper/SubjectDeptMapper.xml
new file mode 100644
index 0000000..4487a63
--- /dev/null
+++ b/src/main/resources/mapper/SubjectDeptMapper.xml
@@ -0,0 +1,28 @@
+<?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.SubjectDeptMapper">
+
+    <insert id="add" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        INSERT INTO t_subject_dept(subject_id, dept_id) VALUES
+        <foreach collection="subjectDeptList" item="item" separator=",">
+            (#{item.subjectId}, #{item.deptId})
+        </foreach>
+
+    </insert>
+
+    <delete id="removeBySubjectId">
+        DELETE
+        FROM t_subject_dept
+        WHERE subject_id = #{subjectId}
+    </delete>
+
+    <select id="deptBySubjectId" resultType="com.mindskip.xzs.domain.vo.SubjectDeptVO">
+        SELECT tdq.dept_id, td.name as deptName
+        FROM t_subject_dept tdq
+                 INNER JOIN t_department td ON td.id = tdq.dept_id
+        WHERE tdq.subject_id = #{subjectId}
+    </select>
+
+</mapper>

--
Gitblit v1.8.0