浏览代码

3.3.0 fix

xiaofei 1 年之前
父节点
当前提交
7c3253a156
共有 18 个文件被更改,包括 207 次插入97 次删除
  1. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/ExamDetailCourseInitMarkDto.java
  2. 4 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  3. 3 1
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  4. 0 1
      distributed-print-business/src/main/resources/mapper/TBSyncTaskMapper.xml
  5. 9 0
      distributed-print/install/mysql/upgrade/3.3.0.sql
  6. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java
  7. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkStudentController.java
  8. 89 71
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/ArchiveStudentVo.java
  9. 9 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkUserGroupProgressDto.java
  10. 18 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailDto.java
  11. 21 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java
  12. 1 6
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  13. 5 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  14. 3 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java
  15. 20 9
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java
  16. 3 1
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml
  17. 1 0
      teachcloud-mark/src/main/resources/mapper/MarkUserGroupMapper.xml
  18. 1 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

+ 18 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/ExamDetailCourseInitMarkDto.java

@@ -15,6 +15,8 @@ public class ExamDetailCourseInitMarkDto {
     private Long createId;
     private String packageCodes;
     private String examDetailCourseIds;
+    private Long examStartTime;
+    private Long examEndTime;
 
     public Long getSchoolId() {
         return schoolId;
@@ -95,4 +97,20 @@ public class ExamDetailCourseInitMarkDto {
     public void setExamDetailCourseIds(String examDetailCourseIds) {
         this.examDetailCourseIds = examDetailCourseIds;
     }
+
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
 }

+ 4 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java

@@ -181,7 +181,8 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
                     examDetailCourse.getCoursePaperId(), singleExamStudentAddParam.getPaperType(),
                     singleExamStudentAddParam.getStudentCode(), singleExamStudentAddParam.getStudentName(),
                     examDetail.getPackageCode(), examDetail.getExamPlace(), examDetail.getExamRoom(),
-                    singleExamStudentAddParam.getCollege(), singleExamStudentAddParam.getClassName());
+                    singleExamStudentAddParam.getCollege(), singleExamStudentAddParam.getClassName(),
+                    examDetail.getExamStartTime(), examDetail.getExamEndTime());
             if (markStudent.getSecretNumber() == null) {
                 markStudent.randomSecretNumber();
                 while (markStudentService.countByExamIdAndSecretNumber(markStudent.getExamId(), markStudent.getSecretNumber()) > 0) {
@@ -189,6 +190,7 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
                 }
             }
             markStudentService.save(markStudent);
+            markPaperService.updateStudentCountByExamIdAndPaperNumberAndPaperType(markPaper.getExamId(), markPaper.getPaperNumber(), markPaper.getPaperType());
         }
         return true;
     }
@@ -214,6 +216,7 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
         }
         examStudentService.removeById(id);
         markStudentService.removeById(id);
+        markPaperService.updateStudentCountByExamIdAndPaperNumberAndPaperType(markStudent.getExamId(), markStudent.getPaperNumber(), markStudent.getPaperType());
         return true;
     }
 }

+ 3 - 1
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -698,6 +698,8 @@
             edc.course_paper_id coursePaperId,
             edcpt.paper_type paperType,
             ed.create_id createId,
+            ed.exam_start_time examStartTime,
+            ed.exam_end_time examEndTime,
             group_concat(ed.package_code) packageCodes,
             group_concat(edc.id) examDetailCourseIds
         FROM
@@ -717,6 +719,6 @@
                               ed.exam_id = mp.exam_id
                             AND edc.paper_number = mp.paper_number
                             AND mp.status = #{markStatus})
-        GROUP BY ed.school_id , ed.exam_id , edc.course_code , edc.course_name , edc.paper_number , edc.course_paper_id , edcpt.paper_type , ed.create_id
+        GROUP BY ed.school_id , ed.exam_id , edc.course_code , edc.course_name , edc.paper_number , edc.course_paper_id , edcpt.paper_type , ed.create_id, ed.exam_start_time, ed.exam_end_time
     </select>
 </mapper>

+ 0 - 1
distributed-print-business/src/main/resources/mapper/TBSyncTaskMapper.xml

@@ -13,7 +13,6 @@
             tbst.paper_number paperNumber,
             tbst.type,
             tbst.object_id objectId,
-            tbst.third_relate_id thirdRelateId,
             tbst.status,
             tbst.result,
             tbst.remark,

+ 9 - 0
distributed-print/install/mysql/upgrade/3.3.0.sql

@@ -223,3 +223,12 @@ DELETE FROM `sys_privilege` WHERE (`id` = '505');
 UPDATE `sys_privilege` SET `related` = '490,543' WHERE (`id` = '488');
 UPDATE `sys_privilege` SET `related` = '494,544' WHERE (`id` = '489');
 UPDATE `sys_privilege` SET `parent_id` = '489', `sequence` = '2' WHERE (`id` = '544');
+
+
+
+
+
+
+ALTER TABLE `mark_student`
+    ADD COLUMN `exam_start_time` BIGINT(20) NULL COMMENT '考试开始时间' AFTER `assign_confirmed`,
+ADD COLUMN `exam_end_time` BIGINT(20) NULL COMMENT '考试结束时间' AFTER `exam_start_time`;

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java

@@ -284,7 +284,7 @@ public class ExamDetailController {
      * @param id 请求参数
      * @return
      */
-    @ApiOperation(value = "考务数据导入-查看详情-新增考生-保存")
+    @ApiOperation(value = "考务数据导入-查看详情-删除考生")
     @RequestMapping(value = "/delete_exam_student", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.ADD)
     public Result deleteExamStudent(@RequestParam Long id) {

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkStudentController.java

@@ -47,7 +47,7 @@ public class MarkStudentController {
                                    @ApiParam(value = "学院") @RequestParam(required = false) String college,
                                    @ApiParam(value = "班级") @RequestParam(required = false) String className,
                                    @ApiParam(value = "任课老师") @RequestParam(required = false) String teacher,
-                                   @ApiParam(value = "0:无 1:客观题0分 2:客观题0分,主观题有分 3:主观题有分,客观题0分") @RequestParam(required = false) Integer filter,
+                                   @ApiParam(value = "0:无 1:客观题0分 2:客观题0分,主观题有分 3:主观题0分,客观题有分") @RequestParam(required = false) Integer filter,
                                    @ApiParam(value = "是否缺考") @RequestParam(required = false) Boolean absent,
                                    @ApiParam(value = "是否违纪") @RequestParam(required = false) Boolean breach,
                                    @ApiParam(value = "总分开始") @RequestParam(required = false) Double startScore,

+ 89 - 71
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/ArchiveStudentVo.java

@@ -7,105 +7,123 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.annotation.ExcelProperty;
 
 public class ArchiveStudentVo {
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long studentId;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long studentId;
 
-	@ExcelProperty(name = "学生姓名", width = 20, index = 1)
+    @ExcelProperty(name = "学生姓名", width = 20, index = 1)
     private String studentName;
-	@ExcelProperty(name = "学号", width = 20, index = 2)
+    @ExcelProperty(name = "学号", width = 20, index = 2)
     private String studentCode;
-	@ExcelProperty(name = "学院", width = 20, index = 3)
+    @ExcelProperty(name = "学院", width = 20, index = 3)
     private String college;
-	@ExcelProperty(name = "班级", width = 20, index = 4)
+    @ExcelProperty(name = "班级", width = 20, index = 4)
     private String className;
-	@ExcelProperty(name = "课程代码", width = 20, index = 5)
+    @ExcelProperty(name = "课程代码", width = 20, index = 5)
     private String courseCode;
-	@ExcelProperty(name = "课程名称", width = 20, index = 6)
+    @ExcelProperty(name = "课程名称", width = 20, index = 6)
     private String courseName;
-	@ExcelProperty(name = "成绩", width = 20, index = 7)
+    @ExcelProperty(name = "成绩", width = 20, index = 7)
     private Double totalScore;
-    
+
     private List<String> sheetUrls;
 
-	private String sheetPath;
+    private String sheetPath;
+    private Long examStartTime;
+    private Long examEndTime;
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
 
-	public String getCourseCode() {
-		return courseCode;
-	}
+    public String getStudentCode() {
+        return studentCode;
+    }
 
-	public void setCourseCode(String courseCode) {
-		this.courseCode = courseCode;
-	}
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
 
-	public String getCourseName() {
-		return courseName;
-	}
+    public String getStudentName() {
+        return studentName;
+    }
 
-	public void setCourseName(String courseName) {
-		this.courseName = courseName;
-	}
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
 
-	public String getStudentCode() {
-		return studentCode;
-	}
+    public String getCollege() {
+        return college;
+    }
 
-	public void setStudentCode(String studentCode) {
-		this.studentCode = studentCode;
-	}
+    public void setCollege(String college) {
+        this.college = college;
+    }
 
-	public String getStudentName() {
-		return studentName;
-	}
+    public String getClassName() {
+        return className;
+    }
 
-	public void setStudentName(String studentName) {
-		this.studentName = studentName;
-	}
+    public void setClassName(String className) {
+        this.className = className;
+    }
 
-	public String getCollege() {
-		return college;
-	}
+    public Double getTotalScore() {
+        return totalScore;
+    }
 
-	public void setCollege(String college) {
-		this.college = college;
-	}
+    public void setTotalScore(Double totalScore) {
+        this.totalScore = totalScore;
+    }
 
-	public String getClassName() {
-		return className;
-	}
+    public List<String> getSheetUrls() {
+        return sheetUrls;
+    }
 
-	public void setClassName(String className) {
-		this.className = className;
-	}
+    public void setSheetUrls(List<String> sheetUrls) {
+        this.sheetUrls = sheetUrls;
+    }
 
-	public Double getTotalScore() {
-		return totalScore;
-	}
+    public Long getStudentId() {
+        return studentId;
+    }
 
-	public void setTotalScore(Double totalScore) {
-		this.totalScore = totalScore;
-	}
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
 
-	public List<String> getSheetUrls() {
-		return sheetUrls;
-	}
+    public String getSheetPath() {
+        return sheetPath;
+    }
 
-	public void setSheetUrls(List<String> sheetUrls) {
-		this.sheetUrls = sheetUrls;
-	}
+    public void setSheetPath(String sheetPath) {
+        this.sheetPath = sheetPath;
+    }
 
-	public Long getStudentId() {
-		return studentId;
-	}
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
 
-	public void setStudentId(Long studentId) {
-		this.studentId = studentId;
-	}
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
 
-	public String getSheetPath() {
-		return sheetPath;
-	}
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
 
-	public void setSheetPath(String sheetPath) {
-		this.sheetPath = sheetPath;
-	}
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
 }

+ 9 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkUserGroupProgressDto.java

@@ -15,6 +15,7 @@ public class MarkUserGroupProgressDto {
     private Integer groupNumber;
     private String groupQuestions;
     private Integer taskCount;
+    private Integer topCount;
     private Integer markedCount;
     private Integer currentCount;
 
@@ -82,6 +83,14 @@ public class MarkUserGroupProgressDto {
         this.taskCount = taskCount;
     }
 
+    public Integer getTopCount() {
+        return topCount;
+    }
+
+    public void setTopCount(Integer topCount) {
+        this.topCount = topCount;
+    }
+
     public Integer getMarkedCount() {
         return markedCount;
     }

+ 18 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailDto.java

@@ -29,6 +29,8 @@ public class StudentScoreDetailDto {
     private Long checkTime;
     private String sheetPath;
     private List<SheetUrlDto> sheetUrls;
+    private Long examStartTime;
+    private Long examEndTime;
 
     public Long getStudentId() {
         return studentId;
@@ -189,4 +191,20 @@ public class StudentScoreDetailDto {
     public void setSheetUrls(List<SheetUrlDto> sheetUrls) {
         this.sheetUrls = sheetUrls;
     }
+
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
 }

+ 21 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java

@@ -181,11 +181,13 @@ public class MarkStudent implements Serializable {
     private String breachCode;
 
     private Integer cardNumber;
+    private Long examStartTime;
+    private Long examEndTime;
 
     public MarkStudent() {
     }
 
-    public MarkStudent(Long id, Long examId, String courseCode, String courseName, String paperNumber, String coursePaperId, String paperType, String studentCode, String studentName, String packageCode, String examPlace, String examRoom, String college, String className) {
+    public MarkStudent(Long id, Long examId, String courseCode, String courseName, String paperNumber, String coursePaperId, String paperType, String studentCode, String studentName, String packageCode, String examPlace, String examRoom, String college, String className, Long examStartTime, Long examEndTime) {
         this.id = id;
         this.examId = examId;
         this.courseCode = courseCode;
@@ -211,6 +213,8 @@ public class MarkStudent implements Serializable {
         this.scanStatus = ScanStatus.UNEXIST;
         this.omrAbsent = false;
         this.omrAbsentChecked = false;
+        this.examStartTime = examStartTime;
+        this.examEndTime = examEndTime;
     }
 
     public Long getId() {
@@ -658,6 +662,22 @@ public class MarkStudent implements Serializable {
         this.assignConfirmed = assignConfirmed;
     }
 
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
+
     @Override
     public String toString() {
         return "MarkStudent{" +

+ 1 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -871,11 +871,6 @@ public class MarkServiceImpl implements MarkService {
         for (MarkHeaderGroupResult groupResult : markHeaderGroupResultList) {
             try {
                 lockService.watch(LockType.GROUP, markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber());
-                MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markStudent.getExamId(), markStudent.getPaperNumber());
-                // 评卷是否结束
-                if (markPaper == null || markPaper.getStatus() == MarkPaperStatus.FINISH) {
-                    throw ExceptionResultEnum.ERROR.exception("科目已结束评卷,无法打分");
-                }
                 Long currentTime = System.currentTimeMillis();
                 if (groupResult.getTrackList() != null) {
                     markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentId(markStudent.getExamId(),
@@ -897,7 +892,7 @@ public class MarkServiceImpl implements MarkService {
                 checkStudentGroup(groupResult.getStudentId(),
                         markGroupService.getByExamIdAndPaperNumberAndGroupNumber(markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber()));
             } catch (ApiException e) {
-                throw ExceptionResultEnum.ERROR.exception("打分失败");
+                throw ExceptionResultEnum.ERROR.exception(e.getMessage());
             } finally {
                 lockService.unwatch(LockType.GROUP, markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber());
             }

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -729,6 +729,11 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (markStudent == null) {
             throw ExceptionResultEnum.ERROR.exception("考生不存在");
         }
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markStudent.getExamId(), markStudent.getPaperNumber());
+        // 评卷是否结束
+        if (markPaper == null || markPaper.getStatus() == MarkPaperStatus.FINISH) {
+            throw ExceptionResultEnum.ERROR.exception("科目已结束评卷,无法打分");
+        }
         try {
             lockService.watch(LockType.EXAM_SUBJECT, markStudent.getExamId(), markStudent.getPaperNumber());
             lockService.waitlock(LockType.STUDENT, markResult.getStudentId());

+ 3 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java

@@ -276,9 +276,9 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
             markQualityChartDto.setLoginName(sysUser.getLoginName());
             markQualityChartDto.setName(sysUser.getRealName());
             markQualityChartDto.setTotalAvgScore(Double.parseDouble(new DecimalFormat("####.##").format(totalAvgScore)));
-            markQualityChartDto.setAvgScore(markUserGroup.getAvgScore());
-            markQualityChartDto.setMaxScore(markUserGroup.getMaxScore());
-            markQualityChartDto.setMinScore(markUserGroup.getMinScore());
+            markQualityChartDto.setAvgScore(markUserGroup.getAvgScore() == null ? null : Double.parseDouble(new DecimalFormat("####.##").format(markUserGroup.getAvgScore())));
+            markQualityChartDto.setMaxScore(markUserGroup.getMaxScore() == null ? null : Double.parseDouble(new DecimalFormat("####.##").format(markUserGroup.getMaxScore())));
+            markQualityChartDto.setMinScore(markUserGroup.getMinScore() == null ? null : Double.parseDouble(new DecimalFormat("####.##").format(markUserGroup.getMinScore())));
             markQualityChartDtoList.add(markQualityChartDto);
         }
         return markQualityChartDtoList;

+ 20 - 9
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java

@@ -4,6 +4,8 @@ import java.util.*;
 
 import javax.annotation.Resource;
 
+import com.alibaba.fastjson.JSON;
+import com.qmth.teachcloud.mark.bean.mark.MarkConfigItem;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -79,13 +81,16 @@ public class TaskServiceImpl implements TaskService {
         if (StringUtils.isNotBlank(markStudent.getObjectiveScoreList())) {
             task.setObjectiveScore(markStudent.getObjectiveScore());
         }
-        if(StringUtils.isNotBlank(markStudent.getSheetPath())){
+        if (StringUtils.isNotBlank(markStudent.getSheetPath())) {
             task.setSheetUrls(teachcloudCommonService.filePreview(markStudent.getSheetPathList()));
         }
         task.setMarkerTime(markArbitrateHistory.getUpdateTime());
         if (markArbitrateHistory.getTotalScore() != null) {
             task.setMarkerScore(markArbitrateHistory.getTotalScore());
         }
+        if (StringUtils.isNotBlank(markGroup.getPicList())) {
+            task.setSliceConfig(JSON.parseArray(markGroup.getPicList(), MarkConfigItem.class));
+        }
         return task;
     }
 
@@ -143,18 +148,24 @@ public class TaskServiceImpl implements TaskService {
             // 增加阅卷轨迹列表获取
             List<MarkTask> markTaskList = markTaskService.listByStudentIdAndGroupNumber(markStudent.getId(),
                     question.getGroupNumber());
+            // 仲裁轨迹
+            List<MarkHeaderTrack> headerTracks = markHeaderTrackService
+                    .listByStudentIdAndQuestionNumber(markStudent.getId(), questionNumber);
+            List<String> questionList = new ArrayList<>();
             // 不管单评还是多评显示所有评卷员给分轨迹
             for (MarkTask markTask : markTaskList) {
                 List<MarkTrack> tracks = markTrackService.listByTaskIdAndQuestionNumber(markTask.getId(),
                         questionNumber);
+                if (!questionList.contains(questionNumber)) {
+                    questionList.add(questionNumber);
+                } else {
+                    continue;
+                }
                 for (MarkTrack track : tracks) {
-                    step.addTrack(new MarkerTrackDTO(track));
-//                    step.addTrack(replaceTrackFormHeaderTrack(track, headerTracks));
+//                    step.addTrack(new MarkerTrackDTO(track));
+                    step.addTrack(replaceTrackFromHeaderTrack(track, headerTracks));
                 }
             }
-            // 仲裁轨迹
-            List<MarkHeaderTrack> headerTracks = markHeaderTrackService
-                    .listByStudentIdAndQuestionNumber(markStudent.getId(), questionNumber);
             for (MarkHeaderTrack headerTrack : headerTracks) {
                 step.addHeaderTrack(new TrackDTO(headerTrack));
             }
@@ -163,11 +174,11 @@ public class TaskServiceImpl implements TaskService {
         return list;
     }
 
-    private MarkerTrackDTO replaceTrackFormHeaderTrack(MarkTrack markTrack, List<MarkHeaderTrack> headerTracks) {
+    private MarkerTrackDTO replaceTrackFromHeaderTrack(MarkTrack markTrack, List<MarkHeaderTrack> headerTracks) {
         MarkerTrackDTO markerTrackDTO = new MarkerTrackDTO(markTrack);
-        if(CollectionUtils.isNotEmpty(headerTracks)){
+        if (CollectionUtils.isNotEmpty(headerTracks)) {
             Optional<MarkHeaderTrack> optional = headerTracks.stream().filter(m -> m.getStudentId().equals(markTrack.getStudentId()) && m.getQuestionNumber().equals(markTrack.getQuestionNumber())).findFirst();
-            if(optional.isPresent()){
+            if (optional.isPresent()) {
                 MarkHeaderTrack markHeaderTrack = optional.get();
                 markerTrackDTO = new MarkerTrackDTO(markHeaderTrack);
             }

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

@@ -64,7 +64,9 @@
             su.login_name checkUserLoginName,
             su.real_name checkUserName,
             ms.check_time checkTime,
-            ms.sheet_path sheetPath
+            ms.sheet_path sheetPath,
+            ms.exam_start_time examStartTime,
+            ms.exam_end_time examEndTime
         FROM
             mark_student ms
                 left join sys_user su on ms.check_user_id = su.id

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

@@ -77,6 +77,7 @@
         SELECT
             mug.id markUserGroupId,
             mug.group_number groupNumber,
+            mug.top_count topCount,
             su.id userId,
             su.login_name loginName,
             su.real_name name,

+ 1 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -116,7 +116,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     if (markStudent != null) {
                         continue;
                     }
-                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getPaperType(), examStudent.getStudentCode(), examStudent.getStudentName(), examDetail.getPackageCode(), examDetail.getExamPlace(), examDetail.getExamRoom(), examStudent.getCollegeName(), examStudent.getClazzName());
+                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getPaperType(), examStudent.getStudentCode(), examStudent.getStudentName(), examDetail.getPackageCode(), examDetail.getExamPlace(), examDetail.getExamRoom(), examStudent.getCollegeName(), examStudent.getClazzName(), dto.getExamStartTime(), dto.getExamEndTime());
                     if (student.getSecretNumber() == null) {
                         student.randomSecretNumber();
                         while (secretNumberSet.contains(student.getSecretNumber())