Browse Source

修改科目统分线程,按单个科目上锁;去掉考试全局统分锁,去掉成绩查询页面的统分进度显示;成绩查询的统分改为考试所有科目尝试统分

luoshi 4 years ago
parent
commit
ef51f831ca

+ 0 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamDao.java

@@ -34,10 +34,6 @@ public interface ExamDao extends PagingAndSortingRepository<Exam, Integer>, JpaS
 
     List<Exam> findBySchoolIdAndStatusOrderByIdDesc(Integer schoolId, ExamStatus status);
 
-    @Modifying
-    @Query("update Exam e set e.process=?2 where e.id=?1")
-    public void updateProcess(Integer id, Double process);
-
     public Exam findFirstBySchoolIdAndCode(Integer schoolId, String code);
 
     @Query(value =

+ 4 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamSubjectDao.java

@@ -38,6 +38,10 @@ public interface ExamSubjectDao
     @Query("update ExamSubject s set s.needCalculate=?3 where s.pk.examId=?1 and s.pk.code=?2")
     public int updateNeedCalculate(int examId, String code, boolean needCalculate);
 
+    @Modifying
+    @Query("update ExamSubject s set s.calculateProgress=?3 where s.pk.examId=?1 and s.pk.code=?2")
+    public int updateCalculateProgress(Integer examId, String subjectCode, Double progress);
+
     @Modifying
     @Query("update ExamSubject s set s.totalScore=s.objectiveScore+s.subjectiveScore where s.pk.examId=?1")
     public void updateTotalScoreByExamId(int examId);

+ 0 - 14
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Exam.java

@@ -74,12 +74,6 @@ public class Exam implements Serializable {
     @Column(name = "excellent_score")
     private Double excellentScore;
 
-    /**
-     * 统分进度
-     */
-    @Column(name = "process")
-    private Double process;
-
     /**
      * 统计配置
      */
@@ -207,14 +201,6 @@ public class Exam implements Serializable {
         this.excellentScore = excellentScore;
     }
 
-    public Double getProcess() {
-        return process;
-    }
-
-    public void setProcess(Double process) {
-        this.process = process;
-    }
-
     public String getSasConfig() {
         return sasConfig;
     }

+ 14 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamSubject.java

@@ -56,6 +56,12 @@ public class ExamSubject implements Serializable {
     @Column(name = "need_calculate", nullable = false)
     private boolean needCalculate;
 
+    /**
+     * 是否需要统分
+     */
+    @Column(name = "calculate_progress", nullable = true)
+    private Double calculateProgress;
+
     /**
      * 裁切图配置
      */
@@ -238,4 +244,12 @@ public class ExamSubject implements Serializable {
     public List<PictureConfigItem> getSheetConfigList() {
         return PictureConfigItem.parse(sheetConfig);
     }
+
+    public Double getCalculateProgress() {
+        return calculateProgress;
+    }
+
+    public void setCalculateProgress(Double calculateProgress) {
+        this.calculateProgress = calculateProgress;
+    }
 }

+ 0 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamService.java

@@ -22,8 +22,6 @@ public interface ExamService {
 
     List<Exam> findBySchoolIdAndStatus(Integer schoolId);
 
-    void updateProcess(Integer examId, Double process);
-
     Exam findBySchoolAndCode(Integer schoolId, String code);
 
     List<Exam> findByUserId(Integer id, Date time);

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamSubjectService.java

@@ -37,6 +37,8 @@ public interface ExamSubjectService {
 
     boolean updateNeedCalculate(int examId, String code, boolean needCalculate);
 
+    boolean updateCalculateProgress(int examId, String code, Double progress);
+
     void updateUploadCount(Integer examId, String subjectCode, int count);
 
     void updateTotalScore(int examId);

+ 0 - 6
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamServiceImpl.java

@@ -117,12 +117,6 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
         return examDao.findBySchoolIdAndStatusOrderByIdDesc(schoolId, ExamStatus.START);
     }
 
-    @Transactional
-    @Override
-    public void updateProcess(Integer id, Double process) {
-        examDao.updateProcess(id, process);
-    }
-
     @Override
     public Exam findBySchoolAndCode(Integer schoolId, String code) {
         return examDao.findFirstBySchoolIdAndCode(schoolId, code);

+ 9 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamSubjectServiceImpl.java

@@ -112,6 +112,15 @@ public class ExamSubjectServiceImpl extends BaseQueryService<ExamSubject> implem
         return subjectDao.updateNeedCalculate(examId, code, needCalculate) > 0;
     }
 
+    @Transactional
+    @Override
+    // @CacheEvict(value = "exam_subject_cache", key =
+    // "T(String).valueOf(#subject.examId)+'-'+#subject.code", condition =
+    // "#subject!=null && #subject.examId!=null && #subject.code!=null")
+    public boolean updateCalculateProgress(int examId, String code, Double progress) {
+        return subjectDao.updateCalculateProgress(examId, code, progress) > 0;
+    }
+
     @Transactional
     @Override
     // @CacheEvict(value = "exam_subject_cache", beforeInvocation = true,

+ 1 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java

@@ -196,6 +196,7 @@ public class PaperController extends BaseExamController {
                 if (subject != null) {
                     // 每次导入都需要重新统分
                     subjectService.updateNeedCalculate(examId, subject.getCode(), true);
+                    subjectService.updateCalculateProgress(examId, subject.getCode(), null);
                     if (dto.validate(error)) {
                         if (objective) {
                             questionService.deleteByExamAndSubjectAndObjective(examId, dto.getSubjectCode(), objective);

+ 39 - 60
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -14,7 +14,6 @@ import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
 import cn.com.qmth.stmms.common.enums.Role;
@@ -36,7 +35,6 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.text.DecimalFormat;
 import java.util.*;
 
 @Controller
@@ -94,42 +92,36 @@ public class ScoreController extends BaseExamController {
     public ModelAndView list(HttpServletRequest request, ExamStudentSearchQuery query,
             @RequestParam(defaultValue = "0") Integer filter) {
         WebUser wu = RequestUtils.getWebUser(request);
-        List<Exam> examList = getExamList(wu);
-        if (query.getExamId() != null) {
-            query.setExamId(getSessionExamId(request));
-        }
         ModelAndView view = new ModelAndView("modules/exam/scoreList");
-        if (query.getExamId() != null) {
-            query.orderByExamNumber();
-            if (filter == 1) {
-                query.setObjectiveScore(0d);
-                query.setSubjectiveScoreGt(0d);
-            } else if (filter == 2) {
-                query.setObjectiveScoreGt(0d);
-                query.setSubjectiveScore(0d);
-            }
-            query = studentService.findByQuery(query);
-            for (ExamStudent student : query.getResult()) {
-                buildSheetUrl(student);
-                buildPackageUrl(student);
-                buildAnswerUrl(student);
-                student.setAnswerUrl(PictureUrlBuilder
-                        .getAnswerJson(student.getExamId(), student.getSubjectCode(), student.getPaperType(),
-                                student.getExamNumber()));
-            }
-            String exportMessage =
-                    query.getSubjectCode() != null ? enableExport(query.getExamId(), query.getSubjectCode()) : null;
-            if (exportMessage != null) {
-                view.addObject("exportMessage", exportMessage);
-                view.addObject("enableExport", false);
-            } else {
-                view.addObject("enableExport", true);
-            }
-            view.addObject("subjectList", getExamSubject(query.getExamId(), wu));
-            view.addObject("running", lockService.isLocked(LockType.SCORE_CALCULATE, query.getExamId()));
-            Exam exam = examService.findById(query.getExamId());
-            view.addObject("examType", exam.getType());
+        query.setExamId(getSessionExamId(request));
+        query.orderByExamNumber();
+        if (filter == 1) {
+            query.setObjectiveScore(0d);
+            query.setSubjectiveScoreGt(0d);
+        } else if (filter == 2) {
+            query.setObjectiveScoreGt(0d);
+            query.setSubjectiveScore(0d);
+        }
+        query = studentService.findByQuery(query);
+        for (ExamStudent student : query.getResult()) {
+            buildSheetUrl(student);
+            buildPackageUrl(student);
+            buildAnswerUrl(student);
+            student.setAnswerUrl(PictureUrlBuilder
+                    .getAnswerJson(student.getExamId(), student.getSubjectCode(), student.getPaperType(),
+                            student.getExamNumber()));
         }
+        String exportMessage =
+                query.getSubjectCode() != null ? enableExport(query.getExamId(), query.getSubjectCode()) : null;
+        if (exportMessage != null) {
+            view.addObject("exportMessage", exportMessage);
+            view.addObject("enableExport", false);
+        } else {
+            view.addObject("enableExport", true);
+        }
+        view.addObject("subjectList", getExamSubject(query.getExamId(), wu));
+        Exam exam = examService.findById(query.getExamId());
+        view.addObject("examType", exam.getType());
         view.addObject("query", query);
         view.addObject("filter", filter);
         view.addObject("imageServer", imageServer);
@@ -199,11 +191,15 @@ public class ScoreController extends BaseExamController {
     @Logging(menu = "重新统分", type = LogType.UPDATE)
     @RequestMapping("/calculate")
     @RoleRequire(Role.SCHOOL_ADMIN)
-    public ModelAndView calculate(HttpServletRequest request, @RequestParam Integer examId) {
-        if (lockService.trylock(LockType.SCORE_CALCULATE, examId)) {
-            ScoreCalculateThread thread = new ScoreCalculateThread(examId, getSubjectCodeSet(examId), lockService,
-                    studentService, questionService, markService, reportService, examService, subjectService,
-                    groupService);
+    public ModelAndView calculate(HttpServletRequest request, RedirectAttributes redirectAttributes) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        Exam exam = examService.findById(getSessionExamId(request));
+        if (exam == null || !exam.getSchoolId().equals(wu.getUser().getSchoolId())) {
+            addMessage(redirectAttributes, "请选择正确的考试");
+        } else {
+            ScoreCalculateThread thread = new ScoreCalculateThread(exam.getId(), getSubjectCodeSet(exam.getId()),
+                    lockService, studentService, questionService, markService, reportService, examService,
+                    subjectService, groupService);
             taskExecutor.submit(thread);
         }
         return new ModelAndView("redirect:/admin/exam/score");
@@ -297,9 +293,9 @@ public class ScoreController extends BaseExamController {
 
     @RequestMapping("/enableExport")
     @ResponseBody
-    public JSONObject query(HttpServletRequest request, @RequestParam Integer examId,
-            @RequestParam String subjectCode) {
+    public JSONObject query(HttpServletRequest request, @RequestParam String subjectCode) {
         JSONObject obj = new JSONObject();
+        int examId = getSessionExamId(request);
         String exportMessage = enableExport(examId, subjectCode);
         if (exportMessage != null) {
             obj.accumulate("enableExport", false);
@@ -310,23 +306,6 @@ public class ScoreController extends BaseExamController {
         return obj;
     }
 
-    @RequestMapping("/getProcess")
-    @ResponseBody
-    public JSONObject getProcess(HttpServletRequest request) {
-        int examId = getSessionExamId(request);
-        Exam exam = examService.findById(examId);
-        boolean running = lockService.isLocked(LockType.SCORE_CALCULATE, examId);
-        JSONObject obj = new JSONObject();
-        obj.accumulate("running", running);
-        if (exam.getProcess() != null) {
-            DecimalFormat format = new DecimalFormat("##.##");
-            obj.accumulate("process", format.format(exam.getProcess()));
-        } else {
-            obj.accumulate("process", 0);
-        }
-        return obj;
-    }
-
     private List<ScoreItem> buildScoreList(ExamStudent student) {
         List<ScoreItem> scoreList = new LinkedList<ScoreItem>();
 

+ 30 - 15
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

@@ -8,6 +8,7 @@ import cn.com.qmth.stmms.biz.report.service.ReportService;
 import cn.com.qmth.stmms.biz.report.utils.ReportContext;
 import cn.com.qmth.stmms.biz.utils.ScoreCalculateUtil;
 import cn.com.qmth.stmms.biz.utils.ScoreInfo;
+import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.LockType;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -71,17 +72,26 @@ public class ScoreCalculateThread implements Runnable {
 
     @Override
     public void run() {
+        // 获取考试信息并判断状态
+        Exam exam = examService.findById(examId);
+        if (exam == null || exam.getStatus() != ExamStatus.START) {
+            log.info("calculate exception for examId=" + examId + ", exam is null or status error");
+            return;
+        }
         log.info("start calculate for examId=" + examId + ", subjectCode count=" + subjectCodeSet.size());
-        try {
-            // 获取考试信息
-            Exam exam = examService.findById(examId);
-            for (String subjectCode : subjectCodeSet) {
+        for (String subjectCode : subjectCodeSet) {
+            // 尝试上锁,失败直接跳过
+            if (!lockService.trylock(LockType.SCORE_CALCULATE, examId, subjectCode)) {
+                log.warn("calculate locked for examId=" + examId + ", subjectCode=" + subjectCode);
+                continue;
+            }
+            try {
                 log.info("start calculate for examId=" + examId + ", subjectCode=" + subjectCode);
                 // 删除原有统计数据
                 reportService.deleteData(examId, subjectCode);
                 context = new ReportContext(exam);
+                long count = 0;
                 long totalCount = studentService.countByExamIdAndSubjectCode(examId, subjectCode);
-
                 int pageNumber = 1;
                 int pageSize = 1000;
                 List<ExamStudent> list = studentService
@@ -92,26 +102,31 @@ public class ScoreCalculateThread implements Runnable {
                         calculate(student);
                         // 后统计
                         statistic(student);
+                        // 累加计数
+                        count++;
                     }
-                    double process = pageSize * pageNumber * 100.0 / totalCount;
-                    if (process >= 100) {
-                        process = 99;
+                    // 修正进度百分比
+                    double progress = count * 100.0 / totalCount;
+                    if (progress == 100 && count < totalCount) {
+                        progress = 99;
+                    } else if (progress == 0 && count > 0) {
+                        progress = 1;
                     }
-                    examService.updateProcess(examId, process);
+                    // 更新进度百分比
+                    subjectService.updateCalculateProgress(examId, subjectCode, progress);
                     pageNumber++;
                     list = studentService.findByExamId(examId, pageNumber, pageSize);
                 }
+                // 结束统计
                 context.save();
                 // 统分结束修改标记
                 subjectService.updateNeedCalculate(examId, subjectCode, false);
-                examService.updateProcess(examId, null);
+            } catch (Exception e) {
+                log.error("calculate exception for examId=" + examId + ", subjectCode=" + subjectCode, e);
+            } finally {
+                lockService.unlock(LockType.SCORE_CALCULATE, examId, subjectCode);
                 log.info("finish calculate for examId=" + examId + ", subjectCode=" + subjectCode);
             }
-        } catch (Exception e) {
-            log.error("calculate exception for examId=" + examId, e);
-        } finally {
-            lockService.unlock(LockType.SCORE_CALCULATE, examId);
-            log.info("finish calculate for examId=" + examId);
         }
     }
 

+ 0 - 169
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/SubjectScoreCalculateThread.java

@@ -1,169 +0,0 @@
-package cn.com.qmth.stmms.admin.thread;
-
-import cn.com.qmth.stmms.biz.exam.model.*;
-import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
-import cn.com.qmth.stmms.biz.exam.service.*;
-import cn.com.qmth.stmms.biz.lock.LockService;
-import cn.com.qmth.stmms.biz.mark.service.MarkService;
-import cn.com.qmth.stmms.biz.report.service.ReportService;
-import cn.com.qmth.stmms.biz.report.utils.ReportContext;
-import cn.com.qmth.stmms.biz.utils.ScoreCalculateUtil;
-import cn.com.qmth.stmms.biz.utils.ScoreInfo;
-import cn.com.qmth.stmms.common.enums.LockType;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class SubjectScoreCalculateThread implements Runnable {
-
-    protected static Logger log = LoggerFactory.getLogger(SubjectScoreCalculateThread.class);
-
-    private ExamStudentService studentService;
-
-    private ExamQuestionService questionService;
-
-    private MarkService markService;
-
-    private int examId;
-
-    private String subjectCode;
-
-    private Map<String, List<ExamQuestion>> objectiveMap;
-
-    private Map<String, List<ExamQuestion>> subjectiveMap;
-
-    private Map<String, ExamSubject> subjectMap;
-
-    private Map<String, List<MarkGroup>> groupMap;
-
-    private MarkGroupService groupService;
-
-    private ExamSubjectService subjectService;
-
-    private ExamService examService;
-
-    public SubjectScoreCalculateThread(int examId, String subjectCode, ExamStudentService studentService,
-            ExamQuestionService questionService, MarkService markService, ExamService examService, ExamSubjectService subjectService,
-            MarkGroupService groupService) {
-        this.examId = examId;
-        this.subjectCode = subjectCode;
-        this.studentService = studentService;
-        this.questionService = questionService;
-        this.markService = markService;
-        this.examService = examService;
-        this.subjectService = subjectService;
-        this.groupService = groupService;
-        this.objectiveMap = new HashMap<String, List<ExamQuestion>>();
-        this.subjectiveMap = new HashMap<String, List<ExamQuestion>>();
-        this.subjectMap = new HashMap<String, ExamSubject>();
-        this.groupMap = new HashMap<String, List<MarkGroup>>();
-    }
-
-    @Override
-    public void run() {
-        //log.info("start calculate for examId=" + examId);
-        try {
-            // 获取考试信息
-            // Exam exam = examService.findById(examId);
-            // 删除原有统计数据
-            // reportService.deleteData(examId);
-            // context = new ReportContext(exam);
-            // long totalCount = studentService.countByExamId(examId);
-
-            ExamStudentSearchQuery query = new ExamStudentSearchQuery();
-            query.setPageNumber(1);
-            query.setPageSize(1000);
-            query.setExamId(examId);
-            query.setSubjectCode(subjectCode);
-            query.setUpload(true);
-            List<ExamStudent> list = studentService.findByQuery(query).getResult();
-            while (list != null && list.size() > 0) {
-                for (ExamStudent student : list) {
-                    // 先统分
-                    calculate(student);
-                    // 后统计
-                    // statistic(student);
-                }
-                //double process = pageSize * pageNumber * 100.0 / totalCount;
-                //if (process >= 100) {
-                //    process = 99;
-                //}
-                //examService.updateProcess(examId, process);
-                query.setPageNumber(query.getPageNumber() + 1);
-                list = studentService.findByQuery(query).getResult();
-            }
-            // context.save();
-            // 统分结束修改标记
-            // examService.updateNeedCalculate(examId, false);
-            // examService.updateProcess(examId, null);
-        } catch (Exception e) {
-            //log.error("calculate exception for examId=" + examId, e);
-        } finally {
-            //lockService.unlock(LockType.SCORE_CALCULATE, examId);
-            //log.info("finish calculate for examId=" + examId);
-        }
-    }
-
-    private void calculate(ExamStudent student) {
-        // 未上传、缺考、违纪的考生不统分
-        if (!student.isUpload() || student.isAbsent() || student.isBreach()) {
-            return;
-        }
-        try {
-            ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
-            ScoreInfo info = util.calculate(findQuestionList(student.getSubjectCode(), student.getPaperType(), true), null);
-
-            student.setObjectiveScore(info.getObjectiveScore());
-            student.setScoreList(info.getScoreList(), true);
-
-            studentService.save(student);
-
-            // 增加主观题总分统计
-            markService.scoreCalculate(student, findMarkGroup(student.getSubjectCode()));
-
-        } catch (Exception e) {
-            log.error("calculate error for studentId=" + student.getId(), e);
-        }
-    }
-
-    private List<ExamQuestion> findQuestionList(String subjectCode, String paperType, boolean objective) {
-        if (objective) {
-            String key = subjectCode + "_" + StringUtils.trimToEmpty(paperType);
-            List<ExamQuestion> list = objectiveMap.get(key);
-            if (list == null) {
-                list = questionService.findByExamAndSubjectAndObjectiveAndPaperType(examId, subjectCode, true, paperType);
-                objectiveMap.put(key, list);
-            }
-            return list;
-        } else {
-            List<ExamQuestion> list = subjectiveMap.get(subjectCode);
-            if (list == null) {
-                list = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, false);
-                subjectiveMap.put(subjectCode, list);
-            }
-            return list;
-        }
-    }
-
-    private ExamSubject findExamSubject(String subjectCode) {
-        ExamSubject subject = subjectMap.get(subjectCode);
-        if (subject == null) {
-            subject = subjectService.find(examId, subjectCode);
-            subjectMap.put(subjectCode, subject);
-        }
-        return subject;
-    }
-
-    private List<MarkGroup> findMarkGroup(String subjectCode) {
-        List<MarkGroup> list = groupMap.get(subjectCode);
-        if (list == null) {
-            list = groupService.findByExamAndSubject(examId, subjectCode);
-            groupMap.put(subjectCode, list);
-        }
-        return list;
-    }
-}

+ 0 - 59
stmms-web/src/main/java/cn/com/qmth/stmms/monitor/ScoreMonitorController.java

@@ -1,59 +0,0 @@
-package cn.com.qmth.stmms.monitor;
-
-import cn.com.qmth.stmms.admin.thread.ScoreCalculateThread;
-import cn.com.qmth.stmms.admin.thread.SubjectScoreCalculateThread;
-import cn.com.qmth.stmms.biz.exam.service.*;
-import cn.com.qmth.stmms.biz.mark.service.MarkService;
-import cn.com.qmth.stmms.biz.utils.FormalTaskUtil;
-import cn.com.qmth.stmms.biz.utils.TaskEntry;
-import cn.com.qmth.stmms.common.utils.DateUtils;
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.core.task.AsyncTaskExecutor;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
-import java.util.Set;
-
-@Controller("scoreMonitor")
-@RequestMapping("/monitor/score")
-public class ScoreMonitorController {
-
-    @Autowired
-    private ExamSubjectService subjectService;
-
-    @Autowired
-    private ExamStudentService studentService;
-
-    @Autowired
-    private ExamQuestionService questionService;
-
-    @Autowired
-    private MarkService markService;
-
-    @Autowired
-    private ExamService examService;
-
-    @Autowired
-    private MarkGroupService groupService;
-
-    @Qualifier("task-executor")
-    @Autowired
-    private AsyncTaskExecutor taskExecutor;
-
-    @RequestMapping("/calculate")
-    @ResponseBody
-    public Object list(HttpServletRequest request, @RequestParam Integer examId, @RequestParam String subjectCode) {
-        SubjectScoreCalculateThread thread = new SubjectScoreCalculateThread(examId, subjectCode, studentService, questionService,
-                markService, examService, subjectService, groupService);
-        taskExecutor.submit(thread);
-        return true;
-    }
-
-}

+ 10 - 60
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreList.jsp

@@ -15,27 +15,19 @@
     <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
     <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
     <div>
-        <label>考试</label>
-        <select class="input-large" name="examId" id="exam-select">
-            <c:forEach items="${examList}" var="exam">
-                <option value="${exam.id}" <c:if test="${exam.id==query.examId}">selected</c:if>>${exam.id}-${exam.name}</option>
-            </c:forEach>
-        </select>
-        <label>科目</label>
-        <select class="input-large" name="subjectCode" id="subject-select">
-            <c:if test="${subjectList}">
-                <option value="">请选择</option>
-                <c:forEach items="${subjectList}" var="subject">
-                    <option value="${subject.code}" <c:if test="${subject.code==query.subjectCode}">selected</c:if>>${subject.code}-${subject.name}</option>
-                </c:forEach>
-            </c:if>
-        </select>
         <label>姓名</label>
         <input type="text" name="name" value="${query.name}" maxlength="10" class="input-mini"/>
         <label>准考证号</label>
         <input type="text" name="examNumber" value="${query.examNumber}" maxlength="50" class="input-small"/>
         <label>学号</label>
         <input type="text" name="studentCode" value="${query.studentCode}" maxlength="30" class="input-small"/>
+        <label>科目</label>
+        <select class="input-large" name="subjectCode" id="subject-select">
+            <option value="">请选择</option>
+            <c:forEach items="${subjectList}" var="subject">
+                <option value="${subject.code}" <c:if test="${subject.code==query.subjectCode}">selected</c:if>>${subject.code}-${subject.name}</option>
+            </c:forEach>
+        </select>
         <label>筛选</label>
         <select class="input-medium" name="filter">
             <option value="0">无</option>
@@ -78,16 +70,10 @@
         &nbsp;
         <c:if test="${!web_user.schoolViewer }">
             <input id="export-button" class="btn" type="button" value="导出" onclick="goExport()"
-                   <c:if test="${!enableExport}">disabled="ture"</c:if> title="${exportMessage}"/>
+                   <c:if test="${!enableExport}">disabled</c:if> title="${exportMessage}"/>
         </c:if>
         <c:if test="${web_user.schoolAdmin}">
-            &nbsp;
-            <c:if test="${running==false}">
-                <a href="${ctx}/admin/exam/score/calculate?examId=${query.examId}" class="btn">重新统分</a>
-            </c:if>
-            <c:if test="${running==true}">
-                <a href="javascript:void(0)" class="btn" id="exam-process" disabled>正在统分</a>
-            </c:if>
+            <a href="${ctx}/admin/exam/score/calculate" class="btn">重新统分</a>
         </c:if>
     </div>
 </form>
@@ -224,22 +210,9 @@
             initImagePopover($(this).attr('data-title'), '${packageServer}', $(this).attr('data-image-url'));
             return false;
         });
-        $('#exam-select').change(function () {
-            let examId = $('#exam-select').val();
-            $('#subject-select').empty();
-            $('#subject-select').append('<option value="">请选择</option>');
-            $.post('${ctx}/admin/exam/subject/list', {examId: examId}, function (list) {
-                for (let i = 0; i < list.length; i++) {
-                    let item = list.get(i);
-                    $('#subject-select').append('<option value="' + item.code + '">' + item.code + '-' + item.name + '</option>');
-                }
-                $('#subject-select').trigger('change');
-            });
-        })
         $('#subject-select').change(function () {
-            let examId = $('#exam-select').val();
             let subjectCode = $('#subject-select').val();
-            $.post('${ctx}/admin/exam/score/enableExport', {examId: examId, subjectCode: subjectCode}, function (result) {
+            $.post('${ctx}/admin/exam/score/enableExport', {subjectCode: subjectCode}, function (result) {
                 if (result.enableExport) {
                     $("#export-button").removeAttr("disabled");
                     $("#export-button").removeAttr("title");
@@ -249,12 +222,6 @@
                 }
             });
         });
-        var running = "${running}";
-        if (running == 'true') {
-            var timer = setInterval(function () {
-                getExamProcess(timer)
-            }, 5000);
-        }
     });
 
     function page(n, s) {
@@ -298,23 +265,6 @@
         $("#searchForm").submit();
     }
 
-    function getExamProcess(timer) {
-        var running = "${running}";
-        if (running == 'true') {
-            $.post('${ctx}/admin/exam/score/getProcess', function (result) {
-                if (result.running) {
-                    $("#exam-process").html("正在统分: " + result.process + "%");
-                } else {
-                    window.clearInterval(timer);
-                    window.location.reload();
-                }
-            });
-        } else {
-            window.clearInterval(timer);
-            window.location.reload();
-        }
-
-    }
 
 </script>
 </body>