yin před 1 rokem
rodič
revize
333ae06fcf

+ 9 - 7
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamSubjectDao.java

@@ -1,18 +1,18 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 package cn.com.qmth.stmms.biz.exam.dao;
 
 
-import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
-import cn.com.qmth.stmms.biz.exam.model.ExamSubjectPK;
+import java.util.List;
+import java.util.Set;
 
 
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 
-import java.util.List;
-import java.util.Set;
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.ExamSubjectPK;
 
 
-public interface ExamSubjectDao extends PagingAndSortingRepository<ExamSubject, ExamSubjectPK>,
-        JpaSpecificationExecutor<ExamSubject> {
+public interface ExamSubjectDao
+        extends PagingAndSortingRepository<ExamSubject, ExamSubjectPK>, JpaSpecificationExecutor<ExamSubject> {
 
 
     @Query("select s from ExamSubject s where s.pk.examId=?1")
     @Query("select s from ExamSubject s where s.pk.examId=?1")
     public List<ExamSubject> findByExamId(int examId);
     public List<ExamSubject> findByExamId(int examId);
@@ -83,6 +83,8 @@ public interface ExamSubjectDao extends PagingAndSortingRepository<ExamSubject,
 
 
     @Modifying
     @Modifying
     @Query("update ExamSubject s set s.inspectRound=1 where s.pk.examId=?1 and s.pk.code=?2")
     @Query("update ExamSubject s set s.inspectRound=1 where s.pk.examId=?1 and s.pk.code=?2")
-	public void resetInspect(int examId, String subjectCode);
+    public void resetInspect(int examId, String subjectCode);
 
 
+    @Query("select s from ExamSubject s where s.pk.examId=?1 and s.objectiveScore>?2")
+    List<ExamSubject> listObjectiveScore(Integer examId, double objectiveScoreGt);
 }
 }

+ 5 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamSubjectService.java

@@ -1,13 +1,13 @@
 package cn.com.qmth.stmms.biz.exam.service;
 package cn.com.qmth.stmms.biz.exam.service;
 
 
+import java.util.List;
+import java.util.Set;
+
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 
 
-import java.util.List;
-import java.util.Set;
-
 public interface ExamSubjectService {
 public interface ExamSubjectService {
 
 
     ExamSubject save(ExamSubject subject);
     ExamSubject save(ExamSubject subject);
@@ -56,6 +56,7 @@ public interface ExamSubjectService {
 
 
     List<Double> distinctTotalScore(int examId);
     List<Double> distinctTotalScore(int examId);
 
 
-	void resetInspect(int examId, String subjectCode);
+    void resetInspect(int examId, String subjectCode);
 
 
+    List<ExamSubject> listObjectiveScore(Integer examId, double objectiveScoreGt);
 }
 }

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

@@ -211,8 +211,8 @@ public class ExamSubjectServiceImpl extends BaseQueryService<ExamSubject> implem
                         predicates.add(cb.and(sub));
                         predicates.add(cb.and(sub));
                     }
                     }
                 }
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ? cb.conjunction()
+                        : cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
             }
         };
         };
     }
     }
@@ -255,7 +255,7 @@ public class ExamSubjectServiceImpl extends BaseQueryService<ExamSubject> implem
     @Override
     @Override
     public void nextInspectRound(int examId, String subjectCode) {
     public void nextInspectRound(int examId, String subjectCode) {
         subjectDao.nextInspectRound(examId, subjectCode);
         subjectDao.nextInspectRound(examId, subjectCode);
-        examStudentDao.cancelInspect(examId, subjectCode,false,true);
+        examStudentDao.cancelInspect(examId, subjectCode, false, true);
     }
     }
 
 
     @Transactional
     @Transactional
@@ -322,9 +322,14 @@ public class ExamSubjectServiceImpl extends BaseQueryService<ExamSubject> implem
     }
     }
 
 
     @Transactional
     @Transactional
-	@Override
-	public void resetInspect(int examId, String subjectCode) {
-		subjectDao.resetInspect(examId,subjectCode);
-	}
+    @Override
+    public void resetInspect(int examId, String subjectCode) {
+        subjectDao.resetInspect(examId, subjectCode);
+    }
+
+    @Override
+    public List<ExamSubject> listObjectiveScore(Integer examId, double objectiveScoreGt) {
+        return subjectDao.listObjectiveScore(examId, objectiveScoreGt);
+    }
 
 
 }
 }

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

@@ -15,4 +15,7 @@ public interface ReportService {
     void deleteData(Integer examId, String subjectCode);
     void deleteData(Integer examId, String subjectCode);
 
 
     void reportExam(Integer examId, Set<String> subjectCodeSet);
     void reportExam(Integer examId, Set<String> subjectCodeSet);
+
+    void reportExamObjective(Integer examId, Set<String> subjectCodeSet);
+
 }
 }

+ 86 - 55
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/report/service/impl/ReportServiceImpl.java

@@ -4,15 +4,7 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
+import java.util.*;
 
 
 import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
@@ -21,6 +13,8 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
+import com.qmth.boot.tools.codec.CodecUtils;
+
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 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.ExamStudent;
@@ -32,31 +26,17 @@ import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.file.enums.FormatType;
 import cn.com.qmth.stmms.biz.file.enums.FormatType;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.lock.LockService;
-import cn.com.qmth.stmms.biz.report.model.ReportSubject;
-import cn.com.qmth.stmms.biz.report.model.ReportSubjectClass;
-import cn.com.qmth.stmms.biz.report.model.ReportSubjectCollege;
-import cn.com.qmth.stmms.biz.report.model.ReportSubjectGroup;
-import cn.com.qmth.stmms.biz.report.model.ReportSubjectQuestion;
-import cn.com.qmth.stmms.biz.report.model.ReportSubjectTeacher;
+import cn.com.qmth.stmms.biz.report.model.*;
 import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
 import cn.com.qmth.stmms.biz.report.query.ReportSubjectQuery;
-import cn.com.qmth.stmms.biz.report.service.ReportService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectClassGroupService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectClassService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectCollegeService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectGroupService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectQuestionService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectRangeService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherClassService;
-import cn.com.qmth.stmms.biz.report.service.ReportSubjectTeacherService;
+import cn.com.qmth.stmms.biz.report.service.*;
 import cn.com.qmth.stmms.biz.report.utils.ReportContext;
 import cn.com.qmth.stmms.biz.report.utils.ReportContext;
 import cn.com.qmth.stmms.biz.report.utils.ReportSubjectRangeDTO;
 import cn.com.qmth.stmms.biz.report.utils.ReportSubjectRangeDTO;
 import cn.com.qmth.stmms.biz.utils.ExportExcel;
 import cn.com.qmth.stmms.biz.utils.ExportExcel;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
-
-import com.qmth.boot.tools.codec.CodecUtils;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
 
 
 @Component
 @Component
 public class ReportServiceImpl implements ReportService {
 public class ReportServiceImpl implements ReportService {
@@ -152,25 +132,15 @@ public class ReportServiceImpl implements ReportService {
      */
      */
     @Override
     @Override
     public void deleteData(Integer examId, String subjectCode) {
     public void deleteData(Integer examId, String subjectCode) {
-
         reportSubjectService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
         reportSubjectRangeService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectRangeService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
         reportSubjectCollegeService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectCollegeService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
         reportSubjectTeacherService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectTeacherService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
         reportSubjectTeacherClassService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectTeacherClassService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
         reportSubjectClassService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectClassService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
         reportSubjectQuestionService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectQuestionService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
         reportSubjectGroupService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectGroupService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
         reportSubjectClassGroupService.deleteByExamIdAndSubjectCode(examId, subjectCode);
         reportSubjectClassGroupService.deleteByExamIdAndSubjectCode(examId, subjectCode);
-
     }
     }
 
 
     @Override
     @Override
@@ -236,15 +206,76 @@ public class ReportServiceImpl implements ReportService {
         lockService.unlock(LockType.SCORE_CALCULATE, examId);
         lockService.unlock(LockType.SCORE_CALCULATE, examId);
     }
     }
 
 
+    @Override
+    public void reportExamObjective(Integer examId, Set<String> subjectCodeSet) {
+        objectiveMap = new HashMap<String, List<ExamQuestion>>();
+        subjectMap = new HashMap<String, ExamSubject>();
+        Exam exam = examService.findById(examId);
+        if (exam == null || exam.getStatus() != ExamStatus.START) {
+            // log.info("report exception for examId=" + examId +
+            // ", exam is null or status error");
+            return;
+        }
+        if (!lockService.trylock(LockType.SCORE_CALCULATE, examId)) {
+            return;
+        }
+        if (subjectCodeSet == null) {
+            subjectCodeSet = new HashSet<String>();
+            List<ExamSubject> list = subjectService.listObjectiveScore(exam.getId(), 0d);
+            for (ExamSubject subject : list) {
+                if (!lockService.isLocked(LockType.SCORE_CALCULATE, subject.getExamId(), subject.getCode())) {
+                    subjectCodeSet.add(subject.getCode());
+                }
+            }
+        }
+        log.info("start report Objective for examId=" + examId + ", subjectCode count=" + subjectCodeSet.size());
+
+        for (String subjectCode : subjectCodeSet) {
+            // 尝试上锁,失败直接跳过
+            if (!lockService.trylock(LockType.SCORE_CALCULATE, examId, subjectCode)) {
+                log.warn("report locked for examId=" + examId + ", subjectCode=" + subjectCode);
+                continue;
+            }
+            try {
+                log.info("start report for examId=" + examId + ", subjectCode=" + subjectCode);
+                // 删除原有统计数据
+                // this.deleteObjectiveData(examId, subjectCode);
+                context = new ReportContext(exam);
+                int pageNumber = 1;
+                int pageSize = 1000;
+                List<ExamStudent> list = studentService.findByExamIdAndSubjectCode(examId, subjectCode, pageNumber,
+                        pageSize);
+                while (list != null && list.size() > 0) {
+                    for (ExamStudent student : list) {
+                        // 统计
+                        statistic(student);
+                    }
+                    pageNumber++;
+                    list = studentService.findByExamIdAndSubjectCode(examId, subjectCode, pageNumber, pageSize);
+                }
+                // 结束统计
+                context.save();
+                // 生成文件
+                reoprtExcel(examId, subjectCode);
+            } catch (Exception e) {
+                log.error("report exception for examId=" + examId + ", subjectCode=" + subjectCode, e);
+            } finally {
+                lockService.unlock(LockType.SCORE_CALCULATE, examId, subjectCode);
+                log.info("finish report for examId=" + examId + ", subjectCode=" + subjectCode);
+            }
+        }
+        lockService.unlock(LockType.SCORE_CALCULATE, examId);
+    }
+
     private void statistic(ExamStudent student) {
     private void statistic(ExamStudent student) {
         ExamSubject subject = findExamSubject(student.getExamId(), student.getSubjectCode());
         ExamSubject subject = findExamSubject(student.getExamId(), student.getSubjectCode());
         if (SubjectiveStatus.MARKED.equals(student.getSubjectiveStatus())
         if (SubjectiveStatus.MARKED.equals(student.getSubjectiveStatus())
                 || (subject.getSubjectiveScore().doubleValue() == 0 && subject.getObjectiveScore() > 0)) {
                 || (subject.getSubjectiveScore().doubleValue() == 0 && subject.getObjectiveScore() > 0)) {
             student.setSubject(subject);
             student.setSubject(subject);
-            student.setObjectiveQuestionList(findQuestionList(student.getExamId(), student.getSubjectCode(),
-                    student.getPaperType(), true));
-            student.setSubjectiveQuestionList(findQuestionList(student.getExamId(), student.getSubjectCode(),
-                    student.getPaperType(), false));
+            student.setObjectiveQuestionList(
+                    findQuestionList(student.getExamId(), student.getSubjectCode(), student.getPaperType(), true));
+            student.setSubjectiveQuestionList(
+                    findQuestionList(student.getExamId(), student.getSubjectCode(), student.getPaperType(), false));
             context.process(student);
             context.process(student);
         }
         }
     }
     }
@@ -288,8 +319,8 @@ public class ReportServiceImpl implements ReportService {
         uploadGroup(examId, subjectCode, findExamSubject(examId, subjectCode).getName(), "分组统计分析");
         uploadGroup(examId, subjectCode, findExamSubject(examId, subjectCode).getName(), "分组统计分析");
     }
     }
 
 
-    private void uploadGroup(int examId, String subjectCode, String subjectName, String name) throws IOException,
-            Exception {
+    private void uploadGroup(int examId, String subjectCode, String subjectName, String name)
+            throws IOException, Exception {
         ReportSubjectQuery query = new ReportSubjectQuery();
         ReportSubjectQuery query = new ReportSubjectQuery();
         query.setExamId(examId);
         query.setExamId(examId);
         query.setSubjectCode(subjectCode);
         query.setSubjectCode(subjectCode);
@@ -335,8 +366,8 @@ public class ReportServiceImpl implements ReportService {
                 FormatType.XLSX);
                 FormatType.XLSX);
     }
     }
 
 
-    private void uploadTeacher(int examId, String subjectCode, String subjectName, String name) throws IOException,
-            Exception {
+    private void uploadTeacher(int examId, String subjectCode, String subjectName, String name)
+            throws IOException, Exception {
         ReportSubjectQuery query = new ReportSubjectQuery();
         ReportSubjectQuery query = new ReportSubjectQuery();
         query.setExamId(examId);
         query.setExamId(examId);
         query.setSubjectCode(subjectCode);
         query.setSubjectCode(subjectCode);
@@ -347,8 +378,8 @@ public class ReportServiceImpl implements ReportService {
             r.setAvgScore(new BigDecimal(r.getAvgScore()).setScale(2, RoundingMode.HALF_UP).doubleValue());
             r.setAvgScore(new BigDecimal(r.getAvgScore()).setScale(2, RoundingMode.HALF_UP).doubleValue());
             r.setExcellentRate(new BigDecimal(r.getExcellentRate()).setScale(2, RoundingMode.HALF_UP).doubleValue());
             r.setExcellentRate(new BigDecimal(r.getExcellentRate()).setScale(2, RoundingMode.HALF_UP).doubleValue());
             r.setPassRate(new BigDecimal(r.getPassRate()).setScale(2, RoundingMode.HALF_UP).doubleValue());
             r.setPassRate(new BigDecimal(r.getPassRate()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-            r.setRelativeAvgScore(new BigDecimal(r.getRelativeAvgScore()).setScale(2, RoundingMode.HALF_UP)
-                    .doubleValue());
+            r.setRelativeAvgScore(
+                    new BigDecimal(r.getRelativeAvgScore()).setScale(2, RoundingMode.HALF_UP).doubleValue());
         }
         }
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         new ExportExcel(name, ReportSubjectTeacher.class).setDataList(list).write(os);
         new ExportExcel(name, ReportSubjectTeacher.class).setDataList(list).write(os);
@@ -359,8 +390,8 @@ public class ReportServiceImpl implements ReportService {
                 FormatType.XLSX);
                 FormatType.XLSX);
     }
     }
 
 
-    private void uploadClass(int examId, String subjectCode, String subjectName, String name) throws IOException,
-            Exception {
+    private void uploadClass(int examId, String subjectCode, String subjectName, String name)
+            throws IOException, Exception {
         ReportSubjectQuery query = new ReportSubjectQuery();
         ReportSubjectQuery query = new ReportSubjectQuery();
         query.setExamId(examId);
         query.setExamId(examId);
         query.setSubjectCode(subjectCode);
         query.setSubjectCode(subjectCode);
@@ -381,8 +412,8 @@ public class ReportServiceImpl implements ReportService {
                 FormatType.XLSX);
                 FormatType.XLSX);
     }
     }
 
 
-    private void uploadCollege(int examId, String subjectCode, String subjectName, String name) throws IOException,
-            Exception {
+    private void uploadCollege(int examId, String subjectCode, String subjectName, String name)
+            throws IOException, Exception {
         ReportSubjectQuery query = new ReportSubjectQuery();
         ReportSubjectQuery query = new ReportSubjectQuery();
         query.setExamId(examId);
         query.setExamId(examId);
         query.setSubjectCode(subjectCode);
         query.setSubjectCode(subjectCode);
@@ -403,13 +434,13 @@ public class ReportServiceImpl implements ReportService {
                 FormatType.XLSX);
                 FormatType.XLSX);
     }
     }
 
 
-    private void uploadRange(int examId, String subjectCode, String subjectName, String name) throws IOException,
-            Exception {
+    private void uploadRange(int examId, String subjectCode, String subjectName, String name)
+            throws IOException, Exception {
         List<ReportSubjectRangeDTO> list = new ArrayList<ReportSubjectRangeDTO>();
         List<ReportSubjectRangeDTO> list = new ArrayList<ReportSubjectRangeDTO>();
         ReportSubject subject = reportSubjectService.findOne(examId, subjectCode);
         ReportSubject subject = reportSubjectService.findOne(examId, subjectCode);
         if (subject != null) {
         if (subject != null) {
-            JSONArray array = getScoreRange(subject.getScoreRange(), subject.getTotalScore(),
-                    subject.getRealityCount(), 10);
+            JSONArray array = getScoreRange(subject.getScoreRange(), subject.getTotalScore(), subject.getRealityCount(),
+                    10);
             for (int i = 0; i < array.size(); i++) {
             for (int i = 0; i < array.size(); i++) {
                 JSONObject jsonObject = array.getJSONObject(i);
                 JSONObject jsonObject = array.getJSONObject(i);
                 Integer score = jsonObject.getInt("score");
                 Integer score = jsonObject.getInt("score");

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

@@ -32,6 +32,7 @@ import cn.com.qmth.stmms.admin.dto.SubjectQuestionDTO;
 import cn.com.qmth.stmms.admin.dto.SubjectiveQuestionDTO;
 import cn.com.qmth.stmms.admin.dto.SubjectiveQuestionDTO;
 import cn.com.qmth.stmms.admin.thread.QuestionDeleteThread;
 import cn.com.qmth.stmms.admin.thread.QuestionDeleteThread;
 import cn.com.qmth.stmms.admin.thread.ScoreCalculateThread;
 import cn.com.qmth.stmms.admin.thread.ScoreCalculateThread;
+import cn.com.qmth.stmms.admin.thread.ScoreReportObjectiveThread;
 import cn.com.qmth.stmms.admin.thread.ScoreReportThread;
 import cn.com.qmth.stmms.admin.thread.ScoreReportThread;
 import cn.com.qmth.stmms.admin.vo.StructFile;
 import cn.com.qmth.stmms.admin.vo.StructFile;
 import cn.com.qmth.stmms.admin.vo.StructQuestion;
 import cn.com.qmth.stmms.admin.vo.StructQuestion;
@@ -554,7 +555,7 @@ public class PaperController extends BaseExamController {
         ExamQuestion newQ = questionService.findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
         ExamQuestion newQ = questionService.findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
                 question.getSubjectCode(), question.isObjective(), question.getMainNumber(), question.getSubNumber());
                 question.getSubjectCode(), question.isObjective(), question.getMainNumber(), question.getSubNumber());
         if (!old.isObjective() && !enableUpdate) {// 只能修改大题昵称的主观题
         if (!old.isObjective() && !enableUpdate) {// 只能修改大题昵称的主观题
-            questionService.updateMainName(id,question.getName());
+            questionService.updateMainName(id, question.getName());
             return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
             return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
                     + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory()
                     + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory()
                     + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
                     + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
@@ -727,6 +728,34 @@ public class PaperController extends BaseExamController {
         return new ModelAndView("redirect:/admin/exam/paper");
         return new ModelAndView("redirect:/admin/exam/paper");
     }
     }
 
 
+    @Logging(menu = "客观题分析计算", type = LogType.UPDATE)
+    @RequestMapping("/report/objective")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public ModelAndView reportObjective(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 {
+            Set<String> subjectSet = new HashSet<String>();
+            // 整个考试加锁
+            boolean examLock = true;
+            List<ExamSubject> list = subjectService.list(exam.getId());
+            for (ExamSubject subject : list) {
+                if (!lockService.isLocked(LockType.SCORE_CALCULATE, subject.getExamId(), subject.getCode())) {
+                    subjectSet.add(subject.getCode());
+                }
+            }
+            if (!subjectSet.isEmpty()) {
+                Map<Integer, Set<String>> map = new HashMap<Integer, Set<String>>();
+                map.put(exam.getId(), subjectSet);
+                ScoreReportObjectiveThread thread = new ScoreReportObjectiveThread(map, reportService, examLock);
+                taskExecutor.submit(thread);
+            }
+        }
+        return new ModelAndView("redirect:/admin/exam/paper");
+    }
+
     @RequestMapping("/question/query")
     @RequestMapping("/question/query")
     @ResponseBody
     @ResponseBody
     public JSONArray questionQuery(HttpServletRequest request, @RequestParam String subjectCode) {
     public JSONArray questionQuery(HttpServletRequest request, @RequestParam String subjectCode) {

+ 38 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreReportObjectiveThread.java

@@ -0,0 +1,38 @@
+package cn.com.qmth.stmms.admin.thread;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import cn.com.qmth.stmms.biz.report.service.ReportService;
+
+public class ScoreReportObjectiveThread implements Runnable {
+
+    protected static Logger log = LoggerFactory.getLogger(ScoreReportObjectiveThread.class);
+
+    private Map<Integer, Set<String>> exams;
+
+    private ReportService reportService;
+
+    private boolean examLock;
+
+    public ScoreReportObjectiveThread(Map<Integer, Set<String>> exams, ReportService reportService, boolean examLock) {
+        this.exams = exams != null ? exams : new HashMap<Integer, Set<String>>();
+        this.reportService = reportService;
+        this.examLock = examLock;
+    }
+
+    @Override
+    public void run() {
+        // 获取考试信息并判断状态
+        if (exams != null && !exams.isEmpty()) {
+            for (Integer examId : exams.keySet()) {
+                this.reportService.reportExamObjective(examId, exams.get(examId));
+            }
+        }
+    }
+
+}

+ 91 - 71
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examIndex.jsp

@@ -10,27 +10,27 @@
             padding: 0;
             padding: 0;
             margin: 0;
             margin: 0;
         }
         }
-        
+
         #main .container-fluid {
         #main .container-fluid {
             padding: 0 7px 0 10px;
             padding: 0 7px 0 10px;
         }
         }
-        
+
         #header {
         #header {
             margin: 0 0 10px;
             margin: 0 0 10px;
             position: static;
             position: static;
         }
         }
-        
+
         #header li {
         #header li {
             font-size: 14px;
             font-size: 14px;
             _font-size: 12px;
             _font-size: 12px;
         }
         }
-        
+
         #header .brand {
         #header .brand {
             font-family: Helvetica, Georgia, Arial, sans-serif, 黑体;
             font-family: Helvetica, Georgia, Arial, sans-serif, 黑体;
             font-size: 26px;
             font-size: 26px;
             padding-left: 33px;
             padding-left: 33px;
         }
         }
-        
+
         #footer {
         #footer {
             margin: 8px 0 0 0;
             margin: 8px 0 0 0;
             padding: 3px 0 0 0;
             padding: 3px 0 0 0;
@@ -38,7 +38,7 @@
             text-align: center;
             text-align: center;
             border-top: 2px solid #0663A2;
             border-top: 2px solid #0663A2;
         }
         }
-        
+
         #footer, #footer a {
         #footer, #footer a {
             color: #999;
             color: #999;
         }
         }
@@ -82,16 +82,25 @@
                   <li class="menu "><a class="menu" href="${ctx }/admin/exam" target="menuFrame" >考试管理</a></li>
                   <li class="menu "><a class="menu" href="${ctx }/admin/exam" target="menuFrame" >考试管理</a></li>
                  <li class="menu "><a class="menu" href="" target="menuFrame" >基础管理</a></li>
                  <li class="menu "><a class="menu" href="" target="menuFrame" >基础管理</a></li>
                 </ul> --%>
                 </ul> --%>
-                
+
                 <ul class="nav pull-right">
                 <ul class="nav pull-right">
                     <li id="themeSwitch" class="dropdown">
                     <li id="themeSwitch" class="dropdown">
-                        <a class="dropdown-toggle" data-toggle="dropdown" href="#" title="主题切换"><i class="icon-th-large"></i></a>
+                        <a class="dropdown-toggle" data-toggle="dropdown" href="#" title="主题切换"><i
+                                class="icon-th-large"></i></a>
                         <ul class="dropdown-menu">
                         <ul class="dropdown-menu">
-                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/default?url='+location.href">默认主题</a></li>
-                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/cerulean?url='+location.href">天蓝主题</a></li>
-                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/readable?url='+location.href">橙色主题</a></li>
-                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/united?url='+location.href">红色主题</a></li>
-                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/flat?url='+location.href">Flat主题</a></li>
+                            <li><a href="#"
+                                   onclick="location='${ctx}/admin/home/theme/default?url='+location.href">默认主题</a>
+                            </li>
+                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/cerulean?url='+location.href">天蓝主题</a>
+                            </li>
+                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/readable?url='+location.href">橙色主题</a>
+                            </li>
+                            <li><a href="#"
+                                   onclick="location='${ctx}/admin/home/theme/united?url='+location.href">红色主题</a>
+                            </li>
+                            <li><a href="#"
+                                   onclick="location='${ctx}/admin/home/theme/flat?url='+location.href">Flat主题</a>
+                            </li>
                         </ul>
                         </ul>
                         <!--[if lte IE 6]>
                         <!--[if lte IE 6]>
                         <script type="text/javascript">$('#themeSwitch').hide();</script><![endif]-->
                         <script type="text/javascript">$('#themeSwitch').hide();</script><![endif]-->
@@ -105,8 +114,10 @@
                     <li class="dropdown">
                     <li class="dropdown">
                         <a class="dropdown-toggle" data-toggle="dropdown" href="#" title="个人信息">${web_user.name}</a>
                         <a class="dropdown-toggle" data-toggle="dropdown" href="#" title="个人信息">${web_user.name}</a>
                         <ul class="dropdown-menu">
                         <ul class="dropdown-menu">
-                            <li><a href="${ctx}/admin/account/info" target="mainFrame"><i class="icon-user"></i>&nbsp; 个人信息</a></li>
-                            <li><a href="${ctx}/admin/account/modifyPwd" target="mainFrame"><i class="icon-lock"></i>&nbsp; 修改密码</a></li>
+                            <li><a href="${ctx}/admin/account/info" target="mainFrame"><i class="icon-user"></i>&nbsp;
+                                个人信息</a></li>
+                            <li><a href="${ctx}/admin/account/modifyPwd" target="mainFrame"><i class="icon-lock"></i>&nbsp;
+                                修改密码</a></li>
                         </ul>
                         </ul>
                     </li>
                     </li>
                     <li><a href="${ctx}/logout" title="退出登录" data-i18n-text="head.logout">退出</a></li>
                     <li><a href="${ctx}/logout" title="退出登录" data-i18n-text="head.logout">退出</a></li>
@@ -126,58 +137,66 @@
                         <div id="collapse1" class="accordion-body collapse ${firstMenu?'in':''}">
                         <div id="collapse1" class="accordion-body collapse ${firstMenu?'in':''}">
                             <div class="accordion-inner">
                             <div class="accordion-inner">
                                 <ul class="nav nav-list">
                                 <ul class="nav nav-list">
-                                <c:forEach items="${privileges}" var="privilege">
-                                <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, privilege.code)}">
-                                	<c:if test="${privilege.code=='exam_score'}">
-	                                	<c:if test="${web_user.schoolAdmin==true || forbiddenScore==false}">
-	                                		<li><a href="${ctx}${privilege.privilegeUri}?privilegeCode=${privilege.code}" target="mainFrame"><i class="${privilege.icon}"></i><span data-i18n-text="${privilege.i18n}">${privilege.name}</span></a></li>
-	                                	</c:if>
-                                	</c:if>
-                                	<c:if test="${privilege.code!='exam_score'}">
-                                		<li><a href="${ctx}${privilege.privilegeUri}?privilegeCode=${privilege.code}" target="mainFrame"><i class="${privilege.icon}"></i><span data-i18n-text="${privilege.i18n}">${privilege.name}</span></a></li>
-                                	</c:if>
-                                </c:if>
-                                </c:forEach>
-                                <%-- 
-                                    <c:if test="${web_user.schoolAdmin==true}">
-                                        <li><a href="${ctx}/admin/user/list" target="mainFrame"><i class="icon-user"></i><span data-i18n-text="index.user">用户管理</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/list" target="mainFrame"><i class="icon-th-list"></i><span data-i18n-text="index.exam">考试管理</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/student" target="mainFrame"><i class="icon-user"></i><span data-i18n-text="index.student">考生管理</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/paper" target="mainFrame"><i class="icon-book"></i><span data-i18n-text="index.paper">科目管理</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/scan" target="mainFrame"><i class="icon-print"></i><span data-i18n-text="index.scan">扫描进度</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/mark" target="mainFrame"><i class="icon-pencil"></i><span data-i18n-text="index.mark">评卷管理</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/reject/list" target="mainFrame"><i class="icon-bookmark"></i><span data-i18n-text="index.reject">打回试卷</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/problem/history" target="mainFrame"><i class="icon-tag"></i><span data-i18n-text="index.problem">问题试卷</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/inspected/info" target="mainFrame"><i class="icon-flag"></i><span data-i18n-text="index.inspected">成绩复核</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/score" target="mainFrame"><i class="icon-search"></i><span data-i18n-text="index.score">成绩查询</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/reportSubject" target="mainFrame"><i class="icon-signal"></i><span data-i18n-text="index.report.total">总量分析</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame"><i class="icon-asterisk"></i><span data-i18n-text="index.report.subject">科目分析</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/check/answer" target="mainFrame"><i class="icon-check"></i><span data-i18n-text="index.check">数据检查</span></a></li>
-                                        <li><a href="${ctx}/admin/operation/log" target="mainFrame"><i class="icon-tasks"></i><span data-i18n-text="index.log">操作日志</span></a></li>
-                                    </c:if>
-                                    
-                                    <c:if test="${web_user.subjectHeader==true}">
-                                        <li><a href="${ctx}/admin/exam/mark" target="mainFrame"><i class="icon-pencil"></i><span data-i18n-text="index.mark">评卷管理</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/reject/list" target="mainFrame"><i class="icon-bookmark"></i><span data-i18n-text="index.reject">打回试卷</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/problem/history" target="mainFrame"><i class="icon-tag"></i><span data-i18n-text="index.problem">问题试卷</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/inspected/info" target="mainFrame"><i class="icon-flag"></i><span data-i18n-text="index.inspected">成绩复核</span></a></li>
-                                        <c:if test="${forbiddenScore!=true}">
-                                        <li><a href="${ctx}/admin/exam/score" target="mainFrame"><i class="icon-search"></i><span data-i18n-text="index.score">成绩查询</span></a></li>
+                                    <c:forEach items="${privileges}" var="privilege">
+                                        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, privilege.code)}">
+                                            <c:if test="${privilege.code=='exam_score'}">
+                                                <c:if test="${web_user.schoolAdmin==true || forbiddenScore==false}">
+                                                    <li>
+                                                        <a href="${ctx}${privilege.privilegeUri}?privilegeCode=${privilege.code}"
+                                                           target="mainFrame"><i class="${privilege.icon}"></i><span
+                                                                data-i18n-text="${privilege.i18n}">${privilege.name}</span></a>
+                                                    </li>
+                                                </c:if>
+                                            </c:if>
+                                            <c:if test="${privilege.code!='exam_score'}">
+                                                <li>
+                                                    <a href="${ctx}${privilege.privilegeUri}?privilegeCode=${privilege.code}"
+                                                       target="mainFrame"><i class="${privilege.icon}"></i><span
+                                                            data-i18n-text="${privilege.i18n}">${privilege.name}</span></a>
+                                                </li>
+                                            </c:if>
+                                        </c:if>
+                                    </c:forEach>
+                                    <%--
+                                        <c:if test="${web_user.schoolAdmin==true}">
+                                            <li><a href="${ctx}/admin/user/list" target="mainFrame"><i class="icon-user"></i><span data-i18n-text="index.user">用户管理</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/list" target="mainFrame"><i class="icon-th-list"></i><span data-i18n-text="index.exam">考试管理</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/student" target="mainFrame"><i class="icon-user"></i><span data-i18n-text="index.student">考生管理</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/paper" target="mainFrame"><i class="icon-book"></i><span data-i18n-text="index.paper">科目管理</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/scan" target="mainFrame"><i class="icon-print"></i><span data-i18n-text="index.scan">扫描进度</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/mark" target="mainFrame"><i class="icon-pencil"></i><span data-i18n-text="index.mark">评卷管理</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/reject/list" target="mainFrame"><i class="icon-bookmark"></i><span data-i18n-text="index.reject">打回试卷</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/problem/history" target="mainFrame"><i class="icon-tag"></i><span data-i18n-text="index.problem">问题试卷</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/inspected/info" target="mainFrame"><i class="icon-flag"></i><span data-i18n-text="index.inspected">成绩复核</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/score" target="mainFrame"><i class="icon-search"></i><span data-i18n-text="index.score">成绩查询</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/reportSubject" target="mainFrame"><i class="icon-signal"></i><span data-i18n-text="index.report.total">总量分析</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame"><i class="icon-asterisk"></i><span data-i18n-text="index.report.subject">科目分析</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/check/answer" target="mainFrame"><i class="icon-check"></i><span data-i18n-text="index.check">数据检查</span></a></li>
+                                            <li><a href="${ctx}/admin/operation/log" target="mainFrame"><i class="icon-tasks"></i><span data-i18n-text="index.log">操作日志</span></a></li>
                                         </c:if>
                                         </c:if>
-                                        <li><a href="${ctx}/admin/exam/reportSubject" target="mainFrame"><i class="icon-signal"></i><span data-i18n-text="index.report.total">总量分析</span></a></li>
-                                        <li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame"><i class="icon-asterisk"></i><span data-i18n-text="index.report.subject">科目分析</span></a></li>
-                                    </c:if>
-                                    
-                                    <c:if test="${web_user.inspector==true}">
-                                        <li><a href="${ctx}/admin/exam/inspected/info" target="mainFrame"><i class="icon-flag"></i><span data-i18n-text="index.inspected">成绩复核</span></a></li>
-                                    </c:if>
-                                    
-                                    <c:if test="${web_user.schoolViewer==true}">
-                                        <li><a href="${ctx}/admin/exam/score" target="mainFrame"><i class="icon-search"></i><span data-i18n-text="index.score">成绩查询</span></a></li>
-                                    	<li><a href="${ctx}/admin/exam/reportSubject" target="mainFrame"><i class="icon-signal"></i><span data-i18n-text="index.report.total">总量分析</span></a></li>
-                                      	<li><a href="${ctx}/admin/operation/log" target="mainFrame"><i class="icon-tasks"></i><span data-i18n-text="index.log">操作日志</span></a></li>
-                                    </c:if> --%>
-                                    
+
+                                        <c:if test="${web_user.subjectHeader==true}">
+                                            <li><a href="${ctx}/admin/exam/mark" target="mainFrame"><i class="icon-pencil"></i><span data-i18n-text="index.mark">评卷管理</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/reject/list" target="mainFrame"><i class="icon-bookmark"></i><span data-i18n-text="index.reject">打回试卷</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/problem/history" target="mainFrame"><i class="icon-tag"></i><span data-i18n-text="index.problem">问题试卷</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/inspected/info" target="mainFrame"><i class="icon-flag"></i><span data-i18n-text="index.inspected">成绩复核</span></a></li>
+                                            <c:if test="${forbiddenScore!=true}">
+                                            <li><a href="${ctx}/admin/exam/score" target="mainFrame"><i class="icon-search"></i><span data-i18n-text="index.score">成绩查询</span></a></li>
+                                            </c:if>
+                                            <li><a href="${ctx}/admin/exam/reportSubject" target="mainFrame"><i class="icon-signal"></i><span data-i18n-text="index.report.total">总量分析</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame"><i class="icon-asterisk"></i><span data-i18n-text="index.report.subject">科目分析</span></a></li>
+                                        </c:if>
+
+                                        <c:if test="${web_user.inspector==true}">
+                                            <li><a href="${ctx}/admin/exam/inspected/info" target="mainFrame"><i class="icon-flag"></i><span data-i18n-text="index.inspected">成绩复核</span></a></li>
+                                        </c:if>
+
+                                        <c:if test="${web_user.schoolViewer==true}">
+                                            <li><a href="${ctx}/admin/exam/score" target="mainFrame"><i class="icon-search"></i><span data-i18n-text="index.score">成绩查询</span></a></li>
+                                            <li><a href="${ctx}/admin/exam/reportSubject" target="mainFrame"><i class="icon-signal"></i><span data-i18n-text="index.report.total">总量分析</span></a></li>
+                                              <li><a href="${ctx}/admin/operation/log" target="mainFrame"><i class="icon-tasks"></i><span data-i18n-text="index.log">操作日志</span></a></li>
+                                        </c:if> --%>
+
                                     <c:set var="firstMenu" value="false"/>
                                     <c:set var="firstMenu" value="false"/>
                                 </ul>
                                 </ul>
                             </div>
                             </div>
@@ -193,7 +212,8 @@
             <%-- 			    <%@include file="/WEB-INF/views/include/picConfig.jsp" %> --%>
             <%-- 			    <%@include file="/WEB-INF/views/include/picConfig.jsp" %> --%>
         </div>
         </div>
         <div id="footer" class="row-fluid">
         <div id="footer" class="row-fluid">
-            Copyright &copy; 2021 云阅卷 - Powered By <a href="http://www.qmth.com.cn" target="_blank">启明泰和 v${versionName} beta${versionDate}</a>
+            Copyright &copy; 2021 云阅卷 - Powered By <a href="http://www.qmth.com.cn" target="_blank">启明泰和
+            v${versionName} build${versionDate}</a>
         </div>
         </div>
     </div>
     </div>
 </div>
 </div>
@@ -213,10 +233,10 @@
         }
         }
         $("#right").width($("#content").width() - $("#left").width() - $("#openClose").width() - 5);
         $("#right").width($("#content").width() - $("#left").width() - $("#openClose").width() - 5);
     }
     }
-   
-    $('#exam-select').click(function(){
-    	window.location="${ctx}/admin/exam/select";
-	});
+
+    $('#exam-select').click(function () {
+        window.location = "${ctx}/admin/exam/select";
+    });
 </script>
 </script>
 <script src="${ctxStatic}/common/wsize.min.js" type="text/javascript"></script>
 <script src="${ctxStatic}/common/wsize.min.js" type="text/javascript"></script>
 </body>
 </body>

+ 9 - 7
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examSelect.jsp

@@ -55,8 +55,8 @@
         if (self.frameElement && self.frameElement.tagName == "IFRAME") {
         if (self.frameElement && self.frameElement.tagName == "IFRAME") {
             parent.location.reload();
             parent.location.reload();
         }
         }
-    
-    
+
+
     </script>
     </script>
 </head>
 </head>
 <body>
 <body>
@@ -64,10 +64,11 @@
     <div class="middle cl">
     <div class="middle cl">
         <div class="left">
         <div class="left">
             <%-- <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div> --%>
             <%-- <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div> --%>
-             <p>
-				<a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)">Copyright &#169 2021 启明泰和 v${versionName} beta${versionDate}</a><br/>
-				<a href="https://beian.miit.gov.cn/" target="_blank" style="color: rgba(255,255,255,.65)">鄂ICP备12000033号-3</a>
-			</p>
+            <p>
+                <a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)">Copyright &#169
+                    2021 启明泰和 v${versionName} build${versionDate}</a><br/>
+                <a href="https://beian.miit.gov.cn/" target="_blank" style="color: rgba(255,255,255,.65)">鄂ICP备12000033号-3</a>
+            </p>
         </div>
         </div>
         <div class="right">
         <div class="right">
             <div class="title">
             <div class="title">
@@ -80,7 +81,8 @@
                         <select name="examId" id="exam-select">
                         <select name="examId" id="exam-select">
                             <option value="">请选择考试</option>
                             <option value="">请选择考试</option>
                             <c:forEach items="${examList}" var="item">
                             <c:forEach items="${examList}" var="item">
-                                <option value="${item.id}" <c:if test="${item.id==exam.id}">selected</c:if>>${item.id}-${item.name}</option>
+                                <option value="${item.id}"
+                                        <c:if test="${item.id==exam.id}">selected</c:if>>${item.id}-${item.name}</option>
                             </c:forEach>
                             </c:forEach>
                         </select>
                         </select>
                     </div>
                     </div>

+ 23 - 15
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/reset.jsp

@@ -6,11 +6,11 @@
     <meta name="decorator" content="default"/>
     <meta name="decorator" content="default"/>
     <%@include file="/WEB-INF/views/include/head.jsp" %>
     <%@include file="/WEB-INF/views/include/head.jsp" %>
     <link rel="stylesheet" href="${ctxStatic}/common/login.css">
     <link rel="stylesheet" href="${ctxStatic}/common/login.css">
-	<style type="text/css">
-	.right {
-	padding: 45px 130px;
-	}     
-     </style>
+    <style type="text/css">
+        .right {
+            padding: 45px 130px;
+        }
+    </style>
     <script type="text/javascript">
     <script type="text/javascript">
         $(document).ready(function () {
         $(document).ready(function () {
             <!--针对nw.js评卷客户端,自动窗口最大化-->
             <!--针对nw.js评卷客户端,自动窗口最大化-->
@@ -73,7 +73,8 @@
     <div class="middle cl">
     <div class="middle cl">
         <div class="left">
         <div class="left">
             <%-- <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div> --%>
             <%-- <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div> --%>
-            <a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)"><p>Copyright &#169 2021 启明泰和 v${versionName} beta${versionDate}</p></a>
+            <a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)"><p>Copyright &#169
+                2021 启明泰和 v${versionName} build${versionDate}</p></a>
         </div>
         </div>
         <div class="right">
         <div class="right">
             <div class="title">
             <div class="title">
@@ -83,27 +84,34 @@
             <div class="loginbox">
             <div class="loginbox">
                 <form action="${ctx}/mark/reset" method="post" role="form" id="loginForm">
                 <form action="${ctx}/mark/reset" method="post" role="form" id="loginForm">
                     <div class="input-group">
                     <div class="input-group">
-                    	<img src="${ctxStatic}/images/userid.png" class="input-icon">
-                        <input type="text" class="form-control required" id="loginName" name="name" placeholder="请输入姓名" autocomplete="off" value="${loginName }"
+                        <img src="${ctxStatic}/images/userid.png" class="input-icon">
+                        <input type="text" class="form-control required" id="loginName" name="name"
+                               placeholder="请输入姓名" autocomplete="off" value="${loginName }"
                                data-i18n-placeholder="user.reset.name"/>
                                data-i18n-placeholder="user.reset.name"/>
                     </div>
                     </div>
                     <div class="input-group input-top">
                     <div class="input-group input-top">
-                    	<img src="${ctxStatic}/images/empno.png" class="input-icon">
-                        <input type="text" class="form-control required" id="empno" name="empno" placeholder="请输入工号" autocomplete="off"/>
+                        <img src="${ctxStatic}/images/empno.png" class="input-icon">
+                        <input type="text" class="form-control required" id="empno" name="empno"
+                               placeholder="请输入工号" autocomplete="off"/>
                     </div>
                     </div>
                     <div class="input-group input-top">
                     <div class="input-group input-top">
-                   		 <img src="${ctxStatic}/images/password.png" class="input-icon">
-                        <input type="password" class="form-control required" id="password" name="password" placeholder="请输入6位以上新密码" autocomplete="off" data-i18n-placeholder="user.reset.password"/>
+                        <img src="${ctxStatic}/images/password.png" class="input-icon">
+                        <input type="password" class="form-control required" id="password" name="password"
+                               placeholder="请输入6位以上新密码" autocomplete="off"
+                               data-i18n-placeholder="user.reset.password"/>
                     </div>
                     </div>
                     <div class="input-group input-top">
                     <div class="input-group input-top">
-                    	<img src="${ctxStatic}/images/password.png" class="input-icon">
-                        <input type="password" class="form-control required" id=password2 name="password2" placeholder="再次输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password.again"/>
+                        <img src="${ctxStatic}/images/password.png" class="input-icon">
+                        <input type="password" class="form-control required" id=password2 name="password2"
+                               placeholder="再次输入密码" autocomplete="off"
+                               data-i18n-placeholder="user.reset.password.again"/>
                     </div>
                     </div>
                     <div class="point <c:if test="${message == null }">hide</c:if>">
                     <div class="point <c:if test="${message == null }">hide</c:if>">
                         <em class="error">${message }</em>
                         <em class="error">${message }</em>
                     </div>
                     </div>
                     <div class="login-btn">
                     <div class="login-btn">
-                        <input class="opacity" type="submit" id="submit-button" value="确 定" data-i18n-value="user.reset.submit"/>
+                        <input class="opacity" type="submit" id="submit-button" value="确 定"
+                               data-i18n-value="user.reset.submit"/>
                         <a href="${ctx}/logout" class="opacity" data-i18n-text="user.reset.logout">退 出</a>
                         <a href="${ctx}/logout" class="opacity" data-i18n-text="user.reset.logout">退 出</a>
                     </div>
                     </div>
                 </form>
                 </form>

+ 21 - 15
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/subjectSelect.jsp

@@ -48,31 +48,34 @@
                 $('.point').hide();
                 $('.point').hide();
             });
             });
             $('#subject-select').change(function () {
             $('#subject-select').change(function () {
-            	var examId = $("#exam-select").val();
+                var examId = $("#exam-select").val();
                 var subjectCode = $(this).val();
                 var subjectCode = $(this).val();
                 $('#marker-select').empty();
                 $('#marker-select').empty();
                 if (examId == '') {
                 if (examId == '') {
                     $('#marker-select').val('').trigger('change');
                     $('#marker-select').val('').trigger('change');
                     return;
                     return;
                 }
                 }
-                $.post('${ctx}/mark/subject/group/query', {examId: examId,subjectCode:subjectCode}, function (result) {
+                $.post('${ctx}/mark/subject/group/query', {
+                    examId: examId,
+                    subjectCode: subjectCode
+                }, function (result) {
                     var parent = $('#marker-select');
                     var parent = $('#marker-select');
                     var first = '';
                     var first = '';
                     for (var i = 0; i < result.length; i++) {
                     for (var i = 0; i < result.length; i++) {
                         var marker = result[i];
                         var marker = result[i];
-                        if(marker.title.length>15){
-                        	marker.title = marker.title.substring(0,15)+"...";
+                        if (marker.title.length > 15) {
+                            marker.title = marker.title.substring(0, 15) + "...";
                         }
                         }
-                        $('<option value="' + marker.id + '">分组:' + marker.groupNumber + '-' + marker.title +' '+ marker.percent+'%</option>').appendTo(parent);
+                        $('<option value="' + marker.id + '">分组:' + marker.groupNumber + '-' + marker.title + ' ' + marker.percent + '%</option>').appendTo(parent);
                         if (i == 0) {
                         if (i == 0) {
                             first = marker.id;
                             first = marker.id;
                         }
                         }
                     }
                     }
                     parent.val(first).trigger('change');
                     parent.val(first).trigger('change');
                 });
                 });
-              //  $('.point').hide();
+                //  $('.point').hide();
             });
             });
-            
+
             $(document).ajaxError(function (evt, req, settings) {
             $(document).ajaxError(function (evt, req, settings) {
                 if (req.status == 401) {
                 if (req.status == 401) {
                     alert("账号已在其他地方登录!");
                     alert("账号已在其他地方登录!");
@@ -92,8 +95,8 @@
         if (self.frameElement && self.frameElement.tagName == "IFRAME") {
         if (self.frameElement && self.frameElement.tagName == "IFRAME") {
             parent.location.reload();
             parent.location.reload();
         }
         }
-    
-    
+
+
     </script>
     </script>
 </head>
 </head>
 <body>
 <body>
@@ -101,10 +104,11 @@
     <div class="middle cl">
     <div class="middle cl">
         <div class="left">
         <div class="left">
             <%-- <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div> --%>
             <%-- <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div> --%>
-             <p>
-				<a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)">Copyright &#169 2021 启明泰和 v${versionName} beta${versionDate}</a><br/>
-				<a href="https://beian.miit.gov.cn/" target="_blank" style="color: rgba(255,255,255,.65)">鄂ICP备12000033号-3</a>
-			</p>
+            <p>
+                <a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)">Copyright &#169
+                    2021 启明泰和 v${versionName} build${versionDate}</a><br/>
+                <a href="https://beian.miit.gov.cn/" target="_blank" style="color: rgba(255,255,255,.65)">鄂ICP备12000033号-3</a>
+            </p>
         </div>
         </div>
         <div class="right">
         <div class="right">
             <div class="title">
             <div class="title">
@@ -117,7 +121,8 @@
                         <select name="examId" id="exam-select">
                         <select name="examId" id="exam-select">
                             <option value="">请选择考试</option>
                             <option value="">请选择考试</option>
                             <c:forEach items="${examList}" var="item">
                             <c:forEach items="${examList}" var="item">
-                                <option value="${item.id}" <c:if test="${item.id==exam.id}">selected</c:if>>${item.name}</option>
+                                <option value="${item.id}"
+                                        <c:if test="${item.id==exam.id}">selected</c:if>>${item.name}</option>
                             </c:forEach>
                             </c:forEach>
                         </select>
                         </select>
                     </div>
                     </div>
@@ -131,7 +136,8 @@
                     <div class="option">
                     <div class="option">
                         <select name="markerId" id="marker-select">
                         <select name="markerId" id="marker-select">
                             <c:if test="${group!=null}">
                             <c:if test="${group!=null}">
-                                <option value="">分组:${group.groupNumber}-${group.title}&nbsp;${group.percent }%</option>
+                                <option value="">分组:${group.groupNumber}-${group.title}&nbsp;${group.percent }%
+                                </option>
                             </c:if>
                             </c:if>
                         </select>
                         </select>
                     </div>
                     </div>

+ 22 - 13
stmms-web/src/main/webapp/WEB-INF/views/modules/sys/login.jsp

@@ -33,36 +33,44 @@
                     src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/>
                     src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/>
             </div> --%>
             </div> --%>
             <p>
             <p>
-				<a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)">Copyright &#169 2021 启明泰和 v${versionName} beta${versionDate}</a><br/>
-				<a href="https://beian.miit.gov.cn/" target="_blank" style="color: rgba(255,255,255,.65)">鄂ICP备12000033号-3</a>
-			</p>
+                <a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)">Copyright &#169
+                    2021 启明泰和 v${versionName} build${versionDate}</a><br/>
+                <a href="https://beian.miit.gov.cn/" target="_blank" style="color: rgba(255,255,255,.65)">鄂ICP备12000033号-3</a>
+            </p>
         </div>
         </div>
         <div class="right">
         <div class="right">
             <div class="title">
             <div class="title">
                 <h1 data-i18n-text="user.login.title">高校考试管理平台</h1>
                 <h1 data-i18n-text="user.login.title">高校考试管理平台</h1>
                 <%-- <c:if test="${loginType == 'admin-login' }"><p data-i18n-text="user.login.admin">管理员登录</p></c:if> --%>
                 <%-- <c:if test="${loginType == 'admin-login' }"><p data-i18n-text="user.login.admin">管理员登录</p></c:if> --%>
-                <c:if test="${loginType == 'mark-login-only' }"><p data-i18n-text="user.login.marker">评卷员登录</p></c:if>
+                <c:if test="${loginType == 'mark-login-only' }"><p data-i18n-text="user.login.marker">
+                    评卷员登录</p></c:if>
                 <c:if test="${loginType != 'mark-login-only' }">
                 <c:if test="${loginType != 'mark-login-only' }">
                     <p><span><a href="#"
                     <p><span><a href="#"
-                                <c:if test="${loginType == 'admin-login'||loginType == null }">class="on"</c:if> id="adminLogin" data-i18n-text="user.login.admin">管理员登录</a></span>
+                                <c:if test="${loginType == 'admin-login'||loginType == null }">class="on"</c:if>
+                                id="adminLogin" data-i18n-text="user.login.admin">管理员登录</a></span>
                         <span><a href="#"
                         <span><a href="#"
-                                 <c:if test="${loginType == 'mark-login' }">class="on"</c:if> id="markLogin" data-i18n-text="user.login.marker">评卷员登录</a></span></p>
+                                 <c:if test="${loginType == 'mark-login' }">class="on"</c:if> id="markLogin"
+                                 data-i18n-text="user.login.marker">评卷员登录</a></span></p>
                 </c:if>
                 </c:if>
             </div>
             </div>
             <div class="loginbox">
             <div class="loginbox">
                 <form action=<c:if test="${loginType != 'mark-login-only' }">"${ctx}/login"
                 <form action=<c:if test="${loginType != 'mark-login-only' }">"${ctx}/login"
                 </c:if>
                 </c:if>
-                <c:if test="${loginType == 'mark-login-only' }">"${ctx}/mark-login"</c:if> method="post" role="form" id="loginForm">
-                <input  type="hidden"  id="loginType" name="loginType" value=<c:if test="${loginType == null}">'admin-login'</c:if>
+                <c:if test="${loginType == 'mark-login-only' }">"${ctx}/mark-login"</c:if> method="post" role="form"
+                id="loginForm">
+                <input type="hidden" id="loginType" name="loginType"
+                       value=<c:if test="${loginType == null}">'admin-login'</c:if>
                 <c:if test="${loginType != null}">"${loginType}"</c:if>/>
                 <c:if test="${loginType != null}">"${loginType}"</c:if>/>
                 <div class="input-group">
                 <div class="input-group">
-                	 <img src="${ctxStatic}/images/userid.png" class="input-icon">
-                    <input type="text" class="form-control required" id="loginName" name="loginName" placeholder="请输入账号"
+                    <img src="${ctxStatic}/images/userid.png" class="input-icon">
+                    <input type="text" class="form-control required" id="loginName" name="loginName"
+                           placeholder="请输入账号"
                            autocomplete="off" value="${loginName }" data-i18n-placeholder="user.login.name"/>
                            autocomplete="off" value="${loginName }" data-i18n-placeholder="user.login.name"/>
                 </div>
                 </div>
                 <div class="input-group input-top">
                 <div class="input-group input-top">
-                	<img src="${ctxStatic}/images/password.png" class="input-icon">
-                    <input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码"
+                    <img src="${ctxStatic}/images/password.png" class="input-icon">
+                    <input type="password" class="form-control required" id="password" name="password"
+                           placeholder="请输入密码"
                            autocomplete="off" data-i18n-placeholder="user.login.password"/>
                            autocomplete="off" data-i18n-placeholder="user.login.password"/>
                 </div>
                 </div>
                 <c:if test="${message != null }">
                 <c:if test="${message != null }">
@@ -70,7 +78,8 @@
                         <em class="error"><spring:message code="${message }"/></em>
                         <em class="error"><spring:message code="${message }"/></em>
                     </div>
                     </div>
                 </c:if>
                 </c:if>
-                <div class="login-btn"><input class="opacity" type="submit" value="登录" data-i18n-value="user.login.submit"/></div>
+                <div class="login-btn"><input class="opacity" type="submit" value="登录"
+                                              data-i18n-value="user.login.submit"/></div>
                 </form>
                 </form>
             </div>
             </div>
         </div>
         </div>

+ 25 - 18
stmms-web/src/main/webapp/WEB-INF/views/modules/sys/reset.jsp

@@ -6,11 +6,11 @@
     <meta name="decorator" content="default"/>
     <meta name="decorator" content="default"/>
     <%@include file="/WEB-INF/views/include/head.jsp" %>
     <%@include file="/WEB-INF/views/include/head.jsp" %>
     <link rel="stylesheet" href="${ctxStatic}/common/login.css">
     <link rel="stylesheet" href="${ctxStatic}/common/login.css">
-	<style type="text/css">
-	.right {
-	padding: 45px 130px;
-	}     
-     </style>
+    <style type="text/css">
+        .right {
+            padding: 45px 130px;
+        }
+    </style>
     <script type="text/javascript">
     <script type="text/javascript">
         $(document).ready(function () {
         $(document).ready(function () {
             <!--针对nw.js评卷客户端,自动窗口最大化-->
             <!--针对nw.js评卷客户端,自动窗口最大化-->
@@ -73,10 +73,11 @@
     <div class="middle cl">
     <div class="middle cl">
         <div class="left">
         <div class="left">
             <%-- <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div> --%>
             <%-- <div class="logo"><img src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/></div> --%>
-             <p>
-				<a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)">Copyright &#169 2021 启明泰和 v${versionName} beta${versionDate}</a><br/>
-				<a href="https://beian.miit.gov.cn/" target="_blank" style="color: rgba(255,255,255,.65)">鄂ICP备12000033号-3</a>
-			</p>
+            <p>
+                <a href="http://www.qmth.com.cn" target="_blank" style="color: rgba(255,255,255,.65)">Copyright &#169
+                    2021 启明泰和 v${versionName} build${versionDate}</a><br/>
+                <a href="https://beian.miit.gov.cn/" target="_blank" style="color: rgba(255,255,255,.65)">鄂ICP备12000033号-3</a>
+            </p>
         </div>
         </div>
         <div class="right">
         <div class="right">
             <div class="title">
             <div class="title">
@@ -86,27 +87,33 @@
             <div class="loginbox">
             <div class="loginbox">
                 <form action="${ctx}/admin/reset" method="post" role="form" id="loginForm">
                 <form action="${ctx}/admin/reset" method="post" role="form" id="loginForm">
                     <div class="input-group">
                     <div class="input-group">
-                    	<img src="${ctxStatic}/images/userid.png" class="input-icon">
-                        <input type="text" class="form-control required" id="loginName" name="name" placeholder="请输入姓名" autocomplete="off" value="${loginName }"
+                        <img src="${ctxStatic}/images/userid.png" class="input-icon">
+                        <input type="text" class="form-control required" id="loginName" name="name"
+                               placeholder="请输入姓名" autocomplete="off" value="${loginName }"
                                data-i18n-placeholder="user.reset.name"/>
                                data-i18n-placeholder="user.reset.name"/>
                     </div>
                     </div>
                     <div class="input-group input-top">
                     <div class="input-group input-top">
-                    	<img src="${ctxStatic}/images/empno.png" class="input-icon">
-                        <input type="text" class="form-control required" id="empno" name="empno" placeholder="请输入工号" autocomplete="off"/>
+                        <img src="${ctxStatic}/images/empno.png" class="input-icon">
+                        <input type="text" class="form-control required" id="empno" name="empno"
+                               placeholder="请输入工号" autocomplete="off"/>
                     </div>
                     </div>
                     <div class="input-group input-top">
                     <div class="input-group input-top">
-                    	<img src="${ctxStatic}/images/password.png" class="input-icon">
-                        <input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password"/>
+                        <img src="${ctxStatic}/images/password.png" class="input-icon">
+                        <input type="password" class="form-control required" id="password" name="password"
+                               placeholder="请输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password"/>
                     </div>
                     </div>
                     <div class="input-group input-top">
                     <div class="input-group input-top">
-                    	<img src="${ctxStatic}/images/password.png" class="input-icon">
-                        <input type="password" class="form-control required" id=password2 name="password2" placeholder="再次输入密码" autocomplete="off" data-i18n-placeholder="user.reset.password.again"/>
+                        <img src="${ctxStatic}/images/password.png" class="input-icon">
+                        <input type="password" class="form-control required" id=password2 name="password2"
+                               placeholder="再次输入密码" autocomplete="off"
+                               data-i18n-placeholder="user.reset.password.again"/>
                     </div>
                     </div>
                     <div class="point <c:if test="${message == null }">hide</c:if>">
                     <div class="point <c:if test="${message == null }">hide</c:if>">
                         <em class="error">${message }</em>
                         <em class="error">${message }</em>
                     </div>
                     </div>
                     <div class="login-btn">
                     <div class="login-btn">
-                        <input class="opacity" type="submit" id="submit-button" value="确 定" data-i18n-value="user.reset.submit"/>
+                        <input class="opacity" type="submit" id="submit-button" value="确 定"
+                               data-i18n-value="user.reset.submit"/>
                         <a href="${ctx}/logout" class="opacity" data-i18n-text="user.reset.logout">退 出</a>
                         <a href="${ctx}/logout" class="opacity" data-i18n-text="user.reset.logout">退 出</a>
                     </div>
                     </div>
                 </form>
                 </form>

+ 171 - 123
stmms-web/src/main/webapp/WEB-INF/views/modules/sys/sysIndex.jsp

@@ -1,130 +1,178 @@
 <%@ page contentType="text/html;charset=UTF-8" %>
 <%@ page contentType="text/html;charset=UTF-8" %>
-<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
 <html>
 <html>
 <head>
 <head>
-	<title>云阅卷-高校版</title>
-	<meta name="decorator" content="default"/>
-	<%@include file="/WEB-INF/views/include/head.jsp" %>
-	<style type="text/css">
-		#main {padding:0;margin:0;} #main .container-fluid{padding:0 7px 0 10px;}
-		#header {margin:0 0 10px;position:static;} #header li {font-size:14px;_font-size:12px;}
-		#header .brand {font-family:Helvetica, Georgia, Arial, sans-serif, 黑体;font-size:26px;padding-left:33px;}
-		#footer {margin:8px 0 0 0;padding:3px 0 0 0;font-size:11px;text-align:center;border-top:2px solid #0663A2;}
-		#footer, #footer a {color:#999;} 
-	</style>
-	<script type="text/javascript"> 
-		$(document).ready(function() {
-			$("#menu a.menu").click(function(){
-				$("#menu li.menu").removeClass("active");
-				$(this).parent().addClass("active");
-				if(!$("#openClose").hasClass("close")){
-					$("#openClose").click();
-				}
-			});
-			
-			$(".accordion-heading a").click(function(){
-				$('.accordion-toggle i').removeClass('icon-chevron-down');
-				$('.accordion-toggle i').addClass('icon-chevron-right');
-				if(!$($(this).attr('href')).hasClass('in')){
-					$(this).children('i').removeClass('icon-chevron-right');
-					$(this).children('i').addClass('icon-chevron-down');
-				}
-			});
-			$(".accordion-body a").click(function(){
-				$("#menu li").removeClass("active");
-				$("#menu li i").removeClass("icon-white");
-				$(this).parent().addClass("active");
-				$(this).children("i").addClass("icon-white");
-			}); 
-			$(".accordion-body a:first i").click();
-		});
-	</script>
+    <title>云阅卷-高校版</title>
+    <meta name="decorator" content="default"/>
+    <%@include file="/WEB-INF/views/include/head.jsp" %>
+    <style type="text/css">
+        #main {
+            padding: 0;
+            margin: 0;
+        }
+
+        #main .container-fluid {
+            padding: 0 7px 0 10px;
+        }
+
+        #header {
+            margin: 0 0 10px;
+            position: static;
+        }
+
+        #header li {
+            font-size: 14px;
+            _font-size: 12px;
+        }
+
+        #header .brand {
+            font-family: Helvetica, Georgia, Arial, sans-serif, 黑体;
+            font-size: 26px;
+            padding-left: 33px;
+        }
+
+        #footer {
+            margin: 8px 0 0 0;
+            padding: 3px 0 0 0;
+            font-size: 11px;
+            text-align: center;
+            border-top: 2px solid #0663A2;
+        }
+
+        #footer, #footer a {
+            color: #999;
+        }
+    </style>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            $("#menu a.menu").click(function () {
+                $("#menu li.menu").removeClass("active");
+                $(this).parent().addClass("active");
+                if (!$("#openClose").hasClass("close")) {
+                    $("#openClose").click();
+                }
+            });
+
+            $(".accordion-heading a").click(function () {
+                $('.accordion-toggle i').removeClass('icon-chevron-down');
+                $('.accordion-toggle i').addClass('icon-chevron-right');
+                if (!$($(this).attr('href')).hasClass('in')) {
+                    $(this).children('i').removeClass('icon-chevron-right');
+                    $(this).children('i').addClass('icon-chevron-down');
+                }
+            });
+            $(".accordion-body a").click(function () {
+                $("#menu li").removeClass("active");
+                $("#menu li i").removeClass("icon-white");
+                $(this).parent().addClass("active");
+                $(this).children("i").addClass("icon-white");
+            });
+            $(".accordion-body a:first i").click();
+        });
+    </script>
 </head>
 </head>
 <body>
 <body>
-	<div id="main">
-		<div id="header" class="navbar navbar-fixed-top">
-	      <div class="navbar-inner">
-	      	 <div class="brand">云阅卷</div>
-	         <div class="nav-collapse">
-	           <%-- <ul id="menu" class="nav">
-				 <c:set var="firstMenu" value="true"/>
-		 		<li class="menu "><a class="menu" href="${ctx }/admin/exam" target="menuFrame" >考试管理</a></li>
-				<li class="menu "><a class="menu" href="" target="menuFrame" >基础管理</a></li>
-	           </ul> --%>
-	           <ul class="nav pull-right">
-			  	 <li id="themeSwitch" class="dropdown">
-			       	<a class="dropdown-toggle" data-toggle="dropdown" href="#" title="主题切换"><i class="icon-th-large"></i></a>
-				    <ul class="dropdown-menu">
-				      <li><a href="#" onclick="location='${ctx}/admin/home/theme/default?url='+location.href">默认主题</a></li>
-				      <li><a href="#" onclick="location='${ctx}/admin/home/theme/cerulean?url='+location.href">天蓝主题</a></li>
-				      <li><a href="#" onclick="location='${ctx}/admin/home/theme/readable?url='+location.href">橙色主题</a></li>
-				      <li><a href="#" onclick="location='${ctx}/admin/home/theme/united?url='+location.href">红色主题</a></li>
-				      <li><a href="#" onclick="location='${ctx}/admin/home/theme/flat?url='+location.href">Flat主题</a></li>
-				    </ul>
-				    <!--[if lte IE 6]><script type="text/javascript">$('#themeSwitch').hide();</script><![endif]-->
-			     </li>
-			  	 <li class="dropdown">
-				    <a class="dropdown-toggle" data-toggle="dropdown" href="#" title="个人信息">您好,${web_user.name}</a>
-				    <ul class="dropdown-menu">
-				      <li><a href="${ctx}/admin/account/info" target="mainFrame"><i class="icon-user"></i>&nbsp; 个人信息</a></li>
-				      <li><a href="${ctx}/admin/account/modifyPwd" target="mainFrame"><i class="icon-lock"></i>&nbsp;  修改密码</a></li>
-				    </ul>
-			  	 </li>
-			  	 <li><a href="${ctx}/logout" title="退出登录">退出</a></li>
-			  	 <li>&nbsp;</li>
-	           </ul>
-	         </div><!--/.nav-collapse -->
-	      </div>
-	    </div>
-	    <div class="container-fluid">
-			<div id="content" class="row-fluid">
-				<div id="left">
-							<div class="accordion" id="menu"><c:set var="firstMenu" value="true"/>
-							<div class="accordion-group">
-							    <%-- <div class="accordion-heading">
-							    	<a class="accordion-toggle" data-toggle="collapse" data-parent="#menu" href="#collapse${menu.id}" title="考试管理"><i class="icon-chevron-${firstMenu?'down':'right'}"></i>&nbsp;考试管理</a>
-							    </div> --%>
-							    <div id="collapse1" class="accordion-body collapse ${firstMenu?'in':''}">
-									<div class="accordion-inner">
-										<ul class="nav nav-list">
-											<li><a href="${ctx}/admin/sys/school" target="mainFrame" ><i class="icon-th-list"></i>学校管理</a></li>	
-											<li><a href="${ctx}/admin/sys/config" target="mainFrame" ><i class="icon-th-list"></i>配置管理</a></li>
-											<li><a href="${ctx}/admin/sys/auth" target="mainFrame" ><i class="icon-th-list"></i>授权管理</a></li>														
-											<c:set var="firstMenu" value="false"/>
-										</ul>
-									</div>
-							    </div>
-							</div>
-						</div>
-				</div>
-				<div id="openClose" class="close">&nbsp;</div>
-				<div id="right">
-					<iframe id="mainFrame" name="mainFrame" src="" style="overflow:visible;"
-						scrolling="yes" frameborder="no" width="100%" height="650"></iframe>
-				</div>
-			</div>
-		    <div id="footer" class="row-fluid">
-	            Copyright &copy; 2021 云阅卷 - Powered By <a href="http://www.qmth.com.cn" target="_blank">启明泰和 v${versionName} beta${versionDate}</a>
-			</div>
-		</div>
-	</div>
-	<script type="text/javascript"> 
-		var leftWidth = "160"; // 左侧窗口大小
-		function wSize(){
-			var minHeight = 500, minWidth = 980;
-			var strs=getWindowSize().toString().split(",");
-			$("#menuFrame, #mainFrame, #openClose").height((strs[0]<minHeight?minHeight:strs[0])-$("#header").height()-$("#footer").height()-32);
-			$("#openClose").height($("#openClose").height()-5);
-			if(strs[1]<minWidth){
-				$("#main").css("width",minWidth-10);
-				$("html,body").css({"overflow":"auto","overflow-x":"auto","overflow-y":"auto"});
-			}else{
-				$("#main").css("width","auto");
-				$("html,body").css({"overflow":"hidden","overflow-x":"hidden","overflow-y":"hidden"});
-			}
-			$("#right").width($("#content").width()-$("#left").width()-$("#openClose").width()-5);
-		}
-	</script>
-	<script src="${ctxStatic}/common/wsize.min.js" type="text/javascript"></script>
+<div id="main">
+    <div id="header" class="navbar navbar-fixed-top">
+        <div class="navbar-inner">
+            <div class="brand">云阅卷</div>
+            <div class="nav-collapse">
+                <%-- <ul id="menu" class="nav">
+                  <c:set var="firstMenu" value="true"/>
+                  <li class="menu "><a class="menu" href="${ctx }/admin/exam" target="menuFrame" >考试管理</a></li>
+                 <li class="menu "><a class="menu" href="" target="menuFrame" >基础管理</a></li>
+                </ul> --%>
+                <ul class="nav pull-right">
+                    <li id="themeSwitch" class="dropdown">
+                        <a class="dropdown-toggle" data-toggle="dropdown" href="#" title="主题切换"><i
+                                class="icon-th-large"></i></a>
+                        <ul class="dropdown-menu">
+                            <li><a href="#"
+                                   onclick="location='${ctx}/admin/home/theme/default?url='+location.href">默认主题</a>
+                            </li>
+                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/cerulean?url='+location.href">天蓝主题</a>
+                            </li>
+                            <li><a href="#" onclick="location='${ctx}/admin/home/theme/readable?url='+location.href">橙色主题</a>
+                            </li>
+                            <li><a href="#"
+                                   onclick="location='${ctx}/admin/home/theme/united?url='+location.href">红色主题</a>
+                            </li>
+                            <li><a href="#"
+                                   onclick="location='${ctx}/admin/home/theme/flat?url='+location.href">Flat主题</a>
+                            </li>
+                        </ul>
+                        <!--[if lte IE 6]>
+                        <script type="text/javascript">$('#themeSwitch').hide();</script><![endif]-->
+                    </li>
+                    <li class="dropdown">
+                        <a class="dropdown-toggle" data-toggle="dropdown" href="#"
+                           title="个人信息">您好,${web_user.name}</a>
+                        <ul class="dropdown-menu">
+                            <li><a href="${ctx}/admin/account/info" target="mainFrame"><i class="icon-user"></i>&nbsp;
+                                个人信息</a></li>
+                            <li><a href="${ctx}/admin/account/modifyPwd" target="mainFrame"><i class="icon-lock"></i>&nbsp;
+                                修改密码</a></li>
+                        </ul>
+                    </li>
+                    <li><a href="${ctx}/logout" title="退出登录">退出</a></li>
+                    <li>&nbsp;</li>
+                </ul>
+            </div><!--/.nav-collapse -->
+        </div>
+    </div>
+    <div class="container-fluid">
+        <div id="content" class="row-fluid">
+            <div id="left">
+                <div class="accordion" id="menu"><c:set var="firstMenu" value="true"/>
+                    <div class="accordion-group">
+                        <%-- <div class="accordion-heading">
+                            <a class="accordion-toggle" data-toggle="collapse" data-parent="#menu" href="#collapse${menu.id}" title="考试管理"><i class="icon-chevron-${firstMenu?'down':'right'}"></i>&nbsp;考试管理</a>
+                        </div> --%>
+                        <div id="collapse1" class="accordion-body collapse ${firstMenu?'in':''}">
+                            <div class="accordion-inner">
+                                <ul class="nav nav-list">
+                                    <li><a href="${ctx}/admin/sys/school" target="mainFrame"><i
+                                            class="icon-th-list"></i>学校管理</a></li>
+                                    <li><a href="${ctx}/admin/sys/config" target="mainFrame"><i
+                                            class="icon-th-list"></i>配置管理</a></li>
+                                    <li><a href="${ctx}/admin/sys/auth" target="mainFrame"><i class="icon-th-list"></i>授权管理</a>
+                                    </li>
+                                    <c:set var="firstMenu" value="false"/>
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div id="openClose" class="close">&nbsp;</div>
+            <div id="right">
+                <iframe id="mainFrame" name="mainFrame" src="" style="overflow:visible;"
+                        scrolling="yes" frameborder="no" width="100%" height="650"></iframe>
+            </div>
+        </div>
+        <div id="footer" class="row-fluid">
+            Copyright &copy; 2021 云阅卷 - Powered By <a href="http://www.qmth.com.cn" target="_blank">启明泰和
+            v${versionName} build${versionDate}</a>
+        </div>
+    </div>
+</div>
+<script type="text/javascript">
+    var leftWidth = "160"; // 左侧窗口大小
+    function wSize() {
+        var minHeight = 500, minWidth = 980;
+        var strs = getWindowSize().toString().split(",");
+        $("#menuFrame, #mainFrame, #openClose").height((strs[0] < minHeight ? minHeight : strs[0]) - $("#header").height() - $("#footer").height() - 32);
+        $("#openClose").height($("#openClose").height() - 5);
+        if (strs[1] < minWidth) {
+            $("#main").css("width", minWidth - 10);
+            $("html,body").css({"overflow": "auto", "overflow-x": "auto", "overflow-y": "auto"});
+        } else {
+            $("#main").css("width", "auto");
+            $("html,body").css({"overflow": "hidden", "overflow-x": "hidden", "overflow-y": "hidden"});
+        }
+        $("#right").width($("#content").width() - $("#left").width() - $("#openClose").width() - 5);
+    }
+</script>
+<script src="${ctxStatic}/common/wsize.min.js" type="text/javascript"></script>
 </body>
 </body>
 </html>
 </html>