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

增加轨迹还原相关的准备功能

luoshi 6 жил өмнө
parent
commit
b347e332a2

+ 25 - 22
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Exam.java

@@ -40,8 +40,21 @@ public class Exam implements Serializable {
     @Column(name = "status", length = 16, nullable = false)
     private ExamStatus status;
 
+    @Column(name = "description", length = 128, nullable = true)
     private String description;
 
+    /**
+     * 开启强制特殊标记
+     */
+    @Column(name = "force_special_tag", nullable = false)
+    private boolean forceSpecialTag;
+
+    /**
+     * 裁切图配置
+     */
+    @Column(name = "slice_config", nullable = true)
+    private String sliceConfig;
+
     @Temporal(TemporalType.TIMESTAMP)
     @Column(name = "create_time")
     private Date createTime;
@@ -52,16 +65,6 @@ public class Exam implements Serializable {
 
     @Column(name = "creator_id")
     private Integer creatorId;
-    /**
-     * 开启强制特殊标记
-     */
-    @Column(name = "force_special_tag",nullable = false)
-    private boolean forceSpecialTag;
-    /**
-     * 裁切图配置
-     */
-    @Column(name = "slice_config")
-    private String sliceConfig;
 
     public Integer getId() {
         return id;
@@ -135,20 +138,20 @@ public class Exam implements Serializable {
         this.schoolId = schoolId;
     }
 
-	public boolean isForceSpecialTag() {
-		return forceSpecialTag;
-	}
+    public boolean isForceSpecialTag() {
+        return forceSpecialTag;
+    }
 
-	public void setForceSpecialTag(boolean forceSpecialTag) {
-		this.forceSpecialTag = forceSpecialTag;
-	}
+    public void setForceSpecialTag(boolean forceSpecialTag) {
+        this.forceSpecialTag = forceSpecialTag;
+    }
 
-	public String getSliceConfig() {
-		return sliceConfig;
-	}
+    public String getSliceConfig() {
+        return sliceConfig;
+    }
 
-	public void setSliceConfig(String sliceConfig) {
-		this.sliceConfig = sliceConfig;
-	}
+    public void setSliceConfig(String sliceConfig) {
+        this.sliceConfig = sliceConfig;
+    }
 
 }

+ 337 - 357
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java

@@ -1,357 +1,337 @@
-package cn.com.qmth.stmms.biz.exam.query;
-
-import java.util.Date;
-
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-
-import cn.com.qmth.stmms.biz.common.BaseQuery;
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-
-public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
-
-    private Integer examId;
-
-    private String campusName;
-
-    private String name;
-    
-    private String examNumberIn;
-
-    private String examNumber;
-
-    private String studentCode;
-
-    private String subjectCode;
-
-    private String batchCode;
-
-    private String packageCode;
-
-    private String subjectLevel;
-
-    private String subjectCategory;
-
-    private Double objectiveScore;
-
-    private Double objectiveScoreGt;
-    
-    private Double objectiveScoreLt;
-
-    private Double subjectiveScore;
-
-    private Double subjectiveScoreGt;
-    
-    private Double subjectiveScoreLt;
-
-    private Boolean upload;
-
-    private Boolean absent;
-    
-    private Boolean manualAbsent;
-
-    private Boolean exception;
-
-    private Boolean uploadTimeNotNull;
-
-    private Date minUploadTime;
-    
-    private Date maxUploadTime;
-    
-    private String campusNameIn;
-
-    private String subjectCodeIn;
-
-    private String campusNameNotIn;
-
-    private String subjectCodeNotIn;
-    
-    private String markLogin;
-    
-    private String markName;
-    
-    private String ids;
-    
-    private Double startScroe; 
-    
-    private Double endScroe;
-
-    private Boolean breach;
-
-    public void orderByExamNumber() {
-        setSort(new Sort(Direction.ASC, "examNumber"));
-    }
-
-    public Integer getExamId() {
-        return examId;
-    }
-
-    public void setExamId(Integer examId) {
-        this.examId = examId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSubjectCode() {
-        return subjectCode;
-    }
-
-    public void setSubjectCode(String subjectCode) {
-        this.subjectCode = subjectCode;
-    }
-
-    public String getExamNumber() {
-        return examNumber;
-    }
-
-    public void setExamNumber(String examNumber) {
-        this.examNumber = examNumber;
-    }
-
-    public String getStudentCode() {
-        return studentCode;
-    }
-
-    public void setStudentCode(String studentCode) {
-        this.studentCode = studentCode;
-    }
-
-    public Boolean getUpload() {
-        return upload;
-    }
-
-    public void setUpload(Boolean upload) {
-        this.upload = upload;
-    }
-
-    public Boolean getAbsent() {
-        return absent;
-    }
-
-    public void setAbsent(Boolean absent) {
-        this.absent = absent;
-    }
-
-    public String getCampusName() {
-        return campusName;
-    }
-
-    public void setCampusName(String campusName) {
-        this.campusName = campusName;
-    }
-
-    public String getBatchCode() {
-        return batchCode;
-    }
-
-    public void setBatchCode(String batchCode) {
-        this.batchCode = batchCode;
-    }
-
-    public String getPackageCode() {
-        return packageCode;
-    }
-
-    public void setPackageCode(String packageCode) {
-        this.packageCode = packageCode;
-    }
-
-    public Boolean getException() {
-        return exception;
-    }
-
-    public void setException(Boolean exception) {
-        this.exception = exception;
-    }
-
-    public Double getObjectiveScore() {
-        return objectiveScore;
-    }
-
-    public void setObjectiveScore(Double objectiveScore) {
-        this.objectiveScore = objectiveScore;
-    }
-
-    public Double getObjectiveScoreGt() {
-        return objectiveScoreGt;
-    }
-
-    public void setObjectiveScoreGt(Double objectiveScoreGt) {
-        this.objectiveScoreGt = objectiveScoreGt;
-    }
-
-    public Double getSubjectiveScore() {
-        return subjectiveScore;
-    }
-
-    public void setSubjectiveScore(Double subjectiveScore) {
-        this.subjectiveScore = subjectiveScore;
-    }
-
-    public Double getSubjectiveScoreGt() {
-        return subjectiveScoreGt;
-    }
-
-    public void setSubjectiveScoreGt(Double subjectiveScoreGt) {
-        this.subjectiveScoreGt = subjectiveScoreGt;
-    }
-
-    public String getSubjectLevel() {
-        return subjectLevel;
-    }
-
-    public void setSubjectLevel(String subjectLevel) {
-        this.subjectLevel = subjectLevel;
-    }
-
-    public String getSubjectCategory() {
-        return subjectCategory;
-    }
-
-    public void setSubjectCategory(String subjectCategory) {
-        this.subjectCategory = subjectCategory;
-    }
-
-    public Boolean getUploadTimeNotNull() {
-        return uploadTimeNotNull;
-    }
-
-    public void setUploadTimeNotNull(Boolean uploadTimeNotNull) {
-        this.uploadTimeNotNull = uploadTimeNotNull;
-    }
-
-    public Date getMinUploadTime() {
-        return minUploadTime;
-    }
-
-    public void setMinUploadTime(Date minUploadTime) {
-        this.minUploadTime = minUploadTime;
-    }
-
-	public Date getMaxUploadTime() {
-		return maxUploadTime;
-	}
-
-	public void setMaxUploadTime(Date maxUploadTime) {
-		this.maxUploadTime = maxUploadTime;
-	}
-
-	public String getExamNumberIn() {
-		return examNumberIn;
-	}
-
-	public void setExamNumberIn(String examNumberIn) {
-		this.examNumberIn = examNumberIn;
-	}
-
-	public Double getObjectiveScoreLt() {
-		return objectiveScoreLt;
-	}
-
-	public void setObjectiveScoreLt(Double objectiveScoreLt) {
-		this.objectiveScoreLt = objectiveScoreLt;
-	}
-
-	public Double getSubjectiveScoreLt() {
-		return subjectiveScoreLt;
-	}
-
-	public void setSubjectiveScoreLt(Double subjectiveScoreLt) {
-		this.subjectiveScoreLt = subjectiveScoreLt;
-	}
-
-	public String getCampusNameIn() {
-		return campusNameIn;
-	}
-
-	public void setCampusNameIn(String campusNameIn) {
-		this.campusNameIn = campusNameIn;
-	}
-
-	public String getSubjectCodeIn() {
-		return subjectCodeIn;
-	}
-
-	public void setSubjectCodeIn(String subjectCodeIn) {
-		this.subjectCodeIn = subjectCodeIn;
-	}
-
-	public String getCampusNameNotIn() {
-		return campusNameNotIn;
-	}
-
-	public void setCampusNameNotIn(String campusNameNotIn) {
-		this.campusNameNotIn = campusNameNotIn;
-	}
-
-	public String getSubjectCodeNotIn() {
-		return subjectCodeNotIn;
-	}
-
-	public void setSubjectCodeNotIn(String subjectCodeNotIn) {
-		this.subjectCodeNotIn = subjectCodeNotIn;
-	}
-
-	public String getMarkLogin() {
-		return markLogin;
-	}
-
-	public void setMarkLogin(String markLogin) {
-		this.markLogin = markLogin;
-	}
-
-	public String getMarkName() {
-		return markName;
-	}
-
-	public void setMarkName(String markName) {
-		this.markName = markName;
-	}
-
-	public String getIds() {
-		return ids;
-	}
-
-	public void setIds(String ids) {
-		this.ids = ids;
-	}
-
-	public Double getStartScroe() {
-		return startScroe;
-	}
-
-	public void setStartScroe(Double startScroe) {
-		this.startScroe = startScroe;
-	}
-
-	public Double getEndScroe() {
-		return endScroe;
-	}
-
-	public void setEndScroe(Double endScroe) {
-		this.endScroe = endScroe;
-	}
-
-	public Boolean getBreach() {
-		return breach;
-	}
-
-	public void setBreach(Boolean breach) {
-		this.breach = breach;
-	}
-
-	public Boolean getManualAbsent() {
-		return manualAbsent;
-	}
-
-	public void setManualAbsent(Boolean manualAbsent) {
-		this.manualAbsent = manualAbsent;
-	}
-
-}
+package cn.com.qmth.stmms.biz.exam.query;
+
+import java.util.Date;
+
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+
+import cn.com.qmth.stmms.biz.common.BaseQuery;
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+
+public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
+
+    private Integer examId;
+
+    private String campusName;
+
+    private String name;
+
+    private String examNumberIn;
+
+    private String examNumber;
+
+    private String studentCode;
+
+    private String subjectCode;
+
+    private String batchCode;
+
+    private String packageCode;
+
+    private String subjectLevel;
+
+    private String subjectCategory;
+
+    private Double objectiveScore;
+
+    private Double objectiveScoreGt;
+
+    private Double objectiveScoreLt;
+
+    private Double subjectiveScore;
+
+    private Double subjectiveScoreGt;
+
+    private Double subjectiveScoreLt;
+
+    private Boolean upload;
+
+    private Boolean absent;
+
+    private Boolean manualAbsent;
+
+    private Boolean exception;
+
+    private Boolean uploadTimeNotNull;
+
+    private Date minUploadTime;
+
+    private Date maxUploadTime;
+
+    private String campusNameIn;
+
+    private String subjectCodeIn;
+
+    private String campusNameNotIn;
+
+    private String subjectCodeNotIn;
+
+    private String ids;
+
+    private Double startScroe;
+
+    private Double endScroe;
+
+    private Boolean breach;
+
+    public void orderByExamNumber() {
+        setSort(new Sort(Direction.ASC, "examNumber"));
+    }
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public String getExamNumber() {
+        return examNumber;
+    }
+
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public Boolean getUpload() {
+        return upload;
+    }
+
+    public void setUpload(Boolean upload) {
+        this.upload = upload;
+    }
+
+    public Boolean getAbsent() {
+        return absent;
+    }
+
+    public void setAbsent(Boolean absent) {
+        this.absent = absent;
+    }
+
+    public String getCampusName() {
+        return campusName;
+    }
+
+    public void setCampusName(String campusName) {
+        this.campusName = campusName;
+    }
+
+    public String getBatchCode() {
+        return batchCode;
+    }
+
+    public void setBatchCode(String batchCode) {
+        this.batchCode = batchCode;
+    }
+
+    public String getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+
+    public Boolean getException() {
+        return exception;
+    }
+
+    public void setException(Boolean exception) {
+        this.exception = exception;
+    }
+
+    public Double getObjectiveScore() {
+        return objectiveScore;
+    }
+
+    public void setObjectiveScore(Double objectiveScore) {
+        this.objectiveScore = objectiveScore;
+    }
+
+    public Double getObjectiveScoreGt() {
+        return objectiveScoreGt;
+    }
+
+    public void setObjectiveScoreGt(Double objectiveScoreGt) {
+        this.objectiveScoreGt = objectiveScoreGt;
+    }
+
+    public Double getSubjectiveScore() {
+        return subjectiveScore;
+    }
+
+    public void setSubjectiveScore(Double subjectiveScore) {
+        this.subjectiveScore = subjectiveScore;
+    }
+
+    public Double getSubjectiveScoreGt() {
+        return subjectiveScoreGt;
+    }
+
+    public void setSubjectiveScoreGt(Double subjectiveScoreGt) {
+        this.subjectiveScoreGt = subjectiveScoreGt;
+    }
+
+    public String getSubjectLevel() {
+        return subjectLevel;
+    }
+
+    public void setSubjectLevel(String subjectLevel) {
+        this.subjectLevel = subjectLevel;
+    }
+
+    public String getSubjectCategory() {
+        return subjectCategory;
+    }
+
+    public void setSubjectCategory(String subjectCategory) {
+        this.subjectCategory = subjectCategory;
+    }
+
+    public Boolean getUploadTimeNotNull() {
+        return uploadTimeNotNull;
+    }
+
+    public void setUploadTimeNotNull(Boolean uploadTimeNotNull) {
+        this.uploadTimeNotNull = uploadTimeNotNull;
+    }
+
+    public Date getMinUploadTime() {
+        return minUploadTime;
+    }
+
+    public void setMinUploadTime(Date minUploadTime) {
+        this.minUploadTime = minUploadTime;
+    }
+
+    public Date getMaxUploadTime() {
+        return maxUploadTime;
+    }
+
+    public void setMaxUploadTime(Date maxUploadTime) {
+        this.maxUploadTime = maxUploadTime;
+    }
+
+    public String getExamNumberIn() {
+        return examNumberIn;
+    }
+
+    public void setExamNumberIn(String examNumberIn) {
+        this.examNumberIn = examNumberIn;
+    }
+
+    public Double getObjectiveScoreLt() {
+        return objectiveScoreLt;
+    }
+
+    public void setObjectiveScoreLt(Double objectiveScoreLt) {
+        this.objectiveScoreLt = objectiveScoreLt;
+    }
+
+    public Double getSubjectiveScoreLt() {
+        return subjectiveScoreLt;
+    }
+
+    public void setSubjectiveScoreLt(Double subjectiveScoreLt) {
+        this.subjectiveScoreLt = subjectiveScoreLt;
+    }
+
+    public String getCampusNameIn() {
+        return campusNameIn;
+    }
+
+    public void setCampusNameIn(String campusNameIn) {
+        this.campusNameIn = campusNameIn;
+    }
+
+    public String getSubjectCodeIn() {
+        return subjectCodeIn;
+    }
+
+    public void setSubjectCodeIn(String subjectCodeIn) {
+        this.subjectCodeIn = subjectCodeIn;
+    }
+
+    public String getCampusNameNotIn() {
+        return campusNameNotIn;
+    }
+
+    public void setCampusNameNotIn(String campusNameNotIn) {
+        this.campusNameNotIn = campusNameNotIn;
+    }
+
+    public String getSubjectCodeNotIn() {
+        return subjectCodeNotIn;
+    }
+
+    public void setSubjectCodeNotIn(String subjectCodeNotIn) {
+        this.subjectCodeNotIn = subjectCodeNotIn;
+    }
+
+    public String getIds() {
+        return ids;
+    }
+
+    public void setIds(String ids) {
+        this.ids = ids;
+    }
+
+    public Double getStartScroe() {
+        return startScroe;
+    }
+
+    public void setStartScroe(Double startScroe) {
+        this.startScroe = startScroe;
+    }
+
+    public Double getEndScroe() {
+        return endScroe;
+    }
+
+    public void setEndScroe(Double endScroe) {
+        this.endScroe = endScroe;
+    }
+
+    public Boolean getBreach() {
+        return breach;
+    }
+
+    public void setBreach(Boolean breach) {
+        this.breach = breach;
+    }
+
+    public Boolean getManualAbsent() {
+        return manualAbsent;
+    }
+
+    public void setManualAbsent(Boolean manualAbsent) {
+        this.manualAbsent = manualAbsent;
+    }
+
+}

+ 9 - 68
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -1,9 +1,7 @@
 package cn.com.qmth.stmms.admin.exam;
 
-import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -29,21 +27,15 @@ import cn.com.qmth.stmms.biz.exam.model.ExamPackage;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
-import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
-import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.ScoreRateService;
 import cn.com.qmth.stmms.biz.lock.LockService;
-import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
-import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
-import cn.com.qmth.stmms.biz.user.model.User;
-import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
@@ -76,15 +68,18 @@ public class ScoreController extends BaseExamController {
     @Autowired
     private MarkService markService;
 
-    @Autowired
-    private MarkLibraryService markLibraryService;
-
     @Autowired
     private MarkGroupService groupService;
 
     @Autowired
     private ScoreRateService scoreRateService;
 
+    @Autowired
+    private AsyncTaskExecutor taskExecutor;
+
+    @Autowired
+    private LockService lockService;
+
     @Value("${sheet.image.server}")
     private String imageServer;
 
@@ -94,18 +89,6 @@ public class ScoreController extends BaseExamController {
     @Value("${card.server}")
     private String cardServer;
 
-    @Autowired
-    private MarkerService markerService;
-
-    @Autowired
-    private UserService userService;
-
-    @Autowired
-    private AsyncTaskExecutor taskExecutor;
-
-    @Autowired
-    private LockService lockService;
-
     @RequestMapping
     public ModelAndView list(HttpServletRequest request, ExamStudentSearchQuery query,
             @RequestParam(defaultValue = "0") Integer filter) {
@@ -117,8 +100,6 @@ public class ScoreController extends BaseExamController {
             query.setSubjectCode(subjectCode);
         }
         query.setExamId(examId);
-        // query.setUpload(true);
-        // query.setAbsent(false);
         query.orderByExamNumber();
         if (filter == 1) {
             query.setObjectiveScore(0d);
@@ -127,49 +108,12 @@ public class ScoreController extends BaseExamController {
             query.setObjectiveScoreGt(0d);
             query.setSubjectiveScore(0d);
         }
-        String ids = getStudentIdsByMarkLoginAndMarkName(query.getMarkLogin(), query.getMarkName());
-        if (StringUtils.isNotBlank(ids)) {
-            query.setIds(ids);
-        }
         subjectFilter(query, wu);
         query = studentService.findByQuery(query);
         for (ExamStudent student : query.getResult()) {
             buildSheetUrl(student);
             buildPackageUrl(student);
             buildAnswerUrl(student);
-            student.setSubjectRemark(subjectService.find(student.getExamId(), student.getSubjectCode()).getRemark());
-            List<Marker> markers = markerService.findByStudentId(student.getId());
-            if (!markers.isEmpty()) {
-                String loginNames = "";
-                String names = "";
-                for (Marker marker : markers) {
-                    loginNames = loginNames.equals("") ? marker.getLoginName()
-                            : loginNames + "," + marker.getLoginName();
-                    names = names.equals("") ? marker.getName() : names + "," + marker.getName();
-                }
-                student.setMarkLogin(loginNames);
-                student.setMarkName(names);
-            }
-            List<MarkLibrary> markLibrarys = markLibraryService.findByStudentId(student.getId());
-            if (!markLibrarys.isEmpty()) {
-                Set<String> tags = new HashSet<String>();
-                for (MarkLibrary markLibrary : markLibrarys) {
-                    if (markLibrary.getTags() != null) {
-                        String[] tag = markLibrary.getTags().split(",");
-                        for (String s : tag) {
-                            tags.add(s);
-                        }
-                    }
-                    if (markLibrary.getHeaderId() != null) {
-                        User user = userService.findById(markLibrary.getHeaderId());
-                        student.setMarkLogin(user.getLoginName());
-                        student.setMarkName(user.getName());
-                    }
-                }
-                if (!tags.isEmpty()) {
-                    student.setTagValue(tags.toString());
-                }
-            }
         }
         view.addObject("query", query);
         view.addObject("filter", filter);
@@ -255,15 +199,9 @@ public class ScoreController extends BaseExamController {
         int examId = getSessionExamId(request);
         String subjectCode = RequestUtils.getSession(request).getParameter("subjectCode");
         query.setExamId(examId);
-        // query.setUpload(true);
-        // query.setAbsent(false);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
         subjectFilter(query, wu);
-        String ids = getStudentIdsByMarkLoginAndMarkName(query.getMarkLogin(), query.getMarkName());
-        if (StringUtils.isNotBlank(ids)) {
-            query.setIds(ids);
-        }
         query = studentService.findByQuery(query);
         String fileName = "成绩单.xlsx";
         try {
@@ -356,6 +294,9 @@ public class ScoreController extends BaseExamController {
         if (subject != null && subject.getHasAnswer().booleanValue()) {
             student.setAnswerUrl(subject.getAnswerUrl());
         }
+        if (subject != null) {
+            student.setSubjectRemark(StringUtils.trimToEmpty(subject.getRemark()));
+        }
     }
 
     public String getStudentIdsByMarkLoginAndMarkName(String markLogin, String markName) {

+ 73 - 0
stmms-web/src/main/webapp/WEB-INF/views/include/sheetTagView.jsp

@@ -0,0 +1,73 @@
+<%@ page contentType="text/html;charset=UTF-8"%>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery-ui.min.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery.mousewheel.min.js"></script>
+
+<link rel="stylesheet" type="text/css" href="${ctxStatic}/jBox/Source/jBox.css">
+<script type="text/javascript" src="${ctxStatic}/jBox/Source/jBox.min.js"></script>
+
+<script type="text/javascript">
+var sheetModal = new jBox('Modal');
+$(document).ready(function() {
+	//$('#sheet-view-content').find('object').each(function(index, obj){
+		//obj.width = $(window).width()*0.4;
+		//obj.height = $(window).height()*0.83;
+	//});
+	$('#left-answer-div').find('iframe').height($(window).height()*0.83);
+});
+function initSheetPopover(title, sheetServer, sheetUrl, answerUrl) {
+	//if(sheetModal!=undefined){
+	//	sheetModal.destroy();
+	//}
+	initSheetPopoverContent(sheetServer, sheetUrl.split(','), answerUrl);
+
+	sheetModal.setWidth($(window).width()*0.9);
+	sheetModal.setHeight($(window).height()*0.85);
+	sheetModal.setTitle(title);
+	sheetModal.setContent($('#sheet-view-content'));
+	sheetModal.open();
+}
+function initSheetPopoverContent(sheetServer, sheetUrls, answerUrl, tags){
+	if(answerUrl!=undefined && answerUrl.length>0){
+		$('#right-sheet-div').removeClass('span12');
+		$('#right-sheet-div').addClass('span6');
+		$('#left-answer-div').find('iframe').attr('src', answerUrl);
+		$('#left-answer-div').show();
+	}else{
+		$('#right-sheet-div').removeClass('span6');
+		$('#right-sheet-div').addClass('span12');
+		$('#left-answer-div').find('iframe').attr('src', '');
+		$('#left-answer-div').hide();
+	}
+
+	$('#right-nav, #right-content').empty();
+	for(var i=0;i<sheetUrls.length;i++){
+		var url = sheetServer+sheetUrls[i];
+		$('#right-nav').append('<li><a href="#sheet_'+i+'" data-toggle="tab">第'+(i+1)+'页</a></li>');
+		
+		var pane = $('<div class="tab-pane fade" id="sheet_'+i+'" style="overflow: scroll;"><canvas></canvas></div>').appendTo($('#right-content'));
+		var canvas = pane.find('canvas')[0];
+		var image = new Image();
+		image.onload = function(){
+		    canvas.width = image.width;
+		    canvas.height = image.height;
+		    var ctx = canvas.getContext("2d");
+		    ctx.drawImage(image, 0, 0, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height);
+		};
+		image.src = url;
+	}
+	$('#right-nav a:first').trigger('click');
+}
+</script>
+<div id="sheet-view-content" class="container-fluid" style="display:none">
+	<div class="row-fluid">
+		<div id="left-answer-div" class="span6" style="overflow:scroll">
+			<iframe src="" border="0" scrolling="yes" width="100%"></iframe>
+		</div>
+		<div id="right-sheet-div" class="span6">
+			<ul id="right-nav" class="nav nav-tabs">
+			</ul>
+			<div id="right-content" class="tab-content">
+			</div>
+		</div>
+	</div>
+</div>

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

@@ -1,271 +1,245 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
-<html>
-<head>
-	<title>成绩查询</title>
-	<meta name="decorator" content="default"/>
-	<%@include file="/WEB-INF/views/include/head.jsp" %>
-	<style type="text/css">.sort{color:#0663A2;cursor:pointer;}</style>
-</head>
-<body>
-	<form id="searchForm" action="${ctx}/admin/exam/score" method="post" class="breadcrumb form-search">
-		<input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
-		<input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
-		<div>
-			<label>姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名</label>
-			<input type="text" name="name" value="${query.name}"  maxlength="10" class="input-mini"/>
-			<label>准考证号</label>
-			<input type="text" name="examNumber" value="${query.examNumber}" maxlength="50" class="input-small"/>
-			<label>学号</label>
-			<input type="text" name="studentCode" value="${query.studentCode}" maxlength="30" class="input-small"/>
-			<label>科目</label>
-			<select class="input-large" name="subjectCode">
-				<option value="">请选择</option>
-				<c:forEach items="${subjectList}" var="subject">
-				<option value="${subject.code}" <c:if test="${subject.code==query.subjectCode}">selected</c:if>>${subject.code}-${subject.name}</option>
-				</c:forEach>
-			</select>
-			<label>评卷账号</label>
-			<input type="text" name="markLogin" value="${query.markLogin}"  maxlength="20" class="input-medium"/>
-			<br/><br/>
-			<label>评卷姓名</label>
-			<input type="text" name="markName" value="${query.markName}"  maxlength="20" class="input-mini"/>
-			<label>筛选</label>
-			<select class="input-medium" name="filter">
-				<option value="0">无</option>
-				<option value="1" <c:if test="${filter==1}">selected</c:if>>客观0分,主观有分</option>
-				<option value="2" <c:if test="${filter==2}">selected</c:if>>客观有分,主观0分</option>
-			</select>
-			
-			<label>是否缺考</label>
-			<select id="absent" name="absent" class="input-small">
-				<option value="">不限</option>
-				<option value="1" <c:if test="${query.absent!=null && query.absent==true}">selected</c:if>>缺考</option>
-				<option value="0" <c:if test="${query.absent!=null && query.absent==false}">selected</c:if>>正常</option>
-			</select>
-
-            <label>是否上传</label>
-            <select id="upload" name="upload" class="input-small">
-                <option value="">不限</option>
-                <option value="1" <c:if test="${query.upload!=null && query.upload==true}">selected</c:if>>已上传</option>
-                <option value="0" <c:if test="${query.upload!=null && query.upload==false}">selected</c:if>>未上传</option>
-            </select>
-
-            <label>是否违纪</label>
-            <select id="breach" name="breach" class="input-small">
-                <option value="">不限</option>
-                <option value="1" <c:if test="${query.breach!=null && query.breach==true}">selected</c:if>>违纪</option>
-                <option value="0" <c:if test="${query.breach!=null && query.breach==false}">selected</c:if>>正常</option>
-            </select>
-            <br/><br/>
-            <!--     总分 > startScore and 总分 <=endScore             -->
-			<label>总分:从</label>
-			<input  type="text" number="true" id="startScroe"  name="startScroe"value="${query.startScroe}" class="input-mini"/>
-			<label> 到&nbsp;&nbsp;&nbsp;</label>
-			<input type="text"  number="true" id="endScroe" name="endScroe"  value="${query.endScroe}"  class="input-mini"/>
-			
-			<input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
-			&nbsp;
-			<c:if test="${!web_user.schoolViewer}">
-			<input id="export-button" class="btn" type="button" value="导出" onclick="goExport()"/>
-			</c:if>
-			<c:if test="${web_user.schoolAdmin}">
-			&nbsp;
-			<c:if test="${running==false}">
-			<a href="${ctx}/admin/exam/score/calculate" class="btn">重新统分</a>
-			</c:if>
-			<c:if test="${running==true}">
-			<a href="javascript:void(0)" class="btn" disabled>正在统分</a>
-			</c:if>
-			</c:if>
-		</div>
-	</form>
-	<tags:message content="${message}"/>
-	<table id="contentTable" class="table table-striped table-bordered table-condensed"> 
-		<thead>
-			<tr>
-				<th>准考证号</th>
-				<th>姓名</th>
-				<th>学号</th>
-				<th>科目</th>
-				<th>层次</th>
-				<th>专业类型</th>
-				<th>客观总分</th>
-				<th>主观总分</th>
-				<th>全卷总分</th>
-				<th>是否缺考</th>
-				<th>是否上传</th>
-				<th>是否违纪</th>
-				<th>标记卷类型</th>
-<!-- 				<th>阅卷账号</th> -->
-<!-- 				<th>阅卷姓名</th> -->
-				<th>查看图片</th>
-			</tr>
-		</thead>
-		<tbody>
-		<c:forEach items="${query.result}" var="student">
-			<tr>
-				<td>
-				<a href="##" class="detail-link" data-exam-number="${student.examNumber}">${student.examNumber}</a>
-				</td>
-				<td>${student.name}</td>
-				<td>${student.studentCode}</td>
-				<td>${student.subjectCode}-${student.subjectName}&nbsp;${student.subjectRemark}</td>
-				<td>${student.subjectLevel}</td>
-				<td>${student.subjectCategory}</td>
-<td style="text-align: center;">
-                    <c:choose>
-                        <c:when test="${student.absent == true || student.upload == false }">
-                            -
-                        </c:when>
-                        <c:when test="${student.breach == true}">
-                            0
-                        </c:when>
-                        <c:otherwise>
-                            ${student.objectiveScoreString}
-                        </c:otherwise>
-                    </c:choose>
-                </td>
-				<td style="text-align: center;">
-                <c:choose>
-                    <c:when test="${student.absent == true || student.upload == false }">
-                        -
-                    </c:when>
-                    <c:when test="${student.breach == true}">
-                        0
-                    </c:when>
-                    <c:otherwise>
-                        ${student.subjectiveScoreString}
-                    </c:otherwise>
-                </c:choose>
-                </td>
-				<td style="text-align: center;">
-                    <c:choose>
-                        <c:when test="${student.absent == true || student.upload == false }">
-                           -
-                        </c:when>
-                        <c:when test="${student.breach == true}">
-                           0
-                        </c:when>
-                        <c:otherwise>
-                            ${student.totalScoreString}
-                        </c:otherwise>
-                    </c:choose>
-				</td>
-				<td>
-					<!--在成绩查询页面 未上传或者缺考的情况都判断为缺考情况 -->
-					<c:if test="${student.absent == true || student.upload == false }">
-						缺考
-					</c:if>
-				</td>
-                <td>
-                    <c:choose>
-                        <c:when test="${student.upload == false }">
-                            未上传
-                        </c:when>
-                        <c:otherwise>
-                            已上传
-                        </c:otherwise>
-                    </c:choose>
-                </td>
-                <td>
-                    <c:if test="${student.breach == true}">
-                        违纪
-                    </c:if>
-                </td>
-				<td>
-                    <c:if test="${student.tagValue.indexOf('1',0)>-1}">
-                        试卷雷同<br>
-                    </c:if>
-                    <c:if test="${student.tagValue.indexOf('2',0)>-1}">
-                        科目错误<br>
-                    </c:if>
-                    <c:if test="${student.tagValue.indexOf('3',0)>-1}">
-                        贴错条码<br>
-                    </c:if>
-                    <c:if test="${student.tagValue.indexOf('4',0)>-1}">
-                        违纪<br>
-                    </c:if>
-				</td>
-<%-- 				<td ><div style="width:120px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;" title="${student.markLogin}">${student.markLogin}</div></td> --%>
-<%-- 				<td>${student.markName}</td> --%>
-				<td>
-					<a class="sheet-link" href="##" data-sheet-url="${student.sheetUrlString}" data-answer-url="<c:if test="${student.answerUrl!=null}">${cardServer}${student.answerUrl}</c:if>" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">原图</a>
-<%-- 					<a class="track-link" href="##" data-image-url="${ctx}/admin/exam/track?studentId=${student.id}" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}">阅卷轨迹</a> --%>
-					<a class="package-link" href="##" data-image-url="${student.packageUrlString}" data-title="${student.packageCode}">签到表</a>
-<%-- 					<a target="_blank" href="${ctx}/admin/mark/leader/index?studentId=${student.id}">给分</a> --%>
-				</td>
-			</tr>
-		</c:forEach>
-		</tbody>
-	</table>
-	<div class="pagination">${query}</div>
-	<%@include file="/WEB-INF/views/include/trackView.jsp" %>
-	<%@include file="/WEB-INF/views/include/sheetView.jsp" %>
-	<%@include file="/WEB-INF/views/include/imageView.jsp" %>
-<script type="text/javascript">
-$(document).ready(function() {
-    /* new jBox('Image', {
-    	imageFade: 0,
-    	delayOpen: 0,
-    	delayClose: 0,
-    	maxHeight: $(window).height()*0.88
-    }); */
-	$("#searchForm").validate();
-    
-    $('.detail-link').click(function(){
-    	var url = '${ctx}/admin/exam/score/detail?examNumber=' + $(this).attr('data-exam-number') + '&queryString=' + encodeURIComponent($('#searchForm').serialize());
-    	window.location.href = url;
-    });
-    $('.sheet-link').click(function(){
-    	initSheetPopover($(this).attr('data-title'), '${imageServer}', $(this).attr('data-sheet-url'), $(this).attr('data-answer-url'));
-    	return false;
-    });
-    $('.package-link').click(function(){
-    	initImagePopover($(this).attr('data-title'), '${packageServer}', $(this).attr('data-image-url'));
-    	return false;
-    });
-    $('.track-link').click(function(){
-    	initTrackPopover($(this).attr('data-title'),$(this).attr('data-image-url'));
-    	return false;
-    });
-});
-function page(n,s){
-	$("#pageNumber").val(n);
-	$("#pageSize").val(s);
-	$("#searchForm").attr('action','${ctx}/admin/exam/score');
-	$("#searchForm").submit();
-	return false;
-}
-function goSearch(){
-    var startScroe = $("#startScroe").val();var endScore = $("#endScroe").val();
-    if(startScroe.length>0){
-        if(endScore.length == 0){
-            alert("请输入结束分数值!");return false;
-        }
-    }if(endScore.length>0){
-        if(startScroe.length == 0){
-            alert("请输入开始分数值!");return false;
-        }
-    }if(endScore.length>0 && startScroe.length > 0){
-        if(parseInt(startScroe) > parseInt(endScore)){
-            alert("开始分值必须小于结束分值");return false;
-        }
-    }
-	$("#pageNumber").val(1);
-	$("#pageSize").val('${query.pageSize}');
-	$("#searchForm").attr('action','${ctx}/admin/exam/score');
-	$("#searchForm").submit();
-	return false;
-}
-function goExport(){
-	$("#searchForm").attr('action','${ctx}/admin/exam/score/export');
-	$("#searchForm").submit();
-}
-function goExportScore(){
-	$("#searchForm").attr('action','${ctx}/admin/exam/score/exportScore');
-	$("#searchForm").submit();
-}
-</script>	
-</body>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+	<title>成绩查询</title>
+	<meta name="decorator" content="default"/>
+	<%@include file="/WEB-INF/views/include/head.jsp" %>
+	<style type="text/css">.sort{color:#0663A2;cursor:pointer;}</style>
+</head>
+<body>
+	<form id="searchForm" action="${ctx}/admin/exam/score" method="post" class="breadcrumb form-search">
+		<input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
+		<input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
+		<div>
+			<label>姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名</label>
+			<input type="text" name="name" value="${query.name}"  maxlength="10" class="input-mini"/>
+			<label>准考证号</label>
+			<input type="text" name="examNumber" value="${query.examNumber}" maxlength="50" class="input-small"/>
+			<label>学号</label>
+			<input type="text" name="studentCode" value="${query.studentCode}" maxlength="30" class="input-small"/>
+			<label>科目</label>
+			<select class="input-large" name="subjectCode">
+				<option value="">请选择</option>
+				<c:forEach items="${subjectList}" var="subject">
+				<option value="${subject.code}" <c:if test="${subject.code==query.subjectCode}">selected</c:if>>${subject.code}-${subject.name}</option>
+				</c:forEach>
+			</select>
+			<label>筛选</label>
+			<select class="input-medium" name="filter">
+				<option value="0">无</option>
+				<option value="1" <c:if test="${filter==1}">selected</c:if>>客观0分,主观有分</option>
+				<option value="2" <c:if test="${filter==2}">selected</c:if>>客观有分,主观0分</option>
+			</select>
+			<label>是否缺考</label>
+			<select id="absent" name="absent" class="input-small">
+				<option value="">不限</option>
+				<option value="1" <c:if test="${query.absent!=null && query.absent==true}">selected</c:if>>缺考</option>
+				<option value="0" <c:if test="${query.absent!=null && query.absent==false}">selected</c:if>>正常</option>
+			</select>
+            <label>是否上传</label>
+            <select id="upload" name="upload" class="input-small">
+                <option value="">不限</option>
+                <option value="1" <c:if test="${query.upload!=null && query.upload==true}">selected</c:if>>已上传</option>
+                <option value="0" <c:if test="${query.upload!=null && query.upload==false}">selected</c:if>>未上传</option>
+            </select>
+            <label>是否违纪</label>
+            <select id="breach" name="breach" class="input-small">
+                <option value="">不限</option>
+                <option value="1" <c:if test="${query.breach!=null && query.breach==true}">selected</c:if>>违纪</option>
+                <option value="0" <c:if test="${query.breach!=null && query.breach==false}">selected</c:if>>正常</option>
+            </select>
+            <br/><br/>
+            <!--     总分 > startScore and 总分 <=endScore             -->
+			<label>总分:从</label>
+			<input  type="text" number="true" id="startScroe"  name="startScroe"value="${query.startScroe}" class="input-mini"/>
+			<label> 到&nbsp;&nbsp;&nbsp;</label>
+			<input type="text"  number="true" id="endScroe" name="endScroe"  value="${query.endScroe}"  class="input-mini"/>
+			
+			<input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
+			&nbsp;
+			<c:if test="${!web_user.schoolViewer}">
+			<input id="export-button" class="btn" type="button" value="导出" onclick="goExport()"/>
+			</c:if>
+			<c:if test="${web_user.schoolAdmin}">
+			&nbsp;
+			<c:if test="${running==false}">
+			<a href="${ctx}/admin/exam/score/calculate" class="btn">重新统分</a>
+			</c:if>
+			<c:if test="${running==true}">
+			<a href="javascript:void(0)" class="btn" disabled>正在统分</a>
+			</c:if>
+			</c:if>
+		</div>
+	</form>
+	<tags:message content="${message}"/>
+	<table id="contentTable" class="table table-striped table-bordered table-condensed"> 
+		<thead>
+			<tr>
+				<th>准考证号</th>
+				<th>姓名</th>
+				<th>学号</th>
+				<th>科目</th>
+				<th>层次</th>
+				<th>专业类型</th>
+				<th>客观总分</th>
+				<th>主观总分</th>
+				<th>全卷总分</th>
+				<th>是否缺考</th>
+				<th>是否上传</th>
+				<th>是否违纪</th>
+				<th>查看图片</th>
+			</tr>
+		</thead>
+		<tbody>
+		<c:forEach items="${query.result}" var="student">
+			<tr>
+				<td>
+				<a href="##" class="detail-link" data-exam-number="${student.examNumber}">${student.examNumber}</a>
+				</td>
+				<td>${student.name}</td>
+				<td>${student.studentCode}</td>
+				<td>${student.subjectCode}-${student.subjectName}&nbsp;${student.subjectRemark}</td>
+				<td>${student.subjectLevel}</td>
+				<td>${student.subjectCategory}</td>
+				<td style="text-align: center;">
+                    <c:choose>
+                        <c:when test="${student.absent == true || student.upload == false }">
+                            -
+                        </c:when>
+                        <c:when test="${student.breach == true}">
+                            0
+                        </c:when>
+                        <c:otherwise>
+                            ${student.objectiveScoreString}
+                        </c:otherwise>
+                    </c:choose>
+                </td>
+				<td style="text-align: center;">
+                <c:choose>
+                    <c:when test="${student.absent == true || student.upload == false }">
+                        -
+                    </c:when>
+                    <c:when test="${student.breach == true}">
+                        0
+                    </c:when>
+                    <c:otherwise>
+                        ${student.subjectiveScoreString}
+                    </c:otherwise>
+                </c:choose>
+                </td>
+				<td style="text-align: center;">
+                    <c:choose>
+                        <c:when test="${student.absent == true || student.upload == false }">
+                           -
+                        </c:when>
+                        <c:when test="${student.breach == true}">
+                           0
+                        </c:when>
+                        <c:otherwise>
+                            ${student.totalScoreString}
+                        </c:otherwise>
+                    </c:choose>
+				</td>
+				<td>
+					<!--在成绩查询页面 未上传或者缺考的情况都判断为缺考情况 -->
+					<c:if test="${student.absent == true || student.upload == false }">
+						缺考
+					</c:if>
+				</td>
+                <td>
+                    <c:choose>
+                        <c:when test="${student.upload == false }">
+                            未上传
+                        </c:when>
+                        <c:otherwise>
+                            已上传
+                        </c:otherwise>
+                    </c:choose>
+                </td>
+                <td>
+                    <c:if test="${student.breach == true}">
+                        违纪
+                    </c:if>
+                </td>
+				<td>
+					<a class="sheet-link" href="##" data-sheet-url="${student.sheetUrlString}" data-answer-url="<c:if test="${student.answerUrl!=null}">${cardServer}${student.answerUrl}</c:if>" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">原图</a>
+					<%--
+					<a class="track-link" href="##" data-image-url="${ctx}/admin/exam/track?studentId=${student.id}" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}">阅卷轨迹</a> 
+					--%>
+					<a class="package-link" href="##" data-image-url="${student.packageUrlString}" data-title="${student.packageCode}">签到表</a>
+				</td>
+			</tr>
+		</c:forEach>
+		</tbody>
+	</table>
+	<div class="pagination">${query}</div>
+	<%@include file="/WEB-INF/views/include/trackView.jsp" %>
+	<%@include file="/WEB-INF/views/include/sheetView.jsp" %>
+	<%@include file="/WEB-INF/views/include/imageView.jsp" %>
+<script type="text/javascript">
+$(document).ready(function() {
+    /* new jBox('Image', {
+    	imageFade: 0,
+    	delayOpen: 0,
+    	delayClose: 0,
+    	maxHeight: $(window).height()*0.88
+    }); */
+	$("#searchForm").validate();
+    
+    $('.detail-link').click(function(){
+    	var url = '${ctx}/admin/exam/score/detail?examNumber=' + $(this).attr('data-exam-number') + '&queryString=' + encodeURIComponent($('#searchForm').serialize());
+    	window.location.href = url;
+    });
+    $('.sheet-link').click(function(){
+    	initSheetPopover($(this).attr('data-title'), '${imageServer}', $(this).attr('data-sheet-url'), $(this).attr('data-answer-url'));
+    	return false;
+    });
+    $('.package-link').click(function(){
+    	initImagePopover($(this).attr('data-title'), '${packageServer}', $(this).attr('data-image-url'));
+    	return false;
+    });
+    $('.track-link').click(function(){
+    	initTrackPopover($(this).attr('data-title'),$(this).attr('data-image-url'));
+    	return false;
+    });
+});
+function page(n,s){
+	$("#pageNumber").val(n);
+	$("#pageSize").val(s);
+	$("#searchForm").attr('action','${ctx}/admin/exam/score');
+	$("#searchForm").submit();
+	return false;
+}
+function goSearch(){
+    var startScroe = $("#startScroe").val();var endScore = $("#endScroe").val();
+    if(startScroe.length>0){
+        if(endScore.length == 0){
+            alert("请输入结束分数值!");return false;
+        }
+    }if(endScore.length>0){
+        if(startScroe.length == 0){
+            alert("请输入开始分数值!");return false;
+        }
+    }if(endScore.length>0 && startScroe.length > 0){
+        if(parseInt(startScroe) > parseInt(endScore)){
+            alert("开始分值必须小于结束分值");return false;
+        }
+    }
+	$("#pageNumber").val(1);
+	$("#pageSize").val('${query.pageSize}');
+	$("#searchForm").attr('action','${ctx}/admin/exam/score');
+	$("#searchForm").submit();
+	return false;
+}
+function goExport(){
+	$("#searchForm").attr('action','${ctx}/admin/exam/score/export');
+	$("#searchForm").submit();
+}
+function goExportScore(){
+	$("#searchForm").attr('action','${ctx}/admin/exam/score/exportScore');
+	$("#searchForm").submit();
+}
+</script>	
+</body>
 </html>

+ 2 - 1
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -114,10 +114,11 @@ CREATE TABLE `eb_exam` (
   `exam_time` datetime NOT NULL COMMENT '考试时间',
   `status` varchar(16) NOT NULL COMMENT '状态',
   `description` varchar(128) DEFAULT NULL COMMENT '描述',
+  `force_special_tag` tinyint(1) NOT NULL COMMENT '强制标记',
+  `slice_config` text DEFAULT NULL COMMENT '裁切图配置',
   `creator_id` int(11) NOT NULL COMMENT '创建人',
   `create_time` datetime NOT NULL COMMENT '创建时间',
   `update_time` datetime DEFAULT NULL COMMENT '修改时间',
-  `force_special_tag` tinyint(1) NOT NULL COMMENT '强制标记',
   PRIMARY KEY (`id`),
   KEY `index1` (`school_id`,`create_time`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='考试表';