瀏覽代碼

更新评卷端接口

ting.yin 4 年之前
父節點
當前提交
783660b820

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

@@ -122,6 +122,20 @@ public class Exam implements Serializable {
     @Column(name = "objective_status", length = 16, nullable = false)
     private ObjectiveStatus objectiveStatus;
 
+    /**
+     * 评卷起始时间
+     */
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "mark_start_time")
+    private Date startTime;
+
+    /**
+     * 评卷结束时间
+     */
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "mark_end_time")
+    private Date endTime;
+
     public Integer getId() {
         return id;
     }
@@ -302,4 +316,20 @@ public class Exam implements Serializable {
         this.objectiveStatus = objectiveStatus;
     }
 
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
 }

+ 16 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkResult.java

@@ -5,7 +5,10 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang.StringUtils;
+
 import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.common.enums.MarkStatus;
 
 /**
  * 标准评卷结果对象
@@ -15,10 +18,12 @@ import cn.com.qmth.stmms.biz.exam.model.Marker;
  */
 public class MarkResult {
 
+    public static final String SPLIT = ",";
+
     /**
      * 评卷状态
      */
-    private int statusValue;
+    private MarkStatus statusValue;
 
     /**
      * 考生编号
@@ -38,7 +43,7 @@ public class MarkResult {
     /**
      * 分值列表
      */
-    private String scoreList;
+    private Double[] scoreList;
 
     /**
      * 阅卷轨迹列表
@@ -63,13 +68,13 @@ public class MarkResult {
     /**
      * 问题类型
      */
-    private int reason;
+    private Integer problemTypeId;
 
-    public int getStatusValue() {
+    public MarkStatus getStatusValue() {
         return statusValue;
     }
 
-    public void setStatusValue(int statusValue) {
+    public void setStatusValue(MarkStatus statusValue) {
         this.statusValue = statusValue;
     }
 
@@ -90,10 +95,10 @@ public class MarkResult {
     }
 
     public String getScoreList() {
-        return scoreList;
+        return StringUtils.join(scoreList, SPLIT);
     }
 
-    public void setScoreList(String scoreList) {
+    public void setScoreList(Double[] scoreList) {
         this.scoreList = scoreList;
     }
 
@@ -209,12 +214,12 @@ public class MarkResult {
         this.isProblem = isProblem;
     }
 
-    public int getReason() {
-        return reason;
+    public Integer getProblemTypeId() {
+        return problemTypeId;
     }
 
-    public void setReason(int reason) {
-        this.reason = reason;
+    public void setProblemTypeId(Integer problemTypeId) {
+        this.problemTypeId = problemTypeId;
     }
 
 }

+ 21 - 79
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkStepDTO.java

@@ -1,7 +1,5 @@
 package cn.com.qmth.stmms.biz.mark.model;
 
-import org.apache.commons.lang3.StringUtils;
-
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
@@ -10,74 +8,26 @@ public class MarkStepDTO implements Serializable {
 
     private static final long serialVersionUID = 3542801746602688750L;
 
-    private String questionNumber;
+    private int groupNumber;
 
     private int mainNumber;
 
     private String subNumber;
 
-    private int number;
+    private double interval;
+
+    private double defaultScore;
 
     private String title;
 
-    private double totalScore;
+    private Double score;
 
     private double max;
 
     private double min;
 
-    private double defaultScore;
-
-    private double interval;
-
-    private double[] scoreList;
-
-    private String remark;
-
     private List<TrackDTO> trackList = new ArrayList<TrackDTO>();
 
-    public String getQuestionNumber() {
-        return questionNumber;
-    }
-
-    public void setQuestionNumber(String questionNumber) {
-        this.questionNumber = questionNumber;
-    }
-
-    public double[] getScoreArray() {
-        return scoreList;
-    }
-
-    public double[] getScoreList() {
-        return scoreList;
-    }
-
-    public void setScoreList(double[] scoreList) {
-        this.scoreList = scoreList;
-    }
-
-    public void setScoreList(String scoreListValue) {
-        String[] values = StringUtils.split(StringUtils.trimToEmpty(scoreListValue), ",");
-        if (values != null && values.length > 0) {
-            List<Double> list = new ArrayList<Double>(values.length);
-            for (String value : values) {
-                try {
-                    list.add(Double.valueOf(value));
-                } catch (Exception e) {
-                    continue;
-                }
-            }
-            int length = list.size();
-            if (length > 0) {
-                double[] array = new double[length];
-                for (int i = 0; i < length; i++) {
-                    array[i] = list.get(i);
-                }
-                this.scoreList = array;
-            }
-        }
-    }
-
     public int getMainNumber() {
         return mainNumber;
     }
@@ -94,22 +44,6 @@ public class MarkStepDTO implements Serializable {
         this.subNumber = subNumber;
     }
 
-    public int getNumber() {
-        return number;
-    }
-
-    public void setNumber(int number) {
-        this.number = number;
-    }
-
-    public double getTotalScore() {
-        return totalScore;
-    }
-
-    public void setTotalScore(double totalScore) {
-        this.totalScore = totalScore;
-    }
-
     public double getMax() {
         return max;
     }
@@ -134,14 +68,6 @@ public class MarkStepDTO implements Serializable {
         this.defaultScore = defaultScore;
     }
 
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
     public String getTitle() {
         return title;
     }
@@ -170,4 +96,20 @@ public class MarkStepDTO implements Serializable {
         this.trackList.add(track);
     }
 
+    public int getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(int groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
 }

+ 116 - 185
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/Task.java

@@ -4,89 +4,86 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
-public class Task extends MarkResult implements Serializable {
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+
+public class Task implements Serializable {
 
     private static final long serialVersionUID = 4912665442008033200L;
 
     /**
-     * 评卷状态
+     * 评卷任务编号
      */
-    private String statusName;
+    private Integer libraryId;
 
     /**
-     * 显示任务编号
+     * 考生编号
      */
-    private String taskNumber;
+    private Integer studentId;
 
     /**
-     * 显示考生
+     * 显示考生
      */
-    private String studentNumber;
+    private String secretNumber;
 
     /**
-     * 题卡图片地址
+     * 考生名称
      */
-    private List<String> pictureUrls;
+    private String studentName;
 
     /**
-     * 题卡图片拼接配置
+     * 学号
      */
-    private List<PictureConfigItem> pictureConfig;
+    private String studentCode;
 
     /**
-     * 题卡原图地址
+     * 准考证号
      */
-    private List<String> sheetUrls;
+    private String examNumber;
 
     /**
-     * 答案文档地址
+     * 科目
      */
-    private String answerUrl;
+    private ExamSubject subject;
 
     /**
-     * 试卷文档地址
+     * 裁切图地址
      */
-    private String paperUrl;
+    private List<String> sliceUrls;
 
     /**
-     * 多媒体答案地址
+     * 题卡图片拼接配置
      */
-    private String jsonUrl;
+    private List<PictureConfigItem> sliceConfig;
 
     /**
-     * 客观题总分
+     * 多媒体地址
      */
-    private Double objectiveScore;
+    private String jsonUrl;
 
     /**
      * 给分步骤
      */
-    private List<MarkStepDTO> markStepList;
-
-    /**
-     * 是否自评
-     */
-    private boolean isSelf;
+    private List<MarkStepDTO> questionList;
 
     /**
-     * 是否回评
+     * 特殊标记列表
      */
-    private boolean isPrevious;
+    private SpecialTagDTO[] specialTagList;
 
     /**
-     * 是否打回
+     * 题卡原图地址
      */
-    private boolean isBack;
+    private List<String> sheetUrls;
 
     /**
-     * 是否问题卷
+     * 客观题总分
      */
-    private boolean isProblem;
+    private Double objectiveScore;
 
     /**
-     * 问题类型
+     * 评分
      */
-    private int reason;
+    private Double markerScore;
 
     /**
      * 评卷时间
@@ -94,236 +91,170 @@ public class Task extends MarkResult implements Serializable {
     private Date markTime;
 
     /**
-     * 任务是否存在
+     * 是否自评
      */
-    private boolean isExist;
-
-    private String message;
-
-    private Integer headerId;
-
-    private Date headerTime;
-
-    private Double headerScore;
-
-    private String headerScoreList;
-
-    // 仲裁记录集合
-    private List<ArbitrationDTO> arbitrationList;
+    private boolean isSelf;
 
     /**
-     * 显示考生名称
+     * 是否回评
      */
-    private String studentName;
-
-    private Integer markerId;
-
-    public List<String> getPictureUrls() {
-        return pictureUrls;
-    }
-
-    public void setPictureUrls(List<String> pictureUrls) {
-        this.pictureUrls = pictureUrls;
-    }
-
-    public String getAnswerUrl() {
-        return answerUrl;
-    }
-
-    public void setAnswerUrl(String answerUrl) {
-        this.answerUrl = answerUrl;
-    }
-
-    public String getPaperUrl() {
-        return paperUrl;
-    }
-
-    public void setPaperUrl(String paperUrl) {
-        this.paperUrl = paperUrl;
-    }
-
-    public List<MarkStepDTO> getMarkStepList() {
-        return markStepList;
-    }
-
-    public void setMarkStepList(List<MarkStepDTO> markStepList) {
-        this.markStepList = markStepList;
-    }
-
-    public int getReason() {
-        return reason;
-    }
-
-    public void setReason(int reason) {
-        this.reason = reason;
-    }
-
-    public Date getMarkTime() {
-        return markTime;
-    }
-
-    public void setMarkTime(Date markTime) {
-        this.markTime = markTime;
-    }
+    private boolean isPrevious;
 
-    public String getMessage() {
-        return message;
-    }
+    /**
+     * 是否打回
+     */
+    private boolean isRejected;
 
-    public void setMessage(String message) {
-        this.message = message;
+    public Integer getLibraryId() {
+        return libraryId;
     }
 
-    public Double getObjectiveScore() {
-        return objectiveScore;
+    public void setLibraryId(Integer libraryId) {
+        this.libraryId = libraryId;
     }
 
-    public void setObjectiveScore(Double objectiveScore) {
-        this.objectiveScore = objectiveScore;
+    public Integer getStudentId() {
+        return studentId;
     }
 
-    public List<String> getSheetUrls() {
-        return sheetUrls;
-    }
-
-    public void setSheetUrls(List<String> sheetUrls) {
-        this.sheetUrls = sheetUrls;
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
     }
 
-    public boolean isSelf() {
-        return isSelf;
+    public String getSecretNumber() {
+        return secretNumber;
     }
 
-    public void setSelf(boolean isSelf) {
-        this.isSelf = isSelf;
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
     }
 
-    public boolean isPrevious() {
-        return isPrevious;
+    public String getStudentName() {
+        return studentName;
     }
 
-    public void setPrevious(boolean isPrevious) {
-        this.isPrevious = isPrevious;
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
     }
 
-    public boolean isBack() {
-        return isBack;
+    public String getStudentCode() {
+        return studentCode;
     }
 
-    public void setBack(boolean isBack) {
-        this.isBack = isBack;
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
     }
 
-    public boolean isProblem() {
-        return isProblem;
+    public String getExamNumber() {
+        return examNumber;
     }
 
-    public void setProblem(boolean isProblem) {
-        this.isProblem = isProblem;
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
     }
 
-    public boolean isExist() {
-        return isExist;
+    public ExamSubject getSubject() {
+        return subject;
     }
 
-    public void setExist(boolean isExist) {
-        this.isExist = isExist;
+    public void setSubject(ExamSubject subject) {
+        this.subject = subject;
     }
 
-    public Integer getHeaderId() {
-        return headerId;
+    public List<String> getSliceUrls() {
+        return sliceUrls;
     }
 
-    public void setHeaderId(Integer headerId) {
-        this.headerId = headerId;
+    public void setSliceUrls(List<String> sliceUrls) {
+        this.sliceUrls = sliceUrls;
     }
 
-    public Date getHeaderTime() {
-        return headerTime;
+    public List<PictureConfigItem> getSliceConfig() {
+        return sliceConfig;
     }
 
-    public void setHeaderTime(Date headerTime) {
-        this.headerTime = headerTime;
+    public void setSliceConfig(List<PictureConfigItem> sliceConfig) {
+        this.sliceConfig = sliceConfig;
     }
 
-    public Double getHeaderScore() {
-        return headerScore;
+    public String getJsonUrl() {
+        return jsonUrl;
     }
 
-    public void setHeaderScore(Double headerScore) {
-        this.headerScore = headerScore;
+    public void setJsonUrl(String jsonUrl) {
+        this.jsonUrl = jsonUrl;
     }
 
-    public String getHeaderScoreList() {
-        return headerScoreList;
+    public List<MarkStepDTO> getQuestionList() {
+        return questionList;
     }
 
-    public void setHeaderScoreList(String headerScoreList) {
-        this.headerScoreList = headerScoreList;
+    public void setQuestionList(List<MarkStepDTO> questionList) {
+        this.questionList = questionList;
     }
 
-    public List<PictureConfigItem> getPictureConfig() {
-        return pictureConfig;
+    public SpecialTagDTO[] getSpecialTagList() {
+        return specialTagList;
     }
 
-    public void setPictureConfig(List<PictureConfigItem> pictureConfig) {
-        this.pictureConfig = pictureConfig;
+    public void setSpecialTagList(SpecialTagDTO[] specialTagList) {
+        this.specialTagList = specialTagList;
     }
 
-    public List<ArbitrationDTO> getArbitrationList() {
-        return arbitrationList;
+    public List<String> getSheetUrls() {
+        return sheetUrls;
     }
 
-    public void setArbitrationList(List<ArbitrationDTO> arbitrationList) {
-        this.arbitrationList = arbitrationList;
+    public void setSheetUrls(List<String> sheetUrls) {
+        this.sheetUrls = sheetUrls;
     }
 
-    public String getStatusName() {
-        return statusName;
+    public Double getObjectiveScore() {
+        return objectiveScore;
     }
 
-    public void setStatusName(String statusName) {
-        this.statusName = statusName;
+    public void setObjectiveScore(Double objectiveScore) {
+        this.objectiveScore = objectiveScore;
     }
 
-    public String getTaskNumber() {
-        return taskNumber;
+    public Double getMarkerScore() {
+        return markerScore;
     }
 
-    public void setTaskNumber(String taskNumber) {
-        this.taskNumber = taskNumber;
+    public void setMarkerScore(Double markerScore) {
+        this.markerScore = markerScore;
     }
 
-    public String getStudentNumber() {
-        return studentNumber;
+    public Date getMarkTime() {
+        return markTime;
     }
 
-    public void setStudentNumber(String studentNumber) {
-        this.studentNumber = studentNumber;
+    public void setMarkTime(Date markTime) {
+        this.markTime = markTime;
     }
 
-    public String getStudentName() {
-        return studentName;
+    public boolean isSelf() {
+        return isSelf;
     }
 
-    public void setStudentName(String studentName) {
-        this.studentName = studentName;
+    public void setSelf(boolean isSelf) {
+        this.isSelf = isSelf;
     }
 
-    public Integer getMarkerId() {
-        return markerId;
+    public boolean isPrevious() {
+        return isPrevious;
     }
 
-    public void setMarkerId(Integer markerId) {
-        this.markerId = markerId;
+    public void setPrevious(boolean isPrevious) {
+        this.isPrevious = isPrevious;
     }
 
-    public String getJsonUrl() {
-        return jsonUrl;
+    public boolean isRejected() {
+        return isRejected;
     }
 
-    public void setJsonUrl(String jsonUrl) {
-        this.jsonUrl = jsonUrl;
+    public void setRejected(boolean isRejected) {
+        this.isRejected = isRejected;
     }
 
 }

+ 25 - 7
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/TrackDTO.java

@@ -13,7 +13,9 @@ public class TrackDTO implements Serializable {
 
     private static final long serialVersionUID = 4336042741848228793L;
 
-    private String questionNumber;
+    private Integer mainNumber;
+
+    private String subNumber;
 
     private int number;
 
@@ -34,7 +36,9 @@ public class TrackDTO implements Serializable {
     }
 
     public TrackDTO(MarkTrack track) {
-        setQuestionNumber(track.getQuestionNumber());
+        String str[] = track.getQuestionNumber().split(".");
+        setMainNumber(Integer.parseInt(str[0]));
+        setSubNumber(str[1]);
         setNumber(track.getNumber());
         setScore(track.getScore());
         setPositionX(track.getPositionX());
@@ -45,7 +49,9 @@ public class TrackDTO implements Serializable {
     }
 
     public TrackDTO(TrialTrack track) {
-        setQuestionNumber(track.getQuestionNumber());
+        String str[] = track.getQuestionNumber().split(".");
+        setMainNumber(Integer.parseInt(str[0]));
+        setSubNumber(str[1]);
         setNumber(track.getNumber());
         setScore(track.getScore());
         setPositionX(track.getPositionX());
@@ -94,12 +100,20 @@ public class TrackDTO implements Serializable {
         return track;
     }
 
-    public String getQuestionNumber() {
-        return questionNumber;
+    public Integer getMainNumber() {
+        return mainNumber;
     }
 
-    public void setQuestionNumber(String questionNumber) {
-        this.questionNumber = questionNumber;
+    public void setMainNumber(Integer mainNumber) {
+        this.mainNumber = mainNumber;
+    }
+
+    public String getSubNumber() {
+        return subNumber;
+    }
+
+    public void setSubNumber(String subNumber) {
+        this.subNumber = subNumber;
     }
 
     public int getNumber() {
@@ -157,4 +171,8 @@ public class TrackDTO implements Serializable {
     public void setOffsetY(int offsetY) {
         this.offsetY = offsetY;
     }
+
+    public String getQuestionNumber() {
+        return getMainNumber() + "." + getSubNumber();
+    }
 }

+ 22 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/TrialHistory.java

@@ -1,10 +1,16 @@
 package cn.com.qmth.stmms.biz.mark.model;
 
 import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.utils.ScoreItem;
 
 import javax.persistence.*;
+
+import org.apache.commons.lang.StringUtils;
+
 import java.io.Serializable;
 import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
 
 /**
  * 试评任务给分记录表
@@ -163,4 +169,20 @@ public class TrialHistory implements Serializable {
         this.secretNumber = secretNumber;
     }
 
+    public List<ScoreItem> getScoreList() {
+        List<ScoreItem> list = new LinkedList<ScoreItem>();
+        if (StringUtils.isNotBlank(markerScoreList)) {
+            try {
+                String[] values = markerScoreList.split(",");
+                for (String value : values) {
+                    ScoreItem item = ScoreItem.parse(value, false);
+                    if (item != null) {
+                        list.add(item);
+                    }
+                }
+            } catch (Exception e) {
+            }
+        }
+        return list;
+    }
 }

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

@@ -474,7 +474,7 @@ public class MarkServiceImpl implements MarkService {
         // 判断评卷分组是否存在/评卷是否结束
         MarkGroup group = groupDao.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
         if (group == null || group.getStatus() == MarkStatus.FINISH
-                || group.getStatus().getValue() != result.getStatusValue()) {
+                || !group.getStatus().equals(result.getStatusValue())) {
             return SubmitResult.faile();
         }
 
@@ -488,7 +488,6 @@ public class MarkServiceImpl implements MarkService {
                         result.getSpent(), LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED) != 0) {
                     saveProblemHistory(result, library);
                     updateMarkedCount(group);
-                    // releaseLibrary(library, marker);
                     return SubmitResult.success(library);
                 }
             }
@@ -498,7 +497,6 @@ public class MarkServiceImpl implements MarkService {
                     && result.getTotalScore() <= group.getTotalScore() && StringUtils.isNotBlank(result.getScoreList())) {
                 if (submitLibrary(library, marker, group, result)) {
                     updateMarkedCount(group);
-                    // releaseLibrary(library, marker);
                     return SubmitResult.success(library);
                 }
             }
@@ -551,7 +549,7 @@ public class MarkServiceImpl implements MarkService {
         history.setLibraryId(library.getId());
         history.setSubjectCode(library.getSubjectCode());
         history.setGroupNumber(library.getGroupNumber());
-        history.setProblemId(result.getReason());
+        history.setProblemId(result.getProblemTypeId());
         history.setStatus(HistoryStatus.WAITING);
         problemHistoryDao.save(history);
     }

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

@@ -1,23 +1,51 @@
 package cn.com.qmth.stmms.biz.mark.service.Impl;
 
-import cn.com.qmth.stmms.biz.exam.model.*;
-import cn.com.qmth.stmms.biz.exam.service.*;
-import cn.com.qmth.stmms.biz.file.service.FileService;
-import cn.com.qmth.stmms.biz.mark.model.*;
-import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
-import cn.com.qmth.stmms.biz.mark.service.*;
-import cn.com.qmth.stmms.biz.user.service.UserService;
-import cn.com.qmth.stmms.common.enums.LibraryStatus;
-import cn.com.qmth.stmms.common.enums.MarkStatus;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
+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.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
+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.file.service.FileService;
+import cn.com.qmth.stmms.biz.mark.model.ArbitrateHistory;
+import cn.com.qmth.stmms.biz.mark.model.ArbitrationDTO;
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
+import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
+import cn.com.qmth.stmms.biz.mark.model.MarkStepDTO;
+import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.biz.mark.model.SpecialTagDTO;
+import cn.com.qmth.stmms.biz.mark.model.Task;
+import cn.com.qmth.stmms.biz.mark.model.TrackDTO;
+import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
+import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
+import cn.com.qmth.stmms.biz.mark.model.TrialTag;
+import cn.com.qmth.stmms.biz.mark.model.TrialTrack;
+import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
+import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
+import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
+import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
+import cn.com.qmth.stmms.biz.mark.service.TaskService;
+import cn.com.qmth.stmms.biz.mark.service.TrialService;
+import cn.com.qmth.stmms.biz.user.service.UserService;
+import cn.com.qmth.stmms.biz.utils.ScoreItem;
+import cn.com.qmth.stmms.common.enums.ExamType;
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
 
 /**
  * 评卷任务服务实现
@@ -62,6 +90,9 @@ public class TaskServiceImpl implements TaskService {
     @Autowired
     private FileService fileService;
 
+    @Autowired
+    private ExamService examService;
+
     @Override
     public List<Task> findByQuery(MarkLibrarySearchQuery query) {
         List<Task> list = new LinkedList<Task>();
@@ -76,26 +107,17 @@ public class TaskServiceImpl implements TaskService {
 
     @Override
     public Task build(ArbitrateHistory history, MarkGroup group) {
-        ExamSubject subject = subjectService.find(group.getExamId(), group.getSubjectCode());
         ExamStudent student = studentService.findByExamIdAndExamNumber(history.getExamId(), history.getExamNumber());
         List<MarkLibrary> libraryList = libraryService.findByStudentAndGroup(student.getId(), group.getNumber());
         Task task = new Task();
-        task.setExist(true);
         task.setStudentId(history.getStudentId());
         task.setLibraryId(history.getId());
-        task.setStudentNumber(history.getSecretNumber());
-        task.setMarkStepList(buildMarkStep(group, null));
-        task.setPictureUrls(fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1,
+        task.setSecretNumber(history.getSecretNumber());
+        task.setQuestionList(buildMarkStep(group, null));
+        task.setSliceUrls(fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1,
                 student.getSliceCount()));
-        task.setPictureConfig(group.getPictureConfigList());
+        task.setSliceConfig(group.getPictureConfigList());
         task.setJsonUrl(fileService.getJsonUri(student.getExamId(), student.getSecretNumber()));
-        if (subject.getPaperFileType() != null) {
-            task.setPaperUrl(fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
-        }
-        if (subject.getAnswerFileType() != null) {
-            task.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
-                    subject.getAnswerFileType()));
-        }
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setMarkTime(history.getUpdateTime());
         // 构造仲裁信息
@@ -107,105 +129,103 @@ public class TaskServiceImpl implements TaskService {
                 list.add(new ArbitrationDTO(library, marker));
             }
         }
-        task.setArbitrationList(list);
+        // task.setArbitrationList(list);
         // 回评状态下的打分信息
-        if (history.getTotalScore() != null) {
-            task.setTotalScore(history.getTotalScore());
-        }
-        if (history.getScoreList() != null) {
-            task.setScoreList(history.getScoreList());
-        }
+        // if (history.getTotalScore() != null) {
+        // task.setTotalScore(history.getTotalScore());
+        // }
+        // if (history.getScoreList() != null) {
+        // task.setScoreList(history.getScoreList());
+        // }
         return task;
     }
 
     @Override
     public Task build(MarkLibrary library) {
+        Exam exam = examService.findById(library.getExamId());
         ExamSubject subject = subjectService.find(library.getExamId(), library.getSubjectCode());
         ExamStudent student = studentService.findByExamIdAndExamNumber(library.getExamId(), library.getExamNumber());
         MarkGroup group = groupService.findOne(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
 
         Task task = new Task();
-        task.setExist(true);
-        task.setStatusValue(MarkStatus.FORMAL.getValue());
-        task.setStudentId(library.getStudentId());
         task.setLibraryId(library.getId());
-        // 正评显示考生密号
-        task.setStudentNumber(library.getSecretNumber());
-        task.setMarkStepList(buildMarkStep(group, library.getId()));
-        task.setPictureUrls(fileService.getSliceUris(library.getExamId(), library.getSecretNumber(), 1,
-                student.getSliceCount()));
-        task.setPictureConfig(group.getPictureConfigList());
-        task.setJsonUrl(fileService.getJsonUri(library.getExamId(), library.getSecretNumber()));
-        if (subject.getPaperFileType() != null) {
-            task.setPaperUrl(fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
-        }
-        if (subject.getAnswerFileType() != null) {
-            task.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
-                    subject.getAnswerFileType()));
+        task.setStudentId(library.getStudentId());
+        task.setSecretNumber(library.getSecretNumber());
+        task.setStudentCode(student.getStudentCode());
+        task.setStudentName(student.getName());
+        task.setExamNumber(library.getExamNumber());
+        task.setSubject(subject);
+        if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+            task.setJsonUrl(fileService.getJsonUri(library.getExamId(), library.getSecretNumber()));
+        } else {
+            task.setSliceUrls(fileService.getSliceUris(library.getExamId(), library.getSecretNumber(), 1,
+                    student.getSliceCount()));
+            task.setSliceConfig(group.getPictureConfigList());
+            task.setSheetUrls(fileService.getSheetUris(library.getExamId(), library.getExamNumber(), 1,
+                    student.getSheetCount()));
         }
+        task.setQuestionList(buildMarkStep(group, library));
+        task.setSpecialTagList(getMarkSpecialTagList(library.getId()));
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setMarkTime(library.getMarkerTime());
-        task.setTagList(getMarkSpecialTagList(library.getId()));
-        if (library.getMarkerScore() != null) {
-            task.setTotalScore(library.getMarkerScore());
+        if (library.getStatus() == LibraryStatus.REJECTED && library.getMarkerId() != null) {
+            task.setRejected(true);
         }
-        if (library.getMarkerScoreList() != null) {
-            task.setScoreList(library.getMarkerScoreList());
+        if (library.getStatus() == LibraryStatus.MARKED || library.getStatus() == LibraryStatus.INSPECTED) {
+            task.setMarkerScore(library.getMarkerScore());
+            task.setPrevious(true);
         }
-        // if (library.getStatus() == LibraryStatus.BACKED &&
-        // library.getMarkerId() != null) {
-        // task.setBack(true);
-        // }
         return task;
     }
 
     @Override
     public Task build(TrialLibrary library, TrialHistory history) {
+        Exam exam = examService.findById(library.getExamId());
         ExamSubject subject = subjectService.find(library.getExamId(), library.getSubjectCode());
         ExamStudent student = studentService.findByExamIdAndExamNumber(library.getExamId(), library.getExamNumber());
         MarkGroup group = groupService.findOne(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
 
         Task task = new Task();
-        task.setExist(true);
-        task.setStatusValue(MarkStatus.TRIAL.getValue());
-        task.setStatusName(MarkStatus.TRIAL.getName());
-        // 试评显示考生密号
-        task.setStudentNumber(library.getSecretNumber());
-        task.setStudentId(library.getStudentId());
         task.setLibraryId(library.getId());
-        task.setMarkStepList(buildTrialStep(group, history));
-        task.setPictureUrls(fileService.getSliceUris(library.getExamId(), library.getSecretNumber(), 1,
-                student.getSliceCount()));
-        task.setPictureConfig(group.getPictureConfigList());
-        task.setJsonUrl(fileService.getJsonUri(library.getExamId(), library.getSecretNumber()));
-        if (subject.getPaperFileType() != null) {
-            task.setPaperUrl(fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
-        }
-        if (subject.getAnswerFileType() != null) {
-            task.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
-                    subject.getAnswerFileType()));
+        task.setStudentId(library.getStudentId());
+        task.setSecretNumber(library.getSecretNumber());
+        task.setStudentCode(student.getStudentCode());
+        task.setStudentName(student.getName());
+        task.setExamNumber(library.getExamNumber());
+        task.setSubject(subject);
+        task.setQuestionList(buildTrialStep(group, history));
+        task.setObjectiveScore(student.getObjectiveScore());
+        if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+            task.setJsonUrl(fileService.getJsonUri(library.getExamId(), library.getSecretNumber()));
+        } else {
+            task.setSliceUrls(fileService.getSliceUris(library.getExamId(), library.getSecretNumber(), 1,
+                    student.getSliceCount()));
+            task.setSliceConfig(group.getPictureConfigList());
+            task.setSheetUrls(fileService.getSheetUris(library.getExamId(), library.getExamNumber(), 1,
+                    student.getSheetCount()));
         }
-        task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         if (history != null) {
+            task.setSpecialTagList(getTrialTagList(history));
             task.setMarkTime(history.getMarkerTime());
-            task.setTotalScore(history.getMarkerScore());
-            task.setScoreList(history.getMarkerScoreList());
-            task.setTagList(getTrialTagList(history));
+            task.setMarkerScore(history.getMarkerScore());
+            task.setRejected(true);
         }
         return task;
     }
 
-    private List<MarkStepDTO> buildMarkStep(MarkGroup group, Integer libraryId) {
+    private List<MarkStepDTO> buildMarkStep(MarkGroup group, MarkLibrary library) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
                 group.getSubjectCode(), false, group.getNumber());
-        int number = 0;
-        List<MarkTrack> tracks = trackService.findByLibraryId(libraryId);
-        for (ExamQuestion question : sList) {
-            number++;
-
-            MarkStepDTO step = buildStep(number, question);
-            if (libraryId != null) {
+        List<MarkTrack> tracks = trackService.findByLibraryId(library.getId());
+        List<ScoreItem> sItems = library.getScoreList();
+        for (int i = 0; i < sList.size(); i++) {
+            ExamQuestion question = sList.get(i);
+            MarkStepDTO step = buildStep(question);
+            if (!sItems.isEmpty() && sItems.size() == sList.size()) {
+                step.setScore(sItems.get(i).getScore());
+            }
+            if (library != null) {
                 // 增加阅卷轨迹列表获取
                 String questionNumber = question.getQuestionNumber();
                 for (MarkTrack track : tracks) {
@@ -223,14 +243,18 @@ public class TaskServiceImpl implements TaskService {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
                 group.getSubjectCode(), false, group.getNumber());
-        int number = 0;
         List<TrialTrack> tracks = new ArrayList<TrialTrack>();
+        List<ScoreItem> sItems = new ArrayList<ScoreItem>();
         if (history != null) {
             tracks = trialService.findTrack(history.getLibraryId(), history.getMarkerId());
+            sItems = history.getScoreList();
         }
-        for (ExamQuestion question : sList) {
-            number++;
-            MarkStepDTO step = buildStep(number, question);
+        for (int i = 0; i < sList.size(); i++) {
+            ExamQuestion question = sList.get(i);
+            MarkStepDTO step = buildStep(question);
+            if (!sItems.isEmpty() && sItems.size() == sList.size()) {
+                step.setScore(sItems.get(i).getScore());
+            }
             // 增加阅卷轨迹列表获取
             String questionNumber = question.getQuestionNumber();
             for (TrialTrack track : tracks) {
@@ -243,19 +267,16 @@ public class TaskServiceImpl implements TaskService {
         return list;
     }
 
-    private MarkStepDTO buildStep(int number, ExamQuestion question) {
+    private MarkStepDTO buildStep(ExamQuestion question) {
         MarkStepDTO step = new MarkStepDTO();
-        step.setQuestionNumber(question.getQuestionNumber());
         step.setMainNumber(question.getMainNumber());
         step.setSubNumber(question.getSubNumber());
-        step.setNumber(number);
-        step.setTitle(question.getMainTitle() + "-" + question.getSubNumber());
-        step.setTotalScore(question.getTotalScore());
+        step.setGroupNumber(question.getGroupNumber());
+        step.setTitle(question.getMainTitle());
         step.setDefaultScore(0d);
         step.setMax(question.getTotalScore());
         step.setMin(0d);
         step.setInterval(question.getIntervalScore());
-        step.setScoreList(question.getScoreListArray());
         return step;
     }
 
@@ -301,23 +322,27 @@ public class TaskServiceImpl implements TaskService {
     public Task build(Integer studentId) {
         ExamStudent student = studentService.findById(studentId);
         ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
+        Exam exam = examService.findById(student.getExamId());
+
         Task task = new Task();
-        task.setExist(true);
         task.setStudentId(studentId);
-        task.setStudentNumber(student.getSecretNumber());
-        task.setMarkStepList(buildMarkStep(student));
-        task.setPictureUrls(fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1,
-                student.getSliceCount()));
-        task.setJsonUrl(fileService.getJsonUri(student.getExamId(), student.getSecretNumber()));
-        if (subject.getPaperFileType() != null) {
-            task.setPaperUrl(fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
+        task.setSecretNumber(student.getSecretNumber());
+        task.setStudentCode(student.getStudentCode());
+        task.setStudentName(student.getName());
+        task.setExamNumber(student.getExamNumber());
+        task.setSubject(subject);
+        if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+            task.setJsonUrl(fileService.getJsonUri(student.getExamId(), student.getSecretNumber()));
+        } else {
+            task.setSliceUrls(fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1,
+                    student.getSliceCount()));
+            task.setSheetUrls(fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1,
+                    student.getSheetCount()));
         }
-        if (subject.getAnswerFileType() != null) {
-            task.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
-                    subject.getAnswerFileType()));
-        }
-        task.setObjectiveScore(student.getObjectiveScore());
-        task.setBack(true);
+        task.setQuestionList(buildMarkStep(student));
+        // task.setSpecialTagList(getMarkSpecialTagList(library.getId()));
+        task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
+        task.setMarkerScore(student.getTotalScore());
         return task;
     }
 
@@ -333,11 +358,13 @@ public class TaskServiceImpl implements TaskService {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
                 student.getSubjectCode(), false);
-        int number = 0;
-        for (ExamQuestion question : sList) {
-            number++;
-
-            MarkStepDTO step = buildStep(number, question);
+        List<ScoreItem> sItems = student.getScoreList(false);
+        for (int i = 0; i < sList.size(); i++) {
+            ExamQuestion question = sList.get(i);
+            MarkStepDTO step = buildStep(question);
+            if (!sItems.isEmpty() && sItems.size() == sList.size()) {
+                step.setScore(sItems.get(i).getScore());
+            }
             // 增加阅卷轨迹列表获取
             List<MarkTrack> tracks = trackService.findByStudentId(student.getId());
             String questionNumber = question.getQuestionNumber();
@@ -351,46 +378,4 @@ public class TaskServiceImpl implements TaskService {
         return list;
     }
 
-    @Transactional
-    @Override
-    public boolean submitByStudent(Task task) {
-        if (task == null) {
-            return false;
-        }
-        try {
-            List<MarkLibrary> libraries = libraryService.findByStudentId(task.getLibraryId());
-            int start = 0;
-            int end = 0;
-            for (int i = 0; i < libraries.size(); i++) {
-                MarkLibrary library = libraries.get(i);
-                Task stepTask = new Task();
-                stepTask.setProblem(task.isProblem());
-                stepTask.setBack(task.isBack());
-                stepTask.setLibraryId(library.getId());
-                stepTask.setHeaderId(task.getHeaderId());
-                List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
-                        library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
-                if (start == end) {
-                    end = end + sList.size() * 2 - 1;
-                } else {
-                    start = end + 1;
-                    end = start + sList.size() * 2 - 1;
-                }
-                String scoreList = task.getScoreList().substring(start, end);
-                stepTask.setHeaderScoreList(scoreList);
-                String[] scores = scoreList.split(",");
-                double totalScore = 0;
-                for (String score : scores) {
-                    totalScore = totalScore + Double.parseDouble(score);
-                }
-                stepTask.setHeaderScore(totalScore);
-                // submitTask(stepTask);
-            }
-            return true;
-        } catch (Exception e) {
-            log.error("task submit faile", e);
-            return false;
-        }
-    }
-
 }

+ 0 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/TaskService.java

@@ -22,6 +22,4 @@ public interface TaskService {
 
     Task build(Integer studentId);
 
-    boolean submitByStudent(Task task);
-
 }

+ 4 - 8
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/LibraryStatus.java

@@ -4,13 +4,8 @@ import java.util.LinkedList;
 import java.util.List;
 
 public enum LibraryStatus {
-    WAITING("未处理", 0), 
-    MARKED("已给分", 1), 
-    BACKED("已打回", 2), 
-    WAIT_ARBITRATE("等待仲裁", 3), 
-    ARBITRATED("已仲裁", 4),
-    PROBLEM("问题卷",5), 
-    INSPECTED("已复核",6);
+    WAITING("未处理", 0), MARKED("已给分", 1), REJECTED("已打回", 2), WAIT_ARBITRATE("等待仲裁", 3), ARBITRATED("已仲裁", 4), PROBLEM(
+            "问题卷", 5), INSPECTED("已复核", 6);
 
     private String name;
 
@@ -44,11 +39,12 @@ public enum LibraryStatus {
         if (options == null) {
             options = new LinkedList<>();
             for (LibraryStatus status : LibraryStatus.values()) {
-                if (status != BACKED) {
+                if (status != REJECTED) {
                     options.add(status);
                 }
             }
         }
         return options;
     }
+
 }

+ 14 - 17
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ArbitrateController.java

@@ -87,15 +87,14 @@ public class ArbitrateController extends BaseExamController {
         if (StringUtils.isBlank(query.getSubjectCode()) && !subjectList.isEmpty()) {
             query.setSubjectCode(subjectList.get(0).getCode());
         }
-        List<MarkGroup> groupList = groupService
-                .findByExamAndSubjectWithDouble(query.getExamId(), query.getSubjectCode());
+        List<MarkGroup> groupList = groupService.findByExamAndSubjectWithDouble(query.getExamId(),
+                query.getSubjectCode());
         if (query.getGroupNumber() == null && groupList.size() > 0) {
             query.setGroupNumber(groupList.get(0).getNumber());
         }
         for (MarkGroup group : groupList) {
-            group.setQuestionList(questionService
-                    .findByExamAndSubjectAndObjectiveAndGroupNumber(query.getExamId(), group.getSubjectCode(), false,
-                            group.getNumber()));
+            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(query.getExamId(),
+                    group.getSubjectCode(), false, group.getNumber()));
         }
         query.orderByIdDesc();
         query = arbitrateService.findByQuery(query);
@@ -254,20 +253,19 @@ public class ArbitrateController extends BaseExamController {
         WebUser wu = RequestUtils.getWebUser(request);
         ArbitrateHistory history = arbitrateService.findById(historyId);
         if (history != null && history.getExamId().equals(examId) && subjectCheck(history.getSubjectCode(), wu)) {
-            MarkGroup group = groupService
-                    .findOne(history.getExamId(), history.getSubjectCode(), history.getGroupNumber());
+            MarkGroup group = groupService.findOne(history.getExamId(), history.getSubjectCode(),
+                    history.getGroupNumber());
             return taskService.build(history, group);
         }
         Task task = new Task();
-        task.setExist(false);
+        // task.setExist(false);
         return task;
     }
 
     @RequestMapping("/getTask")
     @ResponseBody
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public Task getTask(HttpServletRequest request, @RequestParam String subjectCode,
-            @RequestParam Integer groupNumber) {
+    public Task getTask(HttpServletRequest request, @RequestParam String subjectCode, @RequestParam Integer groupNumber) {
         int examId = getSessionExamId(request);
         WebUser wu = RequestUtils.getWebUser(request);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
@@ -298,7 +296,7 @@ public class ArbitrateController extends BaseExamController {
             }
         }
         Task task = new Task();
-        task.setExist(false);
+        // task.setExist(false);
         return task;
     }
 
@@ -310,16 +308,15 @@ public class ArbitrateController extends BaseExamController {
         WebUser wu = RequestUtils.getWebUser(request);
         JSONObject result = new JSONObject();
         ArbitrateHistory history = arbitrateService.findById(task.getLibraryId());
-        if (history != null && subjectCheck(history.getSubjectCode(), wu) && task.getTotalScore() >= 0
-                && task.getScoreList() != null) {
+        if (history != null && subjectCheck(history.getSubjectCode(), wu) && task.getMarkerScore() >= 0) {
             try {
                 lockService.watch(LockType.EXAM_SUBJECT, history.getExamId(), history.getSubjectCode());
-                lockService
-                        .watch(LockType.GROUP, history.getExamId(), history.getSubjectCode(), history.getGroupNumber());
+                lockService.watch(LockType.GROUP, history.getExamId(), history.getSubjectCode(),
+                        history.getGroupNumber());
 
                 history.setUserId(wu.getUser().getId());
-                history.setTotalScore(task.getTotalScore());
-                history.setScoreList(task.getScoreList());
+                history.setTotalScore(task.getMarkerScore());
+                // history.setScoreList(task.getScoreList());
                 history.setStatus(HistoryStatus.MARKED);
                 history.setUpdateTime(new Date());
                 markService.processArbitrate(history);

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkQualityController.java

@@ -286,7 +286,7 @@ public class MarkQualityController extends BaseExamController {
             for (Task task : list) {
                 task.setPrevious(true);
                 task.setStudentName(studentService.findById(task.getStudentId()).getName());
-                task.setMarkerId(markerId);
+                // task.setMarkerId(markerId);
             }
         } else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
             // 试评查找给分历史记录
@@ -299,7 +299,7 @@ public class MarkQualityController extends BaseExamController {
                     Task task = taskService.build(library, history);
                     task.setPrevious(true);
                     task.setStudentName(studentService.findById(task.getStudentId()).getName());
-                    task.setMarkerId(markerId);
+                    // task.setMarkerId(markerId);
                     list.add(task);
                 }
             }

+ 560 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkApi.java

@@ -0,0 +1,560 @@
+package cn.com.qmth.stmms.mark;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+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.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
+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.MarkerClassService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
+import cn.com.qmth.stmms.biz.file.service.FileService;
+import cn.com.qmth.stmms.biz.lock.LockService;
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
+import cn.com.qmth.stmms.biz.mark.model.MarkResult;
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.biz.mark.model.ProblemType;
+import cn.com.qmth.stmms.biz.mark.model.SubmitResult;
+import cn.com.qmth.stmms.biz.mark.model.Task;
+import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
+import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
+import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
+import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
+import cn.com.qmth.stmms.biz.mark.service.MarkService;
+import cn.com.qmth.stmms.biz.mark.service.ProblemTypeService;
+import cn.com.qmth.stmms.biz.mark.service.TaskService;
+import cn.com.qmth.stmms.biz.mark.service.TrialService;
+import cn.com.qmth.stmms.biz.user.model.User;
+import cn.com.qmth.stmms.biz.user.service.UserService;
+import cn.com.qmth.stmms.common.annotation.Logging;
+import cn.com.qmth.stmms.common.controller.BaseController;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.ExamType;
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
+import cn.com.qmth.stmms.common.enums.LockType;
+import cn.com.qmth.stmms.common.enums.LogType;
+import cn.com.qmth.stmms.common.enums.MarkMode;
+import cn.com.qmth.stmms.common.enums.MarkStatus;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Controller
+public class MarkApi extends BaseController {
+
+    private static Logger log = LoggerFactory.getLogger(MarkApi.class);
+
+    @Autowired
+    private ExamSubjectService subjectService;
+
+    @Autowired
+    private TrialService trialService;
+
+    @Autowired
+    private MarkerService markerService;
+
+    @Autowired
+    private MarkLibraryService libraryService;
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private MarkService markService;
+
+    @Autowired
+    private ExamService examService;
+
+    @Autowired
+    private MarkGroupService groupService;
+
+    @Autowired
+    private LockService lockService;
+
+    @Autowired
+    private ProblemTypeService problemTypeService;
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private MarkerClassService markerClassService;
+
+    @Autowired
+    private ExamQuestionService questionService;
+
+    @Autowired
+    private FileService fileService;
+
+    @Value("${marker.forceMode}")
+    private String forceMarkMode;
+
+    @Value("${slice.split.config}")
+    private String splitConfig;
+
+    @Value("${marker.prefetch.count}")
+    private long prefetchCount;
+
+    @RequestMapping(value = "/mark/getSetting", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONObject getSetting(HttpServletRequest request) {
+        JSONObject setting = new JSONObject();
+        WebUser wu = RequestUtils.getWebUser(request);
+        Marker marker = wu.getMarker();
+        Exam exam = examService.findById(marker.getExamId());
+        MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+        setting.accumulate("examType", exam.getType());
+        setting.accumulate("startTime", exam.getStartTime().getTime());
+        setting.accumulate("endTime", exam.getEndTime().getTime());
+        setting.accumulate("topCount", marker.getTopCount() != null ? marker.getTopCount() : 0);
+        setting.accumulate("sheetView", group.isSheetView());
+        setting.accumulate("enableAllZero", group.isEnableAllZero());
+        setting.accumulate("statusValue", group.getStatus());
+        setting.accumulate("groupNumber", group.getNumber());
+        setting.accumulate("fileServer", fileService.getFileServer());
+        setting.accumulate("forceSpecialTag", exam.isForceSpecialTag());
+        setting.accumulate("uiSetting",
+                StringUtils.isBlank(marker.getMarkSetting()) ? new JSONObject() : marker.getMarkSetting());
+        setting.accumulate("splitConfig", getSplitConfig());
+        setting.accumulate("prefetchCount", prefetchCount);
+        setting.accumulate("returnUrl", wu.getLogoutUrl() == null ? "mark-login" : wu.getLogoutUrl());
+        setModeAndForceMode(setting, exam, marker, group);
+        setSubjectAndSheetConfig(setting, marker, exam);
+        setMarker(setting, marker, RequestUtils.getWebUser(request).getName());
+        setProblemType(setting, marker);
+        return setting;
+    }
+
+    private double[] getSplitConfig() {
+        String strs[] = splitConfig.split(",");
+        double[] config = new double[strs.length];
+        for (int i = 0; i < strs.length; i++) {
+            config[i] = Double.parseDouble(strs[i]);
+        }
+        return config;
+    }
+
+    @RequestMapping(value = "/mark/getStatus", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONObject status(HttpServletRequest request) {
+        JSONObject status = new JSONObject();
+        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        ExamSubject subject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
+        MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+        if (subject == null || group == null || group.getStatus() == MarkStatus.FINISH) {
+            status.accumulate("valid", false);
+            return status;
+        }
+        long totalCount = 0;
+        long personCount = 0;
+        long markedCount = 0;
+        long problemCount = 0;
+        long arbitrateCount = 0;
+        if (group.getStatus() == MarkStatus.FORMAL) {
+            MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
+            query.setExamId(marker.getExamId());
+            query.setSubjectCode(marker.getSubjectCode());
+            query.setGroupNumber(marker.getGroupNumber());
+            totalCount = libraryService.countByQuery(query);
+
+            query.setMarkerId(marker.getId());
+            personCount = libraryService.countByQuery(query);
+
+            query.setMarkerId(0);
+            query.addStatus(LibraryStatus.MARKED);
+            query.addStatus(LibraryStatus.ARBITRATED);
+            query.addStatus(LibraryStatus.INSPECTED);
+            markedCount = libraryService.countByQuery(query);
+
+            query.clearStatus();
+            query.addStatus(LibraryStatus.PROBLEM);
+            problemCount = libraryService.countByQuery(query);
+
+            query.clearStatus();
+            query.addStatus(LibraryStatus.WAIT_ARBITRATE);
+            arbitrateCount = libraryService.countByQuery(query);
+        } else if (group.getStatus() == MarkStatus.TRIAL) {
+            totalCount = trialService.countLibrary(group.getExamId(), group.getSubjectCode(), group.getNumber());
+            personCount = trialService.countMarkerHistory(marker.getId());
+            markedCount = personCount;
+        }
+        status.accumulate("personCount", personCount);
+        status.accumulate("totalCount", totalCount);
+        status.accumulate("markedCount", markedCount);
+        status.accumulate("problemCount", problemCount);
+        status.accumulate("arbitrateCount", arbitrateCount);
+        status.accumulate("valid", totalCount > 0);
+        return status;
+    }
+
+    @RequestMapping(value = "/mark/getGroup", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONArray getGroup(HttpServletRequest request) {
+        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        JSONArray array = new JSONArray();
+        List<Marker> markers = markerService.findByExamAndSubjectAndUserIdAndEnable(marker.getExamId(),
+                marker.getSubjectCode(), marker.getUserId(), true);
+        for (Marker m : markers) {
+            JSONObject json = new JSONObject();
+            json.accumulate("markerId", m.getId());
+            json.accumulate("number", m.getGroupNumber());
+            MarkGroup group = groupService
+                    .findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(marker.getExamId(),
+                    marker.getSubjectCode(), false, group.getNumber()));
+            json.accumulate("title", group.getTitle());
+            json.accumulate("markedCount", group.getMarkerCount());
+            json.accumulate("totalCount", group.getLibraryCount());
+            array.add(json);
+        }
+        return array;
+    }
+
+    @RequestMapping(value = "/mark/getTask", method = RequestMethod.POST)
+    @ResponseBody
+    public Task getTask(HttpServletRequest request) {
+        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        Task task = null;
+        try {
+            lockService.watch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+            lockService.watch(LockType.MARKER, marker.getId());
+
+            MarkGroup group = groupService
+                    .findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+            if (group == null) {
+                task = new Task();
+                // task.setExist(false);
+                // task.setMessage("mark.control.task.not.exist");
+            } else if (group.getStatus() == MarkStatus.FINISH) {
+                task = new Task();
+                // task.setExist(false);
+                // task.setMessage("mark.control.task.finish");
+            } else if (group.getStatus() == MarkStatus.TRIAL) {
+                task = getTrialTask(marker);
+            } else if (group.getStatus() == MarkStatus.FORMAL) {
+                task = getFormalTask(marker);
+            }
+            if (task == null) {
+                task = new Task();
+                // task.setExist(false);
+                // task.setMessage("mark.control.task.null");
+            }
+        } catch (Exception e) {
+            log.error("get task error", e);
+        } finally {
+            lockService.unwatch(LockType.MARKER, marker.getId());
+            lockService.unwatch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+        }
+        return task;
+    }
+
+    private Task getFormalTask(Marker marker) {
+        int retry = 1;
+        Task task = null;
+        while (task == null) {
+            List<MarkLibrary> list = new ArrayList<MarkLibrary>();
+            // 需要判断评卷员是否绑定了班级
+            long classCount = markerClassService.countByUserIdAndExamId(marker.getUserId(), marker.getExamId());
+            list = libraryService.findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                    marker.getId(), marker.getUserId(), classCount > 0, retry, 20);
+            if (list.isEmpty()) {
+                break;
+            }
+            for (MarkLibrary library : list) {
+                if (markService.applyLibrary(library, marker)) {
+                    task = taskService.build(library);
+                    break;
+                }
+            }
+            if (task == null) {
+                retry++;
+            }
+        }
+        return task;
+    }
+
+    private Task getTrialTask(Marker marker) {
+        int retry = 1;
+        Task task = null;
+        while (task == null) {
+            List<TrialLibrary> list = trialService.findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(),
+                    marker.getGroupNumber(), marker.getId(), retry, 10);
+            if (list.isEmpty()) {
+                break;
+            }
+            for (TrialLibrary library : list) {
+                if (markService.applyLibrary(library, marker)) {
+                    task = taskService.build(library, null);
+                    break;
+                }
+            }
+            retry++;
+        }
+        return task;
+    }
+
+    @Logging(menu = "评卷", type = LogType.UPDATE)
+    @RequestMapping(value = "/mark/saveTask", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONObject saveTask(HttpServletRequest request, @RequestBody MarkResult markResult) {
+        JSONObject result = new JSONObject();
+        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        boolean success = false;
+        try {
+            lockService.watch(LockType.EXAM_SUBJECT, marker.getExamId(), marker.getSubjectCode());
+            lockService.watch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+            lockService.watch(LockType.MARKER, marker.getId());
+            lockService.waitlock(LockType.STUDENT, markResult.getStudentId());
+            SubmitResult sr = markService.submitTask(markResult, marker);
+            if (sr.isSuccess()) {
+                markService.releaseTask(sr, marker);
+                success = true;
+            }
+        } catch (Exception e) {
+            log.error("save task error", e);
+        } finally {
+            lockService.unlock(LockType.STUDENT, markResult.getStudentId());
+            lockService.unwatch(LockType.MARKER, marker.getId());
+            lockService.unwatch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+            lockService.unwatch(LockType.EXAM_SUBJECT, marker.getExamId(), marker.getSubjectCode());
+        }
+        result.accumulate("success", success);
+        result.accumulate("status", status(request));
+        if (!success) {
+            result.accumulate("message", "mark.control.task.error");
+        }
+        return result;
+    }
+
+    @Logging(menu = "查询回评任务", type = LogType.QUERY)
+    @RequestMapping(value = "/mark/getHistory", method = RequestMethod.POST)
+    @ResponseBody
+    public Object history(HttpServletRequest request, @RequestParam int pageNumber, @RequestParam int pageSize,
+            @RequestParam String order, @RequestParam String sort, @RequestParam(required = false) String secretNumber)
+            throws Exception {
+        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        List<Task> list = new ArrayList<>();
+        Direction d = Direction.DESC;
+        Sort querySort = null;
+        if (sort.equals("ASC")) {
+            d = Direction.ASC;
+        }
+        if (order.equals("markerTime")) {
+            querySort = new Sort(d, "markerTime");
+        } else if (order.equals("markerScore")) {
+            querySort = new Sort(d, "markerScore");
+        }
+        MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+        if (group != null && group.getStatus() == MarkStatus.FORMAL) {
+            // 正评查找已给分的评卷任务
+            MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
+            query.setExamId(marker.getExamId());
+            query.setSubjectCode(marker.getSubjectCode());
+            query.setMarkerId(marker.getId());
+            query.addStatus(LibraryStatus.MARKED);
+            query.addStatus(LibraryStatus.INSPECTED);
+            query.setGroupNumber(marker.getGroupNumber());
+            query.setSecretNumber(secretNumber);
+            query.setPageNumber(pageNumber);
+            query.setPageSize(pageSize);
+            if (querySort != null) {
+                query.setSort(querySort);
+            } else {
+                query.orderByMarkerTimeDesc();
+            }
+            list = taskService.findByQuery(query);
+            for (Task task : list) {
+                task.setPrevious(true);
+            }
+        } else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
+            // 试评查找给分历史记录
+            List<TrialHistory> historyList = new ArrayList<TrialHistory>();
+            if (StringUtils.isNotBlank(secretNumber)) {
+                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
+                        marker.getGroupNumber(), marker.getId(), secretNumber, pageNumber, pageSize, querySort);
+            } else {
+                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
+                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort, null);
+            }
+            for (TrialHistory history : historyList) {
+                TrialLibrary library = trialService.findLibrary(history.getLibraryId());
+                if (library != null) {
+                    Task task = taskService.build(library, history);
+                    task.setPrevious(true);
+                    list.add(task);
+                }
+            }
+        }
+        return list;
+    }
+
+    @Logging(menu = "修改密码", type = LogType.UPDATE)
+    @RequestMapping(value = "/mark/changeName", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONObject changeName(HttpServletRequest request, @RequestParam String name,
+            @RequestParam(required = false) String password) {
+        User user = userService.findById(RequestUtils.getWebUser(request).getId());
+        JSONObject result = new JSONObject();
+        user.setName(name);
+        if (StringUtils.isNotEmpty(password)) {
+            user.setPassword(EncryptUtils.md5(password));
+        }
+        try {
+            user = userService.save(user);
+            result.accumulate("success", true);
+        } catch (Exception e) {
+            result.accumulate("success", false);
+            log.error("MarkController-修改名字出错", e);
+        }
+        return result;
+    }
+
+    @RequestMapping(value = "/mark/updateSetting", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONObject updateSetting(HttpServletRequest request, @RequestParam(required = false) String uiSetting,
+            @RequestParam(required = false) String mode) {
+        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        if (uiSetting != null) {
+            markerService.updateMarkSetting(marker.getId(),
+                    StringEscapeUtils.unescapeHtml(StringUtils.trimToNull(uiSetting)));
+        }
+        if (mode != null) {
+            marker.setMode(MarkMode.findByName(mode));
+            markerService.save(marker);
+        }
+        JSONObject result = new JSONObject();
+        result.accumulate("success", true);
+        return result;
+    }
+
+    @RequestMapping("/mark/clear")
+    @ResponseBody
+    public void clear(HttpServletRequest request) {
+        releaseMarker(RequestUtils.getWebUser(request).getMarker());
+    }
+
+    private void releaseMarker(Marker marker) {
+        if (marker == null) {
+            return;
+        }
+        try {
+            lockService.waitlock(LockType.MARKER, marker.getId());
+            markService.releaseByMarker(marker);
+        } catch (Exception e) {
+            log.error("release marker error", e);
+        } finally {
+            lockService.unlock(LockType.MARKER, marker.getId());
+        }
+    }
+
+    protected String buildPictureConfig(String sheetConfig) {
+        String json = "";
+        if (StringUtils.isNotBlank(sheetConfig)) {
+            try {
+                ObjectMapper mapper = new ObjectMapper();
+                json = mapper.writeValueAsString(PictureConfigItem.parse(sheetConfig));
+            } catch (JsonProcessingException e) {
+                e.printStackTrace();
+            }
+        }
+        return json;
+    }
+
+    private void setProblemType(JSONObject setting, Marker marker) {
+        List<ProblemType> problemTypes = problemTypeService.findByExamId(marker.getExamId());
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            setting.accumulate("problemTypes", mapper.writeValueAsString(problemTypes));
+        } catch (JsonProcessingException e) {
+            log.error("MarkController-问题类型获取出错", e);
+        }
+    }
+
+    private void setMarker(JSONObject setting, Marker marker, String name) {
+        JSONObject m = new JSONObject();
+        m.accumulate("id", marker.getId());
+        m.accumulate("name", name);
+        setting.accumulate("marker", m);
+    }
+
+    private void setSubjectAndSheetConfig(JSONObject setting, Marker marker, Exam exam) {
+        ExamSubject examSubject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
+        String sheetConfig = "";
+        if (StringUtils.isNotBlank(examSubject.getSheetConfig())) {
+            sheetConfig = buildPictureConfig(examSubject.getSheetConfig());
+        } else if (StringUtils.isNotBlank(exam.getSheetConfig())) {
+            sheetConfig = buildPictureConfig(exam.getSheetConfig());
+        }
+        setting.accumulate("sheetConfig", sheetConfig);
+
+        JSONObject subject = new JSONObject();
+        subject.accumulate("name", examSubject.getName());
+        subject.accumulate("code", examSubject.getCode());
+        subject.accumulate("paperUrl", examSubject.getPaperUrl() == null ? "" : examSubject.getPaperUrl());
+        subject.accumulate("answerUrl", examSubject.getAnswerUrl() == null ? "" : examSubject.getAnswerUrl());
+        setting.accumulate("subject", subject);
+    }
+
+    private void setModeAndForceMode(JSONObject setting, Exam exam, Marker marker, MarkGroup group) {
+        MarkMode mode = null;
+        boolean forceMode = false;
+        if (MarkMode.findByName(forceMarkMode) != null) {
+            // 全局配置的强制评卷模式
+            mode = MarkMode.findByName(forceMarkMode);
+            forceMode = true;
+        } else {
+            // 没有全局配置,优先从大题配置取强制评卷模式
+            if (group != null && group.getMarkMode() != null) {
+                mode = group.getMarkMode();
+                forceMode = true;
+            }
+            // 否则取评卷员当前记录的评卷模式
+            if (mode == null) {
+                mode = marker.getMode();
+            }
+            if (mode == null) {
+                mode = MarkMode.COMMON;
+            }
+            if (marker.getMode() != mode) {
+                marker.setMode(mode);
+                markerService.save(marker);
+            }
+        }
+        setting.accumulate("mode", mode);
+        setting.accumulate("forceMode", forceMode);
+
+        if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+            setting.accumulate("forceMode", true);
+            setting.accumulate("sheetView", false);
+            setting.accumulate("forceSpecialTag", false);
+        }
+    }
+
+}

+ 18 - 31
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -160,8 +160,7 @@ public class MarkController extends BaseController {
     }
 
     @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
-    public ModelAndView select(HttpServletRequest request, HttpServletResponse response,
-            @RequestParam Integer markerId) {
+    public ModelAndView select(HttpServletRequest request, HttpServletResponse response, @RequestParam Integer markerId) {
         WebUser user = RequestUtils.getWebUser(request);
         ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelect");
         Calendar rightNow = Calendar.getInstance();
@@ -237,8 +236,7 @@ public class MarkController extends BaseController {
                 markerService.save(marker);
             }
         }
-        ModelAndView view = new ModelAndView(
-                mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
+        ModelAndView view = new ModelAndView(mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
         view.addObject("forceMode", forceMode);
         view.addObject("sheetView", group.isSheetView());
         view.addObject("enableAllZero", group.isEnableAllZero());
@@ -278,9 +276,8 @@ public class MarkController extends BaseController {
         releaseMarker(marker);
 
         List<ProblemType> problemTypes = problemTypeService.findByExamId(marker.getExamId());
-        List<Marker> markers = markerService
-                .findByExamAndSubjectAndUserIdAndEnable(marker.getExamId(), marker.getSubjectCode(), marker.getUserId(),
-                        true);
+        List<Marker> markers = markerService.findByExamAndSubjectAndUserIdAndEnable(marker.getExamId(),
+                marker.getSubjectCode(), marker.getUserId(), true);
         markers.remove(marker);
         for (Marker m : markers) {
             m.setMarkSetting(null);
@@ -294,12 +291,6 @@ public class MarkController extends BaseController {
         }
     }
 
-    @RequestMapping("/clear")
-    @ResponseBody
-    public void clear(HttpServletRequest request) {
-        releaseMarker(RequestUtils.getWebUser(request).getMarker());
-    }
-
     @RequestMapping("/status")
     @ResponseBody
     public JSONObject status(HttpServletRequest request) {
@@ -365,12 +356,12 @@ public class MarkController extends BaseController {
                     .findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
             if (group == null) {
                 task = new Task();
-                task.setExist(false);
-                task.setMessage("mark.control.task.not.exist");
+                // task.setExist(false);
+                // task.setMessage("mark.control.task.not.exist");
             } else if (group.getStatus() == MarkStatus.FINISH) {
                 task = new Task();
-                task.setExist(false);
-                task.setMessage("mark.control.task.finish");
+                // task.setExist(false);
+                // task.setMessage("mark.control.task.finish");
             } else if (group.getStatus() == MarkStatus.TRIAL) {
                 task = getTrialTask(marker);
             } else if (group.getStatus() == MarkStatus.FORMAL) {
@@ -378,8 +369,8 @@ public class MarkController extends BaseController {
             }
             if (task == null) {
                 task = new Task();
-                task.setExist(false);
-                task.setMessage("mark.control.task.null");
+                // task.setExist(false);
+                // task.setMessage("mark.control.task.null");
             }
         } catch (Exception e) {
             log.error("get task error", e);
@@ -397,9 +388,8 @@ public class MarkController extends BaseController {
             List<MarkLibrary> list = new ArrayList<MarkLibrary>();
             // 需要判断评卷员是否绑定了班级
             long classCount = markerClassService.countByUserIdAndExamId(marker.getUserId(), marker.getExamId());
-            list = libraryService
-                    .findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(), marker.getId(),
-                            marker.getUserId(), classCount > 0, retry, 20);
+            list = libraryService.findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                    marker.getId(), marker.getUserId(), classCount > 0, retry, 20);
             if (list.isEmpty()) {
                 break;
             }
@@ -420,9 +410,8 @@ public class MarkController extends BaseController {
         int retry = 1;
         Task task = null;
         while (task == null) {
-            List<TrialLibrary> list = trialService
-                    .findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
-                            marker.getId(), retry, 10);
+            List<TrialLibrary> list = trialService.findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(),
+                    marker.getGroupNumber(), marker.getId(), retry, 10);
             if (list.isEmpty()) {
                 break;
             }
@@ -517,13 +506,11 @@ public class MarkController extends BaseController {
             // 试评查找给分历史记录
             List<TrialHistory> historyList = new ArrayList<TrialHistory>();
             if (StringUtils.isNotBlank(secretNumber)) {
-                historyList = trialService
-                        .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
-                                marker.getId(), secretNumber, pageNumber, pageSize, querySort);
+                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
+                        marker.getGroupNumber(), marker.getId(), secretNumber, pageNumber, pageSize, querySort);
             } else {
-                historyList = trialService
-                        .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
-                                marker.getId(), pageNumber, pageSize, querySort, null);
+                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
+                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort, null);
             }
             for (TrialHistory history : historyList) {
                 TrialLibrary library = trialService.findLibrary(history.getLibraryId());

+ 1 - 0
stmms-web/src/main/webapp/WEB-INF/application.properties

@@ -24,6 +24,7 @@ mark.cleanLockSchedule=0 0 3 * * ?
 marker.showBtnImportAndBtnUpdateImport=false
 marker.forceMode=
 marker.name.verify=true
+marker.prefetch.count=3
 ##\u9996\u9875\u53ef\u9009\u7684logo\u6587\u4ef6
 index.logo=
 ##\u4e91\u5e73\u53f0\u5bf9\u63a5\u914d\u7f6e