1
0
Эх сурвалжийг харах

Merge branch 'stmms_ft_dev' of http://git.qmth.com.cn/luoshi/stmms-ft.git into stmms_ft_dev

ting.yin 6 жил өмнө
parent
commit
8eda51fd2f

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

@@ -130,7 +130,7 @@ public class TaskServiceImpl implements TaskService {
         task.setExist(true);
         task.setStudentId(library.getExamNumber());
         task.setLibraryId(library.getId());
-        task.setMarkStepList(buildMarkStep(group, student.getId()));
+        task.setMarkStepList(buildMarkStep(group, library.getId()));
         task.setPictureUrls(PictureUrlBuilder.getSliceUrls(library.getExamId(), library.getCampusId(),
                 library.getSubjectCode(), library.getExamNumber(), student.getSliceCount()));
         task.setPictureConfig(group.getPictureConfigList());
@@ -156,7 +156,7 @@ public class TaskServiceImpl implements TaskService {
         return task;
     }
 
-    private List<MarkStepDTO> buildMarkStep(MarkGroup group, Integer studentId) {
+    private List<MarkStepDTO> buildMarkStep(MarkGroup group, Integer libraryId) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(group.getExamId(),
                 group.getSubjectCode(), false, group.getNumber());
@@ -176,9 +176,9 @@ public class TaskServiceImpl implements TaskService {
             step.setMin(0d);
             step.setInterval(question.getIntervalScore());
             step.setScoreList(question.getScoreListArray());
-            if (studentId != null) {
+            if (libraryId != null) {
                 // 增加阅卷轨迹列表获取
-                addTrack(step, question, trackService.findByStudentId(studentId));
+                addTrack(step, question, trackService.findByLibraryId(libraryId));
             }
             list.add(step);
         }

+ 5 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -35,6 +35,7 @@ import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.ScoreRateService;
 import cn.com.qmth.stmms.biz.lock.LockService;
@@ -78,6 +79,9 @@ public class ScoreController extends BaseExamController {
     @Autowired
     private MarkLibraryService markLibraryService;
 
+    @Autowired
+    private MarkGroupService groupService;
+
     @Autowired
     private ScoreRateService scoreRateService;
 
@@ -238,7 +242,7 @@ public class ScoreController extends BaseExamController {
         int examId = getSessionExamId(request);
         if (lockService.trylock(LockType.EXAM, examId)) {
             ScoreCalculateThread thread = new ScoreCalculateThread(examId, lockService, studentService, questionService,
-                    subjectService, scoreRateService, markLibraryService, markService);
+                    subjectService, scoreRateService, markService, groupService);
             taskExecutor.submit(thread);
         }
         return new ModelAndView("redirect:/admin/exam/score");

+ 41 - 38
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

@@ -19,14 +19,13 @@ import cn.com.qmth.stmms.biz.exam.model.ScoreRate;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.ScoreRateService;
 import cn.com.qmth.stmms.biz.lock.LockService;
-import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.utils.ScoreCalculateUtil;
 import cn.com.qmth.stmms.biz.utils.ScoreInfo;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
-import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.enums.LockType;
 
 public class ScoreCalculateThread implements Runnable {
@@ -41,9 +40,9 @@ public class ScoreCalculateThread implements Runnable {
 
     private MarkService markService;
 
-    private ScoreRateService scoreRateService;
+    private MarkGroupService groupService;
 
-    private MarkLibraryService libraryService;
+    private ScoreRateService scoreRateService;
 
     private int examId;
 
@@ -59,15 +58,15 @@ public class ScoreCalculateThread implements Runnable {
 
     public ScoreCalculateThread(int examId, LockService lockService, ExamStudentService studentService,
             ExamQuestionService questionService, ExamSubjectService subjectService, ScoreRateService scoreRateService,
-            MarkLibraryService libraryService, MarkService markService) {
+            MarkService markService, MarkGroupService groupService) {
         this.examId = examId;
         this.lockService = lockService;
         this.studentService = studentService;
         this.questionService = questionService;
         this.subjectService = subjectService;
         this.scoreRateService = scoreRateService;
-        this.libraryService = libraryService;
         this.markService = markService;
+        this.groupService = groupService;
         this.objectiveMap = new HashMap<String, List<ExamQuestion>>();
         this.subjectiveMap = new HashMap<String, List<ExamQuestion>>();
         this.scoreRateMap = new HashMap<String, Double>();
@@ -90,12 +89,11 @@ public class ScoreCalculateThread implements Runnable {
                 pageNumber++;
                 list = studentService.findByExamIdAndUploadAndAbsent(examId, true, false, pageNumber, pageSize);
             }
+
             // 统计各科目下每题得分率,主观题评卷完成才统计
-            double total = libraryService.countByExamAndSubjectAndGroupAndStatus(examId, null, 0, null);
-            double finish = libraryService.countByExamAndSubjectAndGroupAndStatus(examId, null, 0,
-                    LibraryStatus.MARKED);
-            double percent = total > 0 ? (finish * 100 / total) : 0;
-            if (percent >= 100) {
+            double total = groupService.sumLibraryCount(examId);
+            double finish = groupService.sumMarkedCount(examId);
+            if (total == finish) {
                 statistics();
             }
         } catch (Exception e) {
@@ -147,46 +145,51 @@ public class ScoreCalculateThread implements Runnable {
     }
 
     private void calculate(ExamStudent student) {
-        ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
-        ScoreInfo info = util.calculate(findQuestionList(student.getSubjectCode(), true), null);
+        try {
+            ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
+            ScoreInfo info = util.calculate(findQuestionList(student.getSubjectCode(), true), null);
 
-        student.setObjectiveScore(info.getObjectiveScore());
-        student.setScoreList(info.getScoreList(), true);
+            student.setObjectiveScore(info.getObjectiveScore());
+            student.setScoreList(info.getScoreList(), true);
 
-        studentService.save(student);
-        // 增加主观题总分统计
-        markService.scoreCalculate(student.getExamId(), student.getSubjectCode(), student.getId());
+            studentService.save(student);
 
-        try {
-            if (!student.getScoreList(false).isEmpty()) {// 主观题有分数明细才统分
-                statistics(student);
-            }
+            // 增加主观题总分统计
+            markService.scoreCalculate(student.getExamId(), student.getSubjectCode(), student.getId());
+
+            // 主观题得分统计
+            // 需要重新从数据库读取一遍考生信息
+            statistics(studentService.findById(student.getId()));
         } catch (Exception e) {
             log.error("statistic error", e);
         }
     }
 
     private void statistics(ExamStudent student) {
-        Set<String> campusNames = campusNameMap.get(student.getSubjectCode());
-        if (campusNames == null || campusNames.isEmpty()) {
-            campusNames = new HashSet<>();
-            campusNames.add(student.getCampusName());
-        } else {
-            campusNames.add(student.getCampusName());
-        }
-        this.campusNameMap.put(student.getSubjectCode(), campusNames);
         List<ScoreItem> items = student.getScoreList(false);
+        if (items.isEmpty()) {
+            return;
+        }
         List<ExamQuestion> list = this.findQuestionList(student.getSubjectCode(), false);
-        for (int i = 0; i < list.size(); i++) {
-            ScoreItem scoreItem = items.get(i);
-            String key = getKey(student.getSubjectCode(), student.getCampusName(), list.get(i).getQuestionNumber());
-            Double totalScore = scoreRateMap.get(key);
-            if (totalScore == null) {
-                scoreRateMap.put(key, scoreItem.getScore());
-            } else {
-                scoreRateMap.put(key, totalScore + scoreItem.getScore());
+        int count = list.size();
+        for (int i = 0; i < count; i++) {
+            ScoreItem scoreItem = items.size() > i ? items.get(i) : null;
+            if (scoreItem != null) {
+                String key = getKey(student.getSubjectCode(), student.getCampusName(), list.get(i).getQuestionNumber());
+                Double totalScore = scoreRateMap.get(key);
+                if (totalScore == null) {
+                    scoreRateMap.put(key, scoreItem.getScore());
+                } else {
+                    scoreRateMap.put(key, totalScore + scoreItem.getScore());
+                }
             }
         }
+        Set<String> campusNames = campusNameMap.get(student.getSubjectCode());
+        if (campusNames == null) {
+            campusNames = new HashSet<>();
+            campusNameMap.put(student.getSubjectCode(), campusNames);
+        }
+        campusNames.add(student.getCampusName());
     }
 
     private String getKey(String subjectCode, String campusName, String questionNumber) {