浏览代码

SelectiveGroupController.edit将studentList的获取动作挪到thread内部

xiatian 1 年之前
父节点
当前提交
149c1469a0

+ 6 - 8
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/SelectiveGroupController.java

@@ -9,9 +9,6 @@ import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
-
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -45,7 +42,8 @@ import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.ScorePolicy;
-import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
 
 @Controller("selectiveGroupController")
 @RequestMapping("/admin/exam/selectiveGroup")
@@ -254,10 +252,10 @@ public class SelectiveGroupController extends BaseExamController {
             return "redirect:/admin/exam/selectiveGroup?subjectCode=" + subjectCode;
         }
         selectiveGroupService.updateScorePolicy(examId, subjectCode, selectiveIndex, ScorePolicy.findByValue(policy));
-        List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(examId, subjectCode,
-                SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
-        SubjectiveCalculateThread thread = new SubjectiveCalculateThread(examId, subjectCode, studentList, markService,
-                lockService, questionService, groupService, markerService, inspectedService);
+//        List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(examId, subjectCode,
+//                SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
+        SubjectiveCalculateThread thread = new SubjectiveCalculateThread(examId, subjectCode, markService,
+                lockService, questionService, groupService, markerService, inspectedService,studentService);
         taskExecutor.submit(thread);
         return "redirect:/admin/exam/selectiveGroup?subjectCode=" + subjectCode;
     }

+ 12 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/SubjectiveCalculateThread.java

@@ -1,17 +1,20 @@
 package cn.com.qmth.stmms.admin.thread;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 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.InspectedService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.common.enums.LockType;
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 
 public class SubjectiveCalculateThread implements Runnable {
 
@@ -33,11 +36,11 @@ public class SubjectiveCalculateThread implements Runnable {
 
     private String subjectCode;
 
-    private List<Integer> studentList;
+    private ExamStudentService studentService;
 
-    public SubjectiveCalculateThread(Integer examId, String subjectCode, List<Integer> studentList,
+    public SubjectiveCalculateThread(Integer examId, String subjectCode,
             MarkService markService, LockService lockService, ExamQuestionService questionService,
-            MarkGroupService groupService, MarkerService markerService, InspectedService inspectedService) {
+            MarkGroupService groupService, MarkerService markerService, InspectedService inspectedService,ExamStudentService studentService) {
         this.markService = markService;
         this.lockService = lockService;
         this.questionService = questionService;
@@ -46,11 +49,12 @@ public class SubjectiveCalculateThread implements Runnable {
         this.inspectedService = inspectedService;
         this.examId = examId;
         this.subjectCode = subjectCode;
-        this.studentList = studentList;
+        this.studentService = studentService;
     }
 
     @Override
     public void run() {
+    	List<Integer> lockedStudentList=new ArrayList<>();
         try {
             lockService.waitlock(LockType.SCORE_CALCULATE, examId, subjectCode);
             lockService.waitlock(LockType.EXAM_SUBJECT, examId, subjectCode);
@@ -61,15 +65,18 @@ public class SubjectiveCalculateThread implements Runnable {
                     subjectCode, false);
             // 考生整体状态与总分更新
             long groupCount = groupService.countByExamAndSubject(examId, subjectCode);
+            List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(examId, subjectCode,
+                    SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
             for (Integer studentId : studentList) {
                 lockService.waitlock(LockType.STUDENT, studentId);
+                lockedStudentList.add(studentId);
                 markService.checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
             }
             inspectedService.cancelBySubject(examId, subjectCode);
         } catch (Exception e) {
             log.error("SubjectiveCalculateThread error", e);
         } finally {
-            for (Integer studentId : studentList) {
+        	for (Integer studentId : lockedStudentList) {
                 lockService.unlock(LockType.STUDENT, studentId);
             }
             lockService.unlock(LockType.EXAM_SUBJECT, examId, subjectCode);