Преглед изворни кода

增加评卷给分板的构造逻辑;增加成绩查询的分数构造逻辑

罗识 пре 7 година
родитељ
комит
d3ea7ecefd

+ 2 - 8
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamStudentPaper.java

@@ -2,7 +2,6 @@ package cn.com.qmth.stmms.biz.exam.model;
 
 import java.io.Serializable;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -95,13 +94,6 @@ public class ExamStudentPaper implements Serializable {
         List<QuestionDetail> details = getDetailList();
         if (details != null && !details.isEmpty()) {
             list = new LinkedList<>();
-            Collections.sort(details, new Comparator<QuestionDetail>() {
-
-                @Override
-                public int compare(QuestionDetail o1, QuestionDetail o2) {
-                    return o1.getIndex() - o2.getIndex();
-                }
-            });
             int index = 1;
             QuestionDetail lastDetail = null;
             for (QuestionDetail detail : details) {
@@ -142,6 +134,8 @@ public class ExamStudentPaper implements Serializable {
     public static void main(String[] args) {
         ExamStudentPaper paper = new ExamStudentPaper();
         paper.struct = "[{\"title\":\"多选题\",\"number\":2,\"index\":1,\"questions\":[{\"number\":1,\"answer\":\"ACD\",\"score\":2.0},{\"number\":2,\"answer\":\"ABD\",\"score\":2.0},{\"number\":3,\"answer\":\"ABD\",\"score\":2.0},{\"number\":4,\"answer\":\"ABC\",\"score\":2.0},{\"number\":5,\"answer\":\"ABD\",\"score\":2.0}]},{\"title\":\"单选题\",\"number\":1,\"index\":21,\"questions\":[{\"number\":1,\"answer\":\"A\",\"score\":1.0},{\"number\":2,\"answer\":\"A\",\"score\":1.0},{\"number\":3,\"answer\":\"B\",\"score\":1.0},{\"number\":4,\"answer\":\"C\",\"score\":1.0},{\"number\":5,\"answer\":\"A\",\"score\":1.0},{\"number\":6,\"answer\":\"D\",\"score\":1.0},{\"number\":7,\"answer\":\"B\",\"score\":1.0},{\"number\":8,\"answer\":\"D\",\"score\":1.0},{\"number\":9,\"answer\":\"D\",\"score\":1.0},{\"number\":10,\"answer\":\"A\",\"score\":1.0},{\"number\":11,\"answer\":\"C\",\"score\":2.0},{\"number\":12,\"answer\":\"C\",\"score\":2.0},{\"number\":13,\"answer\":\"C\",\"score\":2.0},{\"number\":14,\"answer\":\"C\",\"score\":2.0},{\"number\":15,\"answer\":\"C\",\"score\":2.0}]}]";
+        // paper.struct =
+        // "[{\"title\":\"填空题\",\"number\":1,\"questions\":[{\"number\":1,\"score\":2.0},{\"number\":2,\"score\":2.0},{\"number\":3,\"score\":2.0},{\"number\":4,\"score\":2.0},{\"number\":5,\"score\":2.0}]},{\"title\":\"问答题\",\"number\":2,\"questions\":[{\"number\":1,\"score\":5.0},{\"number\":2,\"score\":5.0},{\"number\":3,\"score\":5.0},{\"number\":4,\"score\":5.0},{\"number\":5,\"score\":5.0}]},{\"title\":\"套题_1\",\"number\":3,\"questions\":[{\"number\":1,\"score\":2.0},{\"number\":2,\"score\":3.0}]},{\"title\":\"套题_3\",\"number\":4,\"questions\":[{\"number\":1,\"answer\":\"C\",\"score\":2.0},{\"number\":2,\"answer\":\"C\",\"score\":2.0},{\"number\":3,\"answer\":\"C\",\"score\":2.0},{\"number\":4,\"answer\":\"C\",\"score\":2.0},{\"number\":5,\"answer\":\"C\",\"score\":2.0},{\"number\":6,\"score\":2.0},{\"number\":7,\"score\":3.0}]}]";
         List<ExamQuestion> list = paper.getQuestionList();
         for (ExamQuestion q : list) {
             System.out.println(q.getMainTitle() + "," + q.getMainNumber() + "," + q.getSubNumber() + "," + q.getAnswer()

+ 5 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/QuestionDetail.java

@@ -46,6 +46,10 @@ public class QuestionDetail implements Comparable<QuestionDetail> {
 
     @Override
     public int compareTo(QuestionDetail o) {
-        return number - o.getNumber();
+        if (index > 0 && o.getIndex() > 0) {
+            return index - o.getIndex();
+        } else {
+            return number - o.getNumber();
+        }
     }
 }

+ 24 - 10
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java

@@ -20,8 +20,10 @@ import org.springframework.transaction.annotation.Transactional;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.model.ExamStudentPaper;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentPaperService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
@@ -55,6 +57,9 @@ public class TaskServiceImpl implements TaskService, ApplicationContextAware, In
     @Autowired
     private ExamStudentService studentService;
 
+    @Autowired
+    private ExamStudentPaperService studentPaperService;
+
     @Autowired
     private ExamSubjectService subjectService;
 
@@ -70,8 +75,7 @@ public class TaskServiceImpl implements TaskService, ApplicationContextAware, In
 
     @Value("${use.redis}")
     private boolean useRedis;
-    
-    
+
     @Override
     public List<Task> findByQuery(MarkLibrarySearchQuery query) {
         List<Task> list = new LinkedList<Task>();
@@ -119,8 +123,17 @@ public class TaskServiceImpl implements TaskService, ApplicationContextAware, In
 
     private List<MarkStepDTO> buildMarkStep(MarkLibrary library) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(library.getExamId(),
-                library.getSubjectCode(), false);
+        List<ExamQuestion> sList = null;
+        // 首先尝试获取考生专属试题结构
+        ExamStudentPaper paper = studentPaperService.find(library.getExamId(), library.getExamNumber(), false);
+        if (paper != null) {
+            sList = paper.getQuestionList();
+        }
+        // 没有的情况下再去读科目通用试题结构
+        if (sList == null || sList.isEmpty()) {
+            sList = questionService.findByExamAndSubjectAndObjective(library.getExamId(), library.getSubjectCode(),
+                    false);
+        }
         int number = 0;
         for (ExamQuestion question : sList) {
             number++;
@@ -327,17 +340,18 @@ public class TaskServiceImpl implements TaskService, ApplicationContextAware, In
             this.redisTemplate = (StringRedisTemplate) context.getBean("stringRedisTemplate");
         }
     }
+
     /*
      * 客户端非正常情况下退出系统时,对内存中的没有及时清除的任务进行处理
      * 
      */
     @Override
-    public void clearTaskMap(long cleanMapinterval) throws Exception{
-    	if(useRedis){//Redis
-    	    MarkRedisUtil.QuartzClearTask(redisTemplate,cleanMapinterval);
-    	}else{//内存方式
-    		CurrentTaskUtil.QuartzClearMap(cleanMapinterval);
-    	}
+    public void clearTaskMap(long cleanMapinterval) throws Exception {
+        if (useRedis) {// Redis
+            MarkRedisUtil.QuartzClearTask(redisTemplate, cleanMapinterval);
+        } else {// 内存方式
+            CurrentTaskUtil.QuartzClearMap(cleanMapinterval);
+        }
     }
 
 }

+ 19 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -29,6 +29,7 @@ import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamPackage;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.model.ExamStudentPaper;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
@@ -274,8 +275,15 @@ public class ScoreController extends BaseParameterController {
     private List<ScoreItem> buildScoreList(ExamStudent student) {
         List<ScoreItem> scoreList = new LinkedList<ScoreItem>();
 
-        List<ExamQuestion> oList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
-                student.getSubjectCode(), true);
+        List<ExamQuestion> oList = null;
+        ExamStudentPaper oPaper = studentPaperService.find(student.getExamId(), student.getExamNumber(), true);
+        if (oPaper != null) {
+            oList = oPaper.getQuestionList();
+        }
+        if (oList == null || oList.isEmpty()) {
+            oList = questionService.findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(),
+                    true);
+        }
         List<ScoreItem> list1 = student.getScoreList(true);
         int index = 0;
         for (ExamQuestion question : oList) {
@@ -290,8 +298,15 @@ public class ScoreController extends BaseParameterController {
         }
         scoreList.addAll(list1);
 
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
-                student.getSubjectCode(), false);
+        List<ExamQuestion> sList = null;
+        ExamStudentPaper sPaper = studentPaperService.find(student.getExamId(), student.getExamNumber(), false);
+        if (sPaper != null) {
+            sList = oPaper.getQuestionList();
+        }
+        if (sList == null || sList.isEmpty()) {
+            sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(),
+                    false);
+        }
         List<ScoreItem> list2 = student.getScoreList(false);
         index = 0;
         for (ExamQuestion question : sList) {