Browse Source

Merge branch 'stmms_ft_dev' of http://git.qmth.com.cn/luoshi/stmms-ft
into stmms_ft_dev

# Conflicts:
# stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/Task.java
# stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java

luoshi 6 years ago
parent
commit
35bd6d6683

+ 13 - 27
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/MarkGroup.java

@@ -3,7 +3,6 @@ package cn.com.qmth.stmms.biz.exam.model;
 import java.io.Serializable;
 import java.text.DecimalFormat;
 import java.util.Date;
-import java.util.LinkedList;
 import java.util.List;
 
 import javax.persistence.Column;
@@ -16,14 +15,14 @@ import javax.persistence.Transient;
 
 import org.apache.commons.lang.StringUtils;
 
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+
 @Entity
 @Table(name = "eb_mark_group")
 public class MarkGroup implements Serializable {
 
     private static final long serialVersionUID = 5228601490523811224L;
 
-    public static final String PIC_SPLIT = ",";
-
     @EmbeddedId
     private MarkGroupPK pk;
 
@@ -68,14 +67,16 @@ public class MarkGroup implements Serializable {
         this.pk = new MarkGroupPK();
     }
 
-    public MarkGroup(Integer examId, String subjectCode, Integer number, String title, List<Integer> picList,
-            Double totalScore) {
+    public MarkGroup(Integer examId, String subjectCode, Integer number, String title,
+            List<PictureConfigItem> configList, Double totalScore) {
         this.pk = new MarkGroupPK();
         this.pk.setExamId(examId);
         this.pk.setNumber(number);
         this.pk.setSubjectCode(subjectCode);
         this.title = title;
-        this.picList = picList != null && picList.size() > 0 ? StringUtils.join(picList, PIC_SPLIT) : null;
+        this.picList = configList != null && configList.size() > 0
+                ? StringUtils.join(configList, PictureConfigItem.DB_ITEM_JOINER)
+                : null;
         this.totalScore = totalScore;
         this.libraryCount = 0;
         this.markedCount = 0;
@@ -114,29 +115,14 @@ public class MarkGroup implements Serializable {
         this.picList = picList;
     }
 
-    public void setPicList(List<Integer> picList) {
-        this.picList = picList != null && picList.size() > 0 ? StringUtils.join(picList, PIC_SPLIT) : null;
+    public void setPicList(List<PictureConfigItem> configList) {
+        this.picList = configList != null && configList.size() > 0
+                ? StringUtils.join(configList, PictureConfigItem.DB_ITEM_JOINER)
+                : null;
     }
 
-    public List<String> getPicNumbers() {
-        List<String> list = new LinkedList<String>();
-        String[] values = StringUtils.split(StringUtils.trimToNull(picList), PIC_SPLIT);
-        if (values != null && values.length > 0) {
-            for (String pic : values) {
-                list.add(StringUtils.trim(pic));
-            }
-        }
-        return list;
-    }
-
-    public String[] getPicListArray() {
-        List<String> list = getPicNumbers();
-        int length = list.size();
-        String[] array = new String[length];
-        for (int i = 0; i < list.size(); i++) {
-            array[i] = list.get(i);
-        }
-        return array;
+    public List<PictureConfigItem> getPictureConfigList() {
+        return PictureConfigItem.parse(this.picList);
     }
 
     public Double getTotalScore() {

+ 2 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkGroupService.java

@@ -4,6 +4,7 @@ import java.util.Date;
 import java.util.List;
 
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 
 public interface MarkGroupService {
 
@@ -23,7 +24,7 @@ public interface MarkGroupService {
 
     long countByExam(int examId);
 
-    void updatePicList(int examId, String subjectCode, int number, List<Integer> picList);
+    void updatePicList(int examId, String subjectCode, int number, List<PictureConfigItem> picList);
 
     void updateTitle(int examId, String subjectCode, int number, String title);
 

+ 172 - 169
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkGroupServiceImpl.java

@@ -1,169 +1,172 @@
-package cn.com.qmth.stmms.biz.exam.service.impl;
-
-import java.util.Date;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import cn.com.qmth.stmms.biz.common.BaseQueryService;
-import cn.com.qmth.stmms.biz.exam.dao.MarkGroupDao;
-import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
-import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
-import cn.com.qmth.stmms.biz.exam.model.MarkGroupPK;
-import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
-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.mark.service.MarkLibraryService;
-import cn.com.qmth.stmms.biz.mark.service.TaskService;
-import cn.com.qmth.stmms.common.enums.LibraryStatus;
-
-@Service("markGroupService")
-public class MarkGroupServiceImpl extends BaseQueryService<MarkGroup> implements MarkGroupService {
-
-    @Autowired
-    private MarkGroupDao groupDao;
-
-    @Autowired
-    private ExamSubjectService subjectService;
-
-    @Autowired
-    private ExamQuestionService questionService;
-
-    @Autowired
-    private MarkerService markerService;
-
-    @Autowired
-    private MarkLibraryService libraryService;
-
-    @Autowired
-    private TaskService taskService;
-
-    @Transactional
-    @Override
-    public MarkGroup save(MarkGroup group) {
-        if (group.getQuestionList() != null && !group.getQuestionList().isEmpty()) {
-            questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(group.getExamId(), group.getSubjectCode(),
-                    false, group.getNumber());
-            for (ExamQuestion question : group.getQuestionList()) {
-                questionService.save(question);
-            }
-        }
-        return groupDao.save(group);
-    }
-
-    @Transactional
-    @Override
-    public void reset(MarkGroup group) {
-        groupDao.resetCount(group.getExamId(), group.getSubjectCode(), group.getNumber());
-
-        libraryService.resetByGroup(group);
-        taskService.clearCurrent(group.getExamId(), group.getSubjectCode(), group.getNumber());
-    }
-
-    @Transactional
-    @Override
-    public void resetBuildTime(int examId, String subjectCode) {
-        groupDao.updateBuildTime(examId, subjectCode, null);
-    }
-
-    @Transactional
-    @Override
-    public void delete(MarkGroup group) {
-        groupDao.delete(group);
-
-        taskService.clearCurrent(group.getExamId(), group.getSubjectCode(), group.getNumber());
-        questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(group.getExamId(), group.getSubjectCode(),
-                false, group.getNumber());
-        libraryService.deleteByGroup(group);
-        markerService.deleteByGroup(group);
-        subjectService.updateScore(group.getExamId(), group.getSubjectCode());
-    }
-
-    @Transactional
-    @Override
-    public void updateLibraryCount(int examId, String subjectCode, int number) {
-        groupDao.updateLibraryCount(examId, subjectCode, number);
-        groupDao.updateMarkedCount(examId, subjectCode, number, LibraryStatus.MARKED);
-        groupDao.updateLeftCount(examId, subjectCode, number);
-    }
-
-    @Transactional
-    @Override
-    public void updateLibraryCount(int examId, String subjectCode) {
-        groupDao.updateLibraryCount(examId, subjectCode);
-        groupDao.updateMarkedCount(examId, subjectCode, LibraryStatus.MARKED);
-        groupDao.updateLeftCount(examId, subjectCode);
-    }
-
-    @Transactional
-    @Override
-    public void updatePicList(int examId, String subjectCode, int number, List<Integer> picList) {
-        groupDao.updatePicList(examId, subjectCode, number,
-                picList != null && picList.size() > 0 ? StringUtils.join(picList, MarkGroup.PIC_SPLIT) : "");
-    }
-
-    @Transactional
-    @Override
-    public void updateTitle(int examId, String subjectCode, int number, String title) {
-        groupDao.updateTitle(examId, subjectCode, number, title);
-        questionService.updateMainTitle(examId, subjectCode, false, number, title);
-    }
-
-    @Transactional
-    @Override
-    public void updateTotalScore(int examId, String subjectCode, int number, Double score) {
-        groupDao.updateTotalScore(examId, subjectCode, number, score);
-    }
-
-    @Transactional
-    @Override
-    public void updateBuildTime(int examId, String subjectCode, int number, Date time) {
-        groupDao.updateBuildTime(examId, subjectCode, number, time);
-    }
-
-    @Transactional
-    @Override
-    public void deleteByExam(int examId) {
-        groupDao.deleteByExamId(examId);
-    }
-
-    @Transactional
-    @Override
-    public void deleteByExamAndSubject(int examId, String subjectCode) {
-        groupDao.deleteByExamIdAndSubjectCode(examId, subjectCode);
-    }
-
-    @Override
-    public MarkGroup findOne(int examId, String subjectCode, int number) {
-        MarkGroupPK pk = new MarkGroupPK();
-        pk.setExamId(examId);
-        pk.setSubjectCode(subjectCode);
-        pk.setNumber(number);
-        return groupDao.findOne(pk);
-    }
-
-    @Override
-    public long countByExamAndSubject(int examId, String subjectCode) {
-        return groupDao.countByExamIdAndSubjectCode(examId, subjectCode);
-    }
-
-    @Override
-    public List<MarkGroup> findByExam(int examId) {
-        return groupDao.findByExamId(examId);
-    }
-
-    @Override
-    public List<MarkGroup> findByExamAndSubject(int examId, String code) {
-        return groupDao.findByExamIdAndSubjectCode(examId, code);
-    }
-
-    @Override
-    public long countByExam(int examId) {
-        return groupDao.countByExamId(examId);
-    }
-
-}
+package cn.com.qmth.stmms.biz.exam.service.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.biz.exam.dao.MarkGroupDao;
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroupPK;
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+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.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
+import cn.com.qmth.stmms.biz.mark.service.TaskService;
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
+
+@Service("markGroupService")
+public class MarkGroupServiceImpl extends BaseQueryService<MarkGroup> implements MarkGroupService {
+
+    @Autowired
+    private MarkGroupDao groupDao;
+
+    @Autowired
+    private ExamSubjectService subjectService;
+
+    @Autowired
+    private ExamQuestionService questionService;
+
+    @Autowired
+    private MarkerService markerService;
+
+    @Autowired
+    private MarkLibraryService libraryService;
+
+    @Autowired
+    private TaskService taskService;
+
+    @Transactional
+    @Override
+    public MarkGroup save(MarkGroup group) {
+        if (group.getQuestionList() != null && !group.getQuestionList().isEmpty()) {
+            questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(group.getExamId(), group.getSubjectCode(),
+                    false, group.getNumber());
+            for (ExamQuestion question : group.getQuestionList()) {
+                questionService.save(question);
+            }
+        }
+        return groupDao.save(group);
+    }
+
+    @Transactional
+    @Override
+    public void reset(MarkGroup group) {
+        groupDao.resetCount(group.getExamId(), group.getSubjectCode(), group.getNumber());
+
+        libraryService.resetByGroup(group);
+        taskService.clearCurrent(group.getExamId(), group.getSubjectCode(), group.getNumber());
+    }
+
+    @Transactional
+    @Override
+    public void resetBuildTime(int examId, String subjectCode) {
+        groupDao.updateBuildTime(examId, subjectCode, null);
+    }
+
+    @Transactional
+    @Override
+    public void delete(MarkGroup group) {
+        groupDao.delete(group);
+
+        taskService.clearCurrent(group.getExamId(), group.getSubjectCode(), group.getNumber());
+        questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(group.getExamId(), group.getSubjectCode(),
+                false, group.getNumber());
+        libraryService.deleteByGroup(group);
+        markerService.deleteByGroup(group);
+        subjectService.updateScore(group.getExamId(), group.getSubjectCode());
+    }
+
+    @Transactional
+    @Override
+    public void updateLibraryCount(int examId, String subjectCode, int number) {
+        groupDao.updateLibraryCount(examId, subjectCode, number);
+        groupDao.updateMarkedCount(examId, subjectCode, number, LibraryStatus.MARKED);
+        groupDao.updateLeftCount(examId, subjectCode, number);
+    }
+
+    @Transactional
+    @Override
+    public void updateLibraryCount(int examId, String subjectCode) {
+        groupDao.updateLibraryCount(examId, subjectCode);
+        groupDao.updateMarkedCount(examId, subjectCode, LibraryStatus.MARKED);
+        groupDao.updateLeftCount(examId, subjectCode);
+    }
+
+    @Transactional
+    @Override
+    public void updatePicList(int examId, String subjectCode, int number, List<PictureConfigItem> configList) {
+        groupDao.updatePicList(examId, subjectCode, number,
+                configList != null && configList.size() > 0
+                        ? StringUtils.join(configList, PictureConfigItem.DB_ITEM_JOINER)
+                        : "");
+    }
+
+    @Transactional
+    @Override
+    public void updateTitle(int examId, String subjectCode, int number, String title) {
+        groupDao.updateTitle(examId, subjectCode, number, title);
+        questionService.updateMainTitle(examId, subjectCode, false, number, title);
+    }
+
+    @Transactional
+    @Override
+    public void updateTotalScore(int examId, String subjectCode, int number, Double score) {
+        groupDao.updateTotalScore(examId, subjectCode, number, score);
+    }
+
+    @Transactional
+    @Override
+    public void updateBuildTime(int examId, String subjectCode, int number, Date time) {
+        groupDao.updateBuildTime(examId, subjectCode, number, time);
+    }
+
+    @Transactional
+    @Override
+    public void deleteByExam(int examId) {
+        groupDao.deleteByExamId(examId);
+    }
+
+    @Transactional
+    @Override
+    public void deleteByExamAndSubject(int examId, String subjectCode) {
+        groupDao.deleteByExamIdAndSubjectCode(examId, subjectCode);
+    }
+
+    @Override
+    public MarkGroup findOne(int examId, String subjectCode, int number) {
+        MarkGroupPK pk = new MarkGroupPK();
+        pk.setExamId(examId);
+        pk.setSubjectCode(subjectCode);
+        pk.setNumber(number);
+        return groupDao.findOne(pk);
+    }
+
+    @Override
+    public long countByExamAndSubject(int examId, String subjectCode) {
+        return groupDao.countByExamIdAndSubjectCode(examId, subjectCode);
+    }
+
+    @Override
+    public List<MarkGroup> findByExam(int examId) {
+        return groupDao.findByExamId(examId);
+    }
+
+    @Override
+    public List<MarkGroup> findByExamAndSubject(int examId, String code) {
+        return groupDao.findByExamIdAndSubjectCode(examId, code);
+    }
+
+    @Override
+    public long countByExam(int examId) {
+        return groupDao.countByExamId(examId);
+    }
+
+}

+ 64 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkLibrary.java

@@ -105,6 +105,30 @@ public class MarkLibrary implements Serializable {
 
     @Transient
     private Marker marker;
+    
+    /**
+     * 科组长
+     */
+    @Column(name = "header_id")
+    private Integer headerId;
+
+    /**
+     * 科组长评卷时间
+     */
+    @Column(name = "header_time")
+    private Date headerTime;
+
+    /**
+     * 科组长给分总分
+     */
+    @Column(name = "header_score")
+    private Double headerScore;
+
+    /**
+     * 科组长给分明细
+     */
+    @Column(name = "header_score_list")
+    private String headerScoreList;
 
     public Integer getId() {
         return id;
@@ -188,9 +212,15 @@ public class MarkLibrary implements Serializable {
 
     public List<ScoreItem> getScoreList() {
         List<ScoreItem> list = new LinkedList<ScoreItem>();
-        if (StringUtils.isNotBlank(markerScoreList)) {
+        String scoreList = null;
+        if (StringUtils.isNotBlank(headerScoreList)){
+        	scoreList = headerScoreList;
+        }else if(StringUtils.isNotBlank(markerScoreList)){
+        	scoreList = markerScoreList;
+        }
+        if (StringUtils.isNotBlank(scoreList)) {
             try {
-                String[] values = markerScoreList.split(",");
+                String[] values = scoreList.split(",");
                 for (String value : values) {
                     ScoreItem item = ScoreItem.parse(value, false);
                     if (item != null) {
@@ -235,4 +265,36 @@ public class MarkLibrary implements Serializable {
         this.marker = marker;
     }
 
+	public Integer getHeaderId() {
+		return headerId;
+	}
+
+	public void setHeaderId(Integer headerId) {
+		this.headerId = headerId;
+	}
+
+	public Date getHeaderTime() {
+		return headerTime;
+	}
+
+	public void setHeaderTime(Date headerTime) {
+		this.headerTime = headerTime;
+	}
+
+	public Double getHeaderScore() {
+		return headerScore;
+	}
+
+	public void setHeaderScore(Double headerScore) {
+		this.headerScore = headerScore;
+	}
+
+	public String getHeaderScoreList() {
+		return headerScoreList;
+	}
+
+	public void setHeaderScoreList(String headerScoreList) {
+		this.headerScoreList = headerScoreList;
+	}
+
 }

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/PictureConfigItem.java → stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/PictureConfigItem.java

@@ -1,4 +1,4 @@
-package cn.com.qmth.stmms.admin.dto;
+package cn.com.qmth.stmms.biz.mark.model;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -111,7 +111,7 @@ public class PictureConfigItem {
         return sb.toString();
     }
 
-    public List<PictureConfigItem> parse(String text) {
+    public static List<PictureConfigItem> parse(String text) {
         List<PictureConfigItem> list = new LinkedList<PictureConfigItem>();
         text = StringUtils.trimToEmpty(text);
         String[] values = StringUtils.split(text, DB_ITEM_JOINER);

+ 44 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/Task.java

@@ -32,9 +32,9 @@ public class Task implements Serializable {
     private List<String> pictureUrls;
 
     /**
-     * 题卡图片组装配置
+     * 题卡图片拼接配置
      */
-    private String pictureConfig;
+    private List<PictureConfigItem> pictureConfig;
 
     /**
      * 题卡原图地址
@@ -123,6 +123,14 @@ public class Task implements Serializable {
 
     private String message;
 
+    private Integer headerId;
+
+    private Date headerTime;
+
+    private Double headerScore;
+
+    private String headerScoreList;
+
     // 特殊标识:√ 或 ❌ 或 乄
     private SpecialTagDTO[] tagList;
 
@@ -330,11 +338,43 @@ public class Task implements Serializable {
         this.tagList = tagList;
     }
 
-    public String getPictureConfig() {
+    public Integer getHeaderId() {
+        return headerId;
+    }
+
+    public void setHeaderId(Integer headerId) {
+        this.headerId = headerId;
+    }
+
+    public Date getHeaderTime() {
+        return headerTime;
+    }
+
+    public void setHeaderTime(Date headerTime) {
+        this.headerTime = headerTime;
+    }
+
+    public Double getHeaderScore() {
+        return headerScore;
+    }
+
+    public void setHeaderScore(Double headerScore) {
+        this.headerScore = headerScore;
+    }
+
+    public String getHeaderScoreList() {
+        return headerScoreList;
+    }
+
+    public void setHeaderScoreList(String headerScoreList) {
+        this.headerScoreList = headerScoreList;
+    }
+
+    public List<PictureConfigItem> getPictureConfig() {
         return pictureConfig;
     }
 
-    public void setPictureConfig(String pictureConfig) {
+    public void setPictureConfig(List<PictureConfigItem> pictureConfig) {
         this.pictureConfig = pictureConfig;
     }
 

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

@@ -26,6 +26,7 @@ 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;
@@ -95,7 +96,7 @@ public class TaskServiceImpl implements TaskService {
         task.setMarkStepList(buildMarkStep(library));
         task.setPictureUrls(PictureUrlBuilder.getSliceUrls(library.getExamId(), library.getCampusId(),
                 library.getSubjectCode(), library.getExamNumber(), student.getSliceCount()));
-        task.setPictureConfig(group.getPicList());
+        task.setPictureConfig(group.getPictureConfigList());
         task.setSheetUrls(PictureUrlBuilder.getSheetUrls(library.getExamId(), library.getCampusId(),
                 library.getSubjectCode(), library.getExamNumber(), student.getSheetCount()));
         task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(library.getExamId(), library.getSubjectCode()));
@@ -230,8 +231,13 @@ public class TaskServiceImpl implements TaskService {
                 List<ScoreItem> scoreList = new ArrayList<ScoreItem>();
                 Double markerScore = 0.0;
                 for (MarkLibrary librarie : libraries) {
-                    scoreList.addAll(librarie.getScoreList());
-                    markerScore = markerScore + librarie.getMarkerScore();
+                    if (librarie.getHeaderId() != null) {
+                        scoreList.addAll(librarie.getScoreList());
+                        markerScore = markerScore + librarie.getHeaderScore();
+                    } else {
+                        scoreList.addAll(librarie.getScoreList());
+                        markerScore = markerScore + librarie.getMarkerScore();
+                    }
                 }
                 studentService.updateSubjectiveScore(library.getStudentId(), markerScore,
                         ExamStudent.buildScoreList(scoreList));
@@ -280,6 +286,12 @@ public class TaskServiceImpl implements TaskService {
                 library.setMarkerScore(task.getTotalScore());
                 library.setMarkerScoreList(task.getScoreList());
             }
+            if (task.getHeaderId() != null) {
+                library.setHeaderId(task.getHeaderId());
+                library.setHeaderTime(new Date());
+                library.setHeaderScore(task.getHeaderScore());
+                library.setHeaderScoreList(task.getHeaderScoreList());
+            }
             return libraryService.save(library);
         } else {
             return null;
@@ -343,15 +355,25 @@ public class TaskServiceImpl implements TaskService {
         Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
         task.setPictureUrls(PictureUrlBuilder.getSliceUrls(student.getExamId(), campus.getId(),
                 student.getSubjectCode(), student.getExamNumber(), student.getSliceCount()));
+        task.setPictureConfig(buildPictureConfig(student.getSliceCount()));
         task.setSheetUrls(PictureUrlBuilder.getSheetUrls(student.getExamId(), campus.getId(), student.getSubjectCode(),
                 student.getExamNumber(), student.getSheetCount()));
         task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(student.getExamId(), student.getSubjectCode()));
         task.setPaperUrl(PictureUrlBuilder.getPaperUrl(student.getExamId(), student.getSubjectCode()));
         task.setObjectiveScore(student != null ? student.getObjectiveScore() : 0);
         task.setBack(true);
+
         return task;
     }
 
+    private List<PictureConfigItem> buildPictureConfig(int picCount) {
+        List<PictureConfigItem> list = new LinkedList<PictureConfigItem>();
+        for (int i = 1; i <= picCount; i++) {
+            list.add(new PictureConfigItem(String.valueOf(i)));
+        }
+        return list;
+    }
+
     private List<MarkStepDTO> buildMarkStep(ExamStudent student) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
@@ -395,7 +417,7 @@ public class TaskServiceImpl implements TaskService {
                 stepTask.setProblem(task.isProblem());
                 stepTask.setBack(task.isBack());
                 stepTask.setLibraryId(library.getId());
-                stepTask.setMarkId(task.getMarkId());
+                stepTask.setHeaderId(task.getHeaderId());
                 stepTask.setTags(task.getTags());
                 List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(
                         library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
@@ -406,13 +428,13 @@ public class TaskServiceImpl implements TaskService {
                     end = start + sList.size() * 2 - 1;
                 }
                 String scoreList = task.getScoreList().substring(start, end);
-                stepTask.setScoreList(scoreList);
+                stepTask.setHeaderScoreList(scoreList);
                 String[] scores = scoreList.split(",");
                 double totalScore = 0;
                 for (String score : scores) {
                     totalScore = totalScore + Double.parseDouble(score);
                 }
-                stepTask.setTotalScore(totalScore);
+                stepTask.setHeaderScore(totalScore);
                 submitLibrary(stepTask);
             }
             return true;

+ 2 - 22
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/SubjectQuestionDTO.java

@@ -1,6 +1,5 @@
 package cn.com.qmth.stmms.admin.dto;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -12,6 +11,7 @@ import org.apache.commons.lang.StringUtils;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 
 public class SubjectQuestionDTO {
 
@@ -46,7 +46,7 @@ public class SubjectQuestionDTO {
                 MarkGroup group = groups.get(question.getMainNumber());
                 if (group == null) {
                     group = new MarkGroup(examId, subjectCode, question.getMainNumber(), question.getMainTitle(),
-                            buildPicList(question.getPicList()), 0d);
+                            PictureConfigItem.parse(question.getPicList()), 0d);
                     group.setQuestionList(new LinkedList<ExamQuestion>());
                     groups.put(question.getMainNumber(), group);
                 }
@@ -123,24 +123,4 @@ public class SubjectQuestionDTO {
         }
     }
 
-    public static List<Integer> buildPicList(String content) {
-        List<Integer> list = new ArrayList<Integer>();
-        content = StringUtils.trimToNull(content);
-        if (content != null) {
-            String[] values = StringUtils.split(content, ",");
-            if (values != null) {
-                for (String value : values) {
-                    try {
-                        Integer number = Integer.valueOf(value);
-                        if (number != null) {
-                            list.add(number);
-                        }
-                    } catch (Exception e) {
-                        continue;
-                    }
-                }
-            }
-        }
-        return list;
-    }
 }

+ 347 - 345
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -1,345 +1,347 @@
-package cn.com.qmth.stmms.admin.exam;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import cn.com.qmth.stmms.admin.dto.SubjectQuestionDTO;
-import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
-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.service.ExamQuestionService;
-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.mark.service.TaskService;
-import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
-import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
-
-@Controller("markGroupController")
-@RequestMapping("/admin/exam/group")
-public class MarkGroupController extends BaseExamController {
-
-    protected static Logger log = LoggerFactory.getLogger(MarkGroupController.class);
-
-    @Autowired
-    private ExamSubjectService subjectService;
-
-    @Autowired
-    private ExamQuestionService questionService;
-
-    @Autowired
-    private MarkGroupService groupService;
-
-    @Autowired
-    private MarkerService markerService;
-
-    @Autowired
-    private TaskService taskService;
-
-    @RequestMapping
-    public String list(HttpServletRequest request, Model model, @RequestParam String subjectCode) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        int examId = getSessionExamId(request);
-        ExamSubject subject = subjectService.find(examId, subjectCode);
-        if (subject == null) {
-            return "redirect:/admin/exam/mark";
-        }
-        if (wu.isSubjectHeader() && !subjectCode.equals(wu.getUser().getSubjectCode())) {
-            return "redirect:/admin/exam/mark";
-        }
-        List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
-        for (MarkGroup group : list) {
-            group.setScoreList(questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
-                    group.getNumber()));
-            group.setMarkerCount(markerService.countByExamAndSubjectAndGroup(examId, subjectCode, group.getNumber()));
-            group.setCurrentCount(taskService.countCurrent(examId, subjectCode, group.getNumber()));
-            int percent = group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount()) : 0;
-            group.setPercent(percent);
-        }
-        model.addAttribute("resultList", list);
-        model.addAttribute("subject", subject);
-        model.addAttribute("subjectList", getExamSubject(examId, wu));
-        return "modules/exam/groupList";
-    }
-
-    @RequestMapping("/query")
-    @ResponseBody
-    public JSONArray query(HttpServletRequest request, @RequestParam String subjectCode) {
-        int examId = getSessionExamId(request);
-        JSONArray array = new JSONArray();
-        List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
-        for (MarkGroup group : list) {
-            JSONObject obj = new JSONObject();
-            obj.accumulate("number", group.getNumber());
-            obj.accumulate("title", group.getTitle());
-            obj.accumulate("score", group.getTotalScore());
-            array.add(obj);
-        }
-        return array;
-    }
-
-    @RequestMapping("/check-count")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String ckeckCount(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode) {
-        int examId = getSessionExamId(request);
-        ExamSubject subject = subjectService.find(examId, subjectCode);
-        if (subject == null) {
-            return "redirect:/admin/exam/mark";
-        }
-        groupService.updateLibraryCount(examId, subjectCode);
-
-        redirectAttributes.addAttribute("subjectCode", subjectCode);
-        return "redirect:/admin/exam/group";
-    }
-
-    @RequestMapping("/release")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String release(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer number) {
-        int examId = getSessionExamId(request);
-        MarkGroup group = groupService.findOne(examId, subjectCode, number);
-        if (group == null) {
-            return "redirect:/admin/exam/mark";
-        }
-        taskService.clearCurrent(examId, group.getSubjectCode(), group.getNumber());
-
-        redirectAttributes.addAttribute("subjectCode", subjectCode);
-        return "redirect:/admin/exam/group";
-    }
-
-    @RequestMapping("/reset")
-    @Transactional
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String reset(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer number) {
-        int examId = getSessionExamId(request);
-        MarkGroup group = groupService.findOne(examId, subjectCode, number);
-        if (group == null) {
-            return "redirect:/admin/exam/mark";
-        }
-        groupService.reset(group);
-
-        redirectAttributes.addAttribute("subjectCode", subjectCode);
-        return "redirect:/admin/exam/group";
-    }
-
-    @RequestMapping("/add")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String editSimple(HttpServletRequest request, Model model, @RequestParam String subjectCode) {
-        int examId = getSessionExamId(request);
-        ExamSubject subject = subjectService.find(examId, subjectCode);
-        if (subject == null) {
-            return "redirect:/admin/exam/mark";
-        }
-        MarkGroup group = new MarkGroup();
-        group.setSubjectCode(subjectCode);
-        model.addAttribute("group", group);
-        return "modules/exam/groupAdd";
-    }
-
-    @RequestMapping("/edit-simple")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String editSimple(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer number) {
-        int examId = getSessionExamId(request);
-        MarkGroup group = groupService.findOne(examId, subjectCode, number);
-        if (group != null) {
-            model.addAttribute("group", group);
-            model.addAttribute("questions", questionService.findByExamAndSubjectAndObjectiveAndMainNumber(
-                    group.getExamId(), group.getSubjectCode(), false, group.getNumber()));
-            return "modules/exam/groupEditSimple";
-        } else {
-            redirectAttributes.addAttribute("subjectCode", subjectCode);
-            return "redirect:/admin/exam/group";
-        }
-    }
-
-    @RequestMapping("/edit-full")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String editFull(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer number) {
-        int examId = getSessionExamId(request);
-        MarkGroup group = groupService.findOne(examId, subjectCode, number);
-        if (group != null) {
-            group.setScoreList(
-                    questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number));
-            model.addAttribute("group", group);
-            return "modules/exam/groupEditFull";
-        } else {
-            redirectAttributes.addAttribute("subjectCode", subjectCode);
-            return "redirect:/admin/exam/group";
-        }
-    }
-
-    @RequestMapping("/delete")
-    @Transactional
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String delete(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer number) {
-        int examId = getSessionExamId(request);
-        MarkGroup group = groupService.findOne(examId, subjectCode, number);
-        if (group != null) {
-            groupService.delete(group);
-        }
-        redirectAttributes.addAttribute("subjectCode", subjectCode);
-        redirectAttributes.addAttribute("number", number);
-        return "redirect:/admin/exam/group";
-    }
-
-    @RequestMapping("/save")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String save(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer number,
-            @RequestParam(required = false) String title, @RequestParam(required = false) String picList,
-            @RequestParam(required = false) String intervalScoreList,
-            @RequestParam(required = false) String scoreList) {
-        int examId = getSessionExamId(request);
-        MarkGroup group = groupService.findOne(examId, subjectCode, number);
-        List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId,
-                subjectCode, false, number);
-        if (group != null) {
-            // quick update
-            List<Integer> pics = SubjectQuestionDTO.buildPicList(picList);
-            if (pics.size() > 0) {
-                groupService.updatePicList(examId, subjectCode, number, pics);
-            }
-            List<Double> intervalScores = buildDoubleList(intervalScoreList);
-            if (intervalScores.size() == questionList.size()) {
-                for (int i = 0; i < questionList.size(); i++) {
-                    ExamQuestion q = questionList.get(i);
-                    q.setIntervalScore(intervalScores.get(i));
-                    questionService.save(q);
-                }
-            }
-            title = StringUtils.trimToNull(title);
-            if (title != null) {
-                groupService.updateTitle(examId, subjectCode, number, title);
-            }
-            // advance update
-            List<Double> scores = buildDoubleList(scoreList);
-            if (scores.size() > 0) {
-                // reset current mark_library
-                groupService.reset(group);
-                // clear and replace exam_question
-                questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
-                int i = 0;
-                double totalScore = 0d;
-                for (Double score : scores) {
-                    i++;
-                    totalScore += score;
-                    ExamQuestion question = new ExamQuestion();
-                    question.setExamId(examId);
-                    question.setSubjectCode(subjectCode);
-                    question.setMainTitle(group.getTitle());
-                    question.setMainNumber(number);
-                    question.setSubNumber(i);
-                    question.setObjective(false);
-                    question.setTotalScore(score);
-                    question.setIntervalScore(1d);
-                    questionService.save(question);
-                }
-                groupService.updateTotalScore(examId, subjectCode, number, totalScore);
-                subjectService.updateScore(examId, subjectCode);
-            }
-            redirectAttributes.addAttribute("subjectCode", subjectCode);
-            redirectAttributes.addAttribute("number", number);
-            return "redirect:/admin/exam/group";
-        } else {
-            addMessage(redirectAttributes, "找不到对应大题");
-            redirectAttributes.addAttribute("subjectCode", subjectCode);
-            redirectAttributes.addAttribute("number", number);
-            return "redirect:/admin/exam/group/edit-simple";
-        }
-    }
-
-    @RequestMapping("/insert")
-    @Transactional
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String insert(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer number,
-            @RequestParam(required = false) String title, @RequestParam(required = false) String picList,
-            @RequestParam(required = false) String scoreList) {
-        int examId = getSessionExamId(request);
-        MarkGroup group = groupService.findOne(examId, subjectCode, number);
-        if (group != null) {
-            addMessage(redirectAttributes, "大题号不能重复");
-            redirectAttributes.addAttribute("subjectCode", subjectCode);
-            return "redirect:/admin/exam/group/add";
-        } else {
-            // create group
-            group = new MarkGroup(examId, subjectCode, number, StringUtils.trimToNull(title),
-                    SubjectQuestionDTO.buildPicList(picList), 0d);
-            List<Double> scores = buildDoubleList(scoreList);
-            if (group.getTitle() != null && group.getPicList() != null && scores.size() > 0) {
-                // clear and replace exam_question
-                questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
-                int i = 0;
-                double totalScore = 0d;
-                for (Double score : scores) {
-                    i++;
-                    totalScore += score;
-                    ExamQuestion question = new ExamQuestion();
-                    question.setExamId(examId);
-                    question.setSubjectCode(subjectCode);
-                    question.setMainTitle(group.getTitle());
-                    question.setMainNumber(number);
-                    question.setSubNumber(i);
-                    question.setObjective(false);
-                    question.setTotalScore(score);
-                    question.setIntervalScore(1d);
-                    questionService.save(question);
-                }
-                group.setTotalScore(totalScore);
-                groupService.save(group);
-                subjectService.updateScore(examId, subjectCode);
-                redirectAttributes.addAttribute("subjectCode", subjectCode);
-                return "redirect:/admin/exam/group";
-            } else {
-                addMessage(redirectAttributes, "参数有误");
-                redirectAttributes.addAttribute("subjectCode", subjectCode);
-                return "redirect:/admin/exam/group/add";
-            }
-        }
-    }
-
-    private List<Double> buildDoubleList(String content) {
-        List<Double> list = new ArrayList<Double>();
-        content = StringUtils.trimToNull(content);
-        if (content != null) {
-            String[] values = StringUtils.split(content, ",");
-            if (values != null) {
-                for (String value : values) {
-                    try {
-                        Double number = Double.valueOf(value);
-                        if (number != null) {
-                            list.add(number);
-                        }
-                    } catch (Exception e) {
-                        continue;
-                    }
-                }
-            }
-        }
-        return list;
-    }
-
-}
+package cn.com.qmth.stmms.admin.exam;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
+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.service.ExamQuestionService;
+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.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.biz.mark.service.TaskService;
+import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+@Controller("markGroupController")
+@RequestMapping("/admin/exam/group")
+public class MarkGroupController extends BaseExamController {
+
+    protected static Logger log = LoggerFactory.getLogger(MarkGroupController.class);
+
+    @Autowired
+    private ExamSubjectService subjectService;
+
+    @Autowired
+    private ExamQuestionService questionService;
+
+    @Autowired
+    private MarkGroupService groupService;
+
+    @Autowired
+    private MarkerService markerService;
+
+    @Autowired
+    private TaskService taskService;
+
+    @RequestMapping
+    public String list(HttpServletRequest request, Model model, @RequestParam String subjectCode) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        int examId = getSessionExamId(request);
+        ExamSubject subject = subjectService.find(examId, subjectCode);
+        if (subject == null) {
+            return "redirect:/admin/exam/mark";
+        }
+        if (wu.isSubjectHeader() && !subjectCode.equals(wu.getUser().getSubjectCode())) {
+            return "redirect:/admin/exam/mark";
+        }
+        List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
+        for (MarkGroup group : list) {
+            group.setScoreList(questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
+                    group.getNumber()));
+            group.setMarkerCount(markerService.countByExamAndSubjectAndGroup(examId, subjectCode, group.getNumber()));
+            group.setCurrentCount(taskService.countCurrent(examId, subjectCode, group.getNumber()));
+            int percent = group.getLibraryCount() > 0
+                    ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount())
+                    : 0;
+            group.setPercent(percent);
+        }
+        model.addAttribute("resultList", list);
+        model.addAttribute("subject", subject);
+        model.addAttribute("subjectList", getExamSubject(examId, wu));
+        return "modules/exam/groupList";
+    }
+
+    @RequestMapping("/query")
+    @ResponseBody
+    public JSONArray query(HttpServletRequest request, @RequestParam String subjectCode) {
+        int examId = getSessionExamId(request);
+        JSONArray array = new JSONArray();
+        List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
+        for (MarkGroup group : list) {
+            JSONObject obj = new JSONObject();
+            obj.accumulate("number", group.getNumber());
+            obj.accumulate("title", group.getTitle());
+            obj.accumulate("score", group.getTotalScore());
+            array.add(obj);
+        }
+        return array;
+    }
+
+    @RequestMapping("/check-count")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String ckeckCount(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode) {
+        int examId = getSessionExamId(request);
+        ExamSubject subject = subjectService.find(examId, subjectCode);
+        if (subject == null) {
+            return "redirect:/admin/exam/mark";
+        }
+        groupService.updateLibraryCount(examId, subjectCode);
+
+        redirectAttributes.addAttribute("subjectCode", subjectCode);
+        return "redirect:/admin/exam/group";
+    }
+
+    @RequestMapping("/release")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String release(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode, @RequestParam Integer number) {
+        int examId = getSessionExamId(request);
+        MarkGroup group = groupService.findOne(examId, subjectCode, number);
+        if (group == null) {
+            return "redirect:/admin/exam/mark";
+        }
+        taskService.clearCurrent(examId, group.getSubjectCode(), group.getNumber());
+
+        redirectAttributes.addAttribute("subjectCode", subjectCode);
+        return "redirect:/admin/exam/group";
+    }
+
+    @RequestMapping("/reset")
+    @Transactional
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String reset(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode, @RequestParam Integer number) {
+        int examId = getSessionExamId(request);
+        MarkGroup group = groupService.findOne(examId, subjectCode, number);
+        if (group == null) {
+            return "redirect:/admin/exam/mark";
+        }
+        groupService.reset(group);
+
+        redirectAttributes.addAttribute("subjectCode", subjectCode);
+        return "redirect:/admin/exam/group";
+    }
+
+    @RequestMapping("/add")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String editSimple(HttpServletRequest request, Model model, @RequestParam String subjectCode) {
+        int examId = getSessionExamId(request);
+        ExamSubject subject = subjectService.find(examId, subjectCode);
+        if (subject == null) {
+            return "redirect:/admin/exam/mark";
+        }
+        MarkGroup group = new MarkGroup();
+        group.setSubjectCode(subjectCode);
+        model.addAttribute("group", group);
+        return "modules/exam/groupAdd";
+    }
+
+    @RequestMapping("/edit-simple")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String editSimple(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode, @RequestParam Integer number) {
+        int examId = getSessionExamId(request);
+        MarkGroup group = groupService.findOne(examId, subjectCode, number);
+        if (group != null) {
+            model.addAttribute("group", group);
+            model.addAttribute("questions", questionService.findByExamAndSubjectAndObjectiveAndMainNumber(
+                    group.getExamId(), group.getSubjectCode(), false, group.getNumber()));
+            return "modules/exam/groupEditSimple";
+        } else {
+            redirectAttributes.addAttribute("subjectCode", subjectCode);
+            return "redirect:/admin/exam/group";
+        }
+    }
+
+    @RequestMapping("/edit-full")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String editFull(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode, @RequestParam Integer number) {
+        int examId = getSessionExamId(request);
+        MarkGroup group = groupService.findOne(examId, subjectCode, number);
+        if (group != null) {
+            group.setScoreList(
+                    questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number));
+            model.addAttribute("group", group);
+            return "modules/exam/groupEditFull";
+        } else {
+            redirectAttributes.addAttribute("subjectCode", subjectCode);
+            return "redirect:/admin/exam/group";
+        }
+    }
+
+    @RequestMapping("/delete")
+    @Transactional
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String delete(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode, @RequestParam Integer number) {
+        int examId = getSessionExamId(request);
+        MarkGroup group = groupService.findOne(examId, subjectCode, number);
+        if (group != null) {
+            groupService.delete(group);
+        }
+        redirectAttributes.addAttribute("subjectCode", subjectCode);
+        redirectAttributes.addAttribute("number", number);
+        return "redirect:/admin/exam/group";
+    }
+
+    @RequestMapping("/save")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String save(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode, @RequestParam Integer number,
+            @RequestParam(required = false) String title, @RequestParam(required = false) String picList,
+            @RequestParam(required = false) String intervalScoreList,
+            @RequestParam(required = false) String scoreList) {
+        int examId = getSessionExamId(request);
+        MarkGroup group = groupService.findOne(examId, subjectCode, number);
+        List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId,
+                subjectCode, false, number);
+        if (group != null) {
+            // quick update
+            List<PictureConfigItem> list = PictureConfigItem.parse(picList);
+            if (list != null && !list.isEmpty()) {
+                groupService.updatePicList(examId, subjectCode, number, list);
+            }
+            List<Double> intervalScores = buildDoubleList(intervalScoreList);
+            if (intervalScores.size() == questionList.size()) {
+                for (int i = 0; i < questionList.size(); i++) {
+                    ExamQuestion q = questionList.get(i);
+                    q.setIntervalScore(intervalScores.get(i));
+                    questionService.save(q);
+                }
+            }
+            title = StringUtils.trimToNull(title);
+            if (title != null) {
+                groupService.updateTitle(examId, subjectCode, number, title);
+            }
+            // advance update
+            List<Double> scores = buildDoubleList(scoreList);
+            if (scores.size() > 0) {
+                // reset current mark_library
+                groupService.reset(group);
+                // clear and replace exam_question
+                questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
+                int i = 0;
+                double totalScore = 0d;
+                for (Double score : scores) {
+                    i++;
+                    totalScore += score;
+                    ExamQuestion question = new ExamQuestion();
+                    question.setExamId(examId);
+                    question.setSubjectCode(subjectCode);
+                    question.setMainTitle(group.getTitle());
+                    question.setMainNumber(number);
+                    question.setSubNumber(i);
+                    question.setObjective(false);
+                    question.setTotalScore(score);
+                    question.setIntervalScore(1d);
+                    questionService.save(question);
+                }
+                groupService.updateTotalScore(examId, subjectCode, number, totalScore);
+                subjectService.updateScore(examId, subjectCode);
+            }
+            redirectAttributes.addAttribute("subjectCode", subjectCode);
+            redirectAttributes.addAttribute("number", number);
+            return "redirect:/admin/exam/group";
+        } else {
+            addMessage(redirectAttributes, "找不到对应大题");
+            redirectAttributes.addAttribute("subjectCode", subjectCode);
+            redirectAttributes.addAttribute("number", number);
+            return "redirect:/admin/exam/group/edit-simple";
+        }
+    }
+
+    @RequestMapping("/insert")
+    @Transactional
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String insert(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode, @RequestParam Integer number,
+            @RequestParam(required = false) String title, @RequestParam(required = false) String picList,
+            @RequestParam(required = false) String scoreList) {
+        int examId = getSessionExamId(request);
+        MarkGroup group = groupService.findOne(examId, subjectCode, number);
+        if (group != null) {
+            addMessage(redirectAttributes, "大题号不能重复");
+            redirectAttributes.addAttribute("subjectCode", subjectCode);
+            return "redirect:/admin/exam/group/add";
+        } else {
+            // create group
+            group = new MarkGroup(examId, subjectCode, number, StringUtils.trimToNull(title),
+                    PictureConfigItem.parse(picList), 0d);
+            List<Double> scores = buildDoubleList(scoreList);
+            if (group.getTitle() != null && group.getPicList() != null && scores.size() > 0) {
+                // clear and replace exam_question
+                questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
+                int i = 0;
+                double totalScore = 0d;
+                for (Double score : scores) {
+                    i++;
+                    totalScore += score;
+                    ExamQuestion question = new ExamQuestion();
+                    question.setExamId(examId);
+                    question.setSubjectCode(subjectCode);
+                    question.setMainTitle(group.getTitle());
+                    question.setMainNumber(number);
+                    question.setSubNumber(i);
+                    question.setObjective(false);
+                    question.setTotalScore(score);
+                    question.setIntervalScore(1d);
+                    questionService.save(question);
+                }
+                group.setTotalScore(totalScore);
+                groupService.save(group);
+                subjectService.updateScore(examId, subjectCode);
+                redirectAttributes.addAttribute("subjectCode", subjectCode);
+                return "redirect:/admin/exam/group";
+            } else {
+                addMessage(redirectAttributes, "参数有误");
+                redirectAttributes.addAttribute("subjectCode", subjectCode);
+                return "redirect:/admin/exam/group/add";
+            }
+        }
+    }
+
+    private List<Double> buildDoubleList(String content) {
+        List<Double> list = new ArrayList<Double>();
+        content = StringUtils.trimToNull(content);
+        if (content != null) {
+            String[] values = StringUtils.split(content, ",");
+            if (values != null) {
+                for (String value : values) {
+                    try {
+                        Double number = Double.valueOf(value);
+                        if (number != null) {
+                            list.add(number);
+                        }
+                    } catch (Exception e) {
+                        continue;
+                    }
+                }
+            }
+        }
+        return list;
+    }
+
+}

+ 93 - 92
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkTrackController.java

@@ -1,92 +1,93 @@
-package cn.com.qmth.stmms.admin.exam;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-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.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import cn.com.qmth.stmms.biz.campus.model.Campus;
-import cn.com.qmth.stmms.biz.campus.service.CampusService;
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
-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.MarkTrack;
-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.common.utils.PictureUrlBuilder;
-
-@Controller("trackController")
-@RequestMapping("/admin/exam/track")
-public class MarkTrackController extends BaseExamController {
-
-    protected static Logger log = LoggerFactory.getLogger(MarkTrackController.class);
-
-    @Value("${slice.image.server}")
-    private String imageServer;
-
-    @Autowired
-    private MarkTrackService markTrackService;
-
-    @Autowired
-    private MarkGroupService groupService;
-
-    @Autowired
-    private ExamStudentService studentService;
-
-    @Autowired
-    private CampusService campusService;
-
-    @Autowired
-    private MarkLibraryService libraryService;
-    
-	@Autowired
-    private MarkSpecialTagService markSpecialTagService;
-
-    /**
-     * 
-     * @param request
-     * @param model
-     * @param query
-     * @return
-     */
-    @ResponseBody
-    @RequestMapping
-    public HashMap<String, Object> list(Integer studentId) {
-        List<MarkLibrary> librarys = libraryService.findByStudentId(studentId);
-        List<Object> list = new ArrayList<Object>();
-        HashMap<String, Object> map = new HashMap<String, Object>();
-        for (MarkLibrary library : librarys) {
-            ExamStudent examStudent = studentService.findById(library.getStudentId());
-            Campus campus = campusService.findBySchoolAndName(examStudent.getSchoolId(), examStudent.getCampusName());
-            MarkGroup group = groupService.findOne(examStudent.getExamId(), examStudent.getSubjectCode(),
-                    library.getGroupNumber());
-            List<String> picUrls = PictureUrlBuilder.getSliceUrls(examStudent.getExamId(), campus.getId(),
-                    examStudent.getSubjectCode(), examStudent.getExamNumber(), group.getPicNumbers());
-            List<MarkTrack> markTracks = markTrackService.findByStudentIdAndGroupNumber(library.getStudentId(),
-                    group.getNumber());
-            HashMap<String, Object> groups = new HashMap<String, Object>();
-            List<MarkSpecialTag> markSpecialTagList = markSpecialTagService.findByLibraryId(library.getId());
-            groups.put("picUrls", picUrls);
-            groups.put("markTracks", markTracks);
-            groups.put("groupTitle", group.getTitle());
-            groups.put("groupNumber", group.getNumber());
-            groups.put("markSpecialTagList",markSpecialTagList);
-            list.add(groups);
-        }
-        map.put("list", list);
-        map.put("imageServer", imageServer);
-        return map;
-    }
-
-}
+package cn.com.qmth.stmms.admin.exam;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+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.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import cn.com.qmth.stmms.biz.campus.model.Campus;
+import cn.com.qmth.stmms.biz.campus.service.CampusService;
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
+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.MarkTrack;
+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.common.utils.PictureUrlBuilder;
+
+@Controller("trackController")
+@RequestMapping("/admin/exam/track")
+public class MarkTrackController extends BaseExamController {
+
+    protected static Logger log = LoggerFactory.getLogger(MarkTrackController.class);
+
+    @Value("${slice.image.server}")
+    private String imageServer;
+
+    @Autowired
+    private MarkTrackService markTrackService;
+
+    @Autowired
+    private MarkGroupService groupService;
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @Autowired
+    private CampusService campusService;
+
+    @Autowired
+    private MarkLibraryService libraryService;
+
+    @Autowired
+    private MarkSpecialTagService markSpecialTagService;
+
+    /**
+     * 
+     * @param request
+     * @param model
+     * @param query
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping
+    public HashMap<String, Object> list(Integer studentId) {
+        List<MarkLibrary> librarys = libraryService.findByStudentId(studentId);
+        List<Object> list = new ArrayList<Object>();
+        HashMap<String, Object> map = new HashMap<String, Object>();
+        for (MarkLibrary library : librarys) {
+            ExamStudent examStudent = studentService.findById(library.getStudentId());
+            Campus campus = campusService.findBySchoolAndName(examStudent.getSchoolId(), examStudent.getCampusName());
+            MarkGroup group = groupService.findOne(examStudent.getExamId(), examStudent.getSubjectCode(),
+                    library.getGroupNumber());
+            List<String> picUrls = PictureUrlBuilder.getSliceUrls(examStudent.getExamId(), campus.getId(),
+                    examStudent.getSubjectCode(), examStudent.getExamNumber(), examStudent.getSliceCount());
+            List<MarkTrack> markTracks = markTrackService.findByStudentIdAndGroupNumber(library.getStudentId(),
+                    group.getNumber());
+            HashMap<String, Object> groups = new HashMap<String, Object>();
+            List<MarkSpecialTag> markSpecialTagList = markSpecialTagService.findByLibraryId(library.getId());
+            groups.put("picUrls", picUrls);
+            groups.put("pictureConfig", group.getPictureConfigList());
+            groups.put("markTracks", markTracks);
+            groups.put("groupTitle", group.getTitle());
+            groups.put("groupNumber", group.getNumber());
+            groups.put("markSpecialTagList", markSpecialTagList);
+            list.add(groups);
+        }
+        map.put("list", list);
+        map.put("imageServer", imageServer);
+        return map;
+    }
+
+}

+ 10 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -42,6 +42,8 @@ import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.ScoreRateService;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
+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;
@@ -86,6 +88,9 @@ public class ScoreController extends BaseExamController {
     
     @Autowired
     private MarkerService markerService;
+    
+    @Autowired
+    private UserService userService;
 
     @Autowired
     private AsyncTaskExecutor taskExecutor;
@@ -144,6 +149,11 @@ public class ScoreController extends BaseExamController {
             			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()){

+ 9 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkLeaderController.java

@@ -69,7 +69,10 @@ public class MarkLeaderController extends BaseController {
     @RequestMapping("/index")
     public ModelAndView index(HttpServletRequest request, @RequestParam(value = "studentId") Integer studentId) {
     	ExamStudent student= studentService.findById(studentId);
+    	WebUser user= RequestUtils.getWebUser(request);
     	Marker marker = new Marker();
+    	marker.setId(user.getId());
+    	marker.setName(user.getName());
         marker.setExamId(student.getExamId());
         marker.setSubjectCode(student.getSubjectCode());
         ModelAndView modelAndView = new ModelAndView("modules/mark/markLeader");
@@ -100,6 +103,8 @@ public class MarkLeaderController extends BaseController {
         JSONObject status = new JSONObject();
         if(studentId==null){
         	status.accumulate("valid", false);
+            status.accumulate("totalCount", 1);
+            status.accumulate("markedCount", 1);
         }else{
         	ExamStudent student= studentService.findById(studentId);
         	ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
@@ -116,11 +121,13 @@ public class MarkLeaderController extends BaseController {
     @ResponseBody
     public Task getTask(HttpServletRequest request, @RequestParam(value = "studentId", required = false) Integer studentId) {
     	WebUser marker = RequestUtils.getWebUser(request);
-        Task task = getTask(marker,studentId);
+        Task task = null;
         if (studentId == null) {
             task = new Task();
             task.setExist(false);
             task.setMessage("当前无评卷任务");
+        }else{
+        	task = getTask(marker,studentId);
         }
         return task;
     }
@@ -135,7 +142,7 @@ public class MarkLeaderController extends BaseController {
      * @param bmList
      */
     private void setTaskParameter(Task task, WebUser marker) {
-        task.setMarkId(marker.getId());
+        task.setHeaderId(marker.getId());
         task.setSpent(new Date().getTime());
     }
 

+ 32 - 15
stmms-web/src/main/webapp/WEB-INF/views/include/trackView.jsp

@@ -50,7 +50,7 @@ function initTrackPopoverContent(url){
         		var pane = $('<div class="tab-pane fade" id="track_'+groupNumber+'" style="overflow: hidden;"><canvas id="track-builder-canvas_'+groupNumber+'"></canvas></div>').appendTo($('#right-track-content'));
         		var canvas = document.getElementById('track-builder-canvas_'+groupNumber);
         		var ctx = canvas.getContext('2d');
-	        	buildImages(data.imageServer,group.picUrls,canvas,ctx,group.markTracks,group.markSpecialTagList); 
+	        	buildImages(data.imageServer,group.picUrls,group.pictureConfig,canvas,ctx,group.markTracks,group.markSpecialTagList); 
         	}
         	$('#right-track-nav a:first').trigger('click');
 			imageModal.setContent($('#track-view-content'));
@@ -59,17 +59,30 @@ function initTrackPopoverContent(url){
 
 }
 
-function buildImages (imageServer,picUrls,canvas,ctx,markTracks,markSpecialTagList) {
+function buildImages (imageServer,picUrls,config,canvas,ctx,markTracks,markSpecialTagList) {
+    var indexSet = {};
+    for(var i=0;i<config.length;i++){
+        indexSet[config[i].i-1] = true;
+    }
     //调用图片预加载函数,实现回调函数
     var imageObjects = [];
-    loadImages(imageObjects,imageServer, picUrls, 0,function(images) {
+    loadImages(imageObjects, imageServer, indexSet, picUrls, 0,function(images) {
         var maxWidth = 0;
         var totalHeight = 0;
-        for (var i = 0; i < images.length; i++) {
+        for (var i = 0; i < config.length; i++) {
             //计算最大宽度与合计高度
             var image = images[i];
             maxWidth = Math.max(maxWidth, image.width);
             totalHeight += image.height;
+            //计算最大宽度与合计高度
+            if(config[i].w<=0){
+                config[i].w=images[config[i].i-1].width;
+            }
+            if(config[i].h<=0){
+                config[i].h=images[config[i].i-1].height;
+            }
+            maxWidth = Math.max(maxWidth, config[i].w);
+            totalHeight += config[i].h;
         }
         if (maxWidth > 0 && totalHeight > 0) {
             //设置画布大小及背景颜色
@@ -79,12 +92,11 @@ function buildImages (imageServer,picUrls,canvas,ctx,markTracks,markSpecialTagLi
             ctx.fillRect(0, 0, maxWidth, totalHeight);
             //绘画到画布
             var height = 0;
-            for (var i = 0; i < images.length; i++) {
-                var image = images[i];
-                ctx.drawImage(image, 0, 0, image.width, image.height, 0, height, image.width, image.height);
-                height += image.height;
+            for (var i = 0; i < config.length; i++) {
+                var image = images[config[i].i-1];
+                ctx.drawImage(image, config[i].x, config[i].y, config[i].w, config[i].h, 0, height, config[i].w, config[i].h);
+                height += config[i].h;
             }
-
         }
         //阅卷轨迹
         if(markTracks!=undefined && markTracks.length>0){
@@ -105,14 +117,19 @@ function buildImages (imageServer,picUrls,canvas,ctx,markTracks,markSpecialTagLi
     });
 }
 
-function loadImages(images,imageServer, urls, number, callback) {
+function loadImages(images, imageServer, indexSet, urls, number, callback) {
     if (urls != undefined && number < urls.length) {
-        var img = new Image();
-        img.onload = function() {
-            images.push(img);
-            loadImages(images,imageServer, urls, number + 1, callback);
+        if(indexSet[number]==true) {
+            var img = new Image();
+            img.onload = function() {
+                images.push(img);
+                loadImages(images, imageServer, indexSet, urls, number + 1, callback);
+            }
+            img.src = imageServer + urls[number] + '?' + new Date().getTime();
+        }else {
+            images.push({});
+            loadImages(images, imageServer, indexSet, urls, number + 1, callback);
         }
-        img.src = imageServer + urls[number] + '?' + new Date().getTime();
     } else {
         callback.call(this, images);
     }

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markLeader.jsp

@@ -85,7 +85,7 @@
 			});
 			mc.start({
 				mode : 'loop',
-				statusUrl : '${ctx}/admin/mark/leader/status?studentId=${studentId}',
+				statusUrl : '${ctx}/admin/mark/leader/status',
 				getUrl : '${ctx}/admin/mark/leader/gettask?studentId=${studentId}',
 				historyUrl : '${ctx}/admin/mark/leader/gethistory',
 				submitUrl : '${ctx}/admin/mark/leader/savetask',

+ 1 - 1
stmms-web/src/main/webapp/static/mark-new/js/modules/image-builder.js

@@ -20,7 +20,7 @@ ImageBuilder.prototype.init = function() {
 ImageBuilder.prototype.build = function(task, callback) {
     var self = this;
     //初始化图片拼接配置,过滤实际需要加载的图片
-    var config = JSON.parse(task.pictureConfig);
+    var config = task.pictureConfig;
     var indexSet = {};
     for(var i=0;i<config.length;i++){
     	indexSet[config[i].i-1] = true;