Browse Source

无卷型的题必须完全匹配无卷型显示

ting.yin 6 years ago
parent
commit
7450b53f4b

+ 6 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/dao/ReportSubjectClassGroupDao.java

@@ -1,5 +1,8 @@
 package cn.com.qmth.stmms.biz.report.dao;
 
+import java.util.List;
+
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
@@ -14,4 +17,7 @@ public interface ReportSubjectClassGroupDao extends PagingAndSortingRepository<R
     @Query("delete from ReportSubjectClassGroup r where r.examId=?1 ")
     void deleteByExamId(Integer exmaId);
 
+    List<ReportSubjectClassGroup> findByExamIdAndSubjectCodeAndObjectiveAndPaperTypeAndClassName(Integer examId,
+            String subjectCode, boolean objective, String paperType, String className, Sort sort);
+
 }

+ 6 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/dao/ReportSubjectGroupDao.java

@@ -1,5 +1,8 @@
 package cn.com.qmth.stmms.biz.report.dao;
 
+import java.util.List;
+
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
@@ -20,4 +23,7 @@ public interface ReportSubjectGroupDao extends PagingAndSortingRepository<Report
     @Query("delete from ReportSubjectGroup r where r.examId=?1 ")
     void deleteByExamId(Integer exmaId);
 
+    List<ReportSubjectGroup> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId, String subjectCode,
+            boolean objective, String paperType, Sort sort);
+
 }

+ 8 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/dao/ReportSubjectQuestionDao.java

@@ -1,24 +1,29 @@
 package cn.com.qmth.stmms.biz.report.dao;
 
-import cn.com.qmth.stmms.biz.report.model.ReportSubjectQuestion;
+import java.util.List;
 
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
+import cn.com.qmth.stmms.biz.report.model.ReportSubjectQuestion;
+
 /**
  * 客、主观题分析 Dao
  *
  * @author xuwenjin
  * @date 2019-04-17
  */
-public interface ReportSubjectQuestionDao
-        extends PagingAndSortingRepository<ReportSubjectQuestion, Integer>, JpaSpecificationExecutor<ReportSubjectQuestion> {
+public interface ReportSubjectQuestionDao extends PagingAndSortingRepository<ReportSubjectQuestion, Integer>,
+        JpaSpecificationExecutor<ReportSubjectQuestion> {
 
     @Modifying
     @Query("delete from ReportSubjectQuestion r where r.examId=?1 ")
     void deleteByExamId(Integer exmaId);
 
+    List<ReportSubjectQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId, String subjectCode,
+            boolean objective, String paperType, Sort sort);
 
 }

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/ReportSubjectClassGroupService.java

@@ -16,4 +16,7 @@ public interface ReportSubjectClassGroupService {
 
     List<ReportSubjectClassGroup> findByQuery(ReportSubjectQuery query);
 
+    List<ReportSubjectClassGroup> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId,
+            String subjectCode, boolean objective, String paperType, String className);
+
 }

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/ReportSubjectGroupService.java

@@ -22,4 +22,7 @@ public interface ReportSubjectGroupService {
     ReportSubjectGroup findOne(Integer examId, String subjectCode, boolean objective, String paperType,
             Integer mainNumber);
 
+    List<ReportSubjectGroup> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId, String subjectCode,
+            boolean objective, String paperType);
+
 }

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/ReportSubjectQuestionService.java

@@ -22,4 +22,7 @@ public interface ReportSubjectQuestionService {
     ReportSubjectQuestion findOne(Integer examId, String subjectCode, boolean isObjective, String paperType,
             Integer mainNumber, Integer subNumber);
 
+    List<ReportSubjectQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId, String subjectCode,
+            boolean isObjective, String paperType);
+
 }

+ 8 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectClassGroupServiceImpl.java

@@ -80,7 +80,8 @@ public class ReportSubjectClassGroupServiceImpl extends BaseQueryService<ReportS
                         if (query.getObjective() != null) {
                             predicates.add(cb.equal(root.get("objective"), query.getObjective()));
                         }
-                        if (query.getObjective() != null && query.getObjective()) {
+                        if (query.getObjective() != null && query.getObjective()
+                                && StringUtils.isNotBlank(query.getPaperType())) {
                             predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
                         }
                         return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates
@@ -90,4 +91,10 @@ public class ReportSubjectClassGroupServiceImpl extends BaseQueryService<ReportS
         return result.getContent();
     }
 
+    @Override
+    public List<ReportSubjectClassGroup> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId,
+            String subjectCode, boolean objective, String paperType, String className) {
+        return reportSubjectClassGroupDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperTypeAndClassName(examId,
+                subjectCode, objective, paperType, className, new Sort(Direction.ASC, "groupNumber"));
+    }
 }

+ 8 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectGroupServiceImpl.java

@@ -63,7 +63,8 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
                 if (query.getGroupNumber() > 0) {
                     predicates.add(cb.equal(root.get("groupNumber"), query.getGroupNumber()));
                 }
-                if (query.getObjective() != null && query.getObjective()) {
+                if (query.getObjective() != null && query.getObjective()
+                        && StringUtils.isNotBlank(query.getPaperType())) {
                     predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
                 }
                 return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
@@ -91,4 +92,10 @@ public class ReportSubjectGroupServiceImpl extends BaseQueryService<ReportSubjec
         return list.isEmpty() ? null : list.get(0);
     }
 
+    @Override
+    public List<ReportSubjectGroup> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId,
+            String subjectCode, boolean objective, String paperType) {
+        return reportSubjectGroupDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, objective,
+                paperType, new Sort(Direction.ASC, "groupNumber"));
+    }
 }

+ 11 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportSubjectQuestionServiceImpl.java

@@ -61,9 +61,6 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
                         if (query.getExamId() != null) {
                             predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                         }
-                        if (query.getObjective() != null && query.getObjective()) {
-                            predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
-                        }
                         if (StringUtils.isNotBlank(query.getSubjectCode())) {
                             predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                         }
@@ -76,6 +73,10 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
                         if (query.getObjective() != null) {
                             predicates.add(cb.equal(root.get("objective"), query.getObjective()));
                         }
+                        if (query.getObjective() != null && query.getObjective()
+                                && StringUtils.isNotBlank(query.getPaperType())) {
+                            predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
+                        }
                         return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates
                                 .toArray(new Predicate[predicates.size()]));
                     }
@@ -97,4 +98,11 @@ public class ReportSubjectQuestionServiceImpl extends BaseQueryService<ReportSub
         return list.isEmpty() ? null : list.get(0);
     }
 
+    @Override
+    public List<ReportSubjectQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId,
+            String subjectCode, boolean objective, String paperType) {
+        return reportSubjectQuestionDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode,
+                objective, paperType, new Sort(Direction.ASC, "mainNumber", "subNumber"));
+    }
+
 }

+ 51 - 38
stmms-web/src/main/java/cn/com/qmth/stmms/report/ReportController.java

@@ -111,7 +111,7 @@ public class ReportController {
             return result;
         }
         List<String> paperTypes = studentService.findDistinctPaperType(examId, subjectCode);
-        if (!paperTypes.contains(paperType)) {
+        if (!contains(subject.getObjectiveScore() > 0, paperTypes, paperType)) {
             result.accumulate("code", "500");
             result.accumulate("message", "没有对应的卷型");
             return result;
@@ -131,24 +131,24 @@ public class ReportController {
             ReportSubject reportSubject = reportSubjectService.findOne(query.getExamId(), query.getSubjectCode());
             List<ReportSubjectClass> subjectClasses = classService.findByQuery(query);
             List<ReportSubjectGroup> subjectGroups = new ArrayList<ReportSubjectGroup>();
-            query.setObjective(true);
-            List<ReportSubjectGroup> subjectGroupO = groupService.findByQuery(query);
-            query.setObjective(false);
-            List<ReportSubjectGroup> subjectGroupsS = groupService.findByQuery(query);
-            subjectGroups.addAll(subjectGroupO);
-            subjectGroups.addAll(subjectGroupsS);
+            List<ReportSubjectGroup> objectiveGroup = groupService.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(
+                    examId, subjectCode, true, paperType);
+            List<ReportSubjectGroup> subjectiveGroup = groupService.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(
+                    examId, subjectCode, false, paperType);
+            subjectGroups.addAll(objectiveGroup);
+            subjectGroups.addAll(subjectiveGroup);
             result.accumulate("basic_paper", getPaperJson(reportSubject));
-            result.accumulate("basic_question_subjective", getQuestionJson(query, false, null));
-            result.accumulate("basic_question_objective", getQuestionJson(query, true, paperType));
+            result.accumulate("basic_question_subjective", getQuestionJson(examId, subjectCode, false, null));
+            result.accumulate("basic_question_objective", getQuestionJson(examId, subjectCode, true, paperType));
             result.accumulate("basic_class", getClassJson(subjectClasses));
             result.accumulate("basic_teacher", getTeacerJson(query));
             result.accumulate("basic_college", getCollegeJson(query));
             result.accumulate("basic_main_question", getGroupJson(subjectGroups));
-            result.accumulate("basic_question_option", getOptionJson(query, reportSubject, paperType));
+            result.accumulate("basic_question_option", getOptionJson(reportSubject, paperType));
             result.accumulate("discrimination_level",
-                    getDiscrimination(query, paperType, reportSubject, subjectClasses, subjectGroups));
+                    getDiscrimination(examId, subjectCode, paperType, reportSubject, subjectClasses, subjectGroups));
             result.accumulate("difficulty_level",
-                    getDifficulty(query, paperType, reportSubject, subjectClasses, subjectGroups));
+                    getDifficulty(examId, subjectCode, paperType, reportSubject, subjectClasses, subjectGroups));
             result.accumulate("range_level", getRangeLevel(query, reportSubject, subjectClasses));
             result.accumulate("range_10_totalScore", getRange10(reportSubject, subjectClasses));
             result.accumulate("range_1_totalScore", getRange1(reportSubject, subjectClasses));
@@ -162,6 +162,23 @@ public class ReportController {
         }
     }
 
+    private boolean contains(boolean objective, List<String> paperTypes, String paperType) {
+        if (paperType == null) {
+            if (!objective) {
+                // 纯主观题
+                return true;
+            } else if (paperTypes.contains(paperType)) {
+                return true;
+            }
+        }
+        for (String s : paperTypes) {
+            if (s.equalsIgnoreCase(paperType)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private String getPaperJson(ReportSubject r) {
         JSONObject jsonObject = new JSONObject();
         jsonObject.accumulate("fullScore", r.getTotalScore());
@@ -349,7 +366,7 @@ public class ReportController {
         return array.toString();
     }
 
-    private String getDifficulty(ReportSubjectQuery query, String paperType, ReportSubject reportSubject,
+    private String getDifficulty(Integer examId, String subjectCode, String paperType, ReportSubject reportSubject,
             List<ReportSubjectClass> subjectClasses, List<ReportSubjectGroup> subjectGroups) {
         JSONObject defaultLevels = new JSONObject();
         JSONObject content = new JSONObject();
@@ -397,13 +414,13 @@ public class ReportController {
             group.accumulate("levels", reportSubjectClass.getDifficulityLevel() == null ? defaultLevels.toString()
                     : reportSubjectClass.getDifficulityLevel());
             classGroups.add(group);
-            query.setClassName(reportSubjectClass.getClassName());
             List<ReportSubjectClassGroup> classGroupsList = new ArrayList<ReportSubjectClassGroup>();
-            query.setObjective(true);
-            query.setPaperType(paperType);
-            List<ReportSubjectClassGroup> classGroupsListO = classGroupService.findByQuery(query);
-            query.setObjective(false);
-            List<ReportSubjectClassGroup> classGroupsListS = classGroupService.findByQuery(query);
+            List<ReportSubjectClassGroup> classGroupsListO = classGroupService
+                    .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, true, paperType,
+                            reportSubjectClass.getClassName());
+            List<ReportSubjectClassGroup> classGroupsListS = classGroupService
+                    .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, false, paperType,
+                            reportSubjectClass.getClassName());
             classGroupsList.addAll(classGroupsListO);
             classGroupsList.addAll(classGroupsListS);
             for (ReportSubjectClassGroup r : classGroupsList) {
@@ -422,7 +439,7 @@ public class ReportController {
         return result.toString();
     }
 
-    private String getDiscrimination(ReportSubjectQuery query, String paperType, ReportSubject reportSubject,
+    private String getDiscrimination(Integer examId, String subjectCode, String paperType, ReportSubject reportSubject,
             List<ReportSubjectClass> subjectClasses, List<ReportSubjectGroup> subjectGroups) {
         JSONObject defaultLevels = new JSONObject();
         JSONObject content = new JSONObject();
@@ -471,13 +488,13 @@ public class ReportController {
             group.accumulate("levels", reportSubjectClass.getDiscriminationLevel() == null ? defaultLevels.toString()
                     : reportSubjectClass.getDiscriminationLevel());
             classGroups.add(group);
-            query.setClassName(reportSubjectClass.getClassName());
             List<ReportSubjectClassGroup> classGroupsList = new ArrayList<ReportSubjectClassGroup>();
-            query.setObjective(true);
-            query.setPaperType(paperType);
-            List<ReportSubjectClassGroup> classGroupsListO = classGroupService.findByQuery(query);
-            query.setObjective(false);
-            List<ReportSubjectClassGroup> classGroupsListS = classGroupService.findByQuery(query);
+            List<ReportSubjectClassGroup> classGroupsListO = classGroupService
+                    .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, true, paperType,
+                            reportSubjectClass.getClassName());
+            List<ReportSubjectClassGroup> classGroupsListS = classGroupService
+                    .findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, false, paperType,
+                            reportSubjectClass.getClassName());
             classGroupsList.addAll(classGroupsListO);
             classGroupsList.addAll(classGroupsListS);
             for (ReportSubjectClassGroup r : classGroupsList) {
@@ -496,12 +513,12 @@ public class ReportController {
         return result.toString();
     }
 
-    private String getOptionJson(ReportSubjectQuery query, ReportSubject reportSubject, String paperType) {
+    private String getOptionJson(ReportSubject reportSubject, String paperType) {
         JSONObject value = new JSONObject();
-        value.accumulate("options", reportSubject.getOptions() == null?new JSONArray().toString():reportSubject.getOptions().split(ANSWER_SPLIT));
-        query.setObjective(true);
-        query.setPaperType(paperType);
-        List<ReportSubjectQuestion> list = questionService.findByQuery(query);
+        value.accumulate("options", reportSubject.getOptions() == null ? new JSONArray().toString() : reportSubject
+                .getOptions().split(ANSWER_SPLIT));
+        List<ReportSubjectQuestion> list = questionService.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(
+                reportSubject.getExamId(), reportSubject.getSubjectCode(), true, paperType);
         JSONArray array = new JSONArray();
         for (ReportSubjectQuestion r : list) {
             JSONObject jsonObject = new JSONObject();
@@ -614,13 +631,10 @@ public class ReportController {
         return array.toString();
     }
 
-    private String getQuestionJson(ReportSubjectQuery query, boolean isObjective, String paperType) {
-        query.setObjective(isObjective);
-        if (isObjective) {
-            query.setPaperType(paperType);
-        }
+    private String getQuestionJson(Integer examId, String subjectCode, boolean isObjective, String paperType) {
         JSONArray array = new JSONArray();
-        List<ReportSubjectQuestion> list = questionService.findByQuery(query);
+        List<ReportSubjectQuestion> list = questionService.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId,
+                subjectCode, isObjective, paperType);
         for (ReportSubjectQuestion r : list) {
             JSONObject jsonObject = new JSONObject();
             jsonObject.accumulate("name", r.getQuestionName());
@@ -642,5 +656,4 @@ public class ReportController {
         }
         return array.toString();
     }
-
 }