From 65c6651f36f292674ad5f3966937dd22e5968326 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期二, 16 七月 2024 09:07:35 +0800
Subject: [PATCH] feat:补考保留最高分

---
 src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperPageRequestVM.java |   10 +++++
 src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java            |   15 +++++++
 src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java     |   22 +++++++++++
 src/main/resources/mapper/ExamPaperMapper.xml                                   |    3 +
 src/main/java/com/mindskip/xzs/listener/CalculateExamPaperAnswerListener.java   |    8 ++-
 src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java              |    6 +++
 src/main/resources/mapper/ExamPaperAnswerMapper.xml                             |   11 +++++
 7 files changed, 72 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/listener/CalculateExamPaperAnswerListener.java b/src/main/java/com/mindskip/xzs/listener/CalculateExamPaperAnswerListener.java
index 6aac35e..5776629 100644
--- a/src/main/java/com/mindskip/xzs/listener/CalculateExamPaperAnswerListener.java
+++ b/src/main/java/com/mindskip/xzs/listener/CalculateExamPaperAnswerListener.java
@@ -58,15 +58,17 @@
         List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperAnswerInfo.getExamPaperQuestionCustomerAnswers();
 
         examPaperAnswerService.insertByFilter(examPaperAnswer);
+
+        // 鏈�浼樻垚缁╂湁鏁堬紝鍏朵綑鏃犳晥
+        examPaperAnswerService.maxGrade(examPaperAnswer);
+
         examPaperQuestionCustomerAnswers.stream().filter(a -> QuestionTypeEnum.needSaveTextContent(a.getQuestionType())).forEach(d -> {
             TextContent textContent = new TextContent(d.getAnswer(), now);
             textContentService.insertByFilter(textContent);
             d.setTextContentId(textContent.getId());
             d.setAnswer(null);
         });
-        examPaperQuestionCustomerAnswers.forEach(d -> {
-            d.setExamPaperAnswerId(examPaperAnswer.getId());
-        });
+        examPaperQuestionCustomerAnswers.forEach(d -> d.setExamPaperAnswerId(examPaperAnswer.getId()));
         examPaperQuestionCustomerAnswerService.insertList(examPaperQuestionCustomerAnswers);
 
         switch (ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
diff --git a/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java b/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
index 8fe8d1a..bfbbe5a 100644
--- a/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
@@ -70,4 +70,19 @@
     ExamPaperDataExportVO totalByPaper(ExamPaperDataVO examPaperDataVO);
 
     Integer getExamTotal(ExamPaperStatisticVO examPaperStatisticVO);
+
+
+    /**
+     * 鏍规嵁绛斿嵎璇曞嵎id鑾峰彇鏈�楂樻垚缁╃瓟鍗�
+     * @param examPaperAnswer 绛斿嵎
+     * @return 鏈�楂樻垚缁╃瓟鍗�
+     */
+    ExamPaperAnswer getTemplateOtherExamAnswer(ExamPaperAnswer examPaperAnswer);
+
+    /**
+     * 鏍规嵁璇曞嵎id鑾峰彇鏈�楂樻垚缁╃瓟鍗�
+     * @param examPaperAnswer 绛斿嵎
+     * @return 鏈�楂樻垚缁╃瓟鍗�
+     */
+    ExamPaperAnswer getPaperOtherExamAnswer(ExamPaperAnswer examPaperAnswer);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java b/src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java
index c62006d..6f4211d 100644
--- a/src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java
+++ b/src/main/java/com/mindskip/xzs/service/ExamPaperAnswerService.java
@@ -72,4 +72,10 @@
     Map<String, Object> data(ExamPaperDataVO examPaperDataVO);
 
     List<ExamPaperDataExportVO> dataExport(ExamPaperDataVO examPaperDataVO);
+
+    /**
+     * 鑾峰彇涔嬪墠鐨勬垚缁╋紝鍙栨渶浼樻垚缁�
+     * @param examPaperAnswer 鏈绛斿嵎
+     */
+    void maxGrade(ExamPaperAnswer examPaperAnswer);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java
index 3f362f2..efce24b 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperAnswerServiceImpl.java
@@ -3,6 +3,7 @@
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.mindskip.xzs.domain.*;
+import com.mindskip.xzs.domain.enums.AnswerInvalidEnum;
 import com.mindskip.xzs.domain.enums.ExamPaperAnswerStatusEnum;
 import com.mindskip.xzs.domain.enums.ExamPaperTypeEnum;
 import com.mindskip.xzs.domain.enums.QuestionTypeEnum;
@@ -401,4 +402,25 @@
             return dataByPaper;
         }
     }
+
+    @Override
+    public void maxGrade(ExamPaperAnswer examPaperAnswer) {
+        // 鑾峰彇鏌愪竴鍦鸿�冭瘯鐨勬渶楂樻垚缁�
+        ExamPaperAnswer maxGrade;
+        if (Objects.equals(examPaperAnswer.getPaperType(), 7)) {
+            maxGrade = examPaperAnswerMapper.getTemplateOtherExamAnswer(examPaperAnswer);
+        } else {
+            maxGrade = examPaperAnswerMapper.getPaperOtherExamAnswer(examPaperAnswer);
+        }
+        // 鏈涓嶆槸鏈�楂樺垎
+        if (!Objects.equals(maxGrade.getId(), examPaperAnswer.getId())) {
+            // 涔嬪墠鐨勬垚缁╂湁鏁�
+            maxGrade.setInvalid(AnswerInvalidEnum.VALID);
+            examPaperAnswerMapper.updateByPrimaryKey(maxGrade);
+            // 鏈鐨勪笉鏄渶楂樺垎锛屾棤鏁�
+            examPaperAnswer.setInvalid(AnswerInvalidEnum.INVALID);
+            examPaperAnswerMapper.updateByPrimaryKey(examPaperAnswer);
+        }
+    }
+
 }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperPageRequestVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperPageRequestVM.java
index be7a2b6..26fbfd6 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperPageRequestVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperPageRequestVM.java
@@ -21,6 +21,16 @@
 
     private List<Integer> deptIds;
 
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
     public List<Integer> getDeptIds() {
         return deptIds;
     }
diff --git a/src/main/resources/mapper/ExamPaperAnswerMapper.xml b/src/main/resources/mapper/ExamPaperAnswerMapper.xml
index bb5749d..9103800 100644
--- a/src/main/resources/mapper/ExamPaperAnswerMapper.xml
+++ b/src/main/resources/mapper/ExamPaperAnswerMapper.xml
@@ -657,5 +657,16 @@
     )
   </select>
 
+  <select id="getTemplateOtherExamAnswer" resultType="com.mindskip.xzs.domain.ExamPaperAnswer">
+    SELECT id, user_score FROM t_exam_paper_answer WHERE exam_paper_id IN
+        (SELECT exam_paper_id FROM t_exam_templates_user_count WHERE user_id = #{createUser} AND exam_templates_id =
+            (SELECT exam_templates_id FROM t_exam_templates_user_count WHERE exam_paper_id = #{examPaperId} LIMIT 1))
+    HAVING MAX(user_score) ORDER BY create_time DESC LIMIT 1
+  </select>
+
+  <select id="getPaperOtherExamAnswer" resultType="com.mindskip.xzs.domain.ExamPaperAnswer">
+    SELECT id, user_score FROM t_exam_paper_answer WHERE exam_paper_id = #{examPaperId} AND create_user = #{createUser}
+    HAVING MAX(user_score) ORDER BY create_time DESC LIMIT 1
+  </select>
 
 </mapper>
diff --git a/src/main/resources/mapper/ExamPaperMapper.xml b/src/main/resources/mapper/ExamPaperMapper.xml
index 514994d..587632c 100644
--- a/src/main/resources/mapper/ExamPaperMapper.xml
+++ b/src/main/resources/mapper/ExamPaperMapper.xml
@@ -276,6 +276,9 @@
       <if test="type != null ">
         and e.type= #{type}
       </if>
+      <if test="name != null and name != ''">
+        AND INSTR(name, #{name})
+      </if>
     </where>
     group by e.id
   </select>

--
Gitblit v1.8.0