浏览代码

试评模式补充特殊标记的保存与更新

luoshi 6 年之前
父节点
当前提交
7222dab0f7

+ 4 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/TrialHistoryDao.java

@@ -33,4 +33,8 @@ public interface TrialHistoryDao extends JpaRepository<TrialHistory, Integer>, J
     @Query("delete TrialHistory m where m.studentId=?1")
     @Query("delete TrialHistory m where m.studentId=?1")
     void deleteByStudentId(Integer studentId);
     void deleteByStudentId(Integer studentId);
 
 
+    @Modifying
+    @Query("delete TrialHistory m where m.pk.markerId=?1")
+    void deleteByMarkerId(Integer markerId);
+
 }
 }

+ 33 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/TrialTagDao.java

@@ -0,0 +1,33 @@
+package cn.com.qmth.stmms.biz.mark.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.mark.model.TrialTag;
+
+public interface TrialTagDao extends PagingAndSortingRepository<TrialTag, Integer>, JpaSpecificationExecutor<TrialTag> {
+
+    @Modifying
+    @Query("delete from TrialTag s where s.libraryId = ?1 and s.markerId=?2")
+    public void deleteByLibraryIdAndMarkerId(Integer libraryId, Integer markerId);
+
+    @Modifying
+    @Query("delete from TrialTag s where exists "
+            + "(select l.id from TrialLibrary l where l.studentId=?1 and s.libraryId=l.id)")
+    public void deleteByStudentId(Integer studentId);
+
+    public List<TrialTag> findByLibraryIdAndMarkerIdOrderByIdAsc(Integer libraryId, Integer markerId);
+
+    @Modifying
+    @Query("delete from TrialTag s where s.markerId=?1")
+    public void deleteByMarkerId(Integer markerId);
+
+    @Modifying
+    @Query("delete from TrialTag s where s.libraryId in (select m.id from TrialLibrary m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3)")
+    public void deleteByExamAndSubjectAndGroup(Integer examId, String subjectCode, Integer groupNumber);
+
+}

+ 10 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkResult.java

@@ -165,4 +165,14 @@ public class MarkResult {
         }
         }
         return list;
         return list;
     }
     }
+
+    public List<TrialTag> getTagList(TrialHistory history) {
+        List<TrialTag> list = new LinkedList<>();
+        if (tagList != null) {
+            for (SpecialTagDTO dto : tagList) {
+                list.add(dto.transform(history));
+            }
+        }
+        return list;
+    }
 }
 }

+ 10 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/SpecialTagDTO.java

@@ -12,9 +12,6 @@ public class SpecialTagDTO implements Serializable {
 
 
     private Double positionY;
     private Double positionY;
 
 
-    public SpecialTagDTO() {
-    }
-
     public MarkSpecialTag transform(MarkLibrary library) {
     public MarkSpecialTag transform(MarkLibrary library) {
         MarkSpecialTag markSpecialTag = new MarkSpecialTag();
         MarkSpecialTag markSpecialTag = new MarkSpecialTag();
         markSpecialTag.setLibraryId(library.getId());
         markSpecialTag.setLibraryId(library.getId());
@@ -24,6 +21,16 @@ public class SpecialTagDTO implements Serializable {
         return markSpecialTag;
         return markSpecialTag;
     }
     }
 
 
+    public TrialTag transform(TrialHistory history) {
+        TrialTag tag = new TrialTag();
+        tag.setLibraryId(history.getLibraryId());
+        tag.setMarkerId(history.getMarkerId());
+        tag.setContent(tagName);
+        tag.setPositionX(positionX);
+        tag.setPositionY(positionY);
+        return tag;
+    }
+
     public String getTagName() {
     public String getTagName() {
         return tagName;
         return tagName;
     }
     }

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

@@ -22,11 +22,15 @@ public class TrackDTO implements Serializable {
 
 
     private double positionY;
     private double positionY;
 
 
-    public TrackDTO() {
-
+    public TrackDTO(MarkTrack track) {
+        setQuestionNumber(track.getQuestionNumber());
+        setNumber(track.getNumber());
+        setScore(track.getScore());
+        setPositionX(track.getPositionX());
+        setPositionY(track.getPositionY());
     }
     }
 
 
-    public TrackDTO(MarkTrack track) {
+    public TrackDTO(TrialTrack track) {
         setQuestionNumber(track.getQuestionNumber());
         setQuestionNumber(track.getQuestionNumber());
         setNumber(track.getNumber());
         setNumber(track.getNumber());
         setScore(track.getScore());
         setScore(track.getScore());

+ 89 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/TrialTag.java

@@ -0,0 +1,89 @@
+package cn.com.qmth.stmms.biz.mark.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * 试评特殊标记
+ * 
+ * @author luoshi
+ *
+ */
+@Entity
+@Table(name = "m_trial_tag")
+public class TrialTag implements Serializable {
+
+    private static final long serialVersionUID = -8285432578334015469L;
+
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Column(name = "library_id", nullable = false)
+    private Integer libraryId;
+
+    @Column(name = "marker_id", nullable = false)
+    private Integer markerId;
+
+    @Column(name = "content", nullable = false)
+    private String content;
+
+    @Column(name = "position_x", nullable = false)
+    private Double positionX;
+
+    @Column(name = "position_y", nullable = false)
+    private Double positionY;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getLibraryId() {
+        return libraryId;
+    }
+
+    public void setLibraryId(Integer libraryId) {
+        this.libraryId = libraryId;
+    }
+
+    public Integer getMarkerId() {
+        return markerId;
+    }
+
+    public void setMarkerId(Integer markerId) {
+        this.markerId = markerId;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Double getPositionX() {
+        return positionX;
+    }
+
+    public void setPositionX(Double positionX) {
+        this.positionX = positionX;
+    }
+
+    public Double getPositionY() {
+        return positionY;
+    }
+
+    public void setPositionY(Double positionY) {
+        this.positionY = positionY;
+    }
+}

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

@@ -27,6 +27,7 @@ import cn.com.qmth.stmms.biz.mark.dao.MarkSpecialTagDao;
 import cn.com.qmth.stmms.biz.mark.dao.MarkTrackDao;
 import cn.com.qmth.stmms.biz.mark.dao.MarkTrackDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialHistoryDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialHistoryDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialLibraryDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialLibraryDao;
+import cn.com.qmth.stmms.biz.mark.dao.TrialTagDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialTrackDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialTrackDao;
 import cn.com.qmth.stmms.biz.mark.model.ArbitrateHistory;
 import cn.com.qmth.stmms.biz.mark.model.ArbitrateHistory;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
@@ -89,6 +90,9 @@ public class MarkServiceImpl implements MarkService {
     @Autowired
     @Autowired
     private TrialTrackDao trialTrackDao;
     private TrialTrackDao trialTrackDao;
 
 
+    @Autowired
+    private TrialTagDao trialTagDao;
+
     @Autowired
     @Autowired
     private MarkLockService lockService;
     private MarkLockService lockService;
 
 
@@ -162,19 +166,29 @@ public class MarkServiceImpl implements MarkService {
     public void deleteGroup(MarkGroup group) {
     public void deleteGroup(MarkGroup group) {
         try {
         try {
             lockService.lockGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
             lockService.lockGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
-
-            questionDao.deleteByExamIdAndSubjectCodeAndPaperTypeAndObjectiveAndMainNumber(group.getExamId(),
-                    group.getSubjectCode(), null, false, group.getNumber());
-            trialLibraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+            // 试评相关数据
+            trialTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
                     group.getNumber());
+            trialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
             trialHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
             trialHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
                     group.getNumber());
-            libraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+            trialLibraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+                    group.getNumber());
+            // 正评相关数据
+            trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
                     group.getNumber());
+            specialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
             arbitrateDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
             arbitrateDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
                     group.getNumber());
+            libraryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+                    group.getNumber());
+            // 评卷员数据
             markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
             markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
                     group.getNumber());
+            // 小题数据
+            questionDao.deleteByExamIdAndSubjectCodeAndPaperTypeAndObjectiveAndMainNumber(group.getExamId(),
+                    group.getSubjectCode(), null, false, group.getNumber());
+            // 科目总分
             subjectService.updateScore(group.getExamId(), group.getSubjectCode(), false,
             subjectService.updateScore(group.getExamId(), group.getSubjectCode(), false,
                     sumTotalScore(group.getExamId(), group.getSubjectCode()));
                     sumTotalScore(group.getExamId(), group.getSubjectCode()));
 
 
@@ -325,12 +339,23 @@ public class MarkServiceImpl implements MarkService {
         try {
         try {
             lockService.waitUnlockGroup(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
             lockService.waitUnlockGroup(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
             lockService.lockMarker(marker.getId());
             lockService.lockMarker(marker.getId());
-            // 仲裁和等待仲裁的任务不被重置
-            trackDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE);
-            specialTagDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE);
-            libraryDao.resetByMarkerId(marker.getId(), LibraryStatus.WAITING, LibraryStatus.ARBITRATED,
-                    LibraryStatus.WAIT_ARBITRATE);
-            updateLibraryCount(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+
+            MarkGroup group = groupDao.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+            if (group == null) {
+                return;
+            }
+            if (group.getStatus() == MarkStatus.FORMAL) {
+                // 仲裁和等待仲裁的任务不被重置
+                trackDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE);
+                specialTagDao.deleteByMarkerId(marker.getId(), LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE);
+                libraryDao.resetByMarkerId(marker.getId(), LibraryStatus.WAITING, LibraryStatus.ARBITRATED,
+                        LibraryStatus.WAIT_ARBITRATE);
+            } else if (group.getStatus() == MarkStatus.TRIAL) {
+                trialTagDao.deleteByMarkerId(marker.getId());
+                trialTrackDao.deleteByMarkerId(marker.getId());
+                trialHistoryDao.deleteByMarkerId(marker.getId());
+            }
+            updateLibraryCount(group);
             releaseByMarker(marker);
             releaseByMarker(marker);
         } catch (Exception e) {
         } catch (Exception e) {
             throw e;
             throw e;
@@ -349,12 +374,17 @@ public class MarkServiceImpl implements MarkService {
     public void deleteByStudent(ExamStudent student) {
     public void deleteByStudent(ExamStudent student) {
         try {
         try {
             lockService.lockStudent(student.getId());
             lockService.lockStudent(student.getId());
+            // 正评相关数据
             trackDao.deleteByStudentId(student.getId());
             trackDao.deleteByStudentId(student.getId());
             specialTagDao.deleteByStudentId(student.getId());
             specialTagDao.deleteByStudentId(student.getId());
-            libraryDao.deleteByStudentId(student.getId());
             arbitrateDao.deleteByStudentId(student.getId());
             arbitrateDao.deleteByStudentId(student.getId());
-            trialLibraryDao.deleteByStudentId(student.getId());
+            libraryDao.deleteByStudentId(student.getId());
+            // 试评相关数据
+            trialTrackDao.deleteByStudentId(student.getId());
+            trialTagDao.deleteByStudentId(student.getId());
             trialHistoryDao.deleteByStudentId(student.getId());
             trialHistoryDao.deleteByStudentId(student.getId());
+            trialLibraryDao.deleteByStudentId(student.getId());
+
             updateLibraryCount(student.getExamId(), student.getSubjectCode());
             updateLibraryCount(student.getExamId(), student.getSubjectCode());
         } catch (Exception e) {
         } catch (Exception e) {
             throw e;
             throw e;
@@ -420,6 +450,10 @@ public class MarkServiceImpl implements MarkService {
                             trialTrackDao.deleteByLibraryIdAndMarkerId(history.getLibraryId(), history.getMarkerId());
                             trialTrackDao.deleteByLibraryIdAndMarkerId(history.getLibraryId(), history.getMarkerId());
                             trialTrackDao.save(result.getTrackList(history));
                             trialTrackDao.save(result.getTrackList(history));
                         }
                         }
+                        if (result.getTagList() != null) {
+                            trialTagDao.deleteByLibraryIdAndMarkerId(history.getLibraryId(), history.getMarkerId());
+                            trialTagDao.save(result.getTagList(history));
+                        }
                         releaseLibrary(library, marker);
                         releaseLibrary(library, marker);
                         return true;
                         return true;
                     }
                     }
@@ -792,14 +826,17 @@ public class MarkServiceImpl implements MarkService {
     private void resetGroup(MarkGroup group) {
     private void resetGroup(MarkGroup group) {
         groupDao.resetCount(group.getExamId(), group.getSubjectCode(), group.getNumber());
         groupDao.resetCount(group.getExamId(), group.getSubjectCode(), group.getNumber());
         if (group.getStatus() == MarkStatus.FORMAL) {
         if (group.getStatus() == MarkStatus.FORMAL) {
-            libraryDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
-                    group.getNumber(), LibraryStatus.WAITING);
-            arbitrateDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
-                    group.getNumber());
             trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
             trackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
                     group.getNumber());
             specialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
             specialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
+            arbitrateDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+                    group.getNumber());
+            libraryDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+                    group.getNumber(), LibraryStatus.WAITING);
         } else if (group.getStatus() == MarkStatus.TRIAL) {
         } else if (group.getStatus() == MarkStatus.TRIAL) {
+            trialTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+                    group.getNumber());
+            trialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
             trialHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
             trialHistoryDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
                     group.getNumber());
         }
         }

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

@@ -31,11 +31,14 @@ import cn.com.qmth.stmms.biz.mark.model.Task;
 import cn.com.qmth.stmms.biz.mark.model.TrackDTO;
 import cn.com.qmth.stmms.biz.mark.model.TrackDTO;
 import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
 import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
 import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
 import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
+import cn.com.qmth.stmms.biz.mark.model.TrialTag;
+import cn.com.qmth.stmms.biz.mark.model.TrialTrack;
 import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 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.MarkSpecialTagService;
 import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
 import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
 import cn.com.qmth.stmms.biz.mark.service.TaskService;
 import cn.com.qmth.stmms.biz.mark.service.TaskService;
+import cn.com.qmth.stmms.biz.mark.service.TrialService;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
 import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
 
 
@@ -74,6 +77,9 @@ public class TaskServiceImpl implements TaskService {
     @Autowired
     @Autowired
     private MarkerService markerService;
     private MarkerService markerService;
 
 
+    @Autowired
+    private TrialService trialService;
+
     @Override
     @Override
     public List<Task> findByQuery(MarkLibrarySearchQuery query) {
     public List<Task> findByQuery(MarkLibrarySearchQuery query) {
         List<Task> list = new LinkedList<Task>();
         List<Task> list = new LinkedList<Task>();
@@ -177,7 +183,7 @@ public class TaskServiceImpl implements TaskService {
             task.setMarkTime(history.getMarkerTime());
             task.setMarkTime(history.getMarkerTime());
             task.setTotalScore(history.getMarkerScore());
             task.setTotalScore(history.getMarkerScore());
             task.setScoreList(history.getMarkerScoreList());
             task.setScoreList(history.getMarkerScoreList());
-            task.setTagList(getTrialTagList(library.getId()));
+            task.setTagList(getTrialTagList(history));
         }
         }
         return task;
         return task;
     }
     }
@@ -190,21 +196,16 @@ public class TaskServiceImpl implements TaskService {
         for (ExamQuestion question : sList) {
         for (ExamQuestion question : sList) {
             number++;
             number++;
 
 
-            MarkStepDTO step = new MarkStepDTO();
-            step.setQuestionNumber(question.getQuestionNumber());
-            step.setBlockId(question.getMainNumber());
-            step.setNumber(number);
-            step.setTitle(question.getMainTitle() + "-" + question.getSubNumber());
-            step.setTotalScore(question.getTotalScore());
-            step.setDefaultScore(0d);
-            step.setHasLevel(false);
-            step.setMax(question.getTotalScore());
-            step.setMin(0d);
-            step.setInterval(question.getIntervalScore());
-            step.setScoreList(question.getScoreListArray());
+            MarkStepDTO step = buildStep(number, question);
             if (libraryId != null) {
             if (libraryId != null) {
                 // 增加阅卷轨迹列表获取
                 // 增加阅卷轨迹列表获取
-                addTrack(step, question, trackService.findByLibraryId(libraryId));
+                List<MarkTrack> tracks = trackService.findByLibraryId(libraryId);
+                String questionNumber = question.getQuestionNumber();
+                for (MarkTrack track : tracks) {
+                    if (track.getQuestionNumber().equals(questionNumber)) {
+                        step.addTrack(new TrackDTO(track));
+                    }
+                }
             }
             }
             list.add(step);
             list.add(step);
         }
         }
@@ -219,35 +220,36 @@ public class TaskServiceImpl implements TaskService {
         for (ExamQuestion question : sList) {
         for (ExamQuestion question : sList) {
             number++;
             number++;
 
 
-            MarkStepDTO step = new MarkStepDTO();
-            step.setQuestionNumber(question.getQuestionNumber());
-            step.setBlockId(question.getMainNumber());
-            step.setNumber(number);
-            step.setTitle(question.getMainTitle() + "-" + question.getSubNumber());
-            step.setTotalScore(question.getTotalScore());
-            step.setDefaultScore(0d);
-            step.setHasLevel(false);
-            step.setMax(question.getTotalScore());
-            step.setMin(0d);
-            step.setInterval(question.getIntervalScore());
-            step.setScoreList(question.getScoreListArray());
+            MarkStepDTO step = buildStep(number, question);
             if (history != null) {
             if (history != null) {
-                // TODO 增加试评阅卷轨迹列表获取
-                // addTrack(step, question,
-                // trackService.findByLibraryId(libraryId));
+                // 增加阅卷轨迹列表获取
+                List<TrialTrack> tracks = trialService.findTrack(history.getLibraryId(), history.getMarkerId());
+                String questionNumber = question.getQuestionNumber();
+                for (TrialTrack track : tracks) {
+                    if (track.getQuestionNumber().equals(questionNumber)) {
+                        step.addTrack(new TrackDTO(track));
+                    }
+                }
             }
             }
             list.add(step);
             list.add(step);
         }
         }
         return list;
         return list;
     }
     }
 
 
-    private void addTrack(MarkStepDTO step, ExamQuestion question, List<MarkTrack> trackList) {
-        String questionNumber = question.getQuestionNumber();
-        for (MarkTrack track : trackList) {
-            if (track.getQuestionNumber().equals(questionNumber)) {
-                step.addTrack(new TrackDTO(track));
-            }
-        }
+    private MarkStepDTO buildStep(int number, ExamQuestion question) {
+        MarkStepDTO step = new MarkStepDTO();
+        step.setQuestionNumber(question.getQuestionNumber());
+        step.setBlockId(question.getMainNumber());
+        step.setNumber(number);
+        step.setTitle(question.getMainTitle() + "-" + question.getSubNumber());
+        step.setTotalScore(question.getTotalScore());
+        step.setDefaultScore(0d);
+        step.setHasLevel(false);
+        step.setMax(question.getTotalScore());
+        step.setMin(0d);
+        step.setInterval(question.getIntervalScore());
+        step.setScoreList(question.getScoreListArray());
+        return step;
     }
     }
 
 
     public SpecialTagDTO[] getMarkSpecialTagList(Integer libraryId) {
     public SpecialTagDTO[] getMarkSpecialTagList(Integer libraryId) {
@@ -266,15 +268,14 @@ public class TaskServiceImpl implements TaskService {
         return specialTags;
         return specialTags;
     }
     }
 
 
-    public SpecialTagDTO[] getTrialTagList(Integer libraryId) {
-        // TODO 需要补充试评特殊标记
+    public SpecialTagDTO[] getTrialTagList(TrialHistory history) {
         SpecialTagDTO[] specialTags = null;
         SpecialTagDTO[] specialTags = null;
-        List<MarkSpecialTag> list = markSpecialTagService.findByLibraryId(libraryId);
+        List<TrialTag> list = trialService.findTag(history.getLibraryId(), history.getMarkerId());
         if (!list.isEmpty()) {
         if (!list.isEmpty()) {
             specialTags = new SpecialTagDTO[list.size()];
             specialTags = new SpecialTagDTO[list.size()];
             for (int i = 0; i < list.size(); i++) {
             for (int i = 0; i < list.size(); i++) {
                 SpecialTagDTO specialTagDTO = new SpecialTagDTO();
                 SpecialTagDTO specialTagDTO = new SpecialTagDTO();
-                specialTagDTO.setTagName(list.get(i).getTagName());
+                specialTagDTO.setTagName(list.get(i).getContent());
                 specialTagDTO.setPositionX(list.get(i).getPositionX());
                 specialTagDTO.setPositionX(list.get(i).getPositionX());
                 specialTagDTO.setPositionY(list.get(i).getPositionY());
                 specialTagDTO.setPositionY(list.get(i).getPositionY());
                 specialTags[i] = specialTagDTO;
                 specialTags[i] = specialTagDTO;
@@ -321,20 +322,15 @@ public class TaskServiceImpl implements TaskService {
         for (ExamQuestion question : sList) {
         for (ExamQuestion question : sList) {
             number++;
             number++;
 
 
-            MarkStepDTO step = new MarkStepDTO();
-            step.setQuestionNumber(question.getQuestionNumber());
-            step.setBlockId(question.getMainNumber());
-            step.setNumber(number);
-            step.setTitle(question.getMainTitle() + "-" + question.getSubNumber());
-            step.setTotalScore(question.getTotalScore());
-            step.setDefaultScore(0d);
-            step.setHasLevel(false);
-            step.setMax(question.getTotalScore());
-            step.setMin(0d);
-            step.setInterval(question.getIntervalScore());
-            step.setScoreList(question.getScoreListArray());
+            MarkStepDTO step = buildStep(number, question);
             // 增加阅卷轨迹列表获取
             // 增加阅卷轨迹列表获取
-            addTrack(step, question, trackService.findByStudentId(student.getId()));
+            List<MarkTrack> tracks = trackService.findByStudentId(student.getId());
+            String questionNumber = question.getQuestionNumber();
+            for (MarkTrack track : tracks) {
+                if (track.getQuestionNumber().equals(questionNumber)) {
+                    step.addTrack(new TrackDTO(track));
+                }
+            }
             list.add(step);
             list.add(step);
         }
         }
         return list;
         return list;

+ 20 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TrialServiceImpl.java

@@ -20,8 +20,12 @@ import cn.com.qmth.stmms.biz.common.BaseQuery;
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.mark.dao.TrialHistoryDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialHistoryDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialLibraryDao;
 import cn.com.qmth.stmms.biz.mark.dao.TrialLibraryDao;
+import cn.com.qmth.stmms.biz.mark.dao.TrialTagDao;
+import cn.com.qmth.stmms.biz.mark.dao.TrialTrackDao;
 import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
 import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
 import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
 import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
+import cn.com.qmth.stmms.biz.mark.model.TrialTag;
+import cn.com.qmth.stmms.biz.mark.model.TrialTrack;
 import cn.com.qmth.stmms.biz.mark.query.TrialLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.query.TrialLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
 
 
@@ -34,6 +38,12 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
     @Autowired
     @Autowired
     private TrialHistoryDao historyDao;
     private TrialHistoryDao historyDao;
 
 
+    @Autowired
+    private TrialTrackDao trackDao;
+
+    @Autowired
+    private TrialTagDao tagDao;
+
     @Override
     @Override
     public TrialLibrary findLibrary(Integer id) {
     public TrialLibrary findLibrary(Integer id) {
         return libraryDao.findOne(id);
         return libraryDao.findOne(id);
@@ -98,6 +108,16 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
         return historyDao.countByMarkerId(markerId);
         return historyDao.countByMarkerId(markerId);
     }
     }
 
 
+    @Override
+    public List<TrialTrack> findTrack(Integer libraryId, Integer markerId) {
+        return trackDao.findByPkLibraryIdAndPkMarkerId(libraryId, markerId);
+    }
+
+    @Override
+    public List<TrialTag> findTag(Integer libraryId, Integer markerId) {
+        return tagDao.findByLibraryIdAndMarkerIdOrderByIdAsc(libraryId, markerId);
+    }
+
     private Specification<TrialLibrary> buildSpecification(final TrialLibrarySearchQuery query) {
     private Specification<TrialLibrary> buildSpecification(final TrialLibrarySearchQuery query) {
         return new Specification<TrialLibrary>() {
         return new Specification<TrialLibrary>() {
 
 

+ 6 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/TrialService.java

@@ -4,6 +4,8 @@ import java.util.List;
 
 
 import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
 import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
 import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
 import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
+import cn.com.qmth.stmms.biz.mark.model.TrialTag;
+import cn.com.qmth.stmms.biz.mark.model.TrialTrack;
 import cn.com.qmth.stmms.biz.mark.query.TrialLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.query.TrialLibrarySearchQuery;
 
 
 public interface TrialService {
 public interface TrialService {
@@ -30,4 +32,8 @@ public interface TrialService {
     List<TrialHistory> findHistory(Integer examId, String subjectCode, Integer groupNumber, Integer markerId,
     List<TrialHistory> findHistory(Integer examId, String subjectCode, Integer groupNumber, Integer markerId,
             int pageNumber, int pageSize);
             int pageNumber, int pageSize);
 
 
+    List<TrialTrack> findTrack(Integer libraryId, Integer markerId);
+
+    List<TrialTag> findTag(Integer libraryId, Integer markerId);
+
 }
 }