ting.yin пре 1 година
родитељ
комит
fe265810f9

+ 3 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkController.java

@@ -71,9 +71,10 @@ public class MarkController {
     }
 
     @RequestMapping(value = "/saveTask", method = RequestMethod.POST)
-    public Result saveTask(HttpServletRequest request, @RequestBody MarkResult markResult) {
+    public Result saveTask(HttpServletRequest request,@RequestParam Long examId, @RequestParam String paperNumber,
+            @RequestParam Integer groupNumber, @RequestBody MarkResult markResult) {
         SysUser user = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(markService.saveTask(user.getId(),markResult));
+        return ResultUtil.ok(markService.saveTask(examId,paperNumber,groupNumber,user.getId(),markResult));
     }
 
     @RequestMapping(value = "/getHistory", method = RequestMethod.POST)

+ 25 - 18
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanOmrTaskController.java

@@ -1,5 +1,15 @@
 package com.qmth.distributed.print.api.mark;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+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.RestController;
+
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
@@ -7,14 +17,11 @@ import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.dto.ScanOmrTaskResultDto;
+import com.qmth.teachcloud.mark.enums.OmrTaskStatus;
 import com.qmth.teachcloud.mark.service.ScanOmrTaskService;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
 
 /**
  * <p>
@@ -35,9 +42,9 @@ public class ScanOmrTaskController {
 
     @ApiOperation(value = "识别对照任务获取")
     @RequestMapping(value = "/get", method = RequestMethod.POST)
-    public Result get(@RequestParam Long examId) {
+    public Result get(@RequestParam Long id) {
         SysUser user = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(omrTaskService.getTask(examId, user.getId()));
+        return ResultUtil.ok(omrTaskService.getTask(id, user.getId()));
     }
 
     @ApiOperation(value = "识别对照任务提交")
@@ -47,12 +54,12 @@ public class ScanOmrTaskController {
         return ResultUtil.ok(omrTaskService.submitTask(result, user));
     }
 
-    @ApiOperation(value = "识别对照任务状态")
-    @RequestMapping(value = "/status", method = RequestMethod.POST)
-    public Result status(@RequestParam Long examId) {
-        SysUser user = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(omrTaskService.getStatus(examId, user.getId()));
-    }
+//    @ApiOperation(value = "识别对照任务状态")
+//    @RequestMapping(value = "/status", method = RequestMethod.POST)
+//    public Result status(@RequestParam Long examId) {
+//        SysUser user = (SysUser) ServletUtil.getRequestUser();
+//        return ResultUtil.ok(omrTaskService.getStatus(examId, user.getId()));
+//    }
 
     @ApiOperation(value = "识别对照任务状态")
     @RequestMapping(value = "/release", method = RequestMethod.POST)
@@ -62,11 +69,11 @@ public class ScanOmrTaskController {
         return ResultUtil.ok(true);
     }
 
-    @ApiOperation(value = "识别对照任务历史")
-    @RequestMapping(value = "/history", method = RequestMethod.POST)
-    public Result history(@RequestParam Long examId, @RequestParam(required = false) Long id,
-                          @RequestParam(required = false) Boolean next) {
+    @ApiOperation(value = "识别对照任务列表")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Result list(@RequestParam Long examId,
+                          @RequestParam OmrTaskStatus status) {
         SysUser user = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(omrTaskService.history(examId, id, user.getId(), next));
+        return ResultUtil.ok(omrTaskService.list(examId, status, user.getId()));
     }
 }

+ 92 - 22
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/Task.java

@@ -1,7 +1,9 @@
 package com.qmth.teachcloud.mark.dto.mark.manage;
 
-import com.qmth.teachcloud.mark.dto.mark.score.SheetUrlDto;
-import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.mark.bean.mark.MarkConfigItem;
+import com.qmth.teachcloud.mark.dto.mark.SpecialTagDTO;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -9,16 +11,18 @@ import java.util.List;
 
 public class Task implements Serializable {
 
-    private static final long serialVersionUID = 4912665442008033200L;
+	private static final long serialVersionUID = 3309698238297224617L;
 
-    /**
+	/**
      * 评卷任务编号
      */
+	@JsonSerialize(using = ToStringSerializer.class)
     private Long taskId;
 
     /**
      * 考生编号
      */
+	@JsonSerialize(using = ToStringSerializer.class)
     private Long studentId;
 
     /**
@@ -36,10 +40,14 @@ public class Task implements Serializable {
      */
     private String studentCode;
 
+  
+    private String paperNumber;
+    private Integer groupNumber;
+
     /**
-     * 科目
+     * 题卡图片拼接配置
      */
-    private MarkPaper markPaper;
+    private List<MarkConfigItem> sliceConfig;
 
     /**
      * 多媒体地址
@@ -54,17 +62,17 @@ public class Task implements Serializable {
     /**
      * 特殊标记列表
      */
-//    private SpecialTagDTO[] specialTagList;
+    private SpecialTagDTO[] specialTagList;
 
     /**
      * 组长特殊标记列表
      */
-//    private SpecialTagDTO[] headerTagList;
+    private SpecialTagDTO[] headerTagList;
 
     /**
      * 题卡原图地址
      */
-    private List<SheetUrlDto> sheetUrls;
+    private List<String> sheetUrls;
 
     /**
      * 客观题总分
@@ -96,6 +104,16 @@ public class Task implements Serializable {
      */
     private boolean isRejected;
 
+    /**
+     * 打回原因
+     */
+    private String rejectReason;
+
+    /**
+     * 打回上次分数
+     */
+    private String rejectScoreList;
+
     /**
      * 评卷员登录名
      */
@@ -111,15 +129,18 @@ public class Task implements Serializable {
      */
     private String message;
 
-    public Long getTaskId() {
-        return taskId;
-    }
+    public Task() {
+  	}
+    
+	public Long getTaskId() {
+		return taskId;
+	}
 
-    public void setTaskId(Long taskId) {
-        this.taskId = taskId;
-    }
+	public void setTaskId(Long taskId) {
+		this.taskId = taskId;
+	}
 
-    public Long getStudentId() {
+	public Long getStudentId() {
         return studentId;
     }
 
@@ -151,12 +172,12 @@ public class Task implements Serializable {
         this.studentCode = studentCode;
     }
 
-    public MarkPaper getMarkPaper() {
-        return markPaper;
+    public List<MarkConfigItem> getSliceConfig() {
+        return sliceConfig;
     }
 
-    public void setMarkPaper(MarkPaper markPaper) {
-        this.markPaper = markPaper;
+    public void setSliceConfig(List<MarkConfigItem> sliceConfig) {
+        this.sliceConfig = sliceConfig;
     }
 
     public String getJsonUrl() {
@@ -175,11 +196,19 @@ public class Task implements Serializable {
         this.questionList = questionList;
     }
 
-    public List<SheetUrlDto> getSheetUrls() {
+    public SpecialTagDTO[] getSpecialTagList() {
+        return specialTagList;
+    }
+
+    public void setSpecialTagList(SpecialTagDTO[] specialTagList) {
+        this.specialTagList = specialTagList;
+    }
+
+    public List<String> getSheetUrls() {
         return sheetUrls;
     }
 
-    public void setSheetUrls(List<SheetUrlDto> sheetUrls) {
+    public void setSheetUrls(List<String> sheetUrls) {
         this.sheetUrls = sheetUrls;
     }
 
@@ -254,4 +283,45 @@ public class Task implements Serializable {
     public void setMessage(String message) {
         this.message = message;
     }
+
+    public String getRejectReason() {
+        return rejectReason;
+    }
+
+    public void setRejectReason(String rejectReason) {
+        this.rejectReason = rejectReason;
+    }
+
+    public String getRejectScoreList() {
+        return rejectScoreList;
+    }
+
+    public void setRejectScoreList(String rejectScoreList) {
+        this.rejectScoreList = rejectScoreList;
+    }
+
+    public SpecialTagDTO[] getHeaderTagList() {
+        return headerTagList;
+    }
+
+    public void setHeaderTagList(SpecialTagDTO[] headerTagList) {
+        this.headerTagList = headerTagList;
+    }
+
+	public String getPaperNumber() {
+		return paperNumber;
+	}
+
+	public void setPaperNumber(String paperNumber) {
+		this.paperNumber = paperNumber;
+	}
+
+	public Integer getGroupNumber() {
+		return groupNumber;
+	}
+
+	public void setGroupNumber(Integer groupNumber) {
+		this.groupNumber = groupNumber;
+	}
+
 }

+ 0 - 168
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/mark/MarkStepDTO.java

@@ -1,168 +0,0 @@
-package com.qmth.teachcloud.mark.dto.mark.mark;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.qmth.teachcloud.mark.dto.mark.manage.TrackDTO;
-
-public class MarkStepDTO  {
-
-    private int groupNumber;
-
-    private int mainNumber;
-
-    private int subNumber;
-
-    private String questionName;
-
-    private double intervalScore;
-
-    private double defaultScore;
-
-    private String title;
-
-    private Double score;
-
-    private double maxScore;
-
-    private double minScore;
-
-    private boolean uncalculate;
-
-    private Integer selectiveIndex;
-
-    private boolean rejected;
-
-    private List<TrackDTO> trackList = new ArrayList<TrackDTO>();
-
-    private List<TrackDTO> headerTrack = new ArrayList<TrackDTO>();
-
-    public int getMainNumber() {
-        return mainNumber;
-    }
-
-    public void setMainNumber(int mainNumber) {
-        this.mainNumber = mainNumber;
-    }
-
-    public int getSubNumber() {
-        return subNumber;
-    }
-
-    public void setSubNumber(int subNumber) {
-        this.subNumber = subNumber;
-    }
-
-    public double getIntervalScore() {
-        return intervalScore;
-    }
-
-    public void setIntervalScore(double intervalScore) {
-        this.intervalScore = intervalScore;
-    }
-
-    public double getMaxScore() {
-        return maxScore;
-    }
-
-    public void setMaxScore(double maxScore) {
-        this.maxScore = maxScore;
-    }
-
-    public double getMinScore() {
-        return minScore;
-    }
-
-    public void setMinScore(double minScore) {
-        this.minScore = minScore;
-    }
-
-    public double getDefaultScore() {
-        return defaultScore;
-    }
-
-    public void setDefaultScore(double defaultScore) {
-        this.defaultScore = defaultScore;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public List<TrackDTO> getTrackList() {
-        return trackList;
-    }
-
-    public void setTrackList(List<TrackDTO> trackList) {
-        this.trackList = trackList;
-    }
-
-    public void addTrack(TrackDTO track) {
-        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;
-    }
-
-    public boolean isUncalculate() {
-        return uncalculate;
-    }
-
-    public void setUncalculate(boolean uncalculate) {
-        this.uncalculate = uncalculate;
-    }
-
-    public Integer getSelectiveIndex() {
-        return selectiveIndex;
-    }
-
-    public void setSelectiveIndex(Integer selectiveIndex) {
-        this.selectiveIndex = selectiveIndex;
-    }
-
-    public String getQuestionName() {
-        return questionName;
-    }
-
-    public void setQuestionName(String questionName) {
-        this.questionName = questionName;
-    }
-
-    public boolean isRejected() {
-        return rejected;
-    }
-
-    public void setRejected(boolean rejected) {
-        this.rejected = rejected;
-    }
-
-    public List<TrackDTO> getHeaderTrack() {
-        return headerTrack;
-    }
-
-    public void setHeaderTrack(List<TrackDTO> headerTrack) {
-        this.headerTrack = headerTrack;
-    }
-
-    public void addHeaderTrack(TrackDTO trackDTO) {
-        this.headerTrack.add(trackDTO);
-    }
-
-}

+ 0 - 338
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/mark/MarkTaskDto.java

@@ -1,338 +0,0 @@
-package com.qmth.teachcloud.mark.dto.mark.mark;
-
-import java.util.Date;
-import java.util.List;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.teachcloud.mark.bean.mark.MarkConfigItem;
-import com.qmth.teachcloud.mark.dto.mark.SpecialTagDTO;
-import com.qmth.teachcloud.mark.entity.MarkTask;
-import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
-
-public class MarkTaskDto {
-
-    /**
-     * 评卷任务编号
-     */
-	@JsonSerialize(using = ToStringSerializer.class)
-    private Long taskId;
-
-    /**
-     * 考生编号
-     */
-	@JsonSerialize(using = ToStringSerializer.class)
-    private Long studentId;
-
-    /**
-     * 显示考生密号
-     */
-    private String secretNumber;
-
-    /**
-     * 考生名称
-     */
-    private String studentName;
-
-    /**
-     * 学号
-     */
-    private String studentCode;
-
-  
-    private String paperNumber;
-    private Integer groupNumber;
-
-    /**
-     * 题卡图片拼接配置
-     */
-    private List<MarkConfigItem> sliceConfig;
-
-    /**
-     * 多媒体地址
-     */
-    private String jsonUrl;
-
-    /**
-     * 给分步骤
-     */
-    private List<MarkStepDTO> questionList;
-
-    /**
-     * 特殊标记列表
-     */
-    private SpecialTagDTO[] specialTagList;
-
-    /**
-     * 组长特殊标记列表
-     */
-    private SpecialTagDTO[] headerTagList;
-
-    /**
-     * 题卡原图地址
-     */
-    private List<String> sheetUrls;
-
-    /**
-     * 客观题总分
-     */
-    private Double objectiveScore;
-
-    /**
-     * 评分
-     */
-    private Double markerScore;
-
-    /**
-     * 评卷时间
-     */
-    private Long markerTime;
-
-    /**
-     * 是否自评
-     */
-    private boolean isSelf;
-
-    /**
-     * 是否回评
-     */
-    private boolean isPrevious;
-
-    /**
-     * 是否打回
-     */
-    private boolean isRejected;
-
-    /**
-     * 打回原因
-     */
-    private String rejectReason;
-
-    /**
-     * 打回上次分数
-     */
-    private String rejectScoreList;
-
-    /**
-     * 评卷员登录名
-     */
-    private String markerName;
-
-    /**
-     * 复核时间
-     */
-    private Date inspectTime;
-
-    /**
-     * 错误信息
-     */
-    private String message;
-
-    public MarkTaskDto() {
-  	}
-    
-    public MarkTaskDto(MarkTask t) {
-		this.taskId=t.getId();
-		this.studentId=t.getStudentId();
-		this.secretNumber=t.getSecretNumber();
-		this.groupNumber=t.getGroupNumber();
-		this.studentCode=t.getStudentCode();
-		this.isRejected = t.getStatus().equals(MarkTaskStatus.REJECTED);
-		this.markerScore = t.getMarkerScore();
-		this.markerTime = t.getMarkerTime();
-		this.paperNumber =t.getPaperNumber();
-	}
-
-	public Long getTaskId() {
-		return taskId;
-	}
-
-	public void setTaskId(Long taskId) {
-		this.taskId = taskId;
-	}
-
-	public Long getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Long studentId) {
-        this.studentId = studentId;
-    }
-
-    public String getSecretNumber() {
-        return secretNumber;
-    }
-
-    public void setSecretNumber(String secretNumber) {
-        this.secretNumber = secretNumber;
-    }
-
-    public String getStudentName() {
-        return studentName;
-    }
-
-    public void setStudentName(String studentName) {
-        this.studentName = studentName;
-    }
-
-    public String getStudentCode() {
-        return studentCode;
-    }
-
-    public void setStudentCode(String studentCode) {
-        this.studentCode = studentCode;
-    }
-
-    public List<MarkConfigItem> getSliceConfig() {
-        return sliceConfig;
-    }
-
-    public void setSliceConfig(List<MarkConfigItem> sliceConfig) {
-        this.sliceConfig = sliceConfig;
-    }
-
-    public String getJsonUrl() {
-        return jsonUrl;
-    }
-
-    public void setJsonUrl(String jsonUrl) {
-        this.jsonUrl = jsonUrl;
-    }
-
-    public List<MarkStepDTO> getQuestionList() {
-        return questionList;
-    }
-
-    public void setQuestionList(List<MarkStepDTO> questionList) {
-        this.questionList = questionList;
-    }
-
-    public SpecialTagDTO[] getSpecialTagList() {
-        return specialTagList;
-    }
-
-    public void setSpecialTagList(SpecialTagDTO[] specialTagList) {
-        this.specialTagList = specialTagList;
-    }
-
-    public List<String> getSheetUrls() {
-        return sheetUrls;
-    }
-
-    public void setSheetUrls(List<String> sheetUrls) {
-        this.sheetUrls = sheetUrls;
-    }
-
-    public Double getObjectiveScore() {
-        return objectiveScore;
-    }
-
-    public void setObjectiveScore(Double objectiveScore) {
-        this.objectiveScore = objectiveScore;
-    }
-
-    public Double getMarkerScore() {
-        return markerScore;
-    }
-
-    public void setMarkerScore(Double markerScore) {
-        this.markerScore = markerScore;
-    }
-
-    public Long getMarkerTime() {
-        return markerTime;
-    }
-
-    public void setMarkerTime(Long markerTime) {
-        this.markerTime = markerTime;
-    }
-
-    public boolean isSelf() {
-        return isSelf;
-    }
-
-    public void setSelf(boolean isSelf) {
-        this.isSelf = isSelf;
-    }
-
-    public boolean isPrevious() {
-        return isPrevious;
-    }
-
-    public void setPrevious(boolean isPrevious) {
-        this.isPrevious = isPrevious;
-    }
-
-    public boolean isRejected() {
-        return isRejected;
-    }
-
-    public void setRejected(boolean isRejected) {
-        this.isRejected = isRejected;
-    }
-
-    public String getMarkerName() {
-        return markerName;
-    }
-
-    public void setMarkerName(String markerName) {
-        this.markerName = markerName;
-    }
-
-    public Date getInspectTime() {
-        return inspectTime;
-    }
-
-    public void setInspectTime(Date inspectTime) {
-        this.inspectTime = inspectTime;
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-    public String getRejectReason() {
-        return rejectReason;
-    }
-
-    public void setRejectReason(String rejectReason) {
-        this.rejectReason = rejectReason;
-    }
-
-    public String getRejectScoreList() {
-        return rejectScoreList;
-    }
-
-    public void setRejectScoreList(String rejectScoreList) {
-        this.rejectScoreList = rejectScoreList;
-    }
-
-    public SpecialTagDTO[] getHeaderTagList() {
-        return headerTagList;
-    }
-
-    public void setHeaderTagList(SpecialTagDTO[] headerTagList) {
-        this.headerTagList = headerTagList;
-    }
-
-	public String getPaperNumber() {
-		return paperNumber;
-	}
-
-	public void setPaperNumber(String paperNumber) {
-		this.paperNumber = paperNumber;
-	}
-
-	public Integer getGroupNumber() {
-		return groupNumber;
-	}
-
-	public void setGroupNumber(Integer groupNumber) {
-		this.groupNumber = groupNumber;
-	}
-
-}

+ 0 - 13
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/params/MarkResult.java

@@ -24,11 +24,6 @@ public class MarkResult {
 
     public static final String SPLIT = ",";
 
-    /**
-     * 评卷员分组ID
-     */
-    private Long markUserGroupId;
-
     /**
      * 考生编号
      */
@@ -81,14 +76,6 @@ public class MarkResult {
 
     private boolean unselective;
 
-    public Long getMarkUserGroupId() {
-        return markUserGroupId;
-    }
-
-    public void setMarkUserGroupId(Long markUserGroupId) {
-        this.markUserGroupId = markUserGroupId;
-    }
-
     public Long getTaskId() {
         return taskId;
     }

+ 8 - 8
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkService.java

@@ -4,7 +4,11 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.mark.dto.mark.mark.*;
+import com.qmth.teachcloud.mark.dto.mark.manage.Task;
+import com.qmth.teachcloud.mark.dto.mark.mark.MarkGroupDto;
+import com.qmth.teachcloud.mark.dto.mark.mark.MarkSettingDto;
+import com.qmth.teachcloud.mark.dto.mark.mark.MarkStatusDto;
+import com.qmth.teachcloud.mark.dto.mark.mark.SubmitResult;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
@@ -55,7 +59,7 @@ public interface MarkService {
 
 	List<MarkGroupDto> getGroup(Long userId, Long examId, String paperNumber);
 
-	MarkTaskDto getTask(Long userId, Long examId, String paperNumber, Integer groupNumber);
+	Task getTask(Long userId, Long examId, String paperNumber, Integer groupNumber);
 
     void deleteMarkGroup(MarkGroup markGroup);
 
@@ -74,10 +78,10 @@ public interface MarkService {
 
     void submitHeaderTask(MarkHeaderGroupResult markResult, MarkUserGroup markUserGroup);
 
-	IPage<MarkTaskDto> getHistory(Long userId, int pageNumber, int pageSize, Sort sort,String order, Long examId, String paperNumber,
+	IPage<Task> getHistory(Long userId, int pageNumber, int pageSize, Sort sort,String order, Long examId, String paperNumber,
 			Integer groupNumber, String secretNumber, Double markerScore);
 
-	SubmitResult saveTask(Long userId, MarkResult markResult);
+	SubmitResult saveTask(Long examId, String paperNumber, Integer groupNumber, Long userId, MarkResult markResult);
 
 	void clear(Long userId, Long examId, String paperNumber, Integer groupNumber);
 
@@ -85,8 +89,4 @@ public interface MarkService {
 
 	boolean hasApplied(MarkTask t, Long userId);
 	
-	MarkTaskDto getTaskDto(MarkTask task,MarkGroup group);
-	
-	MarkTaskDto getTaskDto(MarkStudent student);
-
 }

+ 3 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanOmrTaskService.java

@@ -24,7 +24,7 @@ public interface ScanOmrTaskService extends IService<ScanOmrTask> {
 	
 	ScanOmrTask buildTask(ConditionType c, Long studentId);
 
-	ScanOmrTaskDto getTask(Long examId, Long userId);
+	ScanOmrTaskDto getTask(Long id, Long userId);
 
 	ScanOmrTaskSaveDto submitTask(ScanOmrTaskResultDto result, SysUser user);
 
@@ -52,4 +52,6 @@ public interface ScanOmrTaskService extends IService<ScanOmrTask> {
 
 	int getCount(Long examId, OmrTaskStatus status);
 
+	String list(Long examId, OmrTaskStatus status, Long userId);
+
 }

+ 4 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/TaskService.java

@@ -3,9 +3,13 @@ package com.qmth.teachcloud.mark.service;
 import com.qmth.teachcloud.mark.dto.mark.manage.Task;
 import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
+import com.qmth.teachcloud.mark.entity.MarkTask;
 
 public interface TaskService {
     Task build(MarkArbitrateHistory markArbitrateHistory, MarkGroup markGroup);
 
     Task build(Long studentId);
+
+	Task build(MarkTask task);
+
 }

+ 17 - 170
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -5,7 +5,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -13,7 +12,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import javax.annotation.Resource;
 
 import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -32,28 +30,20 @@ import com.qmth.teachcloud.common.enums.mark.MarkProblemType;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.mark.dto.mark.ScoreItem;
-import com.qmth.teachcloud.mark.dto.mark.SpecialTagDTO;
-import com.qmth.teachcloud.mark.dto.mark.manage.MarkerSpecialTagDTO;
-import com.qmth.teachcloud.mark.dto.mark.manage.MarkerTrackDTO;
-import com.qmth.teachcloud.mark.dto.mark.manage.TrackDTO;
+import com.qmth.teachcloud.mark.dto.mark.manage.Task;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkGroupDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkSettingDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.MarkStatusDto;
-import com.qmth.teachcloud.mark.dto.mark.mark.MarkStepDTO;
-import com.qmth.teachcloud.mark.dto.mark.mark.MarkTaskDto;
 import com.qmth.teachcloud.mark.dto.mark.mark.SubmitResult;
 import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.entity.MarkGroupStudent;
-import com.qmth.teachcloud.mark.entity.MarkHeaderTag;
 import com.qmth.teachcloud.mark.entity.MarkHeaderTrack;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
-import com.qmth.teachcloud.mark.entity.MarkSpecialTag;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
 import com.qmth.teachcloud.mark.entity.MarkTask;
-import com.qmth.teachcloud.mark.entity.MarkTrack;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
 import com.qmth.teachcloud.mark.enums.ExamType;
 import com.qmth.teachcloud.mark.enums.LockType;
@@ -77,6 +67,7 @@ import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
 import com.qmth.teachcloud.mark.service.MarkTaskService;
 import com.qmth.teachcloud.mark.service.MarkTrackService;
 import com.qmth.teachcloud.mark.service.MarkUserGroupService;
+import com.qmth.teachcloud.mark.service.TaskService;
 import com.qmth.teachcloud.mark.utils.BigDecimalUtils;
 import com.qmth.teachcloud.mark.utils.TaskLock;
 import com.qmth.teachcloud.mark.utils.TaskLockUtil;
@@ -124,6 +115,8 @@ public class MarkServiceImpl implements MarkService {
 	LockService lockService;
 	@Resource
 	TeachcloudCommonService teachcloudCommonService;
+	@Resource
+	TaskService taskService;
 
 	/**
 	 * 某个评卷分组已申请的评卷任务数量
@@ -921,10 +914,10 @@ public class MarkServiceImpl implements MarkService {
 	}
 
 	@Override
-	public IPage<MarkTaskDto> getHistory(Long userId, int pageNumber, int pageSize, Sort sort, String order,
-			Long examId, String paperNumber, Integer groupNumber, String secretNumber, Double markerScore) {
-		if (!"markerTime".equals(order) && !"markerScore".equals(order)) {
-			throw ExceptionResultEnum.ERROR.exception("排序错误");
+	public IPage<Task> getHistory(Long userId, int pageNumber, int pageSize, Sort sort, String order, Long examId,
+			String paperNumber, Integer groupNumber, String secretNumber, Double markerScore) {
+		if (!"marker_time".equals(order) && !"marker_score".equals(order)) {
+			order = "marker_time";
 		}
 		MarkGroup group = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber);
 		if (group == null) {
@@ -935,12 +928,12 @@ public class MarkServiceImpl implements MarkService {
 		page.addOrder(orderItem);
 		IPage<MarkTask> list = markTaskService.listPageHistory(page, userId, examId, paperNumber, groupNumber,
 				secretNumber, markerScore);
-		List<MarkTaskDto> recordsDtos = new ArrayList<MarkTaskDto>();
+		List<Task> recordsDtos = new ArrayList<Task>();
 		for (MarkTask task : list.getRecords()) {
-			MarkTaskDto dto = this.getTaskDto(task, group);
+			Task dto = taskService.build(task);
 			recordsDtos.add(dto);
 		}
-		IPage<MarkTaskDto> result = new Page<MarkTaskDto>();
+		IPage<Task> result = new Page<Task>();
 		result.setCurrent(list.getCurrent());
 		result.setPages(list.getPages());
 		result.setRecords(recordsDtos);
@@ -950,7 +943,7 @@ public class MarkServiceImpl implements MarkService {
 	}
 
 	@Override
-	public MarkTaskDto getTask(Long userId, Long examId, String paperNumber, Integer groupNumber) {
+	public Task getTask(Long userId, Long examId, String paperNumber, Integer groupNumber) {
 		MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
 		if (markPaper == null) {
 			throw ExceptionResultEnum.ERROR.exception("评卷试卷不存在");
@@ -959,7 +952,7 @@ public class MarkServiceImpl implements MarkService {
 		if (group == null) {
 			throw ExceptionResultEnum.ERROR.exception("评卷大题不存在");
 		}
-		MarkTaskDto task = null;
+		Task task = null;
 		List<MarkTask> list = new ArrayList<MarkTask>();
 		int pageNumber = 1;
 		while (task == null) {
@@ -975,7 +968,7 @@ public class MarkServiceImpl implements MarkService {
 			}
 			for (MarkTask t : list) {
 				if (this.applyTask(t, userId)) {
-					task = this.getTaskDto(t, group);
+					task = taskService.build(t);
 					break;
 				}
 			}
@@ -1013,8 +1006,8 @@ public class MarkServiceImpl implements MarkService {
 	}
 
 	@Override
-	public SubmitResult saveTask(Long userId, MarkResult result) {
-		MarkUserGroup markUserGroup = markUserGroupService.getById(result.getMarkUserGroupId());
+	public SubmitResult saveTask(Long examId, String paperNumber, Integer groupNumber, Long userId, MarkResult result) {
+		MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, userId);
 		if (markUserGroup == null) {
 			throw ExceptionResultEnum.ERROR.exception("评卷员未绑定该评卷任务");
 		}
@@ -1098,7 +1091,7 @@ public class MarkServiceImpl implements MarkService {
 //        }
 		// 尝试提交评卷结果
 		Long now = System.currentTimeMillis();
-		if (markTaskService.updateMarkerResult(task.getId(), MarkTaskStatus.MARKED, userId, result.getMarkerScore(),
+		if (!markTaskService.updateMarkerResult(task.getId(), MarkTaskStatus.MARKED, userId, result.getMarkerScore(),
 				result.getScoreList(), now, result.getSpent(), null, null, null, MarkTaskStatus.WAITING,
 				MarkTaskStatus.MARKED, MarkTaskStatus.REJECTED)) {
 			// 条件不符更新失败,直接返回
@@ -1190,150 +1183,4 @@ public class MarkServiceImpl implements MarkService {
 		return history;
 	}
 
-	@Override
-	public MarkTaskDto getTaskDto(MarkTask t, MarkGroup group) {
-		MarkTaskDto task = new MarkTaskDto(t);
-		task.setQuestionList(buildMarkStep(t));
-		MarkStudent student = markStudentService.getById(t.getStudentId());
-		task.setSheetUrls(teachcloudCommonService.filePreview(student.getSheetPathList()));
-		task.setSliceConfig(group.getPictureConfigList());
-		return task;
-	}
-
-	private List<MarkStepDTO> buildMarkStep(MarkTask task) {
-		List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-		List<MarkQuestion> sList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(
-				task.getExamId(), task.getPaperNumber(), task.getGroupNumber(), false);
-		List<MarkTrack> tracks = new ArrayList<MarkTrack>();
-		List<ScoreItem> sItems = new ArrayList<ScoreItem>();
-		List<ScoreItem> rItems = null;
-		if (task != null) {
-			tracks = markTrackService.listByTaskId(task.getId());
-			sItems = task.getMarkerScoreItem();
-		}
-		for (int i = 0; i < sList.size(); i++) {
-			MarkQuestion question = sList.get(i);
-			MarkStepDTO step = buildStep(question);
-			if (task != null) {
-				if (!sItems.isEmpty() && sItems.size() == sList.size()) {
-					step.setScore(sItems.get(i).getScore());
-				}
-				if (rItems == null) {
-					// 无打回记录
-					step.setRejected(false);
-				} else if (rItems != null && rItems.isEmpty()) {
-					// 全打回
-					step.setRejected(true);
-				} else if (rItems != null && !rItems.isEmpty() && rItems.size() == sList.size()) {
-					// 部分打回
-					step.setRejected(rItems.get(i).getScore() == null);
-				}
-				// 未选做
-//                if (task.getMarkerScore() != null && task.getMarkerScore() == UN_SELECTIVE_SCORE) {
-//                    step.setScore(UN_SELECTIVE_SCORE);
-//                }
-				// 增加阅卷轨迹列表获取
-				String questionNumber = question.getQuestionNumber();
-				for (MarkTrack track : tracks) {
-					if (track.getQuestionNumber().equals(questionNumber)) {
-						step.addTrack(new TrackDTO(track));
-					}
-				}
-			}
-			list.add(step);
-		}
-		return list;
-	}
-
-	private MarkStepDTO buildStep(MarkQuestion question) {
-		MarkStepDTO step = new MarkStepDTO();
-		step.setMainNumber(question.getMainNumber());
-		step.setSubNumber(question.getSubNumber());
-		step.setGroupNumber(question.getGroupNumber());
-		step.setTitle(question.getMainTitle());
-		step.setDefaultScore(0d);
-		step.setMaxScore(question.getTotalScore());
-		step.setMinScore(0d);
-		step.setIntervalScore(question.getIntervalScore());
-		step.setUncalculate(false);
-//        step.setSelectiveIndex(question.getSelectiveIndex());
-		return step;
-	}
-
-	@Override
-	public MarkTaskDto getTaskDto(MarkStudent student) {
-		MarkTaskDto task = new MarkTaskDto();
-		task.setSheetUrls(teachcloudCommonService.filePreview(student.getSheetPathList()));
-		task.setStudentId(student.getId());
-		task.setSecretNumber(student.getSecretNumber());
-		task.setStudentCode(student.getStudentCode());
-		if (!student.getSubjectiveStatus().equals(SubjectiveStatus.UNMARK)) {
-			task.setQuestionList(buildMarkStep(student));
-			task.setSpecialTagList(getMarkSpecialTagList(student));
-			task.setHeaderTagList(getHeaderTagList(student));
-		}
-		if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {
-			task.setObjectiveScore(student.getObjectiveScore());
-		}
-		task.setMarkerScore(student.getTotalScore());
-		return task;
-	}
-
-	private SpecialTagDTO[] getHeaderTagList(MarkStudent student) {
-		List<MarkHeaderTag> list = markHeaderTagService.findByStudentId(student.getId());
-		SpecialTagDTO[] specialTags = new SpecialTagDTO[list.size()];
-		for (int i = 0; i < list.size(); i++) {
-			specialTags[i] = new MarkerSpecialTagDTO(list.get(i).getUserId(), list.get(i).getGroupNumber(),
-					list.get(i));
-		}
-		return specialTags;
-	}
-
-	private SpecialTagDTO[] getMarkSpecialTagList(MarkStudent student) {
-		List<SpecialTagDTO> list = new LinkedList<>();
-		List<MarkGroup> groups = markGroupService.listGroupByExamIdAndPaperNumber(student.getExamId(),
-				student.getPaperNumber());
-		for (MarkGroup group : groups) {
-			List<MarkTask> libraryList = markTaskService.listByStudentIdAndGroupNumber(student.getId(),
-					group.getNumber());
-			// 不管单评还是多评显示所有评卷员特殊标记
-			for (MarkTask library : libraryList) {
-				List<MarkSpecialTag> tagList = markSpecialTagService.findByTaskId(library.getId());
-				for (MarkSpecialTag specialTag : tagList) {
-					list.add(new MarkerSpecialTagDTO(library.getUserId(), library.getGroupNumber(), specialTag));
-				}
-			}
-		}
-		return list.toArray(new SpecialTagDTO[0]);
-	}
-
-	private List<MarkStepDTO> buildMarkStep(MarkStudent student) {
-		List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-		List<MarkQuestion> sList = markQuestionService.listQuestionByExamIdAndPaperNumber(student.getExamId(),
-				student.getPaperNumber(), false);
-		List<MarkSubjectiveScore> scoreList = markSubjectiveScoreService.listByStudentId(student.getId());
-		// List<ScoreItem> sItems = student.getScoreList(false);
-		for (int i = 0; i < scoreList.size(); i++) {
-			MarkQuestion question = sList.get(i);
-			String questionNumber = question.getQuestionNumber();
-			MarkStepDTO step = buildStep(question);
-			if (!scoreList.isEmpty() && scoreList.size() == sList.size()) {
-				step.setScore(scoreList.get(i).getScore());
-//                step.setRejected(scoreList.get(i).getRejected());
-			}
-			// 不管单评还是多评显示所有评卷员给分轨迹
-			List<MarkTrack> tracks = markTrackService.findByStudentIdAndQuestionNumber(student.getId(), questionNumber);
-			for (MarkTrack track : tracks) {
-				step.addTrack(new MarkerTrackDTO(track));
-			}
-			// 仲裁轨迹
-			List<MarkHeaderTrack> headerTracks = markHeaderTrackService
-					.listByStudentIdAndQuestionNumber(student.getId(), questionNumber);
-			for (MarkHeaderTrack headerTrack : headerTracks) {
-				step.addHeaderTrack(new TrackDTO(headerTrack));
-			}
-			list.add(step);
-		}
-		return list;
-	}
 }

+ 32 - 18
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanOmrTaskServiceImpl.java

@@ -335,27 +335,35 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
 	}
 
 	@Override
-	public ScanOmrTaskDto getTask(Long examId, Long userId) {
-		int retry = 0;
+	public ScanOmrTaskDto getTask(Long id, Long userId) {
+//		int retry = 0;
+//		ScanOmrTaskDto task = null;
+//		while (task == null) {
+//			List<ScanOmrTask> list = this.findUnMarked(examId, retry * 20, 20, OmrTaskStatus.WAITING);
+//			if (list.isEmpty()) {
+//				break;
+//			}
+//			for (ScanOmrTask t : list) {
+//				if (this.apply(t, userId.toString())) {
+//					task = toTaskVo(t, false);
+//					break;
+//				}
+//			}
+//			if (task == null) {
+//				retry++;
+//			}
+//		}
+//		if (task == null) {
+//			throw ExceptionResultEnum.ERROR.exception("没有识别对照任务");
+//		}
 		ScanOmrTaskDto task = null;
-		while (task == null) {
-			List<ScanOmrTask> list = this.findUnMarked(examId, retry * 20, 20, OmrTaskStatus.WAITING);
-			if (list.isEmpty()) {
-				break;
-			}
-			for (ScanOmrTask t : list) {
-				if (this.apply(t, userId.toString())) {
-					task = toTaskVo(t, false);
-					break;
-				}
-			}
-			if (task == null) {
-				retry++;
-			}
-		}
-		if (task == null) {
+		ScanOmrTask t = this.getById(id);
+		if (t == null) {
 			throw ExceptionResultEnum.ERROR.exception("没有识别对照任务");
 		}
+		if (this.apply(t, userId.toString())) {
+			task = toTaskVo(t, false);
+		}
 		return task;
 	}
 
@@ -668,4 +676,10 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
         }
         return baseMapper.selectCount(wrapper);
 	}
+
+	@Override
+	public String list(Long examId, OmrTaskStatus status, Long userId) {
+		// TODO Auto-generated method stub
+		return null;
+	}
 }

+ 280 - 153
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java

@@ -1,170 +1,297 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.mark.dto.mark.ScoreItem;
+import com.qmth.teachcloud.mark.dto.mark.SpecialTagDTO;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkStepDTO;
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkerSpecialTagDTO;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkerTrackDTO;
 import com.qmth.teachcloud.mark.dto.mark.manage.Task;
 import com.qmth.teachcloud.mark.dto.mark.manage.TrackDTO;
-import com.qmth.teachcloud.mark.entity.*;
-import com.qmth.teachcloud.mark.service.*;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
+import com.qmth.teachcloud.mark.entity.MarkGroup;
+import com.qmth.teachcloud.mark.entity.MarkHeaderTag;
+import com.qmth.teachcloud.mark.entity.MarkHeaderTrack;
+import com.qmth.teachcloud.mark.entity.MarkSpecialTag;
+import com.qmth.teachcloud.mark.entity.MarkStudent;
+import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
+import com.qmth.teachcloud.mark.entity.MarkTask;
+import com.qmth.teachcloud.mark.entity.MarkTrack;
+import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
+import com.qmth.teachcloud.mark.service.MarkGroupService;
+import com.qmth.teachcloud.mark.service.MarkHeaderTagService;
+import com.qmth.teachcloud.mark.service.MarkHeaderTrackService;
+import com.qmth.teachcloud.mark.service.MarkPaperService;
+import com.qmth.teachcloud.mark.service.MarkQuestionService;
+import com.qmth.teachcloud.mark.service.MarkSpecialTagService;
+import com.qmth.teachcloud.mark.service.MarkStudentService;
+import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
+import com.qmth.teachcloud.mark.service.MarkTaskService;
+import com.qmth.teachcloud.mark.service.MarkTrackService;
+import com.qmth.teachcloud.mark.service.TaskService;
 
 @Service
 public class TaskServiceImpl implements TaskService {
 
-    @Resource
-    private MarkPaperService markPaperService;
-    @Resource
-    private MarkTaskService markTaskService;
-    @Resource
-    private MarkStudentService markStudentService;
-    @Resource
-    private MarkQuestionService markQuestionService;
-    @Resource
-    private MarkHeaderTrackService markHeaderTrackService;
-    @Resource
-    private MarkTrackService markTrackService;
-    @Resource
-    private MarkSubjectiveScoreService markSubjectiveScoreService;
-    @Resource
-    private TeachcloudCommonService teachcloudCommonService;
-
-    @Override
-    public Task build(MarkArbitrateHistory markArbitrateHistory, MarkGroup markGroup) {
-        MarkStudent markStudent = markStudentService.getById(markArbitrateHistory.getStudentId());
-        Task task = new Task();
-        task.setStudentId(markArbitrateHistory.getStudentId());
-        task.setTaskId(markArbitrateHistory.getId());
-        task.setSecretNumber(markArbitrateHistory.getSecretNumber());
-        task.setQuestionList(buildArbitrateStep(markGroup, markArbitrateHistory));
+	@Resource
+	private MarkPaperService markPaperService;
+	@Resource
+	private MarkTaskService markTaskService;
+	@Resource
+	private MarkStudentService markStudentService;
+	@Resource
+	private MarkQuestionService markQuestionService;
+	@Resource
+	private MarkHeaderTrackService markHeaderTrackService;
+	@Resource
+	private MarkTrackService markTrackService;
+	@Resource
+	private MarkSubjectiveScoreService markSubjectiveScoreService;
+	@Resource
+	private TeachcloudCommonService teachcloudCommonService;
+	@Resource
+	private MarkGroupService markGroupService;
+	@Resource
+	private MarkHeaderTagService markHeaderTagService;
+	@Resource
+	private MarkSpecialTagService markSpecialTagService;
+
+	@Override
+	public Task build(MarkArbitrateHistory markArbitrateHistory, MarkGroup markGroup) {
+		MarkStudent markStudent = markStudentService.getById(markArbitrateHistory.getStudentId());
+		Task task = new Task();
+		task.setStudentId(markArbitrateHistory.getStudentId());
+		task.setTaskId(markArbitrateHistory.getId());
+		task.setSecretNumber(markArbitrateHistory.getSecretNumber());
+		task.setQuestionList(buildArbitrateStep(markGroup, markArbitrateHistory));
 //        task.setSpecialTagList(getHeaderTagList(history.getStudentId(), group.getNumber()));
-        // todo jsonurl xf
+		// todo jsonurl xf
 //        task.setJsonUrl(fileService.getJsonUri(student.getExamId(), student.getSecretNumber()));
-        if (StringUtils.isNotBlank(markStudent.getObjectiveScoreList())) {
-            task.setObjectiveScore(markStudent.getObjectiveScore());
-        }
-        task.setMarkerTime(markArbitrateHistory.getUpdateTime());
-        if (markArbitrateHistory.getTotalScore() != null) {
-            task.setMarkerScore(markArbitrateHistory.getTotalScore());
-        }
-        return task;
-    }
-
-    @Override
-    public Task build(Long studentId) {
-        MarkStudent markStudent = markStudentService.getById(studentId);
-        Task task = new Task();
-        if (markStudent != null) {
-            MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markStudent.getExamId(), markStudent.getPaperNumber());
-
-            task.setStudentId(markStudent.getId());
-            task.setSecretNumber(markStudent.getSecretNumber());
-            task.setStudentCode(markStudent.getStudentCode());
-            task.setStudentName(markStudent.getStudentName());
-            task.setMarkPaper(markPaper);
-
-            // 原图
-            task.setSheetUrls(markStudentService.buildSheetUrls(studentId));
-
-            if (!markStudent.getSubjectiveStatus().equals(SubjectiveStatus.UNMARK)) {
-                task.setQuestionList(buildMarkStep(markStudent));
-//                task.setSpecialTagList(getMarkSpecialTagList(student, trialGroupCount));
-//                task.setHeaderTagList(getHeaderTagList(student));
-            }
-            if (StringUtils.isNotBlank(markStudent.getObjectiveScoreList())) {
-                task.setObjectiveScore(markStudent.getObjectiveScore());
-            }
-            task.setMarkerScore(markStudent.getTotalScore());
-            return task;
-        }
-        return task;
-    }
-
-    private List<MarkStepDTO> buildMarkStep(MarkStudent markStudent) {
-        Long examId = markStudent.getExamId();
-        String paperNumber = markStudent.getPaperNumber();
-        List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<MarkQuestion> sList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, null, false);
-        Set<Integer> mainList = markSubjectiveScoreService.listMainNumberByStudentIdAndUncalculate(markStudent.getId(), true);
-        List<MarkSubjectiveScore> scoreList = markSubjectiveScoreService.listByStudentIdAndGroupNumber(markStudent.getId(), null);
-        for (int i = 0; i < scoreList.size(); i++) {
-            MarkQuestion question = sList.get(i);
-            String questionNumber = question.getQuestionNumber();
-            MarkStepDTO step = buildStep(question);
-            if (!scoreList.isEmpty() && scoreList.size() == sList.size()) {
-                step.setScore(scoreList.get(i).getScore());
-                if (mainList.contains(step.getMainNumber())) {
-                    step.setUncalculate(true);
-                }
-            }
-            // 增加阅卷轨迹列表获取
-            List<MarkTask> markTaskList = markTaskService.listByStudentIdAndGroupNumber(markStudent.getId(), question.getGroupNumber());
-            // 不管单评还是多评显示所有评卷员给分轨迹
-            for (MarkTask markTask : markTaskList) {
-                List<MarkTrack> tracks = markTrackService.listByTaskIdAndQuestionNumber(markTask.getId(), questionNumber);
-                for (MarkTrack track : tracks) {
-                    step.addTrack(new MarkerTrackDTO(track));
-                }
-            }
-            // 仲裁轨迹
-            List<MarkHeaderTrack> headerTracks = markHeaderTrackService.listByStudentIdAndQuestionNumber(markStudent.getId(), questionNumber);
-            for (MarkHeaderTrack headerTrack : headerTracks) {
-                step.addHeaderTrack(new TrackDTO(headerTrack));
-            }
-            list.add(step);
-        }
-        return list;
-    }
-
-    private List<MarkStepDTO> buildArbitrateStep(MarkGroup group, MarkArbitrateHistory markArbitrateHistory) {
-        List<MarkStepDTO> list = new LinkedList<>();
-        List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(group.getExamId(), group.getPaperNumber(), group.getNumber(), false);
-        List<MarkHeaderTrack> tracks = markHeaderTrackService.listByExamAndPaperNumberAndGroupNumberAndStudentId(group.getExamId(), group.getPaperNumber(), group.getNumber(), markArbitrateHistory.getStudentId());
-        List<ScoreItem> sItems = new ArrayList<ScoreItem>();
-        if (markArbitrateHistory != null) {
-            sItems = markArbitrateHistory.getScoreItemList();
-        }
-        for (int i = 0; i < markQuestionList.size(); i++) {
-            MarkQuestion question = markQuestionList.get(i);
-            MarkStepDTO step = buildStep(question);
-            if (markArbitrateHistory != null) {
-                if (!sItems.isEmpty() && sItems.size() == markQuestionList.size()) {
-                    step.setScore(sItems.get(i).getScore());
-                }
-                // 增加阅卷轨迹列表获取
-                String questionNumber = question.getQuestionNumber();
-                for (MarkHeaderTrack track : tracks) {
-                    if (track.getQuestionNumber().equals(questionNumber)) {
-                        step.addTrack(new TrackDTO(track));
-                    }
-                }
-            }
-            list.add(step);
-        }
-        return list;
-    }
-
-    private MarkStepDTO buildStep(MarkQuestion question) {
-        MarkStepDTO step = new MarkStepDTO();
-        step.setMainNumber(question.getMainNumber());
-        step.setSubNumber(String.valueOf(question.getSubNumber()));
-        step.setGroupNumber(question.getGroupNumber());
-        step.setTitle(question.getMainTitle());
-        step.setDefaultScore(0d);
-        step.setMaxScore(question.getTotalScore());
-        step.setMinScore(0d);
-        step.setIntervalScore(question.getIntervalScore());
-        step.setUncalculate(false);
-        return step;
-    }
+		if (StringUtils.isNotBlank(markStudent.getObjectiveScoreList())) {
+			task.setObjectiveScore(markStudent.getObjectiveScore());
+		}
+		task.setMarkerTime(markArbitrateHistory.getUpdateTime());
+		if (markArbitrateHistory.getTotalScore() != null) {
+			task.setMarkerScore(markArbitrateHistory.getTotalScore());
+		}
+		return task;
+	}
+
+	@Override
+	public Task build(Long studentId) {
+		MarkStudent markStudent = markStudentService.getById(studentId);
+		Task task = new Task();
+		if (markStudent != null) {
+			task.setStudentId(markStudent.getId());
+			task.setSecretNumber(markStudent.getSecretNumber());
+			task.setStudentCode(markStudent.getStudentCode());
+			task.setStudentName(markStudent.getStudentName());
+
+			// 原图
+			task.setSheetUrls(teachcloudCommonService.filePreview(markStudent.getSheetPathList()));
+
+			if (!markStudent.getSubjectiveStatus().equals(SubjectiveStatus.UNMARK)) {
+				task.setQuestionList(buildMarkStep(markStudent));
+                task.setSpecialTagList(getMarkSpecialTagList(markStudent));
+                task.setHeaderTagList(getHeaderTagList(markStudent));
+			}
+			if (StringUtils.isNotBlank(markStudent.getObjectiveScoreList())) {
+				task.setObjectiveScore(markStudent.getObjectiveScore());
+			}
+			task.setMarkerScore(markStudent.getTotalScore());
+			return task;
+		}
+		return task;
+	}
+
+	private List<MarkStepDTO> buildMarkStep(MarkStudent markStudent) {
+		Long examId = markStudent.getExamId();
+		String paperNumber = markStudent.getPaperNumber();
+		List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
+		List<MarkQuestion> sList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId,
+				paperNumber, null, false);
+		Set<Integer> mainList = markSubjectiveScoreService.listMainNumberByStudentIdAndUncalculate(markStudent.getId(),
+				true);
+		List<MarkSubjectiveScore> scoreList = markSubjectiveScoreService
+				.listByStudentIdAndGroupNumber(markStudent.getId(), null);
+		for (int i = 0; i < scoreList.size(); i++) {
+			MarkQuestion question = sList.get(i);
+			String questionNumber = question.getQuestionNumber();
+			MarkStepDTO step = buildStep(question);
+			if (!scoreList.isEmpty() && scoreList.size() == sList.size()) {
+				step.setScore(scoreList.get(i).getScore());
+				if (mainList.contains(step.getMainNumber())) {
+					step.setUncalculate(true);
+				}
+			}
+			// 增加阅卷轨迹列表获取
+			List<MarkTask> markTaskList = markTaskService.listByStudentIdAndGroupNumber(markStudent.getId(),
+					question.getGroupNumber());
+			// 不管单评还是多评显示所有评卷员给分轨迹
+			for (MarkTask markTask : markTaskList) {
+				List<MarkTrack> tracks = markTrackService.listByTaskIdAndQuestionNumber(markTask.getId(),
+						questionNumber);
+				for (MarkTrack track : tracks) {
+					step.addTrack(new MarkerTrackDTO(track));
+				}
+			}
+			// 仲裁轨迹
+			List<MarkHeaderTrack> headerTracks = markHeaderTrackService
+					.listByStudentIdAndQuestionNumber(markStudent.getId(), questionNumber);
+			for (MarkHeaderTrack headerTrack : headerTracks) {
+				step.addHeaderTrack(new TrackDTO(headerTrack));
+			}
+			list.add(step);
+		}
+		return list;
+	}
+
+	private List<MarkStepDTO> buildArbitrateStep(MarkGroup group, MarkArbitrateHistory markArbitrateHistory) {
+		List<MarkStepDTO> list = new LinkedList<>();
+		List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(
+				group.getExamId(), group.getPaperNumber(), group.getNumber(), false);
+		List<MarkHeaderTrack> tracks = markHeaderTrackService.listByExamAndPaperNumberAndGroupNumberAndStudentId(
+				group.getExamId(), group.getPaperNumber(), group.getNumber(), markArbitrateHistory.getStudentId());
+		List<ScoreItem> sItems = new ArrayList<ScoreItem>();
+		if (markArbitrateHistory != null) {
+			sItems = markArbitrateHistory.getScoreItemList();
+		}
+		for (int i = 0; i < markQuestionList.size(); i++) {
+			MarkQuestion question = markQuestionList.get(i);
+			MarkStepDTO step = buildStep(question);
+			if (markArbitrateHistory != null) {
+				if (!sItems.isEmpty() && sItems.size() == markQuestionList.size()) {
+					step.setScore(sItems.get(i).getScore());
+				}
+				// 增加阅卷轨迹列表获取
+				String questionNumber = question.getQuestionNumber();
+				for (MarkHeaderTrack track : tracks) {
+					if (track.getQuestionNumber().equals(questionNumber)) {
+						step.addTrack(new TrackDTO(track));
+					}
+				}
+			}
+			list.add(step);
+		}
+		return list;
+	}
+
+	private MarkStepDTO buildStep(MarkQuestion question) {
+		MarkStepDTO step = new MarkStepDTO();
+		step.setMainNumber(question.getMainNumber());
+		step.setSubNumber(String.valueOf(question.getSubNumber()));
+		step.setGroupNumber(question.getGroupNumber());
+		step.setTitle(question.getMainTitle());
+		step.setDefaultScore(0d);
+		step.setMaxScore(question.getTotalScore());
+		step.setMinScore(0d);
+		step.setIntervalScore(question.getIntervalScore());
+		step.setUncalculate(false);
+		return step;
+	}
+
+	@Override
+	public Task build(MarkTask t) {
+		Task task = new Task();
+		task.setTaskId(t.getId());
+		task.setGroupNumber(task.getGroupNumber());
+		task.setSecretNumber(t.getSecretNumber());
+		task.setMarkerTime(t.getMarkerTime());
+		task.setPaperNumber(t.getPaperNumber());
+		task.setMarkerScore(t.getMarkerScore());
+		task.setRejected(t.getStatus().equals(MarkTaskStatus.REJECTED));
+		task.setStudentId(t.getStudentId());
+		task.setStudentCode(t.getStudentCode());
+		task.setQuestionList(buildMarkStep(t));
+		MarkStudent student = markStudentService.getById(t.getStudentId());
+		task.setSheetUrls(teachcloudCommonService.filePreview(student.getSheetPathList()));
+		MarkGroup group = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(t.getExamId(), t.getPaperNumber(),
+				t.getGroupNumber());
+		task.setSliceConfig(group.getPictureConfigList());
+		return task;
+	}
+
+	private List<MarkStepDTO> buildMarkStep(MarkTask task) {
+		List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
+		List<MarkQuestion> sList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(
+				task.getExamId(), task.getPaperNumber(), task.getGroupNumber(), false);
+		List<MarkTrack> tracks = new ArrayList<MarkTrack>();
+		List<ScoreItem> sItems = new ArrayList<ScoreItem>();
+//		List<ScoreItem> rItems = null;
+		if (task != null) {
+			tracks = markTrackService.listByTaskId(task.getId());
+			sItems = task.getMarkerScoreItem();
+		}
+		for (int i = 0; i < sList.size(); i++) {
+			MarkQuestion question = sList.get(i);
+			MarkStepDTO step = buildStep(question);
+			if (task != null) {
+				if (!sItems.isEmpty() && sItems.size() == sList.size()) {
+					step.setScore(sItems.get(i).getScore());
+				}
+//				if (rItems == null) {
+//					// 无打回记录
+//					step.setRejected(false);
+//				} else if (rItems != null && rItems.isEmpty()) {
+//					// 全打回
+//					step.setRejected(true);
+//				} else if (rItems != null && !rItems.isEmpty() && rItems.size() == sList.size()) {
+//					// 部分打回
+//					step.setRejected(rItems.get(i).getScore() == null);
+//				}
+				// 未选做
+//                if (task.getMarkerScore() != null && task.getMarkerScore() == UN_SELECTIVE_SCORE) {
+//                    step.setScore(UN_SELECTIVE_SCORE);
+//                }
+				// 增加阅卷轨迹列表获取
+				String questionNumber = question.getQuestionNumber();
+				for (MarkTrack track : tracks) {
+					if (track.getQuestionNumber().equals(questionNumber)) {
+						step.addTrack(new TrackDTO(track));
+					}
+				}
+			}
+			list.add(step);
+		}
+		return list;
+	}
+	private SpecialTagDTO[] getHeaderTagList(MarkStudent student) {
+		List<MarkHeaderTag> list = markHeaderTagService.findByStudentId(student.getId());
+		SpecialTagDTO[] specialTags = new SpecialTagDTO[list.size()];
+		for (int i = 0; i < list.size(); i++) {
+			specialTags[i] = new MarkerSpecialTagDTO(list.get(i).getUserId(), list.get(i).getGroupNumber(),
+					list.get(i));
+		}
+		return specialTags;
+	}
+
+	private SpecialTagDTO[] getMarkSpecialTagList(MarkStudent student) {
+		List<SpecialTagDTO> list = new LinkedList<>();
+		List<MarkGroup> groups = markGroupService.listGroupByExamIdAndPaperNumber(student.getExamId(),
+				student.getPaperNumber());
+		for (MarkGroup group : groups) {
+			List<MarkTask> libraryList = markTaskService.listByStudentIdAndGroupNumber(student.getId(),
+					group.getNumber());
+			// 不管单评还是多评显示所有评卷员特殊标记
+			for (MarkTask library : libraryList) {
+				List<MarkSpecialTag> tagList = markSpecialTagService.findByTaskId(library.getId());
+				for (MarkSpecialTag specialTag : tagList) {
+					list.add(new MarkerSpecialTagDTO(library.getUserId(), library.getGroupNumber(), specialTag));
+				}
+			}
+		}
+		return list.toArray(new SpecialTagDTO[0]);
+	}
 }

+ 1 - 1
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -128,7 +128,7 @@
 		and mt.paper_number = #{paperNumber}
 		and mt.group_number = #{groupNumber}
 		and mt.user_id = #{userId}
-            <if test="secretNumber != null">
+            <if test="secretNumber != null and secretNumber != '' ">
                 and mt.secret_number = #{secretNumber}
 			</if>
 			<if test="markerScore != null">