Procházet zdrojové kódy

修复按科目导出成绩明细时,若首个考生未上传且科目启用了AB卷,构造excel标题时客观题按paperType=#条件读取为空的bug
修改ExamQuestion按examId和subjectCode查询时的默认排序规则,groupNumber字段不参与排序,使得评卷分组排序与mainNumber排序不一致时,不会出现小题得分顺序匹配错误

luoshi před 4 roky
rodič
revize
96af3d5359

+ 6 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamQuestionDao.java

@@ -1,7 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
-
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@@ -13,10 +12,15 @@ import java.util.List;
 public interface ExamQuestionDao extends JpaRepository<ExamQuestion, Integer>, JpaSpecificationExecutor<ExamQuestion> {
 
     @Query("select q from ExamQuestion q where q.examId=?1 and  q.subjectCode=?2 and q.objective=?3 "
-            + "order by q.paperType, q.groupNumber, q.mainNumber, q.subNumber")
+            + "order by q.paperType, q.mainNumber, q.subNumber")
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjective(Integer examId, String subjectCode,
             boolean objective);
 
+    @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
+            + " group by q.main_numnber, q.sub_number order by q.mainNumber, q.subNumber")
+    public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveGroupByNumber(Integer examId, String subjectCode,
+            boolean objective);
+
     @Query("select count(q) from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 and q.mainNumber=?4")
     public long countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber);

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamQuestionService.java

@@ -25,6 +25,9 @@ public interface ExamQuestionService {
 
     List<ExamQuestion> findByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective);
 
+    List<ExamQuestion> findByExamAndSubjectAndObjectiveGroupByNumber(Integer examId, String subjectCode,
+            boolean objective);
+
     List<ExamQuestion> findByExamAndSubjectAndObjectiveAndPaperType(Integer examId, String subjectCode,
             boolean objective, String paperType);
 

+ 43 - 38
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamQuestionServiceImpl.java

@@ -1,24 +1,5 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.ExamQuestionDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
@@ -27,6 +8,19 @@ import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamQuestionSearchQuery;
 import cn.com.qmth.stmms.common.enums.ObjectivePolicy;
 import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.*;
 
 @Service
 public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> implements ExamQuestionService {
@@ -74,23 +68,29 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
         return questionDao.findByExamIdAndSubjectCodeAndObjective(examId, subjectCode, objective);
     }
 
+    @Override
+    public List<ExamQuestion> findByExamAndSubjectAndObjectiveGroupByNumber(Integer examId, String subjectCode,
+            boolean objective) {
+        return questionDao.findByExamIdAndSubjectCodeAndObjectiveGroupByNumber(examId, subjectCode, objective);
+    }
+
     @Override
     public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndPaperType(Integer examId, String subjectCode,
             boolean objective, String paperType) {
-        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, objective,
-                paperType, new Sort(Direction.ASC, "mainNumber", "subNumber"));
+        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, objective, paperType,
+                new Sort(Direction.ASC, "mainNumber", "subNumber"));
     }
 
     @Override
     public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndGroupNumber(Integer examId, String subjectCode,
             boolean objective, Integer groupNumber) {
-        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(examId, subjectCode, objective,
-                groupNumber);
+        return questionDao
+                .findByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(examId, subjectCode, objective, groupNumber);
     }
 
     @Override
-    public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndGroupNumberNotEqual(Integer examId,
-            String subjectCode, boolean objective, Integer groupNumber) {
+    public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndGroupNumberNotEqual(Integer examId, String subjectCode,
+            boolean objective, Integer groupNumber) {
         return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndGroupNumberNotEqual(examId, subjectCode, objective,
                 groupNumber);
     }
@@ -98,8 +98,8 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Override
     public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndMainNumber(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber) {
-        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective,
-                mainNumber);
+        return questionDao
+                .findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective, mainNumber);
     }
 
     @Override
@@ -118,8 +118,8 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Override
     public long countByExamAndSubjectAndObjectiveAndMainNumber(Integer examId, String subjectCode, boolean objective,
             Integer mainNumber) {
-        return questionDao.countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective,
-                mainNumber);
+        return questionDao
+                .countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective, mainNumber);
     }
 
     private Specification<ExamQuestion> buildSpecification(final ExamQuestionSearchQuery query) {
@@ -154,8 +154,9 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
                 if (query.getMainNumber() != null) {
                     predicates.add(cb.equal(root.get("mainNumber"), query.getMainNumber()));
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ?
+                        cb.conjunction() :
+                        cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
@@ -174,15 +175,17 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Override
     public long countByExamAndSubjectAndObjectiveAndMainNumberAndPaperType(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber, String paperType) {
-        return questionDao.countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective,
-                mainNumber, paperType);
+        return questionDao
+                .countByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective, mainNumber,
+                        paperType);
     }
 
     @Override
     public long countByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber, Integer subNumber) {
-        return questionDao.countByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode,
-                objective, mainNumber, subNumber);
+        return questionDao
+                .countByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode, objective,
+                        mainNumber, subNumber);
     }
 
     @Transactional
@@ -203,12 +206,14 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Override
     public ExamQuestion findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(Integer examId, String subjectCode,
             boolean objective, Integer mainNumber, Integer subNumber) {
-        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode,
-                objective, mainNumber, subNumber);
+        return questionDao
+                .findByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode, objective,
+                        mainNumber, subNumber);
     }
 
     @Override
-    public List<ExamQuestion> findMainByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective) {
+    public List<ExamQuestion> findMainByExamAndSubjectAndObjective(Integer examId, String subjectCode,
+            boolean objective) {
         List<ExamQuestion> list = new ArrayList<ExamQuestion>();
         Set<Integer> mainNumbers = new LinkedHashSet<>();
         List<ExamQuestion> all = questionDao.findByExamIdAndSubjectCodeAndObjective(examId, subjectCode, objective);