From fb69f03a1fc6c2ed30c805020ea596017633adb8 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期五, 17 五月 2024 22:18:12 +0800
Subject: [PATCH] feat:随机试卷补考

---
 src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java          |    5 ++
 src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java  |   12 ++++++
 src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java             |    4 ++
 src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java     |   10 +++++
 src/main/resources/mapper/ExamPaperAnswerMapper.xml                       |   15 +++++++
 src/main/java/com/mindskip/xzs/repository/UserMapper.java                 |    2 +
 src/main/java/com/mindskip/xzs/service/ExamPaperService.java              |    3 +
 src/main/resources/mapper/UserMapper.xml                                  |   15 +++++++
 src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java            |    3 +
 src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java      |    7 +++
 src/main/resources/mapper/ExamPaperMapper.xml                             |    4 ++
 src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java |   29 ++++++++++++++
 src/main/java/com/mindskip/xzs/service/UserService.java                   |    2 +
 13 files changed, 111 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
index 9f1e521..6e85feb 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
@@ -118,6 +118,35 @@
         return RestResponse.ok(res);
     }
 
+    @RequestMapping(value = "/getDepartmentUserByTemplateId", method = RequestMethod.POST)
+    public RestResponse<List<DepartmentVO>> getDepartmentUserByTemplateId(Integer templateId){
+        List<DepartmentVO> res = departmentService.gets(isDeptAdmin() ? getAdminDeptIds() : null)
+                .stream().map(e->{
+                    DepartmentVO departmentVO = new DepartmentVO();
+                    List<UserDepartment> userDepartments = userDepartmentMapper.selectByDepartmentId(e.getId());
+                    List<User> list = new ArrayList<>();
+                    for (UserDepartment userDepartment : userDepartments) {
+                        User user;
+                        // 閫夋嫨琛ヨ�冪敤鎴锋椂鏌ヨ绗﹀悎琛ヨ�冩潯浠剁殑鐢ㄦ埛
+                        if (templateId != null) {
+                            ExamPaper examPaper = new ExamPaper();
+                            examPaper.setCreateUser(userDepartment.getUserId());
+                            examPaper.setId(templateId);
+                            user = userService.getUserByExamByTemplateId(examPaper);
+                        } else {
+                            user = userService.getUserById(userDepartment.getUserId());
+                        }
+                        if (ObjectUtils.isNotEmpty(user)) {
+                            list.add(user);
+                        }
+                    }
+                    departmentVO.setUserList(list);
+                    departmentVO.setDepartment(e);
+                    return departmentVO;
+                }).collect(Collectors.toList());
+        return RestResponse.ok(res);
+    }
+
     @RequestMapping(value = "/getDeptAdmins", method = RequestMethod.GET)
     public RestResponse<List<Department>> getDeptAdmins(){
         return RestResponse.ok(userService.getDeptAdmins(isDeptAdmin() ? getCurrentUser().getId() : null));
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java
index f721253..af682fd 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java
@@ -5,6 +5,7 @@
 import com.mindskip.xzs.base.RestResponse;
 import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.ExamPaperSubject;
+import com.mindskip.xzs.domain.vo.ExamTemplatesVO;
 import com.mindskip.xzs.domain.vo.PaperExcelVO;
 import com.mindskip.xzs.domain.vo.UserVO;
 import com.mindskip.xzs.service.ExamPaperDepartmentService;
@@ -108,6 +109,17 @@
         return RestResponse.ok("鎿嶄綔鎴愬姛");
     }
 
+    /**
+     * 琛ヨ��
+     * @param model 鏁版嵁
+     * @return 鎿嶄綔缁撴灉
+     */
+    @RequestMapping(value = "/missExamByTemplateId", method = RequestMethod.POST)
+    public RestResponse<String> missExamByTemplateId(@RequestBody ExamTemplatesVO model) {
+        examPaperService.missExamByTemplateId(model);
+        return RestResponse.ok("鎿嶄綔鎴愬姛");
+    }
+
     @RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
     public RestResponse<ExamPaperEditRequestVO> select(@PathVariable Integer id) {
         ExamPaperEditRequestVO vm = examPaperService.examPaperToVM(id);
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java b/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java
index ef83213..7debb9e 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/ExamTemplatesVO.java
@@ -24,4 +24,8 @@
      */
     private List<Integer> deptId;
 
+    private List<Integer> userIds;
+
+    private List<Integer> paperIds;
+
 }
diff --git a/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java b/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
index 4f18d9c..06e76c1 100644
--- a/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
@@ -5,6 +5,7 @@
 import com.mindskip.xzs.domain.ScoreTemplatesUserCount;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.vo.ExamPaperStatisticVO;
+import com.mindskip.xzs.domain.vo.ExamTemplatesVO;
 import com.mindskip.xzs.domain.vo.TeamplatesUserExcelVO;
 import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradePageRequestVM;
@@ -50,8 +51,14 @@
 
     void setMissExam(ExamPaperEditRequestVM model);
 
+    void setMissExam(ExamTemplatesVO model);
+
+    void setMissExamByTemplate(ExamTemplatesVO model);
+
     void insertDefault(ExamPaperEditRequestVM model);
 
+    void insertDefaultByTemplate(ExamTemplatesVO model);
+
     Map<String, Object> histogram(ExamPaperStatisticVO examPaperStatisticVO);
 
     Map<String, Object> pieChart(ExamPaperStatisticVO examPaperStatisticVO);
diff --git a/src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java b/src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java
index 42b7744..2191fbf 100644
--- a/src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java
@@ -2,6 +2,7 @@
 
 import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.other.KeyValue;
+import com.mindskip.xzs.domain.vo.ExamTemplatesVO;
 import com.mindskip.xzs.domain.vo.PaperExcelVO;
 import com.mindskip.xzs.domain.vo.UserVO;
 import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperPageRequestVM;
@@ -42,4 +43,6 @@
     List<ExamPaper> list(List<Integer> deptIds);
 
     List<UserVO> selectStudent(UserVO userVO);
+
+    List<Integer> getExamPaperByTemplateId(ExamTemplatesVO model);
 }
diff --git a/src/main/java/com/mindskip/xzs/repository/UserMapper.java b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
index 9aecd97..6ba4984 100644
--- a/src/main/java/com/mindskip/xzs/repository/UserMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
@@ -170,4 +170,6 @@
     List<Integer> getDeptAdminIds(Integer id);
 
     List<Department> getDeptAdmins(Integer id);
+
+    User getUserByExamByTemplateId(ExamPaper examPaper);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/ExamPaperService.java b/src/main/java/com/mindskip/xzs/service/ExamPaperService.java
index 38f9bdb..56dc960 100644
--- a/src/main/java/com/mindskip/xzs/service/ExamPaperService.java
+++ b/src/main/java/com/mindskip/xzs/service/ExamPaperService.java
@@ -3,6 +3,7 @@
 import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.User;
+import com.mindskip.xzs.domain.vo.ExamTemplatesVO;
 import com.mindskip.xzs.domain.vo.PaperExcelVO;
 import com.mindskip.xzs.domain.vo.UserVO;
 import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
@@ -50,4 +51,6 @@
      * @return
      */
     PageInfo<UserVO> selectStudent(UserVO userVO, List<Integer> adminDeptIds);
+
+    void missExamByTemplateId(ExamTemplatesVO model);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/UserService.java b/src/main/java/com/mindskip/xzs/service/UserService.java
index c2c44ba..833fb39 100644
--- a/src/main/java/com/mindskip/xzs/service/UserService.java
+++ b/src/main/java/com/mindskip/xzs/service/UserService.java
@@ -142,4 +142,6 @@
     List<Integer> getDeptAdminIds(Integer id);
 
     List<Department> getDeptAdmins(Integer id);
+
+    User getUserByExamByTemplateId(ExamPaper examPaper);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
index 8001bb0..e8584a5 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
@@ -9,6 +9,7 @@
 import com.mindskip.xzs.domain.exam.ExamPaperQuestionItemObject;
 import com.mindskip.xzs.domain.exam.ExamPaperTitleItemObject;
 import com.mindskip.xzs.domain.other.KeyValue;
+import com.mindskip.xzs.domain.vo.ExamTemplatesVO;
 import com.mindskip.xzs.domain.vo.PaperExcelVO;
 import com.mindskip.xzs.domain.vo.UserVO;
 import com.mindskip.xzs.repository.ExamPaperAnswerMapper;
@@ -626,6 +627,15 @@
     }
 
     @Override
+    @Transactional
+    public void missExamByTemplateId(ExamTemplatesVO model) {
+        List<Integer> id = examPaperMapper.getExamPaperByTemplateId(model);
+        model.setPaperIds(id);
+        // 鏍规嵁鑰冭瘯id灏嗛�夋嫨鐨勮ˉ鑰冭�冪敓鐨勮�冭瘯鎴愮哗璁剧疆涓烘棤鏁�
+        examPaperAnswerMapper.setMissExamByTemplate(model);
+    }
+
+    @Override
     public List<ExamPaper> list(List<Integer> deptIds) {
         return examPaperMapper.list(deptIds);
     }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
index 0282db7..156f7f9 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
@@ -194,4 +194,9 @@
     public List<Department> getDeptAdmins(Integer id) {
         return userMapper.getDeptAdmins(id);
     }
+
+    @Override
+    public User getUserByExamByTemplateId(ExamPaper examPaper) {
+        return userMapper.getUserByExamByTemplateId(examPaper);
+    }
 }
diff --git a/src/main/resources/mapper/ExamPaperAnswerMapper.xml b/src/main/resources/mapper/ExamPaperAnswerMapper.xml
index 5f0bb90..7b059bf 100644
--- a/src/main/resources/mapper/ExamPaperAnswerMapper.xml
+++ b/src/main/resources/mapper/ExamPaperAnswerMapper.xml
@@ -242,6 +242,21 @@
     )
   </update>
 
+  <update id="setMissExamByTemplate">
+    update t_exam_paper_answer
+    set invalid = 1
+    where exam_paper_id
+      in
+    <foreach collection="paperIds" item="item" separator="," open="(" close=")">
+      #{item}
+    </foreach>
+    and create_user in (
+    <foreach collection="userIds" item="item" index="index" separator=",">
+      #{item}
+    </foreach>
+    )
+  </update>
+
 
     <select id="studentPage" resultMap="BaseResultMap" parameterType="com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM">
     SELECT
diff --git a/src/main/resources/mapper/ExamPaperMapper.xml b/src/main/resources/mapper/ExamPaperMapper.xml
index 6b14e1a..8cb496a 100644
--- a/src/main/resources/mapper/ExamPaperMapper.xml
+++ b/src/main/resources/mapper/ExamPaperMapper.xml
@@ -471,4 +471,8 @@
       order by a.id
     </select>
 
+    <select id="getExamPaperByTemplateId" resultType="java.lang.Integer" parameterType="com.mindskip.xzs.domain.vo.ExamTemplatesVO">
+      select exam_paper_id from t_exam_templates_user_count where exam_templates_id = #{id}
+    </select>
+
 </mapper>
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index d7252e5..4dcedde 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -554,4 +554,19 @@
         </if>
     </select>
 
+    <select id="getUserByExamByTemplateId" resultType="com.mindskip.xzs.domain.User" parameterType="com.mindskip.xzs.domain.ExamPaper">
+        <![CDATA[
+        SELECT DISTINCT
+        d.*
+        FROM
+        t_exam_templates a
+        INNER JOIN t_exam_templates_user_count b ON a.id = b.exam_templates_id and a.id = ${id}
+        LEFT JOIN t_exam_paper_answer c ON b.exam_paper_id = c.exam_paper_id AND c.create_user = b.user_id and invalid = 0
+        LEFT JOIN t_user d ON b.user_id = d.id
+        WHERE
+        ( c.id IS NULL OR ( user_score / paper_score ) < 0.6 )
+        AND b.user_id = #{createUser}
+        ]]>
+    </select>
+
 </mapper>

--
Gitblit v1.8.0